From 37e247176cb37e15f25622bdbdc6b03931ff3d9b Mon Sep 17 00:00:00 2001 From: hathach Date: Tue, 30 Jun 2026 17:14:29 +0700 Subject: ci(claude-review): allowlist Write too (review writes a helper script) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The log shows two gated tools, not one: compound Bash pipelines AND Write — the review tried to drop check_headings.py (at /tmp, then the workdir, both denied). Add Write to the allowlist. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/claude-code-review.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/claude-code-review.yml b/.github/workflows/claude-code-review.yml index 18659e2c7..a9b026bfd 100644 --- a/.github/workflows/claude-code-review.yml +++ b/.github/workflows/claude-code-review.yml @@ -53,14 +53,15 @@ jobs: # TEMPORARY: expose the full Claude transcript in the Actions log for # debugging. Revert to remove once done. show_full_output: true - # The review's only blocked calls were COMPOUND Bash commands (sed/python/ - # grep pipelines): default permission mode splits a multi-op command and - # gates the parts not on its allowlist. Bare `Bash` allows them all; - # Read/Grep/Glob/Task already run un-prompted. Safe here (unlike claude.yml): - # same-repo-only + contents:read token that cannot push. + # The headless review was blocked on two tools: compound Bash pipelines + # (sed/python/grep) and Write (it dropped a check_headings.py helper to + # inspect the diff). Default permission mode gates both; Read/Grep/Glob/ + # Task already run un-prompted. Allowlist them. Safe here (unlike + # claude.yml's fork-exposed @claude job): same-repo-only + contents:read + # token, so any write is ephemeral and nothing can be pushed. claude_args: | --max-turns 50 --model claude-opus-4-8 --effort max - --allowedTools Bash + --allowedTools Bash,Write # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md -- cgit v1.3.1