Siltpoke is an independent second mind that rides along while you build with your CLI coding agent. It catches what you missed, helps you understand the codebase you shipped, and learns what you actually care about — a pet that earns its opinions, remembers your projects, and is wholly yours. On the token budget you already have.
$ git clone github.com/Victoriakaey/siltpoke ~/siltpoke
$ cd ~/siltpoke && bun install
$ bun run setup_
/\_/\ (o.o) > ^ <
/\_/\ (>.<) > _ <
Critic, chat, repo-graph, memory and traces aren't separate features — they're one loop. What the critic learns, chat recalls. What repo-graph maps, chat is anchored to. Every call lands in traces. All of it keyed to one project.
Reviews every agent turn with real tool evidence.
Structural map of your code — arch, files, symbols.
Semantic · episodic · procedural. The shared long-term brain.
Conversations pinned to a node, with working memory.
Per-turn cost, tokens, cache hits, per-model spend.
proj_hash = sha256(project_root)[:12]
— one project, one brain. Memory, repo-graph and traces all namespace to it.
An ASCII face + one-line bubble layered into your agent's status bar. Glanceable, always-on, never interrupts.
Siltpoke runs on your existing Claude Code login — no separate bill — so what matters is tokens. Prompt caching keeps a ~70k-token prefix warm, so each second opinion barely adds new tokens, and a hard daily cap means it can never surprise you.
The warm prefix means follow-up reviews barely add tokens.
Soft at 80%, hard at 100% of your token limit → pet sleeps till midnight.
Mutes Brain overnight. Off by default — set your own window.
sha256 dedupe — identical context never re-runs.
Needs Claude Code (logged in) and Bun ≥ 1.0. The installer is idempotent and backs up your settings — uninstall restores everything.
Quit and relaunch. An ASCII face appears at the left of your statusline.
Send any message. Within ~3 seconds, a one-line bubble appears. Siltpoke is alive.
The ASCII pet is the friendly face on a system that's with you for the long haul — it levels up as you forward good calls, accumulates rules from your feedback, and remembers your projects. Five species, five 0–10 dials, a name and a language of its own.
Three ways to set the dials in the setup wizard — re-roll anytime with bun run first-run.
~/.claude/ files — CLAUDE.md, rules, memory.Pick a species for a preset, then read what each dial changes. Their high/low pattern lands on one of the 16 archetypes below.
Each dial defaults to a neutral 5/10. These presets are illustrative — yours are whatever you set.
Each runs 0–10 (default 5). Their high/low pattern picks the archetype below.
XP only ever climbs — a wrong call gets dismissed, never docks you.
Not "there's an error" — but which agent action caused it, pointed at file:line, fingerprinted against every session before this one.
Pinpoints which agent action broke the build — not just that the build is broken.
The single component most likely broken, with the exact line to open first.
Same error pattern in the same module? Siltpoke flags the regression so you don't have to.
Remembers how the same bug was resolved last time — so you don't re-debug it from scratch.
A file, a function — sometimes the exact follow-up prompt to send your agent next.
/\_/\ (-.-) > ^ <
Every claim cites real tool output. No hallucinated findings — or it stays quiet.
It spawns a separate claude -p subprocess — different prompt, different personality, different blind spots — on the login you already have. No extra LLM bill.
Your agent finishes a turn. The hook hands off your transcript, diffs and tool output.
Skips on quiet hours, budget cap, or no-change since last run. Never blocks your agent.
A separate claude -p reviews with tsc / eslint / ripgrep evidence.
High → critique file. Medium → state. Low → log only. Pull, never push.
Pull, not push. Critiques are written to disk — never auto-injected into your chat. You decide what gets surfaced (/siltpoke-forward), dismissed, or ignored. A dismiss trains it via Reflexion so it won't repeat the miss.
The fastest way to end up with a codebase you don't understand is to vibe-code one. /siltpoke-index turns your repo into a structural graph you can explore — so the thing you shipped becomes the thing you know.
A C4 container diagram — system boundary, four layer bands, verb-labeled edges. The whole architecture on one screen, then drill from arch → file → symbol.
Path Highlight follows the spine from any entrypoint — how a request actually flows, call by call — with a deterministic graph-confidence score so you know how much is pinned vs. guessed.
Explain any node in plain language. An evidence guard checks every [file:line] citation against the real graph — no hand-wavy answers, with a grounded % to prove it.
Open a conversation pinned to a part of the graph — the surrounding subgraph rides along as context, and the chat remembers across sessions.
Two stores, one brain. A global store is the pet — identity, personality, XP — and it travels with you. A per-project store holds everything it learned in this repo. Both feed one Brain prompt, assembled in cache-friendly order so last week's bug informs today's critique.
Name, species & look · a 5-dial base personality · the XP ledger, level, streak and bond meter. One identity across every project.
Facts · learned rules · recent verdicts · a long-term summary · personality drift over the base · your goals & constraints. Scoped to one repo.
Every ~10 stops or 7 days, facts + critiques + dismissals compact into the long-term summary.
Stale, low-confidence facts retire on their own — but are never hard-deleted.
New facts wait as candidates until you /approve or /reject.
⚠ this SQL bug — seen 3× now. first: 5/14 · query.ts:50 last fix: added a LIMIT clause → regressed again at L62.
$ /siltpoke-dismiss 4f2 "intentional" + learned_rule: skip await-warnings on fire-and-forget loggers. # won't repeat that critique.
Siltpoke doesn't work alone. It's the companion; project-life-cycle is the method. Together they let anyone — even a non-developer — build a real project the way a professional would: a disciplined workflow, with a pet that keeps you honest the whole way through.
/\_/\ (o.o) > ^ <
The pet that lives in your terminal and dashboard. Reviews, remembers, maps your code, grows with you. Like hardware, it changes carefully — it's the steady foundation everything else builds on.
[>_] |=| '-'
A Claude Code skill that turns ad-hoc AI sessions into a repeatable, traceable workflow — a harness, not a code generator. Because it's a skill, it evolves constantly — new gates, sharper checklists — without you reinstalling a thing.
claude plugin install
project-lifecycle@project-life-cycle
/init-harness/ship× per feature/releaseSame DNA as the pet: local-first, evidence-grounded, pull-not-push. The skill drives the process and catches builder lies; siltpoke watches, critiques, and remembers. Nothing slips.
Personality, budget, triggers and quiet hours all live in ~/.siltpoke/config.json. Every field is optional, and malformed JSON silently falls back to defaults — Siltpoke will never block your agent over a typo.
{
"name": "Mochi",
"species": "cat",
"language": "zh-CN",
"snark": 7, "patience": 4, "rigor": 8,
"chattiness": 5, "curiosity": 6,
"triggerMode": "gates",
"budget": { "dailyTokenLimit": 500000 },
"quietHours": { "start": "23:00", "end": "08:00" }
}
~/.siltpoke/; a {cwd}/.siltpoke/ file overrides per repo.triggerModealways / gates (default) / on_demand / hybrid — how eagerly Brain fires.budget.dailyTokenLimit: 0debug_skill auto-migrates to rigor. Re-roll personality anytime with bun run first-run.Every action is a command you run — Siltpoke never acts on its own. The ones you'll actually reach for, grouped by what they're for.
/siltpoke-inboxList pending critiques (read-only)/siltpoke-lastSurface the most recent critique/siltpoke-forward <id>Pull a critique into chat · +10 XP if fresh/siltpoke-forward-allSurface every pending critique at once/siltpoke-ack <id>Acknowledge — neutral, no XP/siltpoke-dismiss <id> <reason>Reject + learn via Reflexion/siltpoke-undismiss <id>Reverse a dismissal, undo its rule/siltpoke-reviewReview my work now (bypass gates)/siltpoke-indexBuild / refresh the repo-graph (no LLM)/siltpoke-explain <target>Explain a file or symbol via Brain/siltpoke-graphOpen the repo-graph dashboard/siltpoke-reportStart the dashboard server · :9876/siltpoke-report-stopStop the background server/siltpoke-daemonManage the daemon (start / stop / status)/siltpoke-remember <text>Save a fact, goal, or constraint/siltpoke-approve <id>Approve a pending fact/siltpoke-reject <id>Reject a pending fact/siltpokeState card — level, XP, mood, spend/siltpoke-pet+5 XP, capped 2/day/siltpoke-statsToday's spend, budget stage, mode/siltpoke-wakeOne-shot bypass of budget + quiet hours/siltpoke-mute · unmuteSilence the critic (mute beats wake)/siltpoke-doctorInstall-health diagnostic · 7 checks/siltpoke-helpDaily flow, every command, configsiltpoke and project-life-cycle are open and always evolving — star them, file an issue, join the chat, or just say hi.
Want to say hi, ask something, or share an idea directly? Drop a note — it comes straight to me.
Found a bug or want to contribute? Open a GitHub issue →
/\_/\ (o.o) > ^ <
An independent second mind that reviews your work, maps what you built, remembers what you care about, and grows with you — on the token budget you already have.
siltpoke keeps all memory and state on your machine — no siltpoke cloud, no analytics, no phone-home. To review or chat, it calls the same claude CLI you already use, so your code takes the exact same path to Anthropic as Claude Code itself — and goes nowhere else.