You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Switched harnesses/antigravity/marc/compile.json to "hook_dialect": "antigravity".
Upgraded Antigravity @techlead dispatch instructions with native invoke_subagent features: Workspace: "share" for parallel writer isolation, Gemini model tier selection (flash for @research, pro/inherit for @dev, @sec, @rev, @sre), dynamic specialization via define_subagent (e.g. enable_write_tools: false for read-only agents), and send_message coordination.
Added hook dialect structural schema validation in core/scripts/test_hooks_parity.py.
Updated harnesses/antigravity/marc/COMPATIBILITY.md and CI assertions.
@sec gains the Skill tool for /security-review (#191, PR #192).@sec
(tools now Read, Grep, Glob, Bash, WebFetch, TodoWrite, Skill) invokes the
harness's built-in /security-review as an additional input pass alongside
its existing checklist, closing the capability gap with @rev's /code-review grant from #125. The skill never replaces the checklist or
the deliverable: @sec still authors the ## @sec review comment with its
own ranked findings and verdict, and treats a thin or empty /security-review result as inconclusive rather than a PASS. core/skills/tech-lead/SKILL.md now also records that granting a
specialist a new tool is the operator's decision, made per demonstrated
capability-need and never a blanket default.
Fixed
hooks.json is now compiled from core/, and Antigravity's hooks actually
work (#173, #170).hooks.json was the one load-bearing plugin component
hand-maintained per harness instead of generated — Claude Code's copy was
de-facto canonical, Copilot's hand-written copy drifted independently (twice,
per #166/#173), and Antigravity's was a bare symlink to Claude Code's hooks/ that hardcoded ${CLAUDE_PLUGIN_ROOT} with no fallback, so all five
Antigravity hooks (outdated-check, invariants-card, token-guard,
outdated-recheck, token-telemetry) silently no-op'd. core/hooks/ hooks.spec.json is now the single harness-neutral source; each harness's compile.json declares an explicit hook_dialect (Claude Code/Antigravity
share one schema, Copilot has its own) and hook_ids (which hooks it
ships — Copilot's narrower coverage is now a reviewable declaration, not an
accident). scripts/compile_prompts.py renders each harness's own hooks/hooks.json and copies only the .sh scripts it actually needs; the
Antigravity symlink is gone in favor of a real compiled directory. A hook
whose script cannot be found now says so once per session, visibly, on
stderr (deduped via a state-file marker keyed off the hook's own session_id, so a broken install doesn't flood the transcript on every PostToolUse call) instead of the old blanket 2>/dev/null; exit 0 that
made a resolution failure indistinguishable from "ran, nothing to report"
— ordinary quiet no-ops (e.g. no team.toml in a repo) are unaffected. outdated-check.sh/outdated-recheck.sh also now find the plugin manifest
at either .claude-plugin/plugin.json (Claude Code) or a root-level plugin.json (Antigravity/Copilot). The compiler validates every
spec/config value it interpolates into a hook command and refuses
(fail-closed) to render one containing a shell metacharacter, so a future
careless edit can't splice unescaped shell into the shipped hooks.json.
A new core/scripts/test_hooks_parity.py gates CI against hand-edit drift,
missing hook scripts, and that same class of unsafe interpolation,
alongside the existing test_script_parity.py.