Logs and store¶
Each feature has a Markdown log, active/<slug>.md while open and archive/<slug>.md after done, with a folder of its cards, plans and handback.md. Entries are append-only, newest last, timestamped, written at each checkpoint (request, decision, stage change, findings, replan, steer, escalation, tether friction, PR) and before a session may end. No secrets, ever.
<store>/.gitignore ignores everything except itself and gru.yml
<store>/gru.yml team policy (the only versioned file)
<store>/local.yml your models, harness, sandbox, limits, calibration (ignored)
<store>/project.md project notes, only in versioning: none (ignored)
<store>/images/ Dockerfile and image.yml for the docker sandbox (ignored)
<store>/runs/ reports of single-stage runs (ignored)
<store>/active/<slug>.md feature log
<store>/active/<slug>/cards/ <id>.md, <id>.plan.md
<store>/active/<slug>/handback.md result for the caller
<store>/archive/ the same, after done
Where it lives¶
Resolved once per session, first match wins:
- a path named by a
gru store:(or legacyfeature-context store:) line inAGENTS.md/CLAUDE.md <root>/.gru/if it exists, else<root>/.claude/gru/if it exists (the older default)- legacy
<root>/.claude/feature-context/or~/.claude/projects/<repo>/feature-context/ - otherwise Gru creates
<root>/.gru/and tells you. The default is not under.claude/because Claude Code can block writes there as sensitive
In git, <root> is the main repo, never a worktree. ## What is versioned
| Path | Versioned | Why |
|---|---|---|
gru.yml |
yes | Team policy that should be identical for everyone: budget defaults, sensitive paths, timeout, tether_repo, permissions. Small and rarely changes. |
local.yml |
no | Depends on your models, harness, limits and history; calibration is churny and personal. |
active/, archive/ (logs, cards, plans, handback.md) |
no | Per-person working state: noisy diffs, session ids, local paths. Durable facts belong in the PR, in AGENTS.md (offered by done) and in the hand-back. |
images/ (Dockerfile, image.yml) |
no | Machine-specific build output. |
| project facts (checks, "done", branch style) | yes, in AGENTS.md/CLAUDE.md |
Already shared there by the interview. |
Gru writes a .gitignore inside the store (*, !.gitignore, !gru.yml), so this holds for any store location. If you do not want even gru.yml versioned, use versioning: none.
Warning
Ignored logs die with an ephemeral container or a fresh clone, so /gru resume finds nothing there. Point gru store: at a persistent path outside the repo if you need it.
Versioning: none¶
For projects where people do not want Gru around, answer none in the interview. Then:
- Nothing in the repo changes. The store's
.gitignoreis just*(it ignores itself), sogit statusstays clean; there is nogru.yml, nogru store:line, no edit toAGENTS.md/CLAUDE.mdor the repo's.gitignore. - Project notes go to
<store>/project.md, policy keys tolocal.yml, anddonewrites lessons toproject.md. - Commits, branches and PR text carry no mention of Gru. The work itself still lands in your repo, of course.
- Set
versioningin~/.config/gru/profile.ymlto pre-select it for new projects.
Template¶
# <Title>
- Slug / Status / Started / Updated / Closed
- Branches / PRs
- Budget: warn / stop paid tokens, wall-clock, max replans 2 Used: -
## Goal / Requests / Decisions / Problems
## Cards | Card | Size | Stage | swe | plan | qa | rev | Replans | Tokens | Notes |
## Tether friction
## Progress log
## Gru feedback
## Next steps
## Sessions