GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — feat(claude): Claude projection v2: member subagents, skills, governance hooks, watch preset by bradygaster · Pull Request #2450 · github/squad

Conversation

@bradygaster

@bradygaster bradygaster commented Nov 10, 2026

Copy link
Copy Markdown
Collaborator

What

Claude projection v2 for Claude Code (#2442, part of epic #2438), shipped as one projection-version bump:

  • Member subagents: each charter in .squad/agents/ compiles to .claude/agents/<id>.md, with model, effort, tools and isolation taken from the charter and its ## X-squad-host-claude extension.
  • Skills, and a slimmer coordinator: template skills and the coordinator's on-demand sections (Init, Ralph, ceremonies, Issues, PRD) are projected as native Claude Code skills, so .claude/agents/squad.md loads them only when needed.
  • Opt-in advisory governance hooks: claudeHooks: "advisory" merges squad hook claude <Event> handlers into .claude/settings.json next to the user's own hooks. A durable reviewer-lockout record (squad lockout) follows governance-review §6.
  • squad watch --execute --agent-preset claude: runs each round as claude -p … --agent squad --mcp-config .mcp.json --output-format stream-json --verbose. Copilot stays the default runner.
  • Projection v2 (CLAUDE_PROJECTION_VERSION = 2): every generated Claude Markdown file states the version. v1 files are still recognised as Squad-owned and are upgraded in place.

Why

Closes #2442. Claude Code had only the coordinator file, so it couldn't dispatch members as real subagents, carried the full coordinator text in every session, had no governance hooks and couldn't run squad watch --execute without a custom --agent-cmd.

How

  • One commit per phase: 449d760 (members), 9482975 (skills), 74fe098 (hooks and lockouts), e33840c and 6c8a0e6 (watch preset and docs), 8857a41 (version bump and rollback tests). Phase 3 (hooks) is self-contained, so it can be split out for a separate security review without another version bump.
  • User files are never overwritten: a file at a generated path that lacks Squad's generated-file note is skipped on install and on rollback.
  • Hooks are advisory and off by default: the user's own hooks and settings are preserved, and turning hooks off removes only Squad's handlers.
  • Byte-preserving rollback (harness-adapters §15.7): test/claude-projection-v2-rollback.test.ts snapshots the whole tree and requires identical bytes after install, upgrade and rollback. That found a bug in the marker-block code shared by CLAUDE.md, AGENTS.md and GEMINI.md: rollback added or dropped a newline when a file ended without one or with a blank line. It's fixed in upsertBlock and removeBlock. As a side effect, a file without a final newline now keeps having none after install.
  • Watch preset:
    • Execute mode defaults to --permission-mode bypassPermissions, the counterpart of Copilot's --yolo, and --claude-flags overrides it.
    • A stream-json result event that reports an error counts as a failed round, even when the process exits 0.
    • --agent-cmd still wins over the preset, and fleet dispatch stays Copilot-only.
  • Host feature matrix: ralph-cli-triage-watch.claude changes from degraded to supported, and reviewer-lockout gains evidence. The generated page is regenerated and passes --check.
  • Research: gh-aw supports a Claude engine; the findings are recorded on Epic: Claude Code as a first-class Squad 2.0 host, and the non-Copilot host that promotes the v0.2 profiles #2438.

Note on history: e33840c accidentally included docs/proposals/claude-code-benchmark.md, and f7a75e8 deletes it again (its content moved to #2449). The net diff doesn't touch the file. A squash merge is recommended.


⚠️ Quick Check

  • If SDK/CLI source files changed: completed the applicable Changeset step (.changeset/claude-member-subagents.md, claude-skills-projection.md, claude-governance-hooks.md, claude-watch-preset.md, claude-projection-v2.md)

PR Readiness Checklist

Branch & Commit

  • Branch created from dev (not main)
  • Branch is up to date with dev
  • Verified diff contains only intended changes
  • PR is not in draft mode
  • Commit history is clean: one commit per phase, plus the add-then-delete pair above. Squash merge recommended.

Build & Test

  • npm run build passes (SDK and CLI built with tsc)

  • npm test passes: 13,241 passed and 34 failed locally on macOS. None of the failures is in code this PR touches:

    • Most are Path traversal blocked under /var/folders, caused by the macOS /var → /private/var symlink. They're in the memory, upstream, bridge and profile-guard tests.
    • export-import and upstream-hardening fail the same way on clean dev.
    • gh-aw staging, hostile-integration, observer and packaging pass when run on their own.

    Three regressions from earlier phases were found and fixed: the help-width gate, the help-length gate and the Claude Init Mode scenario tests. The suites covering this PR's code pass: 196 tests, plus 12 for the watch preset.

  • npm run lint passes

  • npm run lint:eslint passes (warnings only)

Changeset

  • Changesets added (SDK and CLI, minor)

Docs

  • docs/src/content/docs/scenarios/client-compatibility.md: the Claude Code section, governance hooks, and the watch preset row
  • docs/src/content/docs/features/ralph.md: a Claude Code runner section and flags-table rows
  • docs/specification/client-harness-adapters-v0.2.md: §5 projection v2, §7.1 hooks and lockouts, and §13 ownership and rollback
  • I built these docs merged with docs: migrate docs and blog to Primer with Squad branding, hub blog, and accessibility sweep #2447 (Primer migration): the build passes, the 13 build-output tests pass, and the changed pages show no axe WCAG 2.2 AA violations in light or dark mode.

Exports

  • N/A. New SDK modules are exported through the existing clients subpath.

Breaking Changes

None. Everything new is either generated only for --client claude or opt-in (claudeHooks, --agent-preset claude). The default Copilot projection and runner are unchanged. The only behaviour change outside Claude is the marker-block newline fix above.

Waivers

None.

🤖 Generated with Claude Code

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
bradygaster and others added 7 commits November 9, 2026 12:52
@bradygaster @claude
feat(claude): project each team member as a Claude Code subagent
449d760
Phase 2 of #2442. Every charter in .squad/agents/ (built-ins included)
becomes a managed .claude/agents/<id>.md. Charter model, reasoning effort and
the X-squad-host-claude extension (Tools, Isolation) map onto the subagent
frontmatter; config reasoning effort outranks the charter.

- managed files can carry an ownership marker: user-authored files at the same
  path are skipped (new `skipped` apply action) and never removed
- new `obsolete` projection entry removes generated files of members whose
  charter is gone, on upgrade and on rollback
- the Claude dispatch section routes to named members and applies per-spawn
  model precedence via the Agent tool's per-call model
- squad cast refreshes member files when claude is configured (local mode)
- model-selection.claude flips to supported in the host feature matrix
- spec 7.1/7.3/13 document the member files and the extension

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@bradygaster @claude
feat(claude): project skills and load coordinator sections on demand
9482975
Phase 4 of #2442. Squad's template skills are projected into
.claude/skills/<name>/SKILL.md (a team skill of the same name in
.squad/skills/ keeps precedence, so its template is not projected), with the
same ownership-marker rules as member subagents.

The Claude coordinator digest replaces core-protocol items 0 (Init Mode),
9 (Ralph), 15 (Ceremonies), 18 (Issues) and 19 (PRD) with stubs that keep each
trigger and its pre-load rules; the full item text moves verbatim into
generated squad-coordinator-* skills. Other hosts' digests and
.github/agents/squad.agent.md are unchanged. The parity tests check the Claude
digest plus its skills.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@bradygaster @claude
feat(claude): opt-in advisory governance hooks and durable reviewer l…
74fe098
…ockouts

With "claudeHooks": "advisory" in .squad/config.json, the Claude projection
adds Squad hook handlers to .claude/settings.json (SessionStart,
SubagentStart, PreToolUse, PostToolUse, Stop). They run
`squad hook claude <Event>` and only add context or warnings; none returns a
permissionDecision. User settings and hooks are preserved; turning hooks off
or rolling back restores them byte for byte.

`squad lockout` records governance-review §6 lockout state in
.squad/governance/lockouts.json, which the PreToolUse hook reads to warn a
locked-out member editing a covered path. Paths resolve through symlinks so
the hook matches on macOS temp and symlinked checkouts.

Part of #2442.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@bradygaster @claude
feat(watch): built-in Claude Code runner for squad watch --execute
e33840c
`--agent-preset claude` (or `watch.agentPreset: "claude"`) runs each round as
`claude -p <prompt> --agent squad --mcp-config .mcp.json --output-format
stream-json --verbose`. Preflight requires the projected coordinator and the
claude CLI; an error `result` event counts as a failed round. Execute mode
defaults to `--permission-mode bypassPermissions` (the counterpart of
Copilot's --yolo); `--claude-flags` overrides it. The default Copilot runner,
--agent-cmd precedence and Copilot-only fleet dispatch are unchanged.

Flips ralph-cli-triage-watch.claude to supported in the host feature matrix.

Refs #2442

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@bradygaster @claude
docs: move the Claude benchmark proposal to an issue
f7a75e8
The design and the Sonnet 5.5 calibration results now live in
#2449, so the proposal file is no longer needed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@bradygaster @claude
docs(ralph): list --agent-preset and --claude-flags in the watch flag…
6c8a0e6
…s table

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@bradygaster @claude
feat(claude): Claude projection v2 with byte-preserving rollback
8857a41
Bump the Claude Code projection once, to v2 (CLAUDE_PROJECTION_VERSION),
for member subagents, skills and the opt-in settings.json hooks. Every
generated Claude Markdown file states the version in its generated-file
note; the v1 wording stays a prefix so v1 files are still recognised as
Squad-owned and upgraded in place.

Rollback tests (harness-adapters §15.7) snapshot the whole tree and
require identical bytes after install, upgrade and rollback, including
user content in every shared file and user-authored files at generated
paths. They found that marker-block rollback (CLAUDE.md, AGENTS.md,
GEMINI.md) added or dropped a newline when the file ended without one or
with a blank line; upsertBlock and removeBlock now round-trip exactly.

Also fixes regressions from earlier phases: `squad hook` leaves the main
help (Claude Code invokes it), `lockout` fits in 80 columns, the help
budget allows it, and the Init Mode scenario tests read Claude's
coordinator together with the skills it loads.

Refs #2442

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@bradygaster
bradygaster requested a review from tamirdresher as a code owner November 10, 2026 00:25
Copilot AI dynamic review requested due to automatic review settings November 10, 2026 00:25
@github-actions

github-actions Bot commented Nov 10, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

🟠 Impact Analysis — PR #2450

Risk tier: 🟠 HIGH

📊 Summary

Metric Count
Files changed 46
Files added 19
Files modified 27
Files deleted 0
Modules touched 5
Critical files 2

🎯 Risk Factors

  • 46 files changed (21-50 → HIGH)
  • 5 modules touched (5-8 → HIGH)
  • Critical files touched: packages/squad-cli/src/cli/commands/watch/index.ts, packages/squad-sdk/src/client/adapters/index.ts

📦 Modules Affected

docs (4 files)
  • docs/specification/client-harness-adapters-v0.2.md
  • docs/src/content/docs/features/ralph.md
  • docs/src/content/docs/reference/host-feature-matrix.md
  • docs/src/content/docs/scenarios/client-compatibility.md
root (6 files)
  • .changeset/claude-governance-hooks.md
  • .changeset/claude-member-subagents.md
  • .changeset/claude-projection-v2.md
  • .changeset/claude-skills-projection.md
  • .changeset/claude-watch-preset.md
  • test-fixtures/spec/suite-v0.2/host-feature-matrix.json
squad-cli (16 files)
  • packages/squad-cli/src/cli-entry.ts
  • packages/squad-cli/src/cli/commands/cast.ts
  • packages/squad-cli/src/cli/commands/hook.ts
  • packages/squad-cli/src/cli/commands/lockout.ts
  • packages/squad-cli/src/cli/commands/watch/agent-spawn.ts
  • packages/squad-cli/src/cli/commands/watch/capabilities/decision-hygiene.ts
  • packages/squad-cli/src/cli/commands/watch/capabilities/execute.ts
  • packages/squad-cli/src/cli/commands/watch/capabilities/monitor-email.ts
  • packages/squad-cli/src/cli/commands/watch/capabilities/monitor-teams.ts
  • packages/squad-cli/src/cli/commands/watch/capabilities/retro.ts
  • packages/squad-cli/src/cli/commands/watch/claude-mcp.ts
  • packages/squad-cli/src/cli/commands/watch/config.ts
  • packages/squad-cli/src/cli/commands/watch/index.ts
  • packages/squad-cli/src/cli/commands/watch/types.ts
  • packages/squad-cli/src/cli/core/clients.ts
  • packages/squad-cli/src/cli/core/command-help.ts
squad-sdk (10 files)
  • packages/squad-sdk/src/client/adapters/adapters.ts
  • packages/squad-sdk/src/client/adapters/apply.ts
  • packages/squad-sdk/src/client/adapters/claude-hooks.ts
  • packages/squad-sdk/src/client/adapters/claude-members.ts
  • packages/squad-sdk/src/client/adapters/claude-skills.ts
  • packages/squad-sdk/src/client/adapters/coordinator.ts
  • packages/squad-sdk/src/client/adapters/index.ts
  • packages/squad-sdk/src/client/adapters/lockout.ts
  • packages/squad-sdk/src/client/adapters/safe-path.ts
  • packages/squad-sdk/src/client/adapters/types.ts
tests (10 files)
  • test/claude-hooks.test.ts
  • test/claude-members.test.ts
  • test/claude-projection-v2-rollback.test.ts
  • test/claude-skills.test.ts
  • test/claude-v2-review-fixes.test.ts
  • test/cli/watch-claude-preset.test.ts
  • test/clients.test.ts
  • test/speed-gates.test.ts
  • test/squad-20-all-scenarios.e2e.test.ts
  • test/squad-20-host-feature-matrix.test.ts

⚠️ Critical Files

  • packages/squad-cli/src/cli/commands/watch/index.ts
  • packages/squad-sdk/src/client/adapters/index.ts

This report is generated automatically for every PR. See #733 for details.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@github-actions

github-actions Bot commented Nov 10, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

🏗️ Architectural Review

Authoritative evidence: scanners from the PR base commit, posted by the default-branch workflow_run reporter.
Results for head commit c45035f542413cd9f39b869c524f1fed32d65f2b.

⚠️ Architectural review: 2 warning(s).

Severity Category Finding Files
🟡 warning bootstrap-area 2 file(s) in the bootstrap area (packages/squad-cli/src/cli/core/) were modified. These files must maintain zero external dependencies. Review carefully. packages/squad-cli/src/cli/core/clients.ts, packages/squad-cli/src/cli/core/command-help.ts
🟡 warning sweeping-refactor This PR touches 46 files (46 modified/added, 0 deleted). Large PRs are harder to review — consider splitting if possible. —

Automated architectural review — informational only.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@github-actions

github-actions Bot commented Nov 10, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

🛫 PR Readiness Check

ℹ️ This comment updates on each push. Last checked: commit c45035f

PR Scope: 📦🔧 Mixed (product + infrastructure)

⚠️ 3 item(s) to address before review

Status Check Details
❌ Single commit 15 commits — consider squashing before review
✅ Not in draft Ready for review
✅ Branch up to date Up to date with dev
❌ Copilot review No Copilot review yet — it may still be processing
✅ Changeset present Changeset file found
✅ Scope clean No .squad/ or docs/proposals/ files
✅ No merge conflicts No merge conflicts
✅ Copilot threads resolved 2 active Copilot thread(s) resolved (9 outdated skipped)
❌ CI passing 1 check(s) still running

Files Changed (46 files, +3322 −105)

File +/−
.changeset/claude-governance-hooks.md +6 −0
.changeset/claude-member-subagents.md +6 −0
.changeset/claude-projection-v2.md +5 −0
.changeset/claude-skills-projection.md +5 −0
.changeset/claude-watch-preset.md +5 −0
docs/specification/client-harness-adapters-v0.2.md +96 −5
docs/src/content/docs/features/ralph.md +40 −1
docs/src/content/docs/reference/host-feature-matrix.md +13 −13
docs/src/content/docs/scenarios/client-compatibility.md +30 −4
packages/squad-cli/src/cli-entry.ts +27 −1
packages/squad-cli/src/cli/commands/cast.ts +19 −0
packages/squad-cli/src/cli/commands/hook.ts +54 −0
packages/squad-cli/src/cli/commands/lockout.ts +95 −0
packages/squad-cli/src/cli/commands/watch/agent-spawn.ts +85 −5
packages/squad-cli/src/cli/commands/watch/capabilities/decision-hygiene.ts +2 −2
packages/squad-cli/src/cli/commands/watch/capabilities/execute.ts +28 −11
packages/squad-cli/src/cli/commands/watch/capabilities/monitor-email.ts +4 −3
packages/squad-cli/src/cli/commands/watch/capabilities/monitor-teams.ts +4 −3
packages/squad-cli/src/cli/commands/watch/capabilities/retro.ts +2 −2
packages/squad-cli/src/cli/commands/watch/claude-mcp.ts +27 −0
packages/squad-cli/src/cli/commands/watch/config.ts +60 −1
packages/squad-cli/src/cli/commands/watch/index.ts +10 −2
packages/squad-cli/src/cli/commands/watch/types.ts +9 −0
packages/squad-cli/src/cli/core/clients.ts +1 −0
packages/squad-cli/src/cli/core/command-help.ts +2 −0
packages/squad-sdk/src/client/adapters/adapters.ts +19 −1
packages/squad-sdk/src/client/adapters/apply.ts +57 −10
packages/squad-sdk/src/client/adapters/claude-hooks.ts +414 −0
packages/squad-sdk/src/client/adapters/claude-members.ts +238 −0
packages/squad-sdk/src/client/adapters/claude-skills.ts +87 −0
packages/squad-sdk/src/client/adapters/coordinator.ts +95 −2
packages/squad-sdk/src/client/adapters/index.ts +2 −0
packages/squad-sdk/src/client/adapters/lockout.ts +329 −0
packages/squad-sdk/src/client/adapters/safe-path.ts +52 −0
packages/squad-sdk/src/client/adapters/types.ts +23 −5
test-fixtures/spec/suite-v0.2/host-feature-matrix.json +24 −19
test/claude-hooks.test.ts +332 −0
test/claude-members.test.ts +232 −0
test/claude-projection-v2-rollback.test.ts +145 −0
test/claude-skills.test.ts +111 −0
test/claude-v2-review-fixes.test.ts +241 −0
test/cli/watch-claude-preset.test.ts +236 −0
test/clients.test.ts +35 −9
test/speed-gates.test.ts +2 −2
test/squad-20-all-scenarios.e2e.test.ts +12 −3
test/squad-20-host-feature-matrix.test.ts +1 −1

Total: +3322 −105


This check runs automatically on every push. Fix any ❌ items and push again.
See CONTRIBUTING.md and PR Requirements for details.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

Copilot started reviewing on behalf of bradygaster November 10, 2026 00:26
View session
github-advanced-security[bot]
github-advanced-security AI found potential problems Nov 10, 2026
View reviewed changes
Comment thread packages/squad-sdk/src/client/adapters/claude-hooks.ts
}

/** The hook launch command: the MCP launcher with its trailing `state-mcp` replaced. */
export function claudeHookLaunch(mcp: McpLaunchSpec, event: ClaudeHookEvent): McpLaunchSpec | null {

@bradygaster bradygaster Nov 10, 2026

Copy link
Copy Markdown
Collaborator Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not changed; leaving this open for a human reviewer. mcp here isn't read from repository content. The running CLI resolves it from its own install (resolveSquadStateMcpSpec): a standalone launcher, node <absolute path>/cli-entry.js, or npx with the exact @bradygaster/squad-cli version. The hook command is that same launcher with state-mcp swapped for hook claude <Event>, and the identical command is already projected into .mcp.json as the squad_state server Claude Code runs, so hooks add no new executable. The suggested allowlist (only squad or a pinned npx package) would also turn hooks off for the common node …/cli-entry.js and standalone installs. I've documented this in a comment on claudeHookLaunch (0653a37).

🤖 Addressed by Claude Code

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread packages/squad-sdk/src/client/adapters/claude-hooks.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

@bradygaster @claude
fix(claude): US spelling in spec; keep tool free text out of hook con…
0653a37
…text

- docs lint (cspell) rejected "recognises" in harness-adapters §5.
- PostToolUse no longer reflects the Agent call's free-text description
  into the coordinator's context; the handoff envelope keeps only
  structured fields (review feedback on #2450).
- Document why claudeHookLaunch has no command allowlist: the launcher is
  resolved by the CLI from its own install, never from repo content, and
  is already projected as the squad_state MCP server.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Copilot AI reviewed Nov 10, 2026
View reviewed changes

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved security flaws allow repository-controlled symlinks to expose private files or modify external governance state, while the Claude MCP configuration bypasses server approval and enables unapproved command execution.

11 open issues
  • High severity Protect lockout read-modify-write with an interprocess transaction · New
  • High severity Avoid bypassing approval for repository-controlled MCP servers · New
  • High severity Reject symlinked SKILL.md files outside the workspace · New
  • High severity Reject skill templates that resolve outside the team directory · New
  • High severity Reject symlinked governance directories outside the workspace · New
  • Medium severity Do not parse --json as the lockout status subject · New
  • Medium severity Validate Claude result events in the generic runner · New
  • Medium severity Preserve settings files when hook projection makes no changes · New
  • Medium severity Emit completion envelopes when background agents finish · New
  • Medium severity Preserve individually backticked tool names during parsing · New
  • Medium severity Exclude reviewer-only built-ins from revision author pools · New
What changed in this PR

Introduces Claude projection v2 with native member subagents, on-demand skills, advisory governance hooks, and a built-in Claude watch runner. Copilot remains the default runner.

Changes:

  • Projects member charters and coordinator guidance into Claude-native agents and skills.
  • Adds opt-in governance hooks and persistent reviewer-lockout commands.
  • Adds the Claude watch preset and extends projection ownership, rollback coverage, and documentation.

This pull request requires changes. Unresolved security and correctness findings block approval, including unsafe source/configuration handling, lockout integrity, and unintended changes to user settings.

File Description
test/​squad-20-host-feature-matrix.test.ts Updates host-specific capability-gap assertions.
test/​squad-20-all-scenarios.e2e.test.ts Includes on-demand skills in coordinator contract checks.
test/​speed-gates.test.ts Adjusts the help-length budget for lockout commands.
test/​clients.test.ts Extends coordinator, model-selection, and marker-newline coverage.
test/​cli/​watch-claude-preset.test.ts Covers runner configuration, invocation, and failure detection.
test/​claude-skills.test.ts Covers skill projection, precedence, ownership, and cleanup.
test/​claude-projection-v2-rollback.test.ts Adds version-stamping, upgrade, and whole-tree rollback checks.
test/​claude-members.test.ts Covers charter mapping and member-agent lifecycle.
test/​claude-hooks.test.ts Covers hook merging, runtime behavior, and lockout transitions.
test-fixtures/​spec/​suite-v0.2/​host-feature-matrix.json Updates Claude capability statuses and supporting evidence.
packages/​squad-sdk/​src/​client/​adapters/​types.ts Extends projection ownership, removal, and skipped-result types.
packages/​squad-sdk/​src/​client/​adapters/​lockout.ts Implements persistent reviewer-lockout state and revision transitions.
packages/​squad-sdk/​src/​client/​adapters/​index.ts Exports hook and lockout APIs.
packages/​squad-sdk/​src/​client/​adapters/​coordinator.ts Adds named-member dispatch and extracts on-demand guidance.
packages/​squad-sdk/​src/​client/​adapters/​claude-skills.ts Projects template and coordinator skills and prunes obsolete files.
packages/​squad-sdk/​src/​client/​adapters/​claude-members.ts Compiles charters and host settings into member subagents.
packages/​squad-sdk/​src/​client/​adapters/​claude-hooks.ts Projects advisory hook settings and processes lifecycle events.
packages/​squad-sdk/​src/​client/​adapters/​apply.ts Adds ownership-aware updates, JSON removal, and newline-preserving blocks.
packages/​squad-sdk/​src/​client/​adapters/​adapters.ts Assembles and versions the expanded Claude projection.
packages/​squad-cli/​src/​cli/​core/​command-help.ts Documents Claude watch flags.
packages/​squad-cli/​src/​cli/​core/​clients.ts Reports skipped user-authored projection files.
packages/​squad-cli/​src/​cli/​commands/​watch/​types.ts Adds runner-preset and Claude flag fields.
packages/​squad-cli/​src/​cli/​commands/​watch/​index.ts Propagates runner settings into watch execution.
packages/​squad-cli/​src/​cli/​commands/​watch/​config.ts Loads and validates runner configuration and permission defaults.
packages/​squad-cli/​src/​cli/​commands/​watch/​capabilities/​monitor-teams.ts Adds Claude CLI preflight support for Teams monitoring.
packages/​squad-cli/​src/​cli/​commands/​watch/​capabilities/​monitor-email.ts Adds Claude CLI preflight support for email monitoring.
packages/​squad-cli/​src/​cli/​commands/​watch/​capabilities/​execute.ts Integrates Claude coordinator execution and result validation.
packages/​squad-cli/​src/​cli/​commands/​watch/​agent-spawn.ts Builds Claude invocations and parses stream-result events.
packages/​squad-cli/​src/​cli/​commands/​lockout.ts Adds lockout-management and status commands.
packages/​squad-cli/​src/​cli/​commands/​hook.ts Provides the Claude advisory-hook CLI entry point.
packages/​squad-cli/​src/​cli/​commands/​cast.ts Refreshes Claude projections after local casting.
packages/​squad-cli/​src/​cli-entry.ts Registers hook/lockout commands and parses runner flags.
docs/​src/​content/​docs/​scenarios/​client-compatibility.md Documents Claude agents, skills, hooks, and watch usage.
docs/​src/​content/​docs/​reference/​host-feature-matrix.md Refreshes generated Claude capability documentation.
docs/​src/​content/​docs/​features/​ralph.md Documents the Claude runner and configuration flags.
docs/​specification/​client-harness-adapters-v0.2.md Defines projection v2, governance, and ownership contracts.
.changeset/​claude-watch-preset.md Announces the Claude watch runner.
.changeset/​claude-skills-projection.md Announces native skills and coordinator slimming.
.changeset/​claude-projection-v2.md Records projection versioning and marker rollback changes.
.changeset/​claude-member-subagents.md Announces charter-based member subagents.
.changeset/​claude-governance-hooks.md Announces advisory hooks and lockout commands.

Review effort: Max (auto)

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread packages/squad-cli/src/cli/commands/lockout.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-cli/src/cli/commands/watch/agent-spawn.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-sdk/src/client/adapters/claude-skills.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-sdk/src/client/adapters/claude-skills.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-sdk/src/client/adapters/lockout.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-cli/src/cli/commands/watch/agent-spawn.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-sdk/src/client/adapters/apply.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-sdk/src/client/adapters/claude-hooks.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-sdk/src/client/adapters/claude-members.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-sdk/src/client/adapters/lockout.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

github-advanced-security[bot]
github-advanced-security AI found potential problems Nov 10, 2026
View reviewed changes
Comment thread packages/squad-sdk/src/client/adapters/claude-hooks.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-cli/src/cli/commands/watch/config.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

bradygaster and others added 2 commits November 9, 2026 16:47
@bradygaster @claude
fix(claude): address review of Claude projection v2
2355078
Security:
- watch Claude preset no longer passes the repository's .mcp.json (which
  bypassed Claude Code's approval for every server in it); it writes a
  private squad_state-only config resolved by the CLI from its own install.
- Charters, routing.md and template SKILL.md files that resolve outside the
  team directory through a symlink are no longer copied into .claude/.
- The lockout store refuses a governance/ path that resolves outside the
  team directory, and replaces (never writes through) a lockouts.json link.

Correctness:
- squad lockout reads, transitions and writes under an interprocess lock,
  so concurrent commands keep every transition.
- `squad lockout status --json` no longer treats --json as the subject.
- Rai and Fact Checker are not offered as revision authors.
- Monitor, retro and decision-hygiene Claude runs fail on an error result
  event, like execute.
- A no-op settings.json update keeps the user's bytes (`{}` is no longer
  deleted when hooks are off).
- PostToolUse reports a background Agent launch as an acknowledgement,
  not a result.
- Individually backticked member Tools (`Read`, `Grep`) are accepted.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@bradygaster @claude
fix(claude): pass lockout text to hook context as inert data
d23f573
Lockout fields come from a repository file and from free text typed with
`squad lockout`. Before they reach the coordinator (SessionStart,
SubagentStart, PreToolUse, PostToolUse) they are flattened to one line,
stripped of markup and code delimiters, bounded, and the reason is quoted as
a JSON string; member IDs that are not a-z0-9- are dropped (code scanning
review on #2450).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
github-advanced-security[bot]
github-advanced-security AI found potential problems Nov 10, 2026
View reviewed changes
Comment thread packages/squad-cli/src/cli/commands/watch/agent-spawn.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-sdk/src/client/adapters/claude-hooks.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

@bradygaster @claude
fix(watch): limit repository-supplied claudeFlags to safe flags
27fd4ec
`.squad/config.json` belongs to the repository, so `watch.claudeFlags` from
that file could add `--mcp-config .mcp.json` (or settings, plugins, extra
directories, another agent) and undo the Claude preset's squad_state-only
MCP config during unattended runs. The file may now set only
--permission-mode, --model, --fallback-model, --effort, --max-turns and the
allowed/disallowed tool lists, with validated values; anything else fails
config loading with a clear error. --claude-flags on the command line is
the user's own and stays unrestricted (code scanning review on #2450).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
github-advanced-security[bot]
github-advanced-security AI found potential problems Nov 10, 2026
View reviewed changes
Comment thread packages/squad-sdk/src/client/adapters/claude-hooks.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-cli/src/cli/commands/watch/config.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

@bradygaster @claude
fix(claude): pass routing, roles and circuit models to hook context a…
0ee75de
…s data

SessionStart context included routing.md work types, charter roles and the
Ralph circuit breaker's model names verbatim; all are repository text. They
now go through the same inert() handling as lockout fields: work types and
model names are quoted, roles flattened, and routes name only roster
members. Charters are read with the team-directory containment guard
(code scanning review on #2450).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
github-advanced-security[bot]
github-advanced-security AI found potential problems Nov 10, 2026
View reviewed changes
Comment thread packages/squad-cli/src/cli/commands/watch/config.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-sdk/src/client/adapters/claude-hooks.ts
to: [...new Set(ids(r.routeTo.toLowerCase().split(/[\s,/&+]+/).map((t) => t.replace(/^@/, ''))).filter((id) => known.has(id)))],
}))
.filter((r) => r.work && r.to.length > 0);
if (routes.length > 0) lines.push(`Routing (work type, as written → member): ${routes.map((r) => `${JSON.stringify(r.work)} → ${r.to.join(', ')}`).join('; ')}.`);

@bradygaster bradygaster Nov 10, 2026

Copy link
Copy Markdown
Collaborator Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not changed; leaving this open for a human reviewer. The Squad coordinator is designed to read routing.md, member charters and team.md from the repository, because that's how it routes work, so the hook context adds no capability it lacks. It's a short summary of the same files, and since 0ee75de and d23f573 every free-text field in it is flattened, stripped of markup and code delimiters, length-capped and quoted as a JSON string. Routes name only roster members, and IDs are checked against a-z0-9-. Dropping roles, work types and the reviewer's reason would remove information the coordinator needs (the reason tells the successor what to fix) without removing any attack path.

🤖 Addressed by Claude Code

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@bradygaster @claude
fix(watch): keep tool lists out of repository-supplied claudeFlags
5ede254
Tool-list flags (--allowedTools, --disallowedTools and their dashed forms)
can widen what Claude Code may run, so watch.claudeFlags in
.squad/config.json may no longer set them; they must come from
--claude-flags on the command line (code scanning review on #2450).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
github-advanced-security[bot]
github-advanced-security AI found potential problems Nov 10, 2026
View reviewed changes
Comment thread packages/squad-cli/src/cli/commands/watch/config.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread packages/squad-sdk/src/client/adapters/claude-hooks.ts
to: [...new Set(ids(r.routeTo.toLowerCase().split(/[\s,/&+]+/).map((t) => t.replace(/^@/, ''))).filter((id) => known.has(id)))],
}))
.filter((r) => r.work && r.to.length > 0);
if (routes.length > 0) lines.push(`Routing (work type, as written → member): ${routes.map((r) => `${JSON.stringify(r.work)} → ${r.to.join(', ')}`).join('; ')}.`);

