Brief-Spec ships one dependency-free Python core with a data-driven harness adapter registry. Its compatibility promise is split into four independently testable layers:
- unchanged Outcome Brief and Session Checkpoint
1.0contracts; - deterministic work-type classification and explanation profiles;
- host event normalization, installation ownership, and rollback;
- real discovery and lifecycle execution in each host.
The first three layers are deterministic and covered by the repository test suite. Lifecycle claims require retained, expiring conformance evidence; installation evidence alone does not imply an authenticated host run.
| Harness | Maturity | User scope | Project scope | Native projection |
|---|---|---|---|---|
| Codex | Live-verified | Yes | Yes | portable skills, hooks, and runtime |
| Claude Code | Live-verified | Yes | Yes | portable skills, hooks, and runtime |
| Oh My Pi (OMP) | Live-verified | Yes | Yes | native skills and lifecycle extension |
| Grok Build | Live-verified | Yes | Yes | .grok/skills and .grok/hooks/brief-spec.json |
| Kimi Code | Live-verified | Yes | Skills only | user plugin; project lifecycle requires that user plugin |
| GitHub Copilot | Experimental | Yes | Yes | portable skills, hooks, and cloud bridge |
| Cursor Agent | Experimental | Yes | Yes | portable skills and hooks |
| Goose | Experimental | Yes | Yes | portable skills; lifecycle automation unavailable |
A model is not a harness. For example, Grok selected inside OMP is recorded as harness=omp,
model_provider=xai, and a separate model value.
Grok's native passive hooks record session, prompt, tool, compaction, and agent events, but Grok
1.0.x ignores stdout from passive hooks. The installed native brief-spec skill therefore performs
the user-facing routing, while the Stop hook can return one bounded correction containing the exact
classification metadata. Its live implementation gate runs in a disposable repository with only
native read_file and search_replace; shell, web, memory, and subagents remain disabled.
brief-spec setup all touches detected harnesses only. Missing executables are warnings unless
named by --require. Multi-host setup is one transaction: failure restores every touched path and
preserves foreign configuration.
The canonical interfaces are the brief-spec distribution and CLI, the brief_spec import,
BRIEF_SPEC_HOME, and ~/.local/state/brief-spec. The same distribution also supplies:
- the
briefspecCLI alias andbriefspecforwarding import; - legacy
briefspec:*markers, schemas, receipts, environment variable, state directory, and renderer entry-point group; installas an alias forsetup.
Legacy interfaces warn only when explicitly invoked. Doctor reads legacy receipts and state and
migrates receipt-owned paths transactionally with --fix. There is no separately published
briefspec compatibility distribution.
The source tree retains compatibility-oriented internal paths while its public metadata is canonical:
.codex-plugin/plugin.json Codex metadata
.claude-plugin/plugin.json Claude-compatible metadata
plugin.json portable Agent Plugins 1.0 manifest
skills/brief-spec/ universal type router
skills/outcome-brief/ terminal lifecycle contract
skills/session-checkpoint/ checkpoint lifecycle contract
schemas/brief-spec-delivery.schema.json
scripts/brief-spec-hook canonical source-checkout entrypoint
scripts/briefspec-hook legacy source-checkout entrypoint
The wheel includes both import names and projects skills, hooks, schemas, integrations, and plugin
metadata under its resources. scripts/verify-release.py verifies source-to-wheel byte equality.
Adapters map native events to the common session, prompt, tool-result, pre-compaction, and stop
boundaries. Unsupported capabilities remain explicit in brief-spec capabilities all --json.
Automatic type routing occurs on substantive prompts; checkpoints and terminal briefs remain at
safe lifecycle boundaries.
Codex and Claude keep their established command-hook projections. OMP uses session_start,
before_agent_start, tool_result, session.compacting, and session_stop. Grok and Kimi receive
their native hook manifests. Kimi project installation deliberately omits hooks because Kimi
plugins are user-wide; doctor reports whether the user plugin supplies lifecycle automation.
Run the deterministic gates:
uv run ruff check .
uv run ruff format --check .
uv run python scripts/verify-release.py
uv run pytest --cov=briefspec --cov-report=term-missingThen build wheel and sdist once, verify both canonical and legacy imports/commands in clean environments, and run the live disposable-repository harness. Fixture-only coverage is not evidence that a host loaded an integration. Cursor, Goose, and Copilot therefore remain experimental until their authenticated live gates are separately completed.
The current local 0.5.0 candidate passed 8/8 Codex, 8/8 Claude, and 4/4 each for OMP, Grok, and
Kimi. See the generated verification record for the exact truth boundary; local
live passes are not hosted-CI or publication evidence.