Documentation
CLI reference
Eight verbs, what each one does, and what each one refuses.
Every command takes --root <PATH> to work on a repository other than the one
you are standing in. hi's own options go before the id, so nothing in your sentence is mistaken
for one.
| Command | What it does |
|---|---|
hi <ID> <sentence> | Capture. The family picks the file; a new family starts one. |
hi check | Structural problems only. Exits 1 on a broken file, never on unfinished intent. |
hi ls [--family F] [--retired] | Read back what you have agreed to. |
hi retire <ID> [reason] | Change your mind. Moves a criterion and its cases into ## Retired. |
hi issue <ID> [--create] | Print a ticket, or open a real GitHub issue with gh. |
hi export [FAMILY | file] | JSON for an agent, intent prose included. |
hi index | Rewrite the feature list inside INTENT.md, and nothing else in it. |
hi view [--out FILE] | One self-contained HTML page of the whole thing. |
Capture
The default verb. There is no subcommand, because the thing you do most should be the thing you type least.
hi SEND-1 "I hit enter and the message shows up right away."
hi SEND-1.a "If I have no connection it queues and tells me."
hi --root ../other-repo CHECKOUT-1 "I can pay without making an account." The sentence you type is the sentence that lands in the file, word for word. hi collapses runs of whitespace so the line stays one line, and does nothing else to your words.
ls
hi ls
hi ls --family SEND
hi ls --retired
Reads the whole repository back as a tree, grouped by file, with cases nested under what they
are cases of. Every sentence is printed exactly as it sits in the file: hi does not capitalize
it, wrap it, or put anything in front of it. --family narrows to one family and
--retired includes what you changed your mind about.
check
hi check reports everything it finds but exits 1 on exactly six
structural problems:
- a duplicate id
- a case with no parent
- an id that collides with a retired one
- a line shaped like an id that is not a valid one
- a family a file never declared
- a criterion stranded outside every section, where nothing would read it
Everything else is a note: that never touches the exit code: an empty
INTENT.md, a retirement with no reason. Adding a quality gate here would break the
whole premise, because incomplete intent is the normal state of intent. --json
emits the same report as JSON.
retire
hi retire SEND-3 "we decided this was a different product"
# the reason is optional, and you can add it later:
hi retire SEND-3 "the real reason, written once you knew it"
The criterion and every case beneath it move together into ## Retired, which hi
creates if the file has none. The reason is written under the block it explains, not appended to
the end. Only the root of a retirement is asked for a reason: a case went with its parent and
was never a separate decision.
issue
hi issue SEND-1
hi issue SEND-1 --create --repo CorvidLabs/chat Prints a ticket-shaped markdown block: the sentence as the heading, the feature's intent prose as context, and the cases as a nested list. A retired criterion cannot be turned into work.
export
hi export # the whole repository, including INTENT.md
hi export SEND # one family
hi export hi/send.md # one file The payload an agent should read before writing a spec. Retired criteria are kept apart from the live ones, so nothing downstream writes a spec for something you dropped.
view
hi view # writes intent.html at the repository root
hi view --out share.html One file, no network, no build step. A sticky rail lists every feature with its count, search highlights what matched, j and k move a cursor, Enter copies a link, and every id is an anchor that lands on its criterion even when a filter would have hidden it. Retired criteria are on the page behind a toggle. Nothing anywhere says whether anything is built, so nobody can read it as a progress report.
index
Regenerates the feature list inside INTENT.md, between its markers, and touches
nothing else in the file. The prose around it is yours.
Next
Bringing hi to a repo, including one an agent works in.