Session Flow
Session Flow
User guide

Session Flow

A developer-grade workspace for people who are not developers. Your work saves itself, your history is kept and searchable, several threads of work run side by side without colliding — and nothing reaches the real version of your project until you say yes. You never have to learn git.

1. Where this came from — four ways of working with AI

You are three days into building something with Claude. It is going well. Then the conversation fills up, the model compresses what it remembers, and it starts contradicting decisions you made on day one. You open a fresh conversation — and the new one knows nothing. The reason you chose your approach is in the old one somewhere, and you cannot find it.

Or this. You were told to commit your work, so you did. Sometimes. You were told to push it, so you did. Sometimes. Nobody told you when to merge, or what merging even implies. Two pieces of work land in the wrong order and now there is a "conflict" — a word for a mess you did not create and cannot read.

Session Flow exists because of those two afternoons. Here is the ground it covers, in the order most people travel it.

A few definitions, in case you want to know what the machinery is doing.

  • Git — the version-control system professional software teams use.
  • Commit — save a snapshot of your work.
  • Push — send those snapshots to the online backup copy.
  • Merge — combine one line of work into another.
  • Conflict — when git sees changes it cannot decide between.

You will meet these words again below. You will never have to type — or learn — any of them.

The "No" way

Just talk to the chatbot

You work in the conversation window and nowhere else. Nothing is version-controlled. Nothing is backed up beyond whatever the app happens to keep. And the model knows only what the current conversation holds — when that fills, it compacts (summarises its own history to make room) and detail goes.

Close the conversation and the reasoning goes with it. You keep the files. You lose the story of why they look like that.

The "Old" way

Use git, like a developer

Git is excellent at what it is for: every version kept, several people on the same files without overwriting each other, any change reversible.

It is also complex, unforgiving, and built by and for people who use it daily. It assumes habits — commit early, pull before you push, know which branch you are on — that a business owner building their own tools does not have. Steve, in the conversation that started this project:

"I'm not an experienced developer, and Git pulls, pushes, and the rest still confuse me… You, as the AI with access to everything written about Git, are far better placed to handle it. We need to systemize the process rather than relying on memory or judgment."

The cost of not having those habits is not a warning message. It is lost work.

The "New" way

Automate git in the background

The obvious fix: a background program that commits and pushes for you, so you never have to remember. Fine for one project, one person, one thing at a time.

It breaks the moment several threads of work run at once. An automation that saves everything it finds cannot tell finished work from work another live session is halfway through. An early attempt at exactly this swept up work belonging to running sessions and corrupted the project's official history.

Automation without ownership rules is not safety. It is a faster way to break something.

The "Right" way

Session Flow

The full power of a professional developer's environment, and none of its ceremony.

You talk to Claude in plain English. Git happens underneath, correctly, without you learning it. Your work is saved and backed up after every exchange. Several threads run at once without colliding. Every conversation is kept, readable and searchable — so the reasoning survives, not just the files. And nothing reaches the official copy without your yes.

The standard being aimed at is Google Docs: you type, it is saved, it is safe, you can find it again, and you never once think about the mechanism.

2. The core problem with standard AI sessions

Four things go wrong without a system like this. Session Flow is built to solve exactly these.

  • Closed conversations have no history. When a session ends, its reasoning ends with it. The files remain; the record of what was tried, rejected and decided does not.
  • The history you do get expires. Claude Code — the app you run Claude inside — keeps its record of your conversations for about two weeks, then tidies it away. Anything you want in a month is already gone, and you find out when you go looking.
  • Context gets squeezed into a few small files. Your context is everything the model can currently see. The usual workaround for a fading conversation is a summary file. But a summary is a compression, and "why did we do it that way" is the first thing compression throws out — which is exactly what you need six weeks later.
  • You are forced to work one thing at a time. Git and Claude Code, used plainly, want one line of work in one folder. Two conversations on the same project collide. Parallel work becomes a bottleneck instead of an advantage.

3. The solution — a human-centric system

Three commitments, which explain nearly every choice below.

Everything is an ordinary text file. No servers, no databases, no dashboard to keep open. The project's state lives in plain text files inside the project folder, so you can read them and edit them yourself in any text editor — Notepad, VS Code, whatever you use. Search them, back them up, treat them like any other document. If Session Flow vanished tomorrow, the files would still make sense.

The commands speak English and tell you what to do next. You are never expected to keep track of where the project has got to, or to remember a step. One command to start work, one to stop. Everything between either happens automatically or arrives as a yes/no question with the consequence spelled out. No command assumes you already know what a branch, a worktree or a session is — each is explained the first time it comes up.

