Skip to main content

Specfuse

Two things live here: the specfuse pip package — one install that owns the whole script suite — and the Claude Code plugin marketplace for the Specfuse gate-cycle methodology.

The split is deliberate. The scripts are one install because choosing between them is not a decision anyone wants to make; the plugins stay separate because which Claude assets a repository enables is exactly the decision it should make.

Install

uv tool install specfuse      # or: pipx install specfuse
cd <your repo> && specfuse init

That's the whole suite — driver, spec-authoring kit, orchestrator — behind one command. No extras, no --include-deps, no bracket quoting. Upgrade with:

specfuse upgrade              # runs your installer for you

That upgrades the components too, even when the umbrella's own version has not changed — which is the normal case, since components release on their own schedule. Use it rather than pip install -U specfuse: plain pip leaves a component at its installed version whenever the umbrella's floor is already satisfied, exits 0, and tells you nothing. specfuse doctor reports any component that has fallen behind.

Then, in Claude Code, install the plugins the repo needs:

/plugin marketplace add specfuse/specfuse
/plugin install specfuse@specfuse

specfuse init already wires the marketplace and the specfuse plugin into the repo's .claude/settings.json, so that second command is usually all that's left. Add --plugins authoring,orchestrator to enable those too.

Hitting a platform bug, or migrating off the retired specfuse[all] extras? See docs/troubleshooting.md, and run specfuse doctor.

New to the method? Read methodology/overview.md for orientation, then docs/product-lifecycle.md for the path an idea takes to merged code and docs/unit-lifecycles.md for the state machines underneath it.

The specfuse command

One command, one name on PATH.

specfuse init [DIR]           # scaffold .specfuse/ + wire .claude/ — or upgrade what's there
specfuse upgrade [DIR]        # the same thing, named for the other direction
specfuse doctor [--fix]       # check every suite command resolves here + flag outdated components
                              #   --fix clears dead shims; --no-network skips the PyPI check
specfuse --version            # the umbrella version + every component's resolved version

init and upgrade are one idempotent operation under two names — neither is ever the wrong one to run — and DIR defaults to the current directory. Both take --dry-run (writes nothing), --components, --plugins, and --no-self-upgrade.

Which scaffold a repo gets

The suite has three per-repo scaffolds, and init/upgrade read the repo rather than assuming:

Component What it overlays Recognised by
loop the gate-cycle driver's .specfuse/ (templates, rules, verification.yml) .specfuse/VERSION, .specfuse/templates/
authoring the spec kit under .specfuse/authoring/ + scripts/ .specfuse/authoring/, or api/specs + <project>-project.json
orchestrator the frozen multi-repo substrate (shared rules, issue templates, merge-watcher) .specfuse/templates.yaml, .specfuse/issue-templates/, .specfuse/agents/<kind>/

A repo gets exactly the components it already has — an authoring repo running specfuse upgrade refreshes its kit and is not given a driver scaffold it never asked for. A repo can have several; they compose as long as each component owns its install paths outright. That is checked rather than assumed: before writing, init/upgrade install every selected component into a throwaway directory and warn when two of them ship the same file with different content, naming whose copy lands.

A repo with none of them is a fresh one, and defaults to the driver. Override the detection with --components:

specfuse init --components authoring          # wire a specs repo for the kit
specfuse upgrade --components loop,orchestrator

SPECFUSE_NO_LABELS=1 skips the orchestrator overlay's gh label create calls — the only part of an upgrade that leaves the machine.

The component tools are subcommands:

Subcommand What it does Component
specfuse run run the gate-cycle driver specfuse-loop
specfuse lint lint a feature plan specfuse-loop
specfuse monitor, monitor-lint the monitoring CLI and its linter specfuse-loop
specfuse stats event statistics for a repo's loop specfuse-loop
specfuse authoring design / validate / bundle specs specfuse-authoring
specfuse pm multi-repo initiative coordination specfuse-orchestrator
specfuse poller, runner the orchestrator's poller and agent runner specfuse-orchestrator
specfuse validate-event, validate-frontmatter orchestrator validators specfuse-orchestrator

The old flat commands still work. specfuse-loop, specfuse-lint, specfuse-authoring and the rest are deprecated aliases, removed in 1.0.0. specfuse doctor lists the ones still on PATH. One name on PATH is the point: the flat names are also the standalone packages' console scripts, so two installs could fight over them and the loser's upgrades silently changed nothing about what ran. See docs/plan-bundle-suite-distribution.md.

specfuse init also provisions the core methodology contract — the rules and schemas in methodology/ — into .specfuse/methodology/, so agent skills resolve the shared contract from the repo they are working in rather than from a sibling checkout. These files are core's: init/upgrade overwrite them, and repo-local rules belong in .specfuse/rules-local/.