@bradygaster bradygaster Nov 10, 2026

Copy link
Copy Markdown
Collaborator Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same finding as the open thread on this line (comment 4519849501), and the same answer: the coordinator reads routing.md and the charters directly by design. The hook context is a quoted, flattened, length-capped summary of those files, and routes name only roster members. I'm leaving it open alongside that thread for a human reviewer.

🤖 Addressed by Claude Code

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@bradygaster @claude
docs(matrix): re-evaluate gh-aw.claude now that gh-aw has a Claude en…
0498121
…gine

The cell stays n/a (the workflows run in GitHub Actions, so the local host
is irrelevant), but the mechanism no longer implies Copilot is the only
engine: gh-aw ships `engine: claude`, Squad does not ship a workflow for it
yet, and the notes record what one would need (`engine.args` with
`--agent squad`, `bare: false`) with a link to the #2438 research.

Refs #2442

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This was referenced Nov 10, 2026
Claude host PR 3: Claude projection v2 (member subagents, skills, hooks, watch preset) (#2438 Phases 2, 3, 4, 6) #2442
Closed
Claude host PR 2: Claude Agent SDK HarnessAdapter (#2438 Phase 1) #2441
Open
github-advanced-security[bot]
github-advanced-security AI found potential problems Nov 10, 2026
View reviewed changes
Comment thread packages/squad-sdk/src/client/adapters/claude-hooks.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

@bradygaster @claude
fix(claude): hook roster lists only valid member IDs
c45035f
Directory names under .squad/agents/ reached SessionStart context as-is;
names outside a-z0-9- are now ignored, matching member IDs elsewhere
(code scanning review on #2450).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
github-advanced-security[bot]
github-advanced-security AI found potential problems Nov 10, 2026
View reviewed changes
Comment thread packages/squad-sdk/src/client/adapters/claude-members.ts
// individually quoted names (`Read`, `Grep`) is left for the per-token pass.
const value = m[2]!.trim().replace(/^`([^`]*)`$/, '$1');
if (label === 'tools') {
const tools = value.split(',').map((t) => t.trim().replace(/^`(.*)`$/, '$1')).filter(Boolean);

@bradygaster bradygaster Nov 10, 2026

Copy link
Copy Markdown
Collaborator Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not changed; leaving this open for a human reviewer. In a Claude Code subagent file, tools: is an allowlist that narrows the session's tools. A subagent without it inherits every tool the session has, so - **Tools:** Bash can only restrict a member, never grant more than it would get by default. Permission to actually run a tool is still decided by the session's permission mode and rules; per charter §13.1 these fields are runtime config, not authorization. Invalid names are already rejected and reported (TOOL_RE), and an empty or rejected list falls back to inheriting. Limiting the allowed values to a fixed list of "safe" tools would only stop teams from narrowing their members (for example a read-only Scribe).

🤖 Addressed by Claude Code

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@bradygaster
bradygaster merged commit 344705b into dev Nov 10, 2026
31 checks passed

Uh oh!

There was an error while loading. Please reload this page.

bradygaster added a commit that referenced this pull request Nov 10, 2026
@bradygaster @claude
Merge origin/dev (#2450 Claude projection v2) into squad/2441-claude-…
2fb5cbc
…agent-sdk-harness

The only conflict was the generated host-feature-matrix.md; it is
regenerated from the auto-merged matrix JSON, which keeps both sides
(experimental-backend.copilot validated-live with its live run, and
ralph-cli-triage-watch.claude supported from #2450).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This was referenced Nov 10, 2026
Ralph mode: approval gates before push, PR and merge actions #2465
Open
Epic: Claude Code as a first-class Squad 2.0 host, and the non-Copilot host that promotes the v0.2 profiles #2438
Open
Claude Code host: remaining work before 2.0 (#2438) #2469
Open
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

Copilot code review Copilot
Copilot review effort
Applies to this pull request for everyone.Learn more about Copilot code review.
Copilot left review comments
@tamirdresher tamirdresher Awaiting requested review from tamirdresher tamirdresher is a code owner
+1 more reviewer
@github-advanced-security github-advanced-security[bot] github-advanced-security[bot] left review comments
Reviewers whose approvals may not affect merge requirements

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Claude host PR 3: Claude projection v2 (member subagents, skills, hooks, watch preset) (#2438 Phases 2, 3, 4, 6)

Uh oh!

There was an error while loading. Please reload this page.

3 participants

@bradygaster @github-advanced-security
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.