Threads of work run in parallel and talk to each other. Several conversations can work on one project at once without colliding, because each gets its own private copy. They hand work between each other, and each thread has an Inbox where you — or another thread — can leave a note for it to pick up next time.

4. What it is — the core concepts

Eleven terms carry the whole system. Everything else is in the glossary at the end.

TermWhat it means
BoardThe workstream's high-level plan — what you are working on now and what comes after, split into phases so you can see where you are in the arc of the work.
CommandA plain-English instruction you type, starting with a slash — /workon, /wrap. Nine exist; you only need to learn three to run the whole system.
Draft copyA private folder where one session's changes happen, leaving the official copy untouched until you approve the work. Git calls it a worktree. You never have to use either word.
DropThe AI's inbox for passing ideas between workstreams — a note left in a mailbox outside every project, which /workon folds into the right Board's Inbox.
HandoffThe summary one session leaves for the next: where things stand, what is done, what is next, what is unresolved. The note you would leave a colleague taking over your desk.
HookA small background program Claude Code runs automatically at set moments. Hooks are what save your work without you asking. Six exist; you never run one yourself.
InboxThe section at the bottom of the Board where new ideas wait to be triaged: sorted and prioritised against the existing plan. Issues, blockers, things to discuss, a thought you had in the shower. Type into it yourself whenever you like, or ask Claude to add something for you.
Official copyThe real, current version of the project. Git keeps it on the main branch — a branch being one line of work, a version of the project's history you can change without disturbing another.
ProjectThe overarching initiative — one folder on your computer, tracked by git. What you would normally call "the thing I am building".
SessionOne working conversation with Claude, from opening it to closing it down. A workstream is made of many sessions, one after another.
WorkstreamOne strand of work inside a project: a feature, an area, a long-running effort. It has a short name like billing-rework. A project can run several at once.

How a drop works

  1. A session working inside a draft copy sees only its own private snapshot of the project — including its own snapshot of every Board. Writing a note onto another workstream's Board from there would edit a stale version, and it would surface days later in the wrong shape.
  2. So the session files a drop instead: the note goes into a mailbox that sits outside every project.
  3. Next time you open the workstream it was addressed to with /workon, Claude collects the drop, folds it into that Board's Inbox, and triages it with you.
  4. The drop deletes itself once delivered. The Board's Inbox is the permanent record.

You never need to look at the queue. And when something cannot wait for the next session, one live session messages another directly with the SendMessage command.

5. How it works — a day in the life

The commands

Nine exist. The three in bold are the ones you actually use.

CommandWhat it doesWhen to use it
/flow-helpLoads this guideWhen you need a reminder
/landLanding is Session Flow's word for bringing finished work into the official copy — with your approval, after the tests passRarely; /workon offers it for you
/quickfix <what>A tiny fix, tested and brought home in one gesture30-second fixes that do not deserve a session
/recall <scope> <question>Asks a helper "what did we say or decide about X" — it reads the archive in its own memory and hands back just the answerWhen you need something from an old session
/repo-healthA snapshot of the project's state, built by asking git rather than from memoryAny time you want to know what is going on
/workon <name>Starts or resumes a workstream: offers to bring home any finished work, sets up your private working space, briefs you on where things standEvery time you sit down to work
/wrapCloses out the session: updates the handoff and Board, saves everythingWhen you are stopping for now
/wrap-endEverything /wrap does, plus tidies the working space awayParking the project for a while
/wrap-liteQuick save, plus a ready-to-paste opener for a fresh conversationConversation full, but you are mid-task

The working day

  • You start: /workon billing-rework. Claude asks git what state the project is in — never its own memory. If an earlier session left finished work, it offers: "Land these first? (recommended — takes about a minute.)" Then it sets up your working folder, reads the handoff and Board, sorts anything in the Inbox with you, and briefs you. It waits for your go-ahead before touching anything.
  • You work. Nothing to remember. After every exchange your work is committed and pushed to GitHub — the online service holding your project's backup copy. If the computer dies mid-sentence, you lose the sentence.
  • Claude watches how full the conversation is getting. At roughly three-quarters full you get a one-time nudge to move to a fresh conversation — early enough that the handoff gets written properly rather than in a panic. A second, more urgent nudge fires if the conversation is about to compact itself.
  • You stop, one of three ways. Mid-task with the conversation full → /wrap-lite, which hands you an opener to paste into a new conversation. Done for now → /wrap, which answers one question: is this finished? Complete and tests pass → ready ("this can be brought home"); otherwise in progress with a one-line status note saying what is left. Parking the project → /wrap-end: all of that, plus the working folder is tidied away, the work still safe on GitHub and still marked ready.
  • Later — maybe days later — the work comes home. The next /workon finds the ready work and offers to land it. Claude shows you a one-line summary of each piece, asks which to bring in, checks each still fits the latest official copy, runs the tests, folds the session into one tidy history entry, updates the handoff and ledger, and clears the draft away. A failed test sets that piece aside with a status note — everything else still lands, and nothing is ever half-landed.

