Only two packages publish to npm: @alien-id/agent-id-core and
@alien-id/agent-id-vault. The four consuming plugins (agent-id-auth,
agent-id-git, agent-id-proxy, agent-id-browser) are private and
ignored by changesets — they ship through the Claude Code marketplace, not npm.
The pipeline is fully automated by changesets. A maintainer's only manual gates
are: write a .changeset/*.md on the feature PR, merge the bot-opened
"chore: release packages" Version PR, and approve the npm-publish environment.
See RELEASING.md for the full mental model. This skill drives the
conversational shape of the flow.
Decision tree
When invoked, first run bun changeset status --verbose and figure out which
branch applies:
-
Feature PR in progress. If the change touches
plugins/agent-id-core/**orplugins/agent-id-vault/**, help the user declare a release intent withbun changesetand commit the resulting.changeset/*.mdalongside the code. Stop after that. (Changes to only the private plugins need no changeset.) -
Pending changesets on
main, no Version PR yet.changesets/actionopens it on the next push tomain. If they just merged, wait ~30s then point them at the PR list. -
Version PR open. Read it (it lists computed bumps + cascade + the synced
plugin.json/marketplace.jsonversions). If ready: review → squash-merge → approve thenpm-publishenvironment → watch the workflow. Surface the GitHub Actions URL. -
Beta cycle decision. If
.changeset/pre.jsonis absent and the user wants a beta cycle, runbun changeset pre enter betaand open a one-line PR. Ifpre.jsonexists and they want stable, runbun changeset pre exitand open a one-line PR. -
Partial publish failure. Re-run the workflow from the GitHub Actions UI.
publish-topological.tsskips already-published packages (vianpm view) and resumes. Do NOT manually edit versions or tags. -
First-ever publish (bootstrap).
@alien-id/agent-id-core@7.0.0and@alien-id/agent-id-vault@7.0.0must exist on npm before the dependent marketplace plugins can install. Either let the gated publish job do it on the first merge, or publish manually once (see RELEASING.md → Bootstrap).
How to add a changeset (verbatim)
bun changeset
# Interactive: pick core and/or vault, bump type (patch/minor/major), summary.
git add .changeset/<id>.md
The summary line becomes the per-package CHANGELOG entry. Write it for a consumer: "Add X", "Fix Y", "Breaking: rename Z."
Behaviours to surface to the user
- Cascade is automatic. Bumping
@alien-id/agent-id-corepatches@alien-id/agent-id-vault(the only published dependent). The fourignored plugins are NOT version-bumped, butchangeset versionDOES rewrite their@alien-id/agent-id-{core,vault}dependency ranges — so the Version PR carries package.json diffs for them too. That is intended (the runtime install hook copies each plugin's package.json). - Version propagation.
ci:versionrunschangeset version && bun install && bun run sync-plugin-versions. The sync step copies each plugin's package.json version into its.claude-plugin/plugin.jsonand themarketplace.jsonentry.package.jsonis the single source of truth; CI fails on drift either way. - No build step. Plugins are plain ESM
.mjs;ci:publishpacks and publishes raw — there is no compile. - Internal deps are
^semver, notworkspace:*. The marketplace installer runsnpm, which can't resolveworkspace:. bun workspaces still link locally. - Trusted publishing, no NPM_TOKEN. Auth is OIDC + sigstore provenance. An
npm publishauth failure means the trusted-publisher config on npm needs to authorizerelease.ymlfor the failing package — an operator task, not code. - Version PR force-pushes on every new changeset, resetting prior approvals. Re-review before merging.
Hard rules
- NEVER edit
plugins/*/package.jsonversionfields by hand.changeset versioncomputes them, andsync-plugin-versionspropagates them. - NEVER hand-edit
plugin.json/marketplace.jsonversions — they are derived. - NEVER edit
bun.lockmanually afterchangeset version;ci:version'sbun installregenerates it. - NEVER push a tag directly.
changeset tag(insideci:publish) creates them. - NEVER bypass the
npm-publishenvironment reviewer gate.