scrum4me-mcp PR #26 voegde een PostToolUse-hook toe (.claude/settings.json
+ scripts/persist-job-usage.ts) die per job tokenusage uit het lokale
Claude Code transcript leest en op claude_jobs schrijft. In de container
draait Claude Code echter met cwd=/opt/agent en HOME=/home/agent — daar
zoekt 't naar .claude/settings.json. De file van /opt/scrum4me-mcp/.claude
wordt dus nooit ingelezen zonder een explicit copy.
Twee aanpassingen:
1. RUN-step kopieert /opt/scrum4me-mcp/.claude/settings.json naar
/home/agent/.claude/settings.json (user-scope, fireert ongeacht cwd).
2. ENV SCRUM4ME_MCP_DIR=/opt/scrum4me-mcp zodat het hook-commando
(`tsx ${SCRUM4ME_MCP_DIR:-$CLAUDE_PROJECT_DIR}/scripts/persist-job-usage.ts`)
het script vindt vanuit elke cwd.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drie kleine fixes zodat de container ook op niet-NAS hosts (Mac M2,
Windows i7) zonder gedoe gebouwd kan worden.
- Dockerfile: vervang `groupadd -g ${AGENT_GID}` door een idempotent
blok dat een bestaande UID/GID hernoemt. Op macOS conflicteert GID 20
(staff) met dialout in Ubuntu base — `groupadd: GID '20' already exists`.
- .env.example: quote `GIT_AUTHOR_NAME` waarde. QNAP Container Station's
env-parser is strict en weigert `KEY=value with space` zonder quotes.
- .gitignore: voeg `*.tar`/`*.tar.gz` toe — de output van `docker save`
die voor NAS-import naar de share wordt gekopieerd hoort niet in git.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fixes the 'no GitHub credentials' deadlock observed in the first
NAS-Docker batch run (2 May 2026): scrum4me-mcp's `wait_for_job`
expects a local clone at `~/Projects/<repo-name>` (convention-fallback
in resolveRepoRoot) but the container had no credentials and no clone.
Agent asked the user how to proceed; turn closed without claim.
Changes:
- `.env.example`: GH_TOKEN (fine-grained PAT, repo+PR scope) and
GH_PRECLONE_REPOS (comma-separated owner/name list, default covers
Scrum4Me + scrum4me-mcp).
- `bin/repo-bootstrap.sh` (new): runs as agent-user; configures git
credential-helper with HTTPS oauth2 token, then clones-or-fetches
each entry in GH_PRECLONE_REPOS into ~/Projects/<name>. Idempotent.
- `bin/entrypoint.sh`: hooks repo-bootstrap before run-agent.sh.
- `Dockerfile`:
- installs `gh` CLI (used for auto_pr `gh pr create`; reads GH_TOKEN
from env directly).
- pre-creates `~agent/Projects` and `~agent/.scrum4me-agent-worktrees`
so directory-ownership is right from the first boot.
- `README.md`: 'Repo bootstrap (clone-on-start)' section + GH_TOKEN
step in the deploy checklist; corrects the obsolete 'no push
credentials' note (agent now pushes feature-branches, gh creates PRs).
Same token covers clone, push and PR-creation — one secret to rotate.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drie fixes om de container lokaal (en op de NAS) te kunnen builden en draaien:
- Dockerfile: clone scrum4me-mcp zonder --recurse-submodules. De Prisma-
schema zit al gecommit in het scrum4me-mcp repo; de vendor/scrum4me
submodule is alleen nodig voor schema-updates en wijst naar een
privaat repo dat tijdens docker build niet bereikbaar is.
- Dockerfile: voeg /usr/sbin en /sbin toe aan PATH zodat gosu (in
/usr/sbin/gosu na apt-install) gevonden wordt door entrypoint.sh.
Zonder dit faalt de container in een restart loop.
- Verplaats alle runner scripts naar bin/ en maak etc/ aan, zodat
COPY bin/ en COPY etc/ in de Dockerfile bestanden vinden.
Verder:
- .gitattributes om CRLF-corruptie van shell scripts op Windows te
voorkomen (core.autocrlf=true is default actief).
- .gitignore: docker-compose.override.yml uitsluiten zodat lokale
dev-overrides niet worden gecommit.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>