Skip to content

idea: snapshot PR-modified .claude/ config before automated review — inspired by claude-code-action's .claude-pr/ pattern #842

Description

@github-actions

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    blockedBlocked on a dependencygenerated:analystAnalyst agent–generated improvement idea (analyst-daily-review)needs-humansecurityspec:draftSpec being drafted

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions