ginee v0.18.0
Highlights
- Lighter install —
.agents/ginee/drops the shipped migration directory (~228 KB / 36 files); pre-existing installs clean up on first update. - Per-item migration approval —
/ginee-updatenow surfaces each migration with ayes / skip / all-yes / all-skipprompt before applying anything. - Always up-to-date — migrations stream from upstream at update time; no stale local copies to chase, no version skew.
- Cleaner framework rules — ginee files cite their own specs by location; the LLM no longer follows opaque decision-number breadcrumbs.
- Offline-safe — migration fetch failure surfaces inline with the upstream URL; never blocks the update; framework files already landed.
- Warm reuse now actually works on Claude — pre-D43 the 15–50 k token / task savings were silently never realised; the env-var prereq is documented and skill-runner owns the plumbing on Claude.
- Set the env var once and restart —
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1in.claude/settings.jsonunlocksSendMessage; without it Claude falls back to fresh-spawn. - Lower bills on every Claude task — kernel + role-details + process + index reads survive across dispatches in one task; only first dispatch pays full reload.
- Per-class doc-size caps — ADR ≤ 4 KB · CR ≤ 6 KB · UI ≤ 4 KB by default; raise / lower / opt out per class in
local/framework.config.yaml. ai-engineerdispatched automatically on bloat — breach the cap, dispatch the optimizer, ship with the trailer bypass — no more silent doc-class drift.- Forward-only — existing oversized docs surface on next touch; no retroactive sweep.
Adopter migration
Nothing to do. On your next /ginee-update, the installer drops <fw>/core/MIGRATIONS/ mechanically. Subsequent updates fetch migrations from upstream and prompt you to apply each one.
Want to browse migrations as files? They live at github.com/kostiantyn-matsebora/ginee/tree/main/migrations/ (or the equivalent under your github.framework-repo if you've set it).
Filename change. Migration files dropped their D<N>- prefix — they're now named by content slug (installer-fetch-on-update.md, model-tier.md, …). If you bookmarked old paths, the github redirect won't help; use the tree listing to find what you need.
| Feature | What you'll notice |
|---|---|
| Prune | <fw>/core/MIGRATIONS/ removed on next install or update. |
| Per-item gate | /ginee-update prompts before applying each migration. skip always honored. |
| Offline behaviour | Migration fetch failure surfaces inline with the upstream URL; update doesn't block. |
| Runtime cleanup | Framework files (core/, adapters/, extras/) no longer cite D<N> IDs internally. Adopter-facing docs + release notes keep design-history references. |
Per-class doc-size caps — D44
Nothing to do if you don't track ADRs · CRs · UI docs. Defaults apply silently to absent class directories; no breach can fire.
To enable enforcement, set the directory keys + (optionally) override caps in local/framework.config.yaml:
adr-directory: docs/adr/
cr-directory: docs/cr/
ui-directory: docs/ui/ # new key
# Optional — override framework defaults (ADR 4096 / CR 6144 / UI 4096):
doc-size-caps:
adr:
cap-bytes: 6144 # raise
# ui: disabled # or opt out for a classThe existing context-economy gate (Claude Code hook · git hooks · CI workflow) picks up the per-class check automatically. Breach without Optimized-By: ai-engineer trailer fails the gate — same bypass machinery as the existing whole-PR threshold check.
Existing oversized docs — forward-only. Breach surfaces on the next touch; no retroactive sweep.
Warm reuse on Claude — D43
One-time setup. Set CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 and restart Claude Code:
// .claude/settings.json (project) or ~/.claude/settings.json (global)
{
"env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" }
}That unlocks the SendMessage tool. Without it warm reuse silently falls back to fresh-spawn on every dispatch — which is what was happening pre-D43, even with warm-reuse.enabled: true.
Don't want / can't set the env var? Add warm-reuse.enabled: false to local/framework.config.yaml and accept fresh-spawn cost.
What changed under the hood. Registry ownership on Claude moved from team-lead (impossible — team-lead is a subagent without SendMessage) to the skill-runner (main thread; durable across the task). Team-lead still decides every warm-vs-fresh on every dispatch; only the plumbing moved. Full architecture: adapters/claude/install.md § Warm specialist reuse.
Per-role context cost
Modest growth across cardinals from the D43 core/process/dispatch.md surface-boundary additions + the D44 cross-ref row in core/process.md § Documentation style. team-lead +2.3% bytes (62,232 → 63,694; ~30% headroom on the 90 KB ceiling); other cardinals +0.9–2.7%, all > 38% headroom. No ceiling breach; no rebudget. Full snapshot: reference/CONTEXT_COSTS.html.
Full specs:
migrations/migrations-upstream-only.mdmigrations/warm-reuse-claude-plumbing.mdmigrations/doc-size-caps.md
Full Changelog: v0.17.0...v0.18.0