Every wrap ends with two short blocks so you never hunt back through the conversation: what it just did, then a numbered Your next steps.

Tiny fixes skip all of it. /quickfix fix the typo in the welcome email makes the change in a throwaway draft, tests it, shows you a one-line preview, brings it home and cleans up.

What runs by itself — the six hooks

You never invoke these. They are what makes the system work in practice, and all fail safe: an error lets your work continue and says so, rather than blocking you.

HookWhen it firesWhat it does for you
flow-archiveAfter every exchangeThe archivist. Copies the conversation to a permanent archive folder, keeping a readable version of every conversation forever.
flow-checkpointAfter every exchangeThe auto-saver. Commits your work and pushes it to GitHub. This is why you cannot lose anything.
flow-context-nudgeConversation ~three-quarters fullThe one-time suggestion to move to a fresh conversation.
flow-main-guardBefore any of Claude's edits or git commandsThe guard. Stops Claude editing the official copy directly while parallel sessions run, and stops a wrapped conversation making further edits. Claude's tools only — your own edits are always free.
flow-precompactJust before a conversation compacts itselfThe same suggestion, with urgency — so the handoff is written before detail is lost.
flow-reportWhen a session startsOne line of orientation — e.g. "2 pieces of work READY to land". Read-only.

Starting a project

A project is a normal folder on your computer, wherever you keep your work — not inside any special Claude folder. The one requirement is that it is tracked by git. If Claude Code already works on the project, it almost certainly is. For a brand-new folder, tell Claude "set up git in this folder and connect it to GitHub" — a one-minute job.

After that there is nothing to configure. /workon <name> creates the working space; the first /wrap writes the handoff and settings file. When Claude writes tests — small automatic checks that the thing still does what it should — /wrap records how to run them, and from then on they run before any work reaches the official copy.

The Board comes later, deliberately: phases only mean something once a plan exists, so the Board is created the moment a plan is approved, with phases matching that plan's milestones. A workstream that is still an open question does not get one yet. Ask for one any time with /dev-project setup.

Bringing an existing project in

Nothing converts until you touch it. The first time /workon or /wrap meets a project whose handoff predates Session Flow, it offers a one-time migration: one yes archives the old handoff, rewrites it to the current format, creates the settings file, and converts any external board into a local Board file — showing you the mapping for approval first. It copies everything as it stands, flagging what looks out of date rather than dropping it silently. Bringing the content up to date happens with you, in the next live session.

6. What you get

  • A developer-grade environment without the learning curve. Version control, parallel work, automatic test checks, reversible history — all running properly, none of it requiring you to learn git.
  • Work that cannot be lost. Every exchange is saved and backed up. Forgetting to save is not a failure mode here; forgetting to wrap costs you a summary, not work.
  • A permanent, searchable history. Every conversation kept in readable form, forever, outside the project. /recall answers questions from it — "what did we decide about the pricing tiers?" — without dragging the old conversation into your current one.
  • Nothing changes without your yes. Claude never merges work on its own. Always a preview, a test run, an approval.
  • Parallel threads that coordinate. Several strands at once, each isolated, each able to hand notes to the others.
  • A guide, not just a tool. Every command says what it just did and what to do next, in plain English.

Your next step: open a project and run /workon <name>. For a new workstream, use a short lowercase name like billing-rework. Everything else is offered to you as you go.

Appendix A — where things live

your-project/
├── HANDOFF.md                  ← the handoff (or the index, if several workstreams)
├── HANDOFF-<name>.md           ← one handoff per workstream
├── BOARD-<name>.md             ← the Board, with the Inbox at the bottom
├── docs/
│   ├── ledger.md               ← what changed, why, and what was reversed
│   └── <name>-runbook.md       ← how to operate the thing
├── _handoff-archive/           ← retired workstreams' handoffs
└── .claude/
    ├── flow.yaml               ← project settings (test command, parallel mode)
    ├── branch-state/           ← status cards for work in flight
    ├── session-reports/        ← per-session summaries when several drafts run at once
    └── worktrees/              ← the private working folders themselves

