Every flow command (fw for short) and its flags. flow --help lists them in the terminal, and flow <command> --help shows one.
- Setting up: put Flow on your computer and your projects, and keep it current
flow install: put Flow on this computerflow init: set up the project you are inflow update: get the newest Flow, and bring this computer and project up to dateflow doctor: check that Flow is installed correctlyflow survey: list everything Claude Code loads, and whether each is onflow sync: back up your workflow and share it between your computersflow store: choose where a project's tickets are kept
- The board: see all your tickets and what to work on next
flow next: what to work on nextflow ls: every ticket in a tableflow tree: tickets nested under the ticket they were split fromflow check: find broken links between tickets
- One ticket: show, create, change or remove one ticket
- Ticket status: move a ticket from one stage to the next
- Skills: see which skills are on, and turn them on or off
flow skills ls: every skill, and whether it is onflow skills on,offandreset: turn a skill on or offflow skills addanddrop: add or remove a repository of skills
- Settings: turn Flow's own settings on or off
- Taking Flow off: remove Flow, and put back what it changed
flow uninstall: remove Flow from this computerflow restore: put this computer or a project back the way it was before Flow
- Rule checks: see how well the agent follows your rules
- Cases: record the agent's mistakes, grouped by kind
flow cases new: record a mistakeflow cases ls: every recorded mistakeflow cases get: one mistake in fullflow cases edit: mark a mistake fixedflow cases issues: every kind of mistake, counted
- Audit: read back what Claude Code did in past sessions
flow audit index: read new sessions inflow audit ls: every session, with its totalsflow audit get: one session in fullflow audit turns: one session, prompt by promptflow audit read: the conversation itselfflow audit summary: a few lines of totalsflow audit timeline: every tool call in orderflow audit context: how full the context was at each requestflow audit sql: any other question, in SQLflow audit schema: every table and its columnsflow audit keep: save a session before Claude Code deletes itflow audit where: where the sessions and the index are
install, init and update end by opening a Claude Code session, which shows every change in one form for you to approve. The session runs their --check and --finish flags itself: you never type them.
Put Flow on this computer. It links Flow's skills, rules and scripts, downloads the tools Flow uses, and connects your Flow home, then opens the setup session. Your Flow home is ~/.flow/, the folder where Flow keeps your notes, settings and tickets. It is backed up to a private GitHub repository, flow-home, which your other computers join. Run again, flow install puts back anything missing. Install covers each step.
$ flow install
Flow is installed: 10 skills, each typed under the plugin name, as /flow:groundwork.
wrote: ~/.flow/originals/machine, this machine as it was before Flow
named: this machine is pc-wsl
started: your Flow home, sent up so your other machines join it
Every line of the install is in ~/.flow/logs/install.log.Set up the project you are in. An empty folder gets Flow's project files at once. A folder already holding files gets the setup session, which reads them first.
$ flow init --prefix shop
.flow/: a new flow branch, sharing no history with the code, checked out
.gitignore: .flow/ added
wrote: .claude/settings.json
wrote: .gitignore
wrote: .uncommitted-include
wrote: CLAUDE.md
set up: ~/code/shop is on entry 1. Nothing in the code is committed: CLAUDE.md, .gitignore and .claude/ wait for your next commit.
A plugin or skill switched off on this computer is switched on here with: claude plugin enable <id> --scope project, or flow skills on <name>--prefix <word>: the start of every ticket id, 2 to 8 lowercase letters, asshopinshop-4. Asked when left out, offering the folder's name:shopfor~/code/shop, or the first 3 letters of a name over 8,expforexpense-tracker.--private: keep the tickets in your Flow home, so nobody reading the repository sees them. Otherwise they go on the project'sflowbranch.-y: let the setup session read the files already there, without asking.
New project covers where tickets can live.
Get the newest Flow, then bring this computer and the project you are in up to date. Anything behind gets the update session, which shows what changes in one form.
$ flow update
Flow was already at its newest commit.
Flow is up to date: this machine is at entry 1, and so is ~/code/shop.Check that Flow is installed correctly. It changes nothing, names the fix on each failing line, and exits 1 on any failure.
$ flow doctor
ok run.json: no run stopped part-way
ok issues: every job running in the background worked last time
ok version: this machine is at entry 1, the newest one written, shop is at entry 1
ok clone: 3 submodules on the commit this clone points at, the remote is not read without --updates
ok programs: node, git, claude, gh all resolve
ok claude code: 2.1.289, and Flow needs 2.1.287 or later
fail names:
util is not linked: run flow install
u is not linked: run flow install
fail util:
util fs tree does not run, and it is called by home/CLAUDE.md, in tree-for-structure
util fs open does not run, and it is called by flow get --files, through tickets.js
/home/me/.util/sources does not exist, so no source is registered: run flow install
ok survey: 13 sources read, none of the problems flow survey names
ok ~/.agents: 12 skills linked under skills/flow/, 1 switched off
ok ~/.claude: skills/flow, 1 agent, 1 rule, 1 command and CLAUDE.md linked
fail settings.json:
/home/me/.claude/settings.json does not exist, so none of Flow's hooks run: run flow install, which merges /home/me/code/flow/home/settings.json into it
ok ~/.flow: scripts, references and docs resolve into this clone
ok originals: 3 paths recorded before Flow, still open, and 1 project beside it
note originals: the machine's original is still open, so flow install has not run to the end. It closes the original on its way out
ok skills: 1 source cloned, 1 skill on everywhere, 1 more for shop
3 of 15 checks failed.--prereq: check only the programs Flow needs and never installs,node,git,claudeandgh, and that Claude Code is 2.1.287 or later. It works before Flow is installed.--updates: also check whether a newer Flow is out. The one check that uses the network.
List everything Claude Code loads on this computer: rule files, skills, plugins, settings, agents, commands, and the folders util reads its commands from. Each item says whether it is on, and a plugin lists what it brings. The last group names what looks wrong, such as a plugin on disk that Claude Code doesn't list. It changes nothing, and works before setup has finished. Both setup sessions start from it, so it shows exactly what setup saw.
$ flow survey
skills (~/.claude/skills)
tdd on folder
grill-me off synced
plugins
typescript-lsp@claude-plugins-official on user
folder: ~/.claude/plugins/cache/claude-plugins-official/typescript-lsp/1.0.0
engineering@synced off synced
folder: ~/.claude/plugins/synced/account-1/engineering
skills: code-review, standup
mcp: github, linear
util sources
~/.flow/repos/util/commands
~/code/util/commands
problems
~/.util/sources lists 2 clones of https://github.com/Adrian333Dev/util: ~/.flow/repos/util and ~/code/utilA source it cannot read prints unread: and why, and the rest still lists.
--project <folder>: list what loads in that project instead: its rule files,.claude/folder, MCP servers, and the plugins installed for it.
Back up your workflow and share it between your computers. It sends your Flow home up and brings your other computers' work down. Inside a project keeping its tickets on its flow branch, it syncs the tickets too.
$ flow sync
nothing new came down.
went up: pc-wsl: 1 file
shop's tickets: nothing new came down, 1 commit went up.It runs by itself when a session ends, and every 30 minutes while you work, so you rarely type it. Sync between computers covers what travels.
Bare, it says where the project's tickets are kept. flow store private moves them into your Flow home, and flow store branch onto the project's flow branch.
$ flow store private
moved: shop's tickets now live in ~/.flow/projects/shop.
The flow branch keeps the tickets as they were, here and on the remote, and anyone who read the repository may hold a copy.
To delete it: git branch -D flow, then git push origin --delete flow.flow store branch refuses when the branch holds a ticket the moving tickets lack, since the move would delete that ticket.
A ticket is one piece of work, kept as a folder in the project's .flow/tickets/. Tickets covers types and statuses.
What to work on next: tickets in progress first, then ready tickets by priority. Blocked tickets show only when nothing is in progress or ready.
$ flow next
tickets: 6 todo 2 building 1 done 2 dropped 1
last closed shop-6 Old budget layout
in flight (1), finish these before starting more:
ID STATUS TYPE PRI PARENT TITLE
shop-7 building issue - - Safari loses the session cookie
ready (1):
ID STATUS TYPE PRI PARENT TITLE
shop-5 todo topic low - Choose a chart library--limit <n>: at mostnready tickets. 10 by default.--all: every ready ticket.
Every ticket in a table, finished and dropped ones included.
$ flow ls
ID STATUS TYPE PRI PARENT TITLE
shop-7 building issue - - Safari loses the session cookie
shop-3 todo feature high - CSV export
shop-5 todo topic low - Choose a chart library
shop-1 done feature - - Budget page
shop-2 done feature - shop-1 Budget store
shop-6 dropped feature - - Old budget layout
6 of 6.--status <status>:todo,groundwork,planning,building,review,done,parkedordropped.--type <type>:feature,issue,chore,topicorprototype.--parent <id>: the tickets split from one ticket.--unfiled: finished tickets not yet checked for lessons.flow filemarks them.
Tickets nested under the ticket they were split from, with what each one waits on. Finished and dropped tickets are hidden.
$ flow tree
shop-3 CSV export todo high blocked by shop-2
shop-1 Budget page todo - 0/1 done
└── shop-2 Budget store todo -
shop-4 Login fails on Safari todo -
shop-5 Pick a chart library todo low
5 tickets--parent <id>: one ticket and everything under it.--all: include finished and dropped tickets.
Find broken links between tickets: tickets waiting on each other in a loop, a link to a ticket that does not exist, a wait on a dropped ticket, an open ticket under a closed one, a misspelled status. It exits 1 when it finds one, and flow next says when to run it.
$ flow check
no problems: no cycles, no dangling ids, no dropped blockers, no closed parents, no unknown statuses.A ticket's id is the project's prefix and a number, shop-4. Any part of its folder name that matches one ticket alone finds it too: 4, or safari for shop-4-login-fails-safari. An id starting home- names a ticket kept in your Flow home, for work that belongs to no project.
flow get <id>, or just flow <id>: one ticket's fields, then its text, then the command that starts work on it.
$ flow get 2
shop-2 Budget store
status: todo type: feature parent: shop-1
priority: normal
deps: -
dependents: shop-3 (todo)
ready: yes
path: .flow/tickets/shop-2-budget-store/ticket.md
pick up with: flow groundwork shop-2
------------------------------------------------------------
# Budget store
<!-- What changes and why. One paragraph. -->
## Done when
<!-- One observable check. Write it now. -->--files: also print the files the last session listed for the next one to open.
flow new "<title>": create a ticket.
$ flow new "CSV export" --deps shop-2 --priority high
created shop-3 CSV export
.flow/tickets/shop-3-csv-export/ticket.md
.flow/tickets/shop-3-csv-export/groundwork/map.md
priority: high
deps: shop-2
pick up with: flow groundwork shop-3--type <type>:feature(the default),issue,chore,topicorprototype. Tickets covers each.--priority <level>:high,normal(the default) orlow. A ticket without one takes its parent's.--parent <id>: the ticket this one was split from.--deps <id,id>: tickets that must reachreviewordonebefore this one can start.--label <1-3 words>: the words in the folder name. Made from the title when left out.--body <text>: the ticket's text, in place of the template.--body -reads it from standard input.
Offline, a project keeping its tickets on its flow branch creates no ticket. A number is given out only once the remote has it, so the number you see never changes.
flow edit <id>, with one flag per field to change. The status changes through its own commands, under Ticket status.
$ flow edit shop-5 --title "Choose a chart library" --priority normal
shop-5
title: "Pick a chart library" → "Choose a chart library"
priority: low → normal
$ flow edit shop-3 --deps shop-5
shop-3
deps: [shop-2, shop-5] → [shop-5]--title "<title>": the title. The folder name stays.--label <1-3 words>: renames the folder. Links use the id alone, so none break.--type <type>: the type.--priority <level>: the priority.normalremoves it, so the parent's applies again.--parent <id>: the ticket this one was split from. An empty value removes it.--deps <id,id>: the tickets this one waits on, replacing the whole list. An empty value clears it. A wait that would make a loop is refused.
flow file <id>...: mark finished tickets as checked for lessons. /flow:file-findings runs it once it has moved what a ticket taught into your skills and rules. Mark a ticket that taught nothing too, so it leaves flow ls --unfiled.
$ flow file shop-1 shop-2
shop-1 filed 2026-10-02 Budget page
shop-2 filed 2026-10-02 Budget store
nothing left unfiled.--force: mark again a ticket already marked, with today's date.
flow drop <id> --reason "<why>": remove a ticket that will never be done. Its folder moves to .flow/tickets/archive/.
A drop refuses while an open ticket waits on this one, and lists each. Add one of these:
--by <id>: make the waiting tickets wait on a replacement.--force: drop the waiting tickets too, all the way down.
$ flow drop shop-6 --reason "replaced by the new layout" --by shop-5
shop-6 todo → dropped Old budget layout
reason: replaced by the new layout
moved → .flow/tickets/archive/shop-6-old-budget-layout
re-pointed to shop-5 (Choose a chart library):
shop-3 deps → [shop-2, shop-5]flow move <id>... <place>: move tickets to another project's folder, or to home, your Flow home. Each ticket takes the next free number there. Its old id still finds it from the project it left.
$ flow move shop-4 home
shop-4 → home-1 Login fails on Safari
the old id still finds it from the project: flow shop-4A link to a ticket staying behind refuses the whole move. Move the linked tickets in the same command, or remove the link first with flow edit --deps or --parent.
Each status has a command named for where the ticket lands:
flow todo <id> back in the queue
flow groundwork <id> settle the open questions
flow plan <id> write the plan
flow build <id> build it
flow review <id> hand the work over
flow done <id> close it, and move its folder to the archive
flow park <id> --reason "<why>" set it aside
The skills move tickets for you. Phases covers which skill moves a ticket, and when. A move lists the tickets it unblocked:
$ flow review shop-2
shop-2 building → review Budget store
now ready:
ID STATUS TYPE PRI PARENT TITLE
shop-3 todo feature high - CSV exportA ticket in review already counts as finished for the tickets waiting on it.
A move refuses:
- starting a ticket whose waits have not reached
reviewordone; - starting a parent while one of its children is open;
- closing a parent while one of its children is open;
flow parkwithout--reason.
--force overrides all but the last.
$ flow done shop-1
flow: shop-1 has 1 open child ticket, finish those first:
shop-2 review Budget store
Or override with: flow done shop-1 --forceA parked ticket comes back through the command for the status it left. A ticket parked while building returns with flow build:
$ flow park shop-4 --reason "waiting on a Safari machine"
shop-4 building → parked Login fails on Safari
reason: waiting on a Safari machine
revive with: flow build shop-4A skill is a folder of instructions Claude Code loads when its job comes up. Flow's own skills are always on, except 2 for working on Flow itself. Skills from a repository you added, and your private ones, start off. Extend covers where skills come from, and Reference: skills lists Flow's.
A switch works at one of 2 levels:
- No flag: this project.
--global: every project, on every computer.
Every skill, grouped by where it comes from, whether it is on, and the level that says so. A blank level means the skill's default. A skill repository lists only the skills switched at some level, and counts the rest. outside lists what another tool installed, which Flow never switches. flow skills <pattern> is flow skills ls <pattern>.
$ flow skills ls
state level
flow
apply-domain-findings off
review on global
domain-skills 1 more
react on project
vitest on global
private
my-notes on global
outside
flow plugin[pattern...]: words or regular expressions, matched against each skill's name and description. A skill shows when it matches every one.--source <name>: one source in full, by its name or itsowner/repo.
on and off switch skills at one level. reset removes that level's switch, so the default decides again.
$ flow skills on react
on: react, this project.
linked: ~/code/shop/.claude/skills/react
$ flow skills on vitest --global
on: vitest, everywhere. Every session now loads its description, in projects it has nothing to do with too.
linked: ~/.claude/skills/vitestWhat each refuses:
-
A Flow skill with no flag. Flow's skills load in every project: add
--global. -
Turning a skill off for one project while it is on everywhere:
$ flow skills off vitest flow: vitest is on everywhere (--global), and a project cannot hide a skill linked for the whole machine yet. flow skills off vitest --global switches it off everywhere.
-
A name 2 skill repositories share. Write it as
owner/repo:name.
A skills folder Flow had to create needs Claude Code restarted, and the command says so.
flow skills add <owner/repo> downloads a GitHub repository of skills and lists them. It turns none of them on.
$ flow skills add mattpocock/skills
cloned: mattpocock/skills into ~/.flow/repos/sources/mattpocock_skills
added: mattpocock/skills to sources in ~/.flow/settings.json
2 skills, none switched on by this:
grill-me Interview the user about a plan until every branch is resolved.
tdd Test-driven development, red green refactor.
flow skills on <name> turns one on here, --global everywhere.flow skills drop <owner/repo>... removes a repository and deletes its download. Each repository updates itself when a session opens, unless the skillsAutoUpdate setting is off.
flow settings turns Flow's 5 on/off settings on or off, without opening a file. Reference: settings explains each one.
$ flow settings ls
setting state level
reminder on everywhere a line beside every message, pointing Claude at the reply rules
sessionCheck on what needs attention, when a session opens
setupReminder off this folder suggests flow init where a repository or old memory needs it
skillsAutoUpdate on each skill repository updates itself when a session opens
wrapUp on tells Claude to hand off once the conversation passes wrapUpAt tokensflow settings ls: every setting, and the level that decides it. A bareflow settingsprints the same.flow settings on <name>andoff <name>: switch a setting.flow settings reset <name>: remove that level's switch, so the default decides.--global: every project, on every computer. With no flag, the switch is for this folder.
Only setupReminder can be switched for one folder. Every other setting needs --global.
A folder switch wins over --global, and the command says so:
$ flow settings on setupReminder --global
on: setupReminder, everywhere.
setupReminder is still off here, since this folder says so.Before Flow first changes a file, it saves a copy of the original in ~/.flow/originals/: one set for the computer, and one per project. Both commands below put those copies back. Install covers what gets saved.
4 locks make sure only you run them:
-
Every Claude Code and Codex session must be closed:
$ flow restore project flow: Close these sessions first: claude 731544.
-
You type
restoreoruninstallat the terminal. A pipe, a script or an agent cannot type it. -
No flag skips that word.
-
Rules in
~/.claude/settings.jsonstop an agent from running either command at all.
Remove Flow from this computer. It puts back what Flow changed on the computer and in each project, through the same form as flow restore machine, then deletes ~/.flow/ and the folder holding Flow's code.
- Work in
~/.flow/not yet backed up stops it, before anything is removed. Runflow syncfirst. - The folder holding Flow's code stays when deleting it would lose changes you made to Flow. Its path is printed for you to delete.
Bare, or as flow restore ls, it lists the saved originals:
$ flow restore
machine 3 paths written 2026-10-02T22:42:53 still being written
~/code/shop 7 paths written 2026-10-02T22:44:40 closedflow restore project puts back the project you are in. flow restore machine puts back the computer, and offers each project in the same form. Neither deletes ~/.flow/.
You pick each file first. The command writes ~/.flow/restore.md, one box per file, and waits:
- A ticked file goes back to how it was, or is deleted where Flow created it.
- An unticked file stays as it is.
- A project's
CLAUDE.mdanddocs/start unticked, since they hold what you learned about the project, and work without Flow.
How well the agent follows your rules, across every session. A rule check is a small script that tests each change the agent makes against one rule, and records the result. Rule checks covers writing one.
The scorecard lists checks that fail to load, checks naming a rule that no longer exists, the rules broken most, checks broken often enough to start warning, and rules that never once applied. It ends with how many rules have a check at all, so a clean report never reads as a clean session.
$ flow scorecard
never applied: loaded every session, never once relevant
js-and-ts
1 rules measured, 147 not measurable. 0 results over 0 days.A study case records one mistake the agent made: what went wrong, the rule it broke, and the fix once there is one. Cases are grouped by issue, the kind of mistake, so a repeat shows as a count. Any part of a case's name that matches it alone finds it. Learning covers how cases get used.
flow cases new "<title>" --issue <issue>: record a mistake.
$ flow cases new "Answered before reading the file" --issue answered-unread --rule read-before-answering --body "Claimed a config key existed without opening the file."
created answered-unread/2026-10-02-answered-before-reading-the-file
/home/me/.flow/study-cases/answered-unread/2026-10-02-answered-before-reading-the-file.md
project: shop
rule: read-before-answeringAn issue spelled close to an existing one is refused, since a second spelling would split the count:
$ flow cases new "Guessed instead of reading" --issue answered-unreed
flow: "answered-unreed" is close to an issue that already exists:
answered-unread
One failure, one folder: a second spelling splits the count and nothing errors.
Reuse it: flow cases new "Guessed instead of reading" --issue answered-unread
A new kind, really: flow cases new "Guessed instead of reading" --issue answered-unreed --force--issue <issue>: required. The kind of mistake.--force: create the new issue anyway.--rule "<rule>": the id of the rule that was broken.--body <text>: the case's text.--body -reads it from standard input.
Every case, grouped by issue.
$ flow cases ls --status open
skipped-walk (1)
DATE STATUS CASE RULE PROJECT
2026-10-02 open skipped-the-walk walk-a-real-case shop
1 of 2.--issue <issue>: one issue's cases.--status <status>:openorfixed.
flow cases get <ref>, or flow cases <ref>: one case in full.
$ flow cases answered
answered-unread/2026-10-02-answered-before-reading-the-file fixed
/home/me/.flow/study-cases/answered-unread/2026-10-02-answered-before-reading-the-file.md
rule: read-before-answering
project: shop
effort: high
fix: home/CLAUDE.md
Claimed a config key existed without opening the file.flow cases edit <ref>: change a field. A case is never deleted.
$ flow cases edit answered --status fixed --by home/CLAUDE.md
answered-unread/2026-10-02-answered-before-reading-the-file
status: open → fixed
fix: - → home/CLAUDE.md--status <status>:openorfixed.fixedneeds--by, unless the case already names its fix.--by <file>: the file changed to fix it.--rule "<rule>": the rule that was broken.
Every issue, counted. Read it before recording a case, so a repeat lands in its existing issue.
$ flow cases issues
ISSUE CASES OPEN LATEST RULES
answered-unread 1 1 2026-10-02 read-before-answering
skipped-walk 1 1 2026-10-02 walk-a-real-case
2 issues, 2 cases /home/me/.flow/study-casesflow audit reads the transcripts Claude Code keeps of every session into an index, ~/.flow/audit/audit.db, and answers questions from it. Run flow audit index first. A session id can be any start of it that matches one session alone, such as a1b2. Learning covers segments, turns and what the audit is for.
Read every new transcript line into the index. A second run reads only what changed.
$ flow audit index
a1b2c3d4 -home-me-code-shop +16 lines
1 transcripts read, 0 unchanged, 16 new lines, 1 sessions: 0.1s
/home/me/.flow/audit/audit.db--project <name>: one project's transcripts.--rebuild: delete the index and read everything again. Nothing is lost.--quiet: print the totals alone.
Every session in the index, newest first.
$ flow audit ls
SESSION PROJECT FROM TO SEG TURNS TOOLS ERR OUT CACHE COST
a1b2c3d4 shop 2026-10-02 2026-10-02 1 2 6 1 840 330.0k ---project <name>: one project's sessions.--since <date>: sessions from that date on, such as2026-10-01.--limit <n>: at mostnsessions. 30 by default.
flow audit get <id>, or flow audit <id>: one session in full, ending with the command to read its heaviest turn.
$ flow audit a1b2
a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d
project shop /home/me/code/shop
branch main Claude Code 2.1.290
ran 2026-10-02 09:00 → 2026-10-02 09:01
size 16 events · 1 segments · 2 turns · 6 tool calls · 1 errors
spend - · out 840 · cache read 330.0k · cache write 3.0k
SEGMENTS: one unbroken context window each
# LINES TURNS ENDED TRIGGER BEFORE AFTER DROPPED
1 1-16 2 end - 0 0 0
TOOLS
TOOL CALLS ERRORS RETURNED
Bash 3 1 212 B
Read 2 0 338 B
Edit 1 0 85 B
FILES: every route into context, exact and parsed alike
TOUCHES READS WRITES PATH
2 1 1 /home/me/code/shop/src/auth/session.ts
1 1 0 /home/me/code/shop/src/auth/login.ts
HEAVIEST TURNS: by context read, which is what a turn actually costs
TURN LINES TOOLS OUT CACHE PROMPT
1 1-10 4 460 206.0k /flow:execute /shop-4
2 11-16 2 380 124.0k fix it
read one: flow audit read a1b2c3d4 --turns 1Every file count is a floor. A transcript records the command a session ran, never the files that command opened.
flow audit turns <id>: one session, a line per prompt.
$ flow audit turns a1b2
TURN SEG LINES AT TOOK TOOLS ERR OUT CACHE SOURCE PROMPT
1 1 1-10 09:00 - 4 1 460 206.0k typed /flow:execute /shop-4
2 1 11-16 09:01 - 2 0 380 124.0k typed fix it--from <turn>: start at that turn.--limit <n>: at mostnturns. 60 by default.
flow audit read <id> --turns <range>: the conversation itself: each prompt, each tool call and whether it worked, and each reply.
$ flow audit read a1b2 --turns 1-1
a1b2c3d4 turns 1-1 · transcript lines 1-10
── user 09:00:07
/flow:execute /shop-4
→ Bash {"command":"flow get shop-4 --files"}
← Bash ok 2 B
→ Read {"file_path":"/home/me/code/shop/src/auth/login.ts"}
← Read ok 2 B
→ Read {"file_path":"/home/me/code/shop/src/auth/session.ts"}
← Read ok 2 B
→ Bash {"command":"npm test -- auth"}
← Bash ERROR 2 B: ok
── assistant 09:01:10
The cookie is set with SameSite=None and no Secure flag, which Safari rejects.--turns <range>: required, such as412-460, or412for one turn. A whole session is refused: it is too long to read at once.--full: also print what each tool returned, up to 1,200 characters per call.--thinking: also print the model's reasoning.
flow audit summary [id]: a few lines of totals, for one session, or for every session when no id is given.
$ flow audit summary a1b2
a1b2c3d4 shop 2026-10-02 09:00 → 2026-10-02 09:01
2 turns · 1 segments · 6 tools · 1 errors · 2 files · -
out 840 · cache read 330.0k · cache write 3.0k
Bash 3 (1 err) Read 2 Edit 1--project <name>: one project's sessions.--since <date>: sessions from that date on.
flow audit timeline <id>: every tool call in one session, in order.
$ flow audit timeline a1b2
TURN TOOL OK CALL
1 Bash ok flow get shop-4 --files
1 Read ok /home/me/code/shop/src/auth/login.ts
1 Read ok /home/me/code/shop/src/auth/session.ts
1 Bash ERR npm test -- auth
2 Edit ok /home/me/code/shop/src/auth/session.ts
2 Bash ok npm test -- auth--limit <n>: at mostncalls. 500 by default.
flow audit context <id>: how full the context was at each request to the model, and where the first file edit came.
$ flow audit context a1b2
first edit: request 4, turn 2, line 41, context 52.3k
peak: 61.0k · 6 requests
# TURN LINE AT CONTEXT OUT TOOLS
1 1 3 09:00 48.1k 40 Bash
2 1 6 09:00 49.7k 25 Read Read
3 1 11 09:01 51.9k 30 Bash
4 2 41 09:01 52.3k 90 Edit ← first edit
5 2 44 09:01 58.2k 20 Bash
6 2 47 09:02 61.0k 120 ---limit <n>: at mostnrequests. 200 by default.
flow audit sql "<query>": any other question, as SQL against the index. Only SELECT and WITH run.
$ flow audit sql "select name, count(*) n from tool_call group by name order by n desc"
NAME N
Bash 3
Read 2
Edit 1Compare pieces of work by segment, never by session. A segment is one unbroken conversation: compacting starts a new one inside the same session, and clearing starts a new session.
Every table and its columns, one line per table, for writing a query.
flow audit keep <id>: save a compressed copy of one session's transcript in ~/.flow/audit/kept/. Claude Code deletes old transcripts after a set number of days, and the index keeps only their counts. Keep one you will want to read again.
$ flow audit keep a1b2
/home/me/.flow/audit/kept/a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d.jsonl.gz 1 kBWhere the transcripts and the index are.
$ flow audit where
transcripts /home/me/.claude/projects
index /home/me/.flow/audit/audit.db