Skip to content

AWF v0.18.0 chroot makes /home/runner/.claude.json unwritable, Claude Code exits silently #16214

@mstrathman

Description

@mstrathman

Summary

AWF v0.18.0 introduces a regression where /home/runner/.claude.json is bind-mounted or protected in the chroot, preventing Claude Code from writing its config file. Claude Code crashes silently on startup with zero tool calls executed.

This is the same class of bug as #13979 (Copilot home directory ownership).

Reproduction

Any workflow compiled with AWF v0.18.0 that uses Claude as the engine will fail. The agent starts, attempts to write .claude.json, gets EBUSY on atomic rename followed by EACCES on direct write, then exits with code 0 (silent failure).

Workaround: Recompile with gh-aw v0.43.23 which targets AWF v0.17.0.

Evidence

AWF v0.17.0 — Working

  • agent-stdio.log: 625 lines
  • 5 MCP tool calls executed (3x pull_request_read, 1x create_pull_request_review_comment, 1x submit_pull_request_review)
  • .claude.json write: ENOENT (file didn't exist) → created successfully → agent proceeds normally

AWF v0.18.0 — Broken

  • agent-stdio.log: 168 lines (just infra setup/teardown)
  • 0 MCP tool calls executed
  • No safe outputs produced
  • MCP gateway started successfully (GitHub + safe outputs servers connected)

Reverting to AWF v0.17.0 — Working again

  • Recompiled with gh-aw v0.43.23 (AWF v0.17.0), same workflows work again

Crash trace from agent-stdio.log (AWF v0.18.0)

[entrypoint] Chroot working directory: /home/runner/work/contextual/contextual
[entrypoint] Running as host user: runner (UID: 1001)
2026-02-16T19:33:42.120Z [DEBUG] Writing to temp file: /home/runner/.claude.json.tmp.137.1771270422120
2026-02-16T19:33:42.120Z [DEBUG] Preserving file permissions: 100644
2026-02-16T19:33:42.121Z [DEBUG] Temp file written successfully, size: 50 bytes
2026-02-16T19:33:42.121Z [DEBUG] Applied original permissions to temp file
2026-02-16T19:33:42.121Z [DEBUG] Renaming /home/runner/.claude.json.tmp.137.1771270422120 to /home/runner/.claude.json
2026-02-16T19:33:42.121Z [DEBUG] Failed to write file atomically: Error: EBUSY: resource busy or locked, rename '...' -> '/home/runner/.claude.json'
2026-02-16T19:33:42.121Z [DEBUG] Falling back to non-atomic write for /home/runner/.claude.json
2026-02-16T19:33:42.121Z [DEBUG] Non-atomic write also failed: Error: EACCES: permission denied, open '/home/runner/.claude.json'
2026-02-16T19:33:42.122Z [ERROR] Failed to save config with lock: Error: EACCES: permission denied, open '/home/runner/.claude.json'

The error repeats twice, then Claude Code exits silently (exit code 0). The MCP gateway was ready and waiting but never received any requests.

Environment

  • gh-aw CLI: v0.45.0 (also reproduced with v0.44.0)
  • Claude Code: 2.1.42 (also reproduced with 2.1.39 via version pin)
  • AWF v0.18.0: broken
  • AWF v0.17.0: working
  • Runner: GitHub-hosted ubuntu-latest

Additional context

  • AWF v0.17.0 → v0.18.0 transition happened in gh-aw v0.44.0
  • The aw_info.json from broken runs confirms awf_version: "v0.18.0"
  • MCPG version (v0.1.4) and GitHub MCP Server version (v0.30.3) are identical between working and broken runs
  • The artifact upload step also shows EACCES on MCP log files, suggesting broader permission issues in the v0.18.0 chroot

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions