add_repo(access:push) 토큰이 실제로는 read-only — git push 403 (owner 계정 소유 public repo)
Environment: Claude Code Remote (CCR) / Claude Code on the web
Repo: teoteobak-commits/shortsbox (public, owner-owned)
Action: add_repo tool called with access: "push" — tool responded that push credentials were attached ("attached with credentials after the full repository-access checks").
Actual result: git push to https://github.com/teoteobak-commits/shortsbox fails with HTTP 403. Full server response body (not just the summary line):
Permission to teoteobak-commits/shortsbox.git denied to teoteobak-commits.
Diagnostics already ruled out:
- Not a proxy/network block: CONNECT tunnel to github.com succeeds,
/__agentproxy/statusshowsrecentRelayFailures: []. - Not transient: retried 4x with backoff, same result.
- Identity is correctly resolved as the repo owner, so a credential IS being injected — it simply lacks write scope.
- Tried explicit
-c http.extraheader="Authorization: Bearer $GITHUB_TOKEN"and SSH-form remote (git@github.com:...) — identical 403 in both cases. - Checked the GitHub account's own authorization surfaces — Installed GitHub Apps, Authorized GitHub Apps, and Authorized OAuth Apps all show no Claude/Anthropic entry whatsoever. So there is no user-facing GitHub permission screen where write access could be granted/upgraded — the credential CCR uses doesn't surface in the account's normal GitHub authorization UI.
- Separately,
$GITHUB_TOKENin the session env authenticates asteoteobak-commits(GET /user→ 200) but returns 403 even reading unrelated public repos (e.g.anthropics/claude-code), suggesting it's a narrowly-scoped fine-grained PAT, not a general-purpose credential.
Expected: add_repo(access:"push") should yield a token with contents:write (or equivalent) for a repo the calling user owns.
Impact: Any CCR workflow that generates a file and needs to commit+push it (e.g. daily automation writing to a repo) silently fails at the push step despite the tool reporting success on the access grant