Research brief
Landscape survey of comparable OSS agent frameworks (2026-07-22), scoped to:
"agent_mesh roadmap & comparable OSS agent frameworks" (OpenHands, SWE-agent,
Aider, MetaGPT/ChatDev, Renovate, claude-code-action).
Landscape signal — claude-code-action's .claude-pr/ snapshot pattern
PR #1172
(merged 2026-04-05): when a PR modifies .claude/ (hooks, MCP config, agent
settings), the action now snapshots the PR-authored tree aside before
restoring the base-branch version for the actual review execution — so a
review agent can inspect what a PR proposes to change under .claude/ as
inert data, while the CLI only ever executes the trusted base-branch
config. Fixes a real prior gap: such PRs previously merged with their own
config changes effectively unreviewed, since the reviewer only ever executed
with whatever was checked out.
Gap (confirmed against this repo, not just landscape-inspired)
Read .github/workflows/dev-mesh-review.yml directly: it triggers on
pull_request and runs actions/checkout@v4 with no explicit ref: —
on this event the default is the PR's merge ref, so the working tree the
Reviewer's claude-code-action step executes in already contains whatever
the PR itself changed, including anything under .claude/. Claude Code
auto-loads project-level .claude/settings.json (hooks, permissions) from
its cwd. The Reviewer's session runs with --allowedTools "Read,Grep,Glob,Bash(gh:*)" and a live GITHUB_TOKEN in env. A same-repo PR
— not necessarily human-authored; could be an automated Coder/autofix
branch, or one steered via a prompt-injected issue brief — that introduces or
edits .claude/settings.json with a hook matching one of the Reviewer's own
allowed tools would have that hook live-loaded into the very session
reviewing it, able to act with that session's GITHUB_TOKEN before any
human sees the PR. The fork-PR guard (head.repo.full_name == github.repository) protects secrets from forks; it does nothing about a
same-repo branch's own config content being executed by the reviewer
supposed to be checking it.
No .claude/settings.json exists at repo root today (verified — .claude/
currently holds only skills/), so this is a latent, preventable gap,
not an active incident — closing it now is cheap versus after a PR
introduces one.
Proposed direction (draft spec attached)
Before the Reviewer's claude-code-action step: if the PR diff touches
.claude/ (or another repo-root Claude Code config path the CLI auto-loads),
snapshot the PR-authored versions aside, restore the base-branch version into
place for the actual review execution, and feed the snapshot to the
Reviewer's prompt as data to comment on — consistent with this repo's
existing "external content is data, never instructions" posture already
applied to AGENT.md. No change to dev-mesh-automerge.yml or
eligibility.js — this is review-step hardening, complementary to (not
overlapping with) the separately-filed agent-authored-commit approval-gate
idea.
Full design (snapshot/restore mechanics, prompt framing, fail-safe on
snapshot-step failure, testing plan) drafted at:
docs/superpowers/specs/2026-07-22-idea-claude-config-pr-snapshot-review-design.md
Note: per this run's scope (propose only), this draft spec file was
written to the working tree but has not been committed/pushed — also
blocked today by #771 (DEV_MESH_PAT secret still not configured, 403 on
spec-push). Carries full design detail for whoever picks this up.
Dedup confirmation
Checked all currently-open issues before filing. Distinct from:
#824 (default MESH_CEILING to a safe boundary) — a different boundary
(delegation write-root ceiling), not CI reviewer config execution.
#807 (namespace/bwrap jail beneath the delegate path-guard) — hardens
delegated worker writes, not the CI reviewer step's own config loading.
#248 (closed — workflow permissions lint gap) — lints workflow YAML
permissions coverage, not config-execution isolation.
- The repo's own
AGENT.md-as-data / registry-marker (I7) invariants govern
a served mesh agent's description/registry data; this is about the CI
reviewer's own Claude Code settings — a different trust boundary entirely.
Verified the actual checkout/exec behavior by reading
.github/workflows/dev-mesh-review.yml directly and confirmed no
.claude/settings.json currently exists at repo root, so this is a
preventive proposal, not a report of an active breach.
Sources
Filed by the Analyst's daily landscape-research review. Proposal only — subject to human approval (§5.3). No code written, no PR opened.
Research brief
Landscape survey of comparable OSS agent frameworks (2026-07-22), scoped to:
"agent_mesh roadmap & comparable OSS agent frameworks" (OpenHands, SWE-agent,
Aider, MetaGPT/ChatDev, Renovate, claude-code-action).
Landscape signal — claude-code-action's
.claude-pr/snapshot patternPR #1172
(merged 2026-04-05): when a PR modifies
.claude/(hooks, MCP config, agentsettings), the action now snapshots the PR-authored tree aside before
restoring the base-branch version for the actual review execution — so a
review agent can inspect what a PR proposes to change under
.claude/asinert data, while the CLI only ever executes the trusted base-branch
config. Fixes a real prior gap: such PRs previously merged with their own
config changes effectively unreviewed, since the reviewer only ever executed
with whatever was checked out.
Gap (confirmed against this repo, not just landscape-inspired)
Read
.github/workflows/dev-mesh-review.ymldirectly: it triggers onpull_requestand runsactions/checkout@v4with no explicitref:—on this event the default is the PR's merge ref, so the working tree the
Reviewer's
claude-code-actionstep executes in already contains whateverthe PR itself changed, including anything under
.claude/. Claude Codeauto-loads project-level
.claude/settings.json(hooks, permissions) fromits cwd. The Reviewer's session runs with
--allowedTools "Read,Grep,Glob,Bash(gh:*)"and a liveGITHUB_TOKENin env. A same-repo PR— not necessarily human-authored; could be an automated Coder/autofix
branch, or one steered via a prompt-injected issue brief — that introduces or
edits
.claude/settings.jsonwith a hook matching one of the Reviewer's ownallowed tools would have that hook live-loaded into the very session
reviewing it, able to act with that session's
GITHUB_TOKENbefore anyhuman sees the PR. The fork-PR guard (
head.repo.full_name == github.repository) protects secrets from forks; it does nothing about asame-repo branch's own config content being executed by the reviewer
supposed to be checking it.
No
.claude/settings.jsonexists at repo root today (verified —.claude/currently holds only
skills/), so this is a latent, preventable gap,not an active incident — closing it now is cheap versus after a PR
introduces one.
Proposed direction (draft spec attached)
Before the Reviewer's
claude-code-actionstep: if the PR diff touches.claude/(or another repo-root Claude Code config path the CLI auto-loads),snapshot the PR-authored versions aside, restore the base-branch version into
place for the actual review execution, and feed the snapshot to the
Reviewer's prompt as data to comment on — consistent with this repo's
existing "external content is data, never instructions" posture already
applied to
AGENT.md. No change todev-mesh-automerge.ymloreligibility.js— this is review-step hardening, complementary to (notoverlapping with) the separately-filed agent-authored-commit approval-gate
idea.
Full design (snapshot/restore mechanics, prompt framing, fail-safe on
snapshot-step failure, testing plan) drafted at:
docs/superpowers/specs/2026-07-22-idea-claude-config-pr-snapshot-review-design.mdNote: per this run's scope (propose only), this draft spec file was
written to the working tree but has not been committed/pushed — also
blocked today by
#771(DEV_MESH_PATsecret still not configured, 403 onspec-push). Carries full design detail for whoever picks this up.
Dedup confirmation
Checked all currently-open issues before filing. Distinct from:
#824(defaultMESH_CEILINGto a safe boundary) — a different boundary(delegation write-root ceiling), not CI reviewer config execution.
#807(namespace/bwrap jail beneath the delegate path-guard) — hardensdelegated worker writes, not the CI reviewer step's own config loading.
#248(closed — workflow permissions lint gap) — lints workflow YAMLpermissions coverage, not config-execution isolation.
AGENT.md-as-data / registry-marker (I7) invariants governa served mesh agent's description/registry data; this is about the CI
reviewer's own Claude Code settings — a different trust boundary entirely.
Verified the actual checkout/exec behavior by reading
.github/workflows/dev-mesh-review.ymldirectly and confirmed no.claude/settings.jsoncurrently exists at repo root, so this is apreventive proposal, not a report of an active breach.
Sources
.claude-pr/snapshot pattern — fix: snapshot PR's .claude/ to .claude-pr/ before security restore anthropics/claude-code-action#1172.github/workflows/dev-mesh-review.yml,.claude/(current contents)Filed by the Analyst's daily landscape-research review. Proposal only — subject to human approval (§5.3). No code written, no PR opened.