Multi-agent orchestration, and a currency cycle that found real defects. This release adds the all-hands orchestration pattern across every runtime, and corrects a set of claims that had drifted from - or never matched - what the vendors actually do. Several were functional, not cosmetic: the sanitization gate this framework advertises was not firing, and one shipped template carried a model value no runtime accepts.
Vendor facts in this release were verified against official documentation and, where docs were inconsistent, against installed vendor binaries. That method is now written down as a repeatable cycle.
Added
all-handsmulti-agent orchestration. A coordinator skill that triages a work item, fans it out across the relevant agents in parallel waves, synthesizes their output, runs the validation gates, and reports. Shipped in all six runtime layouts (runtimes/.<vendor>/skills/all-hands/), each with its own vendor-correct frontmatter and a shared body kept in sync bytools/sync-skills.py. Consumer template atskills/examples/all-hands/.agentic-docs/multi-agent-orchestration.mdandwiki/Multi-Agent-Orchestration.md- the six mechanisms a working orchestrator needs, and what breaks when each is missing. Framed as a composition of the existing four primitives, not a fifth primitive.docs-currency-auditoragent - owns vendor facts, version anchors, transition dates, and cross-mirror consistency. Produces evidence-backed findings; does not write the prose.doc-currency-checkskill - the currency cycle in executable form, encoding the specific rot classes that have bitten this repo.tools/sync-hooks-to-settings.sh- merges the annotatedhooks.jsonsource of truth intosettings.json, with JSON validation, refusal to overwrite an invalid destination, and idempotency.- Tracked
.claude/settings.json, whichCLAUDE.mdhad documented but which did not exist. runtimes/mcp/render/render_devin.pyandruntimes/.devin/config.template.json- six renderers now emit fromruntimes/mcp/servers.yaml.- Hook layouts in every runtime.
runtimes/.codex/,.gemini/,.cursor/, and.devin/now ship hooks in their vendor's native shape, plus a new top-levelhooks/devin/reference. All six layouts now deliver the hook support they advertise. Gemini is the shape exception: its hooks live inside the generated.gemini/settings.json, so the layout ships a documented merge-in snippet rather than a standalone config.
Fixed
- Hooks never fired. Claude Code executes hooks from
settings.json; a project-level.claude/hooks/hooks.jsonis read only for plugins. This repo's own sanitization gate, the consumer template, and the worked example all shipped inert hooks whileCLAUDE.mddescribed a hook block as "a hard stop". All three are now wired throughsettings.jsonand the fix was verified by observing the hook actually run. model: flagshipwas written into live agent files.flagship/balanced/fastare SpecRoute's vendor-neutral tier abstractions; no runtime accepts them. Nine shipped agent files carried one. Real files now carry real values; tiers are confined to roster tables, with a per-vendor mapping inwiki/Agents.md. The frontmatter hook now flags a tier name used as a model value.- Kiro's hook format was retired. Kiro IDE 1.0 (2026-06-25) replaced
*.kiro.hookwith.kiro/hooks/<name>.jsonv1; 0.x hooks do not execute until migrated. Examples migrated, trigger vocabulary updated, migration guidance added. - Agent and skill frontmatter contracts were wrong in both directions. Only
nameanddescriptionare required;modelandcolorare optional.internet: Yes|Nowas documented as a contract field but is not one - removed, with web access now expressed throughtools. Roughly eleven real optional fields were undocumented. allowed-toolswas described as a restriction. It pre-approves tools for the invoking turn;disallowed-toolsis what removes them. The previous framing gave a false sense of confinement.- A fabricated standard was cited. A claimed "150-line instruction budget" from the Agentic AI Foundation does not exist - the
AGENTS.mdstandard specifies no schema and no length limit. The Linux Foundation stewardship is real and is now stated accurately; the length target is labelled as SpecRoute's own convention. - The capability table over-claimed. It conflated "the vendor supports this" with "SpecRoute ships a runtime layout for this". Those are now distinct claims.
agentic-docs/agentic-coding-model.md's vendor section predated the v0.3.0 convergence and contradicted the matrix in four places.- Codex hook facts. v0.3.0 recorded 10 events; there are 11 (
SessionEndwas missing), confirmed against bothcodex-cli0.145.0 and the official docs. Codex reuses Claude Code's event names verbatim, but the overlap is close rather than total: noPostToolUseFailure, and onlytype: "command"handlers execute. Hooks are enabled by default, and the canonical[features]key ishookswithcodex_hooksas a deprecated alias - an intermediate draft of this release wrongly retracted that as unverifiable, on the strength of a grep that could not prove the negative. Corrected against the vendor documentation. - Kiro hook templates would not have loaded. The root
versionfield is the string"v1", not the integer1- all four shipped example hooks carried the integer, and two migration tables instructed readers to convert toward it. Kiro IDE 1.0 also has 10 triggers, not 11:Manualwas retired in favour of manual steering files, and one shipped example used it. Both fixed and verified againstkiro.dev/docs/hooks/. - MCP renderers declared a
pyyamldependency they never used, and the Gemini and Codex renderers silently droppedrequires_env, omitting required environment wiring from the generated configs. All six now round-trip byte-identically against their committed templates. /auditchecked the wrong files for matrix consistency and used a glob that matched nothing for Codex agents;/sanitizecould not detect flattened project paths, which was the one path leak actually present.- Maintainer home-directory paths removed from tracked files;
.claude/agent-memory/notes regenerated against disk after marking 21 existing files as "TODO". - The SessionStart banner and
/statusreported a phantom missingdocs/directory, renamed toagentic-docs/long ago. - The sanitization gate could not see the files most likely to leak.
/sanitizeandpre-bash-sanitize.shboth scanned viagit grep, which reads tracked content only - so a commit that adds a leaking file passed cleanly, and new content is exactly what leaks. 49 of this release's own files were invisible to it. Both now scan tracked plus untracked-but-not-ignored paths, verified by planting a canary in a new file and confirming the gate blocks. (The first attempt at this fix was itself broken:xargsreturns 123 when anygrepbatch finds nothing, so an exit-status guard swallowed real hits.) - Three inconsistencies caught by a post-implementation audit pass:
hooks/cursor/hooks.template.jsonclaimed 19 lifecycle events while wiring 18 against a documented 21 (now states the count and why the Tab/workspace hooks are omitted);wiki/Frontmatter-Contracts.md's intro still asserted the pre-correction "missing fields = won't register" rule that its own corrected body contradicts; and.claude/agent-memory/runtime-architect/vendor-matrix-progress.mdstill carried an in-flight banner and a pre-hooks capability snapshot. all-handsdid not register as a skill at all. Its frontmatter carrieddisable-model-invocation: true, which removes a skill from the model-facing registry that Claude Code's@mention picker completes against - so@all-handsreturned only directories and noSkillrow, and the skill looked broken while being structurally valid. Its tool list also namedTask, which was superseded byAgent. The Claude copy now uses the documented space-separatedallowed-toolsscalar, while every runtime keeps only its native frontmatter. The portable body documents each runtime's dispatch mechanism without claiming Claude'ssubagent_typeis universal.- Cursor hook path resolution was documented two contradictory ways.
hooks/cursor/scripts/README.mdsaid paths resolve relative tohooks.json's parent; the runtime README said project root. Cursor's docs settle it: project hooks resolve from the project root (.cursor/hooks/scripts/x.sh), user hooks from~/.cursor/(./hooks/scripts/x.sh). The shipped configs were already correct - only the reference doc was wrong. This mattered because thebeforeShellExecutiongate setsfailClosed: true, so an unresolvable path exits 127 and blocks every shell command rather than failing quietly. $ARGUMENTSnow degrades gracefully. All sixall-handsbodies are byte-identical by design, so a per-vendor substitution token cannot be expressed - but only Claude Code and Codex expand$ARGUMENTS. The body now tells the coordinator what to do when it reads the literal token instead of a work item.- Kiro shipped one hook where every sibling ships three, with no stated reason, and its hooks README was the only one without a Setup section. It now ships the same session-start / sanitization-gate / frontmatter-check trio, plus setup steps that assert the scripts exist rather than only that the config parses.
- The
wiki-parityCI gate was inert. It captured$?after a pipeline, which istee's status, not the script's - soexit_codewas pinned to 0 and both the staleness-annotation and hard-break-failure steps were unreachable. Now usesPIPESTATUS[0]. /audit's vendor-matrix check could not detect cell-level drift - it compared only row count and the set of runtime-dir tokens, so a changed cell passed silently. It now hashes the extracted matrix table across all four mirrors and reports the differing file, line and column. The four tables are byte-identical; supporting notes live in the integration reference and dedicated wiki page instead of the README.agentic-docs/agent-memory.mdnamed a real file inside a maintainer's private user-level memory directory. Replaced with a derivation command; the elided path form had slipped past the string-level scan.runtimes/.claude/settings.local.template.jsonwas invalid JSON - an object entry inside an array - so any consumer copying it got settings that silently failed to load.- Five wiki mirrors reconciled against their sources, including a claim that a
runtimes/.codex/hooks/pre-bash-sanitize.jsontemplate shipped when no such file existed in either location. - Three agents with populated memory directories never declared
memory: project(four agents now declare it, including the newdocs-currency-auditor).
Changed
- Counts and version anchors reconciled across the repo: 12 implementation agents, 6 contributor skills, 6 runtime layouts, 6 MCP renderers.
.cursorrulesdowngraded from "legacy, still supported" to removed in practice.- The product is documented under its current Devin Desktop name. The
.devin/runtime now targets Devin Local; Cascade's remaining.windsurfpaths are documented only as compatibility paths within the same product. - Hook documentation states plainly that hook taxonomies have not converged. Claude Code, Codex, Kiro, and Devin Local share several event names, but payload and decision schemas still differ. Skills, not hooks, are the near-total convergence point.
Known gaps
.agents/skills/is emerging as a vendor-neutral skills location (confirmed present in an installed Codex 0.145.0 binary as a repo-level skills root, alongside a still-working.codex/skills). Documented, but SpecRoute has not migrated to it, and the ecosystem has not settled.- Codex hooks are documented as enabled by default;
[features] hooksis canonical andcodex_hooksis a deprecated alias. - Cascade remains available inside Devin Desktop, but SpecRoute no longer ships it as a separate runtime. Projects still using Cascade may retain its documented
.windsurf/workflows/,.windsurf/hooks.json, and user-level MCP compatibility paths while migrating reusable procedures to skills.