| name | hippo |
| description | This is your hippocampus. Always use it. |
hippo — the project's hippocampus
hippo does not control you. It just holds the memory for you: what you delegated, what was
accepted or refuted, and which of the user's instructions are still alive. The judgment is
always yours.
How to call it
In Claude Code, hippo is on PATH. In Codex it is not — resolve ../../bin/hippo relative
to this SKILL.md into an absolute path and call that.
The grammar, in one line
Facts go in through one door, hippo log <event>; the nouns are windows that read them back.
Call a noun on its own and you get its default view (hippo task = the list, hippo log = recent
records, hippo directive = the live instructions, hippo prior = the routing priors).
When to reach for what
- When work lands that will outlive this turn:
hippo task add <type>/<slug> --title "…"
(--deps a,b when order matters), hippo task done <id> when it ships. Bare hippo task
answers what can I start now — a task whose deps are unfinished shows a waiting on: line.
- While delegating:
hippo log dispatch --id <new id> --kind <tag> --exec <executor/model/effort> --scope "<one line>"
(a codex exec launched as hippo dispatch --kind … --scope … -- <codex args> records itself)
- When a delegation gets a verdict:
hippo log outcome --ref <id> --result accepted|revised|refuted|no-go|lost --attr work|brief|harness
(--ref task:<task-id> resolves to that task's dispatch still awaiting an outcome, so you do not
have to go find the hash; the ledger still stores the dispatch id)
- When the user gives a standing instruction:
hippo directive add --text "…" --lifetime turn|phase|durable
(add --audience main|executor|all when it binds only one side — a dispatched lane's capsule
carries the executor|all ones, this session's carries main|all)
(turn expires by itself after the next turn; phase and durable stay until
hippo directive withdraw <id>). To change an existing one, re-add it with the same --id —
a new id forks the instruction instead of updating it. Ids are lowercase kebab ascii
(gpu-pinning), whatever language the text is in; the derived id is refused when the text has
no ascii letters to build one from.
- When an external review reply arrives:
hippo log review --id <new id> --base <sha> --source <where> --findings <n>
— and when its findings are dealt with, close the loop:
hippo log review-status --ref <review-id> --addressed full|partial|none [--at <sha>]
(a review with no review-status stays "not fully addressed" in every distill)
- Before deciding delegation routing:
hippo prior — which model and effort measured better
- To see where things stand:
hippo status
Delegation briefs live in .hippo/briefs/ — a project-relative path that survives sessions,
so nothing has to retype an absolute scratchpad prefix. /hippo:dispatch has the full contract.
What you don't have to do
Every turn, a background clerk reads the transcript and infers most of the events above on its
own. Recording through the CLI only raises the certainty. Nothing breaks if you skip a record —
this organ does not enforce.
The clerk's backend resolves automatically (codex if installed, else headless claude). When a
project needs a different one, set clerk: {backend: codex|claude} in .hippo/config.yaml, or
export $HIPPO_CLERK_BACKEND / $HIPPO_CLERK_MODEL (pin the backend when you pin the model —
a model id for one backend is invalid on the other).