All of it is saved into the project's history except the private working folders.

This tree shows the project after work has been brought home. A workstream still in flight keeps its handoff, Board and work inside its own draft copy under .claude/worktrees/<name>/ until it lands — which is what stops parallel sessions making conflicting edits to your live documents.

The ledger is a dated list of everything ever brought home: what changed, why, and anything reversed. A runbook appears only when an older project is migrated in and its long reference sections move out of the handoff. The fully annotated tree is on the Technical tab.

The conversation archive

One place lives outside the project: the archive — every conversation, past and present, as a readable text file you can open and copy from, beside the raw original. This is where history lives after Claude Code's own list forgets it, and it is what /recall searches. It stays on your computer: never backed up to GitHub, never shared.

C:\ClaudeArchive\ *
└── <project>\                        ← one folder per project
    └── <workstream>\                 ← one folder per workstream
        ├── billing-rework-v3--a1b2c3d4.md      ← readable transcript — kept forever
        └── billing-rework-v3--a1b2c3d4.jsonl   ← full raw history — kept 180 days

* Example location. The archive folder is a setting (FLOW_ARCHIVE_DIR) — ask Claude to set or change it. The readable version is kept forever because it takes up so little space; the raw version defaults to 180 days (FLOW_ARCHIVE_RAW_DAYS).

Appendix B — common questions

Do I have to remember to land?
No. /workon checks for finished work every time you start, and offers. Your job is saying yes. Run /land yourself only when you want work in the official copy sooner than your next session — just before putting something live, say.
Can I lose work if I forget to wrap?
No. The work is already backed up by the auto-saver. Not wrapping means the handoff was not written for that session — nothing more. The next wrap writes it from the saved history. The only cost is that the next session rebuilds context from the Board and the saved work rather than an up-to-date handoff.
Why is there no handoff file for my new workstream?
Two reasons, both normal. The handoff is created by the workstream's first /wrap or /wrap-lite, not by /workon — so a conversation that ended without wrapping leaves none. And until the work lands, the handoff lives inside the draft copy, appearing alongside the others only when the work comes home. To read it meanwhile, open it from the working folder or ask any live session.
What does "ready" actually mean?
The verdict /wrap records: the task is complete and the tests pass. Ready work is what /workon and /land offer to bring home. You can overrule it either way.
What if the tests fail when landing?
That piece is set aside untouched, with a status note naming the failed test. Everything else still lands. Nothing is ever half-landed.
What is the difference between the three wraps?
Same task continuing right now in a fresh conversation → /wrap-lite. Stopping for now, even a day → /wrap. Parking the project and tidying up → /wrap-end. When something has shipped or a phase has finished, use /wrap so the Board reflects it immediately.
Why did a command refuse to edit something?
It only ever refuses Claude's edits, never yours. Either the official copy is locked because parallel sessions are running — use /workon, /quickfix or /land for real changes — or you are in a conversation that has already been wrapped, so continue in the new one. The message says which. The handoff and Board are the exception: always writable, even on a locked official copy, because they are coordination notes rather than the project's content.
Can a session working on a different workstream write to my Inbox?
It depends where that session is working.
The session doing the writingCan it reach another workstream's Board?How it hands a note over
In the main copy of a projectYes — even a locked project, even a different projectWrites the Board directly
In its own draft copy, still liveNoFiles a drop; /workon folds it in
In a draft copy and already wrappedNoFiles a drop; /workon folds it in
The middle row is the trap: without the drop queue it would not look like a failure. The write would succeed — just into the wrong copy. Session Flow warns instead, and hands back the exact drop command to use.

Inbox notes are things not to be forgotten, not things that cannot wait, so delivery at that workstream's next session is the right speed. For anything genuinely urgent, one live session messages another with SendMessage. And nothing goes missing meanwhile: /repo-health reports notes still waiting for a workstream nobody has opened.