On a driver repo, specfuse init lays down .specfuse/ (templates, rules, docs, verification.yml) and merge-safely wires .claude/ (including this plugin's config) — pip-native scaffolding via specfuse.loop.scaffold, no init.sh checkout required. Every specfuse run also self-provisions (version-syncs .specfuse/ from the installed package), so an upgrade reaches existing projects on their next run.

The suite is one distribution with three components as hard dependencies (specfuse-loop, specfuse-authoring, specfuse-orchestrator) — that is what makes one install and one upgrade cover everything. They contribute to the shared specfuse.* import namespace, so specfuse.loop, specfuse.authoring and specfuse.orchestrator coexist in one environment.

See specfuse/loop for the methodology, the driver, and getting-started docs.

Plugins

Installed per repo, via the marketplace — pick the toolset that repo needs.

Plugin What it ships Source repo
specfuse Gate-cycle skills (pick / draft / arm / diagnose / wrap, authoring, verification) specfuse/loop plugins/specfuse/
specfuse-authoring Spec-craft: design OpenAPI/AsyncAPI/Arazzo, validate, bundle + the specs agent (idea → validated initiative) specfuse/authoring plugins/specfuse-authoring/
specfuse-orchestrator Multi-repo initiative coordination (onboard, pm) specfuse/orchestrator plugins/specfuse-orchestrator/

Update with /plugin update specfuse@specfuse; reload after changes with /reload-plugins. The skills drive the pip-installed commands above.

Layout

.claude-plugin/marketplace.json   # catalog: per plugin { name, source, source_repo, managed }
plugins/<name>/                    # GENERATED copies — do not hand-edit (see below)
  .claude-plugin/plugin.json
  skills/<skill>/SKILL.md
  agents/<agent>.md

Releasing (contributors)

docs/releasing.md is the reference: who publishes what, and when a component release does — or does not — need an umbrella release.

The short version: the components are hard dependencies of specfuse, so a component release reaches users on their next specfuse upgrade without an umbrella release. Version floors here are minimums, not levers — don't bump one just because a component shipped. An umbrella release is needed only when its own code changes, or when a component adds a command or renames a module.

How the plugins are sourced (contributors)

Edit a plugin in its origin repo, never here. Each plugin's canonical source lives in its own repo at plugins/<name>/ (for the loop, .specfuse/skills/ is vendored from plugins/specfuse/skills/ for its dogfood — the plugin dir is still the source). The copies under plugins/ in this repo are generated output, produced by specfuse/publish.py.

  • Publish on release. When a source repo publishes its package to PyPI, its release workflow dispatches to this repo; the publish step regenerates that plugin from the source at tag v<version>, stamps plugin.json.version to the released version (plugin@X == package@X == tag vX), and opens a PR only if the plugin changed.
  • Drift-guard. The plugin-drift-guard CI (required check) re-derives every managed plugin from its source at the pinned tag and fails on any diff — so a hand-edit, a bad merge, or an agent's "quick fix" cannot land in plugins/. The only way in is a faithful publish.
  • Manual publish (testing / backfill): the plugin-publish workflow's workflow_dispatch (plugin, version) runs the same path by hand.

See docs/plan-unify-plugin-sourcing.md for the full design. Skills reach a target repo through the installed plugin (under the /specfuse: etc. namespaces), not by copying files into the repo.

License

Apache License 2.0. See LICENSE.

Metadata

Release files for specfuse 0.14.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for specfuse 0.14.0
File Size Uploaded
specfuse-0.14.0.tar.gz 152.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for specfuse 0.14.0
File Interpreter ABI Platform
specfuse-0.14.0-py3-none-any.whl Python 3 none any Details

Total release size: 244.5 kB

Release files / specfuse-0.14.0.tar.gz

Download URL specfuse-0.14.0.tar.gz
Size 152.8 kB
Tags Source
SHA-256 checksum
How to use checksums
100b2092f6881c273710de17b6630d02c3b142c81344d5197f9e21bae5b49a6d
BLAKE2b-256 checksum
How to use checksums
a782d7d571d660733baf29f1de6b6f397b39ef6ae57ebcb6b458187b2a8919ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release files / specfuse-0.14.0-py3-none-any.whl

Download URL specfuse-0.14.0-py3-none-any.whl
Size 91.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b85cf29bfb5b69239e883f7b8b12a1f47815c8dfd0d4f1b17323c5a933ec041a
BLAKE2b-256 checksum
How to use checksums
2e84020988b3c6e8cb28b429481bfab6bce40a50f203b91e3a2d1ff17be7e2de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release history Release notifications | RSS feed

0.15.0

2 release files

This release

0.14.0 This release

2 release files

0.13.0

2 release files

0.12.3

2 release files

0.12.1

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.14

2 release files

0.3.13

2 release files

0.3.12

2 release files

0.3.11

2 release files

0.3.10

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page