Artifacts beam
Skill JeffreySun/artifacts-beam/plugins/artifacts-beam/skills/artifacts-beam
Publish HTML artifacts to Artifacts Beam (https://artibeam.ai), create revocable share links anyone can open, open artifacts for review, and iterate on the HTML based on collaborator comments. Artifacts Beam is the CONSUMER edition: personal Microsoft/Google sign-in, no Azure AD required. WHEN: 'publish to artifacts beam', 'upload this html to artifacts beam', 'share this mockup', 'create a share link', 'send my page for review', 'get a public link', 'fetch artifacts beam comments', 'apply the review feedback', 'iterate on the comments', 'open my artifact', 'change artifact privacy', 'reply to the comment', 'tag the artifact', 'revoke a share link'.From its SKILL.md
npx -y skills add JeffreySun/artifacts-beam --skill artifacts-beamAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 21 days oldThe repository was created 21 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
10.7 KB, ~2.6k tokens by cl100k_base, as published. Nobody here has run it
Artifacts Beam
A skill for publishing HTML artifacts to Artifacts Beam, the consumer edition of the review platform. Create revocable share links anyone can open, gather comments from collaborators, and close the loop by refining the HTML — all signed in with a personal Microsoft (or Google) account, no corporate Azure AD needed.
This skill is agent-agnostic: every action runs through the portable, zero-
dependency Node helper at scripts/abeam.mjs. The same helper
backs the Copilot CLI, Codex, and Claude versions of this skill — only this wrapper
differs.
Authentication model (read this first)
Artifacts Beam authenticates every API call with an opaque browser session cookie,
not a bearer token — there is no az login / service-principal path. So the one-time
setup step is capturing the session cookie from a browser sign-in, which the helper
then stores in a local cookie jar and reuses. See Setup below.
Sign-in is a personal Microsoft or Google account. No corporate directory, IT approval, or admin consent is involved.
Triggers
Activate when the user says:
- "publish this to Artifacts Beam" / "upload my html for review"
- "create a share link" / "give me a link anyone can open" / "share this mockup"
- "what comments do I have?" / "fetch the Artifacts Beam feedback"
- "apply the comments" / "iterate based on the review" / "make a new version"
- "make this artifact public/private" / "revoke that share link" / "tag this artifact"
Do not activate for general local HTML editing with no Artifacts Beam intent.
Setup check (always do this first)
node scripts/abeam.mjs whoami
- Prints your email → you're signed in; continue.
- "Not signed in" (exit code 2) → run the one-time sign-in below.
One-time sign-in (capture the session cookie)
Artifacts Beam issues an opaque, HttpOnly session cookie after an interactive sign-in; the CLI cannot perform the browser OAuth dance itself, so capture the cookie once (it lasts ~7 days of activity, 30 days max):
node scripts/abeam.mjs login # opens the sign-in page + prints steps
# …sign in, copy the '__Host-ab_session' cookie from DevTools, then:
node scripts/abeam.mjs login --cookie "<paste-the-value>"
login --cookie validates the cookie against /api/auth/me and reports the signed-in
account. Full walkthrough (with the DevTools path and a browser-assisted option):
references/auth-setup.md.
The session is stored at
~/.artifactsbeam/session.json(mode 600). Never print or commit it.node scripts/abeam.mjs logoutrevokes it server-side and deletes it.
Workflow A — Publish an artifact
Goal: the user has a local HTML file and wants it on Artifacts Beam.
- Identify the file. If unspecified, ask once (suggest the most recently
modified
.htmlin the workspace). Reject non-HTML with a clear message. - Upload:
The server auto-versions by display name + owner: re-publishing the same filename adds a new version of the same artifact — no need to track the id.node scripts/abeam.mjs publish "<file.html>" --open - Read the result (printed as JSON):
spec.specId,spec.displayName,version.versionNumber,wasExistingSpec, anddetailUrl. - Tell the user:
- new: "Published '{displayName}' (v1). Opened in browser."
- existing: "Added as v{N} of '{displayName}'. Opened in browser."
- Always include the URL.
Pass --review to make the opened URL land directly on the comment panel.
Workflow B — Create a share link (the headline consumer feature)
Goal: the user wants a link they can paste into email/chat that anyone can open — no sign-in required for the viewer.
# View-only, never expires:
node scripts/abeam.mjs share-create <specId> --permission view
# Commentable, expires in 7 days, passcode-protected:
node scripts/abeam.mjs share-create <specId> --permission comment --expires-days 7 --passcode hunter2
- Copy the URL immediately — the server returns the full
https://…/s/{token}once and never re-displays it (only a hash is stored). Surface it to the user verbatim. --permission:view(read-only) orcomment(viewer can sign in to comment).--expires-days: omit for "never expires".--passcode: optional; the viewer must enter it to open.
Manage existing links:
node scripts/abeam.mjs share-list <specId> # list (URLs are not re-shown)
node scripts/abeam.mjs share-revoke <specId> <shareId>
Tell the user clearly when a link is commentable vs view-only, whether it has a passcode, and when it expires. Always remind them the URL can't be retrieved again — if lost, revoke and create a new one.
Workflow C — Iterate on collaborator feedback
Goal: read open comments on a published artifact and refine the local HTML to address them, then upload a new version. This is the high-value loop — go carefully.
C.1 — Identify the artifact
- A detail URL → extract
specIdfrom…/#/specs/<id>. - A name →
node scripts/abeam.mjs list "<name>"and confirm the match. - Confirm: "Iterating on '{displayName}', currently v{latestVersionNumber}. Continue?"
C.2 — Get the local file
The user points at their working copy, or download the latest as the starting point:
node scripts/abeam.mjs content <specId> --out ./working-copy.html
C.3 — Fetch open comments
node scripts/abeam.mjs comments <specId> --filter open
Each comment carries anchor data (text, selectedText, anchorSelector,
selectionContextBefore/After, versionNumberAuthored, replies). If there are
zero open comments, say so and stop.
C.4 — Plan, then apply
Summarize the comments and ask which to apply (all / a subset). For each accepted
comment, you do the rewrite — use anchorSelector + selectedText to locate
the spot. See references/refinement-guide.md for
anchor-resolution heuristics and editing rules (surgical edits, preserve <head>
and indentation, never rewrite unrelated regions).
C.5 — Show the diff, then upload
Show a unified diff and get confirmation before uploading:
node scripts/abeam.mjs publish ./working-copy.html
C.6 — Reply to addressed comments (recommended)
Leave a short reply so reviewers see what changed (better than silently resolving):
node scripts/abeam.mjs reply <specId> <commentId> "Addressed in v{N}."
Only resolve if the user explicitly asks:
node scripts/abeam.mjs comment-state <specId> <commentId> resolved
C.7 — Reopen for review
node scripts/abeam.mjs open <specId> --version <N> --review
Report: "Uploaded as v{N}. {K} comments addressed (replied), {M} left open."
Workflow D — Manage privacy
node scripts/abeam.mjs privacy-get <specId>
node scripts/abeam.mjs privacy-set <specId> public # or: private
- private — only you (the owner) can open it while signed in.
- public — any signed-in Artifacts Beam user can open it.
- For "anyone with the link, no account" sharing, use share links (Workflow B),
not
public.
Owner-only; non-owners get HTTP 403.
Workflow E — Tags
node scripts/abeam.mjs tags-get <specId>
node scripts/abeam.mjs tags-set <specId> "mockup,q2,pre-sale" # replaces the whole set; "" clears
node scripts/abeam.mjs tags-all # vocabulary + counts
node scripts/abeam.mjs list "" --tag mockup,q2 # find by tag (AND)
Owner-only edit. The server normalizes (lowercase/trim/dedupe) and caps at 15 tags ×
32 chars. tags-set replaces — to add one, read current, append, set the union.
Workflow F — Delete
node scripts/abeam.mjs delete-version <specId> <n> --yes # one version
node scripts/abeam.mjs delete <specId> --yes # whole artifact (+versions+comments)
Always confirm with the user in chat first. The helper refuses without --yes
as a guardrail. Deletes are irreversible. Owner-only (403 otherwise). The server
refuses to delete the only remaining version (delete the artifact instead).
Workflow G — Quick query
For one-offs like "what comments are on my artifact?", just run comments /
list / dashboard and print a compact summary; don't propose edits unless asked.
node scripts/abeam.mjs dashboard # owner KPI summary (totals, public/private, active links)
Output / UX rules
- Always print the share/detail URL when creating a link or publishing.
- Always confirm before uploading a new version — it's an immutable record.
- Always confirm before deleting, even though
--yesis required. - A freshly created share URL is shown only once — surface it verbatim and tell the user to save it.
- Never print or persist the session cookie. Never modify a file the user didn't ask
you to change. Keep editing the same local
.htmlso diffs stay meaningful.
Errors
| Symptom | Action |
|---|---|
Not signed in (HTTP 401) | Run the one-time sign-in (Setup); cookie likely expired |
Forbidden (HTTP 403) | Caller isn't the owner — offer to publish as a new artifact instead |
Request failed (HTTP 404) | Stale URL or the artifact/version was deleted |
node: command not found | Install Node.js 18+ (the helper needs global fetch) |
| Cookie "saved but not authenticated" | Sign in again and re-copy __Host-ab_session |
See also
- scripts/abeam.mjs — the portable CLI helper (
node abeam.mjs help) - references/auth-setup.md — capture the session cookie (one time)
- references/api-reference.md — command ↔ HTTP endpoint map
- references/refinement-guide.md — how to apply review comments
- README.md — installation
What ships with it: 14 files
65.1 KB alongside SKILL.md, 9 of them executable
agents/
- openai.yaml990 B
references/
- api-reference.md5.1 KB
- auth-setup.md3.9 KB
- refinement-guide.md4.0 KB
scripts/
- abeam.mjsruns22.3 KB
- install-skill.ps1runs1.3 KB
- install-skill.shruns893 B
- lib/credentials.mjsruns2.8 KB
- lib/credentials.test.mjsruns3.6 KB
- lib/deviceLogin.mjsruns4.5 KB
- lib/deviceLogin.test.mjsruns4.4 KB
- lib/login.mjsruns5.5 KB
- lib/login.test.mjsruns3.1 KB
- README.md2.7 KB