What happens to files in a draft copy that git was not tracking — a stray .env file, say?
(A .env file holds settings, often passwords and access keys; projects deliberately keep it out of version control so it never reaches GitHub.) Before Session Flow cleans up a finished draft copy, it copies out anything left behind that git was not tracking. But do not lean on that: a draft copy should never be the only copy of anything. Passwords, keys and tokens belong in your password manager and in environment variables — settings stored in Windows itself rather than in a file. Anything else irreplaceable belongs outside the working folder too.
Is there protection if Claude's own checks are bypassed?
Yes. GitHub can be set to refuse two things on the official copy: permanently deleting its history, and rewriting it. That runs on GitHub's servers, so it holds even if something local goes wrong. One-time setup per project; needs a paid GitHub plan if the project is private.
Why did VS Code warn "Failed to save" when I edited a Board or handoff?
You had the file open with unsaved edits while Session Flow updated it in the background — usually a landing bringing home changes made in a draft copy. Nothing is lost; your typing is still in the tab. Choose Compare, copy your additions across, save. Avoid Overwrite, which discards the background update. Writing Inbox lines and saving straight away keeps the window for this tiny.
Does anything remind me to come back?
No, by design. State lives in files that answer when asked. If you want a reminder, put one wherever you keep your own tasks.
Can a draft copy get stuck, unable to catch up with the official copy?
No. If a draft needs the latest official copy folded in mid-work — rare — Claude does it as a plain merge, never by rewriting the draft's history, so nothing can strand it. The one moment history is genuinely rewritten is landing, and that step recovers on its own even if interrupted.
Why does an old conversation show an error, "read-only", or an "Open Worktree" button?
All three mean the same harmless thing: that conversation ran in a draft copy that has since been cleaned up after its work came home. Old conversations are read-only archives — scroll and read freely, but messaging one makes VS Code try to restart Claude inside a folder that no longer exists, failing with a misleading "native binary failed to launch" error. Nothing is broken; no work is lost. To ask about an old session, use /recall in any live conversation — /recall om-pipeline-v34 what did we decide about the OM tile? — or name a whole workstream instead. Deleting an old conversation you do not need is fine.

Appendix C — glossary

Every term this guide defines, in one place.

TermPlain meaning
auto-saverThe automatic save-and-backup after every exchange (the flow-checkpoint hook)
BoardThe workstream's high-level plan: its phases, what is waiting, what is only an idea, and the Inbox
branchGit's name for a separate line of work — a version of the project's history you can change without disturbing another
Claude CodeThe app you run Claude inside
commandA plain-English instruction starting with a slash — /workon, /wrap, /land
commitSave a snapshot of your work
compactWhat the model does when a conversation fills up — summarises its own history to make room, losing detail
conflictWhen git sees changes it cannot decide between
contextEverything the model can currently see: this conversation, plus whatever files it has been shown
draft copyA private folder where one session's changes happen, leaving the official copy untouched
dropThe AI's inbox for passing ideas between workstreams — a note left in a mailbox outside every project; /workon folds it into the right Board's Inbox
.env fileA settings file that often holds passwords and keys, deliberately kept out of version control
environment variableA setting stored in Windows itself rather than in a file — where passwords and keys belong
exchange / turnOne message from you plus Claude's reply. The auto-saver runs at the end of every one
gitThe version-control system under everything — it keeps the project's history as saved snapshots
GitHubThe online service holding your project's backup copy, where every save is sent
handoffThe summary one session leaves for the next — created and updated only by the wrap commands
hookA small background program Claude Code runs automatically at set moments
InboxThe section at the bottom of a Board where new ideas wait to be triaged at the next /workon
ledgerThe dated list of everything ever brought into the official copy — what changed, why, what was reversed
lockedA project running parallel sessions, where Claude may not edit the official copy directly. It never applies to your own edits
merge / landCombine one line of work into another — here, bringing draft work into the official copy
modelClaude itself — the AI doing the work. Distinct from Claude Code, which is the app it runs inside
official copyThe real, current version of the project — git's main or default branch
phaseOne stage of a Board's plan, ending at a milestone
projectThe overarching initiative — one git-tracked folder on your computer
pushSend those snapshots to the online backup copy on GitHub
readyThe verdict that work is complete and its tests pass, so it can be brought home
runbookHow to operate the thing — commands, addresses, standing rules
SendMessageThe command one live session uses to speak to another live session directly
sessionOne working conversation with Claude, from opening it to closing it
squashCombining a session's many small snapshots into one tidy history entry
status noteThe one-line "what is left", or "why it did not land", attached to work in flight
testsSmall automatic checks that confirm the project still does what it should
triageSorting and prioritising new items against the plan that already exists
version controlKeeping every past version of a file, so any change can be undone and any old state recovered
workstreamOne strand of work inside a project, with a short name like billing-rework
worktreeGit's name for the private folder a draft copy is edited in

Session Flow ships as nine slash commands, six hooks and three templates. For exact procedures, file contracts and known limitations, open the Technical tab. Load either version any time with /flow-help (or /flow-help technical).