Decisions, not transcripts
Every 10 minutes Gari reads the new turns in your CLI logs and keeps only what mattered: decisions, open questions, your corrections, and what went well. Each card quotes your own words — the AI's claims never become memory.
- reads
- ~/.claude/projects (Claude Code)
- writes
- store/cards/YYYY-MM-DD.jsonl
- model
- distill_model: "haiku"
$ tail -4 store/cards/2026-10-08.jsonl {"type": "decision", "text": "Pricing page offers one plan, monthly only", "quote": "monthly only for now", "tool": "claude", "project": "launch-site"} {"type": "decision", "text": "Annual plan waits until 50 paying users", "quote": "annual after 50 users", "tool": "claude", "project": "launch-site"} {"type": "pending", "text": "FAQ section is still empty — needs copy before launch", "quote": "do the faq later", "tool": "claude", "project": "launch-site"} {"type": "correction", "text": "Don't add an annual tier to the pricing table", "quote": "no, drop the annual one", "tool": "claude", "project": "launch-site"}
# launch-site
- One plan, monthly only
- Annual plan waits until 50 paying users
- FAQ section is still empty
$ gari northstar Gari north star — zero re-explaining (last 7 days vs previous 7) Re-explanations (repeat cards): 2 (prev 7) ↓ good Context handoffs (briefings + answers): 38 (prev 21) ↑ good
A report waiting at 9
Each morning Gari turns yesterday into what got decided, what's still open, and one step for today — plus a short review held to a senior product bar, not to yesterday's you.
- when
- report_hour: 9 (launchd)
- where
- reports/2026-10-09.md
- model
- deep_model: "sonnet"
Gari morning report — 2026-10-09
- [launch-site] One plan, monthly only
- [api] Rate limit stays at 60 req/min per key
- (c41f09a2) FAQ section is still empty
Why: the launch is blocked on copy, not code
Ask the fish
Click the pet and ask. Memory questions come back in seconds with where they came from. Planning questions go to a deeper model that lays out the forks before recommending one — and ends with a nudge when you're skipping something.
- memory
- ask_model: "haiku"
- judgment
- deep_model: "sonnet" + 11 methodology sources
- also
- gari ask "…" · Telegram gateway


Hand it off. It checks the work.
Say what you want, approve with "go". Gari packs the context into instructions, hands it to Claude Code in an isolated git worktree, then opens the real files before calling it done. Merging stays your call.
- isolation
- git worktree, never your working copy
- done means
- output verified in the repo
- never
- auto-merge, auto-push
$ gari do "add the three FAQ answers from the waitlist replies" --write Gari: handing ~/Projects/launch-site to claude (write allowed)… Delegated — I'll report with a notification when it's done. (background) [worktree] The output is in an isolated copy (original untouched). After review, one `gari merge wt-20261009-1012` merges it. $ gari merge wt-20261009-1012 Merged: gari/wt-20261009-1012 → launch-site (copy removed, branch cleaned up). Pushing is up to you.
Runs on the Claude API
One key in secrets.env. Text-only work — distilling, memory answers, judging nudges, wikis, the morning review — goes straight to the Messages API. Work that needs tools runs through Claude Code on the same key. Aliases like haiku resolve to the newest model.
- metered
- store/usage.jsonl, per call
- budget
- monthly_budget_usd warns once
- config
- prices_per_mtok for dollar totals
$ gari cost 7 Gari LLM usage — last 7 days: 412 calls, $3.8120 ask-deep 31 calls $1.4410 distill 226 calls $0.9032 mentor 7 calls $0.5121 wiki 18 calls $0.4380 ask 96 calls $0.3307 nag-judge 34 calls $0.1870 $ tail -1 store/usage.jsonl {"kind": "distill", "model": "claude-haiku-…", "via": "api", "sec": 2.1, "tokens": {"in": 6182, "out": 311, "cache_read": 4096}, "ok": true}

Gari — intake receipt now