Skip to content

skillmaker publish

skillmaker publish <slug> [--target <id>]

Publishes a Skill Bundle to the targets configured for it in skillmaker.config.json’s publishTargets — the same publishBundle function the server’s POST /api/bundles/:slug/publish route runs (one contract, two doors: the CLI and the viewer’s guided publish flow produce identical results). Requires a workspace and at least one configured target; fails with a clear message if either is missing.

Configured once per workspace, in skillmaker.config.json:

{
"publishTargets": [
{ "id": "local-mirror", "kind": "git-dir", "path": "/path/to/mirror" }
]
}
KindWhat it does
git-dirCopies the bundle’s output/ to <path>/<slug>/. path is required.
claude-marketplaceWrites/updates a Claude-format marketplace manifest. path defaults to the workspace root.
codex-marketplaceWrites/updates a Codex-format marketplace manifest. path defaults to the workspace root. The Codex marketplace manifest shape is best-effort — there is no published spec to conform to yet, so this target is documented honestly as “our best guess,” not a verified integration.
FlagMeaning
--target <id>Publish to one configured target instead of all of them
--jsonEmit {status, slug, versionHash, results} instead of text

publish refuses unless the bundle is at stage published and its drift status is in-sync (the recorded version matches the current design.md + output/ hashes) — see Versions and drift. Reaching published itself requires an approved bundle.gate_decided publish gate, on top of the approved review every stage transition already requires; see The production state machine.

Publishing is idempotent per target: republishing an already-current version reports already published rather than writing again.

Real output from a git-dir target, first publish:

skillmaker: my-first-skill publish results for version sha256:4f53cda18c2b...
local-mirror (git-dir): published -> /path/to/mirror/my-first-skill

Republishing the same version:

skillmaker: my-first-skill publish results for version sha256:4f53cda18c2b...
local-mirror (git-dir): already published -> /path/to/mirror/my-first-skill

--json:

{"status":"published","slug":"my-first-skill","versionHash":"sha256:4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","results":[{"target":"local-mirror","kind":"git-dir","status":"already_published","url":"/path/to/mirror/my-first-skill"}]}

No configured targets:

skillmaker publish: no publishTargets configured in skillmaker.config.json -- nothing to publish to

Publishing and the skillbook — targets, guards, and dual marketplaces explained. book build renders the skillbook — the other half of “leaving the studio with receipts.”