Flow is a Claude Code workflow for a solo developer: global rules (home/), skills (skills/), the flow command and its hooks (scripts/), a project scaffold (project-template/) and the docs (docs/). Plain Node and bash with no dependencies, plus 3 submodules under lab/. This checkout is the dev copy. Not yet released.
docs/spec/: what Flow does and how it is built.product.mdsays it whole and indexes one file per part.docs/dev/layout.mdmaps the tree..flow/tickets/: open work, the beta checklist included..flow/research/: the research behind the design.lab/: the maintainers' workspace, holding the 3 submodules andlab/scripts/, which serve this repo alone.~/.flow/wiki/claude-code/downloads/: Claude Code's documentation on disk. Itsllms.txtindexes every page Anthropic publishes, andWebFetchreaches the rest..agents/holds the one real copy of the rules and skills,.claude/what Claude Code reads,.flow/what Flow owns.docs/reference/files.mdlists every path.npm testinsidescripts/runs Flow's suite, andlab/util/has its own.docs/dev/trying-changes.mdhas both procedures.
read-the-spec-firstReaddocs/spec/product.mdand the spec file of the part you touch before changing skills installation, the scripts or the docs tree.drain-workflow-notesBefore choosing the next work, read~/.flow/workflow-notes.mdand the current month of~/.flow/logs/failures/. File each note as a ticket throughflow new, or join it to the ticket it repeats, then delete the note. A failure worth fixing gets a ticket the same way, and the log stays untouched.never-suggest-file-findingsNever offer/flow:file-findings, and never count the closed tickets waiting for it. End with the next ticket instead: the user runs it when they choose, and each reminder costs them a line to skip.check-claude-code-updatesWhen asked, runbash lab/scripts/claude-code-changes.shand read each release against Flow. Write what touches Flow into.flow/research/claude-code-updates.md, give each needed change a ticket, then set line 1 to the newest release read. Where Flow comes to rely on a newer release, raiseMIN_CLAUDEinscripts/lib/machine/prereq.jsand the README's Install line. Download again any page in~/.flow/wiki/claude-code/downloads/pages/whose topic a release changed.design-rules-can-be-overturnedPaths, types, file shapes, what a skill owns: a better idea wins. Say what the rule protected, whether that still holds, and recommend. The conduct rules, git, installing, deletes and forks hold regardless.no-commit-no-pushNever rungit commitorgit push, here or in a submodule, unless the user asks. Every other git command is fine, but never discard the user's uncommitted work.deletes-need-confirmationA delete needs its own confirmation, even inside an approved plan. Moving is not deleting. Pre-approved: something this session superseded, cleanup of what a change left behind, and your own scratch intmp/.design-in-conversationDesign this workflow in plain conversation. Never invoke a brainstorming skill for it.no-fork-subagentNever use a fork, the subagent that starts with a copy of the whole conversation. Never propose one, never write one into a skill.no-commit-stepFlow never commits a project's code, and no skill, rule or hook tells the agent to. The user commits when they judge the work done. A missing commit step is never a fault: never raise one.scratch-in-tmpScratch files go intmp/, gitignored. Never/tmp, never the repo root. Delete what your work put there in the same turn, once its result is written down.computers/,try/andtests/belong to tools and stay.tracked-never-means-git"Tracked" means the agent maintains the file as the work moves. A handoff is untracked: read once, left alone, rewritten whole next time. Handoff files are committed like everything else.write-locked-decisionsWrite a decision the user confirmed with no open threads into its record, batched.write-dropped-proposalsA proposal dropped, whoever dropped it, goes into the ticket or the spec file it belongs to, with why, in the same turn.
approval-exceptionsWriting down a decision already locked, and scratch files intmp/, need no approval.one-sentence-where-one-worksSkill content can be detailed. A trigger or routing line in a rule file cannot.short-beats-the-checksNever let a check under### Before sendingstretch a reply past what its topic is worth. Define a term in a clause, and restate only what the user needs to decide.never-rule-against-uninstructedNever rule against a behavior nothing in Flow instructs.skills-docs-move-togetherdocs/dev/skills.mdandskills/tools/file-findings/references/write-skills.mdsay the same rules. Edit both in the same pass.phases-closed-at-4groundwork,execute,prototypeanddebug. Set by the user and not reopenable.no-code-review-skillReview runs in the same session, never a subagent. The criteria live beside the skill that produced the artifact:skills/phases/execute/references/review-code.mdfor code.short-skill-no-argumentsA skill invoked over and over stays short. The 4 phase skills and/flow:handofftake no argument, since a ticket arrives through its own skill. A long skill takes one only where it names what the skill opens. Binds Flow's own skills only.file-findings-densityskills/tools/file-findingsis the density to aim for.plain-words-in-skillsPlain, common words, with no invented or rare terms. Binds what a skill produces as hard as what it says.no-versions-no-manifestflow installrecords no version number and no list of what installed.skill-edits-are-liveA skill edit reaches a session at once, through the symlink. Adding, renaming or removing a skill needsflow install.prefix-comes-from-the-manifestEvery skill is typed/flow:<name>, and no folder, path or frontmatternamein this repo carries the prefix.skills/.claude-plugin/plugin.jsonnames the set. A command inclaude/commands/sits outside the plugin, so it is typed bare:/capture.never-symlink-a-folderNever symlink~/.claude/skills/,agents/,rules/orcommands/as a whole folder.flow installlinks per item, and refuses to replace anything not already a symlink. The plugin folderflow/is the one folder link.scripts-keep-their-extensionflow.json disk,flowto type: the symlink drops the extension.one-source-two-waysEvery shipped script lives once, inscripts/.lab/scripts/holds the ones that serve this repo alone. Never copy a file.path-commands-are-bareflow next,util fs tree docs. Everything else as~/.flow/scripts/<file.ext>.bash-or-node-by-jobBash where the script wraps another command. Node where there is real logic.no-sandbox-runsNever proposelab/scripts/try.shor a sandbox run, in a plan, a check or a## Done when. The user ruled it an unneeded complication, said twice, the second time after a run they started on my suggestion.no-skill-under-labFlow's own skills live inskills/. A skill from another repository lives in that repository. Never let alab/path leak into a skill,home/orproject-template/.read-repos-with-catrepos/holds other people's clones. Read them withcat, neverRead, and never edit them.home-files-exist-twicehome/CLAUDE.mdis the public template, and~/.flow/CLAUDE.mdis the personalized copy. Never write personal content into this repo. Carry a rule worth shipping across by hand.placeholder-comments-are-deletedA placeholder comment goes the first time its section is filled in.no-status-in-claude-mdNo counts, no dates and no build status here. What Flow does goes indocs/spec/, open work in tickets.