Skip to content

Marketplace distribution ​

The marketplace repository (dfg-inc/praxis-marketplace, marketplace name praxis) is exclusively the Claude plugin marketplace: .claude-plugin/marketplace.json and plugins/ with ready-to-install builds. The website and this documentation live only in the praxis-website repository. The marketplace does not own the plugins: it stages copies of them from the role repositories and the Runtime repository. Scripts live in praxis-marketplace/tools/scripts.

The plugin directories are real, prebuilt copies, not links to the source repositories: the sources do not contain the generated build outputs an installed plugin needs (see Generated build outputs).

Sources ​

Marketplace pluginSource repositorySource directory
praxispraxis-marketplaceplugins/praxis (authored in the marketplace)
praxis-bapraxis-baplugins/ba
praxis-architectpraxis-architectplugins/architect
praxis-developerpraxis-developerplugins/developer
praxis-qualitypraxis-qualityplugins/quality
praxis-runtimepraxis-runtimeplugins/runtime (contains the bundled server/praxis-mcp.cjs)

Scripts ​

ScriptWhat it doesPublishes?
stage-portable-plugins.mjsReplaces the marketplace's plugins/ entries (except praxis) with self-contained copies from the source directories (no node_modules, no .git). For praxis-ba it also bundles the canon-graph CLI into a self-contained bin/praxis-ba.cjs, the path the BA skills call. For every plugin with tools/session-bootstrap.mjs it bundles a standalone tools/session-bootstrap.cjs with esbuild, because an installed plugin does not have the @praxis/plugin-sdk the source imports. Checks that every marketplace source is relative, stays inside the repository and has a plugin.json. Writes plugins/.staged-at. Runs claude plugin validate on the marketplace.No
build-release-candidate.mjsBuilds release-candidate/ from the six source directories: copies each plugin, writes FILES.sha256.json per plugin, copies the real marketplace.json, and writes manifest.json (contract praxis.marketplace.release-candidate): host (Node, platform, Claude Code version), required host versions, per plugin source revision, branch, dirty flag, skills, whether it has a server and .mcp.json, artifact checksum and file count. Records dirty working trees explicitly and sets a warning instead of claiming a clean revision. Runs claude plugin validate on the result.No
verify-release-candidate.mjsCompares the release candidate with each source directory file by file. Any changed, missing or extra file means STALE and exit code 1: rebuild. Optionally compares an installed Desktop extension (--installed-extension) and installed role plugins (--installed-plugins) with source; those are warnings unless --strict-installed. --json prints the report.No

| check-marketplace.mjs | Manifest consistency: names, versions, dependencies (the bundle depends on the other five, every role on praxis-runtime), exactly one MCP server, no secrets or developer paths. | No | | check-plugin-outputs.mjs | Generated outputs: every file under plugins/ is tracked (nothing ignored), the BA CLI and every role's session-bootstrap.cjs run with no node_modules, the Runtime bundle starts, and every ${CLAUDE_PLUGIN_ROOT}/... path in a skill resolves. | No |

npm entry points: npm run check:marketplace, npm run check:outputs, npm run check:rc and npm run test:rc; npm run verify runs them. There is no site build in this repository.

Generated build outputs ​

The role plugins ship outputs that are build products, not source, so they exist only in the staged copies:

  • BA canon-graph/dist (compiled validator) and bin/praxis-ba.cjs (self-contained CLI; its dependencies zod, yaml and gray-matter are bundled). The BA skills (ba-lint, approve-plan, ...) call ${CLAUDE_PLUGIN_ROOT}/bin/praxis-ba.cjs.
  • tools/session-bootstrap.cjs of every role (bundled from the source .mjs, which imports a package an installed plugin does not have).
  • The Runtime bundle server/praxis-mcp.cjs (self-contained: no npm install).

A .gitignore rule for dist/ once dropped the BA outputs silently; the marketplace now un-ignores plugins/**/dist/ and check-plugin-outputs.mjs fails if anything under plugins/ is untracked or ignored.

Release candidate ​

The release candidate is a complete marketplace tree under release-candidate/ that can be validated and installed from locally before anything is published. Read dirtySources and warning in its manifest.json: a dirty source means the build must not be described as a published revision. The claude CLI must be on the path (claude plugin validate).

What gets published ​

Nothing in these scripts pushes, tags or uploads. Publishing is a separate owner decision (see Release process). The target repositories are under the dfg-inc GitHub organisation:

RepositoryPublished artifact
dfg-inc/praxis-coreSource; the Release workflow publishes the @praxis/* vendor tarballs, vendor-checksums.json and release-meta.json
dfg-inc/praxis-runtimeRelease asset praxis-runtime.mcpb and release-meta.json
dfg-inc/praxis-ba, praxis-architect, praxis-developer, praxis-qualityRelease asset praxis-<role>.zip and release-meta.json
dfg-inc/praxis-marketplaceThe marketplace itself: users add it as dfg-inc/praxis-marketplace. CI only (check:marketplace, check:outputs, release-candidate tests); no release workflow
dfg-inc/praxis-websiteThis website and documentation (private repository, flagridge.com); every push to main deploys production

Order, because each step feeds the next:

  1. praxis-core (source and vendor tarballs).
  2. praxis-runtime and the four role repositories, each vendoring that Core.
  3. praxis-marketplace: restage from the released sources, rebuild and verify the release candidate, then publish the marketplace repository. The marketplace must be updated after the plugins it contains.

Claude Desktop Chat: the MCPB ​

The marketplace plugin praxis-runtime is a Claude Code style plugin with a stdio server. Claude Desktop Chat does not automatically get a plugin's local Runtime as a Chat tool, so Chat uses praxis-runtime.mcpb, built from the same Runtime sources by npm run pack:mcpb in praxis-runtime and installed in Settings, Extensions. The MCPB manifest (version 0.4, extension id praxis-runtime) adds a settings form (Configuration). Role ZIPs (praxis-<role>.zip, skills only) can still be uploaded manually in Desktop Chat, but that is not the install path for Code or Cowork, where the marketplace is used.

Not verified: Claude Desktop Chat installing skills from the marketplace.