flow

module
v1.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 15, 2026 License: MIT

README ΒΆ

🌊 flow

ko-fi

CLI for managing multi-repo development workspaces using git worktrees.

Working across multiple repos means repetitive setup, scattered branches, and cleanup debt. ${\color{cyan}\texttt{flow}}$ uses a YAML state file to define which repos and branches belong together, then materializes the workspace with bare clone caching and git worktrees.

Features

🌳 Workspaces as code β€” Declare repos and branches in a YAML state file. Repos are cloned once into a shared cache and checked out as lightweight git worktrees, so multiple workspaces pointing at the same repo don't duplicate data.

🚦 Status tracking β€” Define custom check commands that dynamically resolve the status of each repo in a workspace.

πŸ€– AI agent integration β€” Generate shared context files and agent instructions across repos so your AI tools have the right skills and knowledge from the start.

Why ${\color{cyan}\texttt{flow}}$?

AI agents work best when they have deterministic tools instead of freeform instructions. Asking an agent to "set up a multi-repo workspace" produces inconsistent results β€” but giving it a CLI that manages YAML state files, bare clone caches, and git worktrees produces the same result every time.

${\color{cyan}\texttt{flow}}$ is that deterministic layer. It gives agents (and humans) a small set of reliable commands for workspace lifecycle: create, define repos in YAML, render worktrees, check status. Agents call these tools through embedded skills rather than interpreting setup instructions on their own.

Beyond workspace creation, ${\color{cyan}\texttt{flow}}$ centralizes agent skills across all your workspaces and lets you check the status of many workstreams in parallel. It is not opinionated about which agent or editor you use β€” configure Claude, Cursor, or anything else in a single config file. Everything is customizable: status checks, agent skills, workspace structure.

Describe the problem, ${\color{cyan}\texttt{flow}}$ does the rest

flow init creates a workspace pre-configured with agent instructions and skills, then launches you directly into your preferred agent β€” Claude, Cursor, or anything else you configure. The agent reads the embedded flow skill to understand how workspaces work, plus any custom skills you've added (like resolving repos by friendly names). Describe what you're working on and the agent handles the rest: editing the state file, rendering worktrees, and getting everything ready to go.

flow init

Track all your workstreams in one place

flow status gives you a live view across all active workspaces. Statuses are fully customizable β€” they're just one-line shell commands in a config file, not hardcoded logic. Have your AI generate complex status checks (query GitHub PRs, check CI, inspect git state) and hide them behind simple labels. Nothing in ${\color{cyan}\texttt{flow}}$ is opinionated; anything that could be is configurable.

flow status

Getting started

Install
brew install milldr/tap/flow

Or with Go:

go install github.com/milldr/flow/cmd/flow@latest

Or build from source:

git clone https://github.com/milldr/flow.git
cd flow
make install
Create a workspace and start working

${\color{cyan}\texttt{flow}}$ creates a workspace and launches your configured agent. Describe what you're working on and the agent handles the rest.

flow init

The agent reads its embedded skills to edit state.yaml, run flow render, and begin working in the repos.

See the spec reference for YAML file schemas and the command reference for all commands.

How it works

${\color{cyan}\texttt{flow}}$ stores everything under ~/.flow (override with $FLOW_HOME):

~/.flow/
β”œβ”€β”€ config.yaml                         # Global config
β”œβ”€β”€ status.yaml                         # Global status spec
β”œβ”€β”€ agents/
β”‚   └── claude/
β”‚       β”œβ”€β”€ CLAUDE.md                   # Shared agent instructions
β”‚       └── skills/
β”‚           β”œβ”€β”€ flow/SKILL.md           # Built-in: workspace management
β”‚           └── find-repo/SKILL.md      # Your own custom skill
β”œβ”€β”€ workspaces/
β”‚   └── calm-delta/                     # Workspace ID
β”‚       β”œβ”€β”€ state.yaml                  # Workspace manifest (name: vpc-ipv6)
β”‚       β”œβ”€β”€ status.yaml                 # Optional workspace-specific status spec
β”‚       β”œβ”€β”€ CLAUDE.md                   # Generated workspace context
β”‚       β”œβ”€β”€ .claude/
β”‚       β”‚   β”œβ”€β”€ CLAUDE.md β†’ agents/claude/CLAUDE.md
β”‚       β”‚   └── skills/                # Consolidated from shared + repo skills
β”‚       β”œβ”€β”€ vpc-service/                # Worktree
β”‚       └── subnet-manager/             # Worktree
└── repos/
    └── github.com/acme/
        β”œβ”€β”€ vpc-service.git/            # Bare clone
        └── subnet-manager.git/         # Bare clone

Bare clones are shared across workspaces. Worktrees are cheap β€” they share the object store with the bare clone, so multiple workspaces pointing at the same repo don't duplicate data.

${\color{cyan}\texttt{flow}}$ ships a built-in flow skill and consolidates skills from all repos into each workspace's .claude/skills/ directory on render. Add your own skills to the shared directory or to individual repos. Run flow reset skills to update the built-in skill without touching your own.

See the spec reference for YAML file schemas and the command reference for usage, flags, and GIF demos.

Customization

${\color{cyan}\texttt{flow}}$ stores everything under ~/.flow (override with $FLOW_HOME). Edit these files to customize your setup:

Command What it configures
flow edit config Default agent, editor preferences
flow edit status Status checks for tracking workstreams
flow edit state <workspace> Repos and branches for a workspace
flow reset skills Restore default agent skills to latest

See the spec reference for YAML schemas and the command reference for all commands.

Requirements

  • Go 1.25+
  • Git 2.20+ (worktree support)

Support

I build and maintain projects like flow in my free time as personal hobbies. They're completely free and always will be. If you find this useful and want to show some support, feel free to buy me a coffee:

ko-fi

License

MIT

Directories ΒΆ

Path Synopsis
cmd
flow command
Package main is the entry point for the flow CLI.
Package main is the entry point for the flow CLI.
gendocs command
Package main generates CLI reference documentation using cobra/doc.
Package main generates CLI reference documentation using cobra/doc.
internal
agents
Package agents manages AI agent configuration files for workspaces.
Package agents manages AI agent configuration files for workspaces.
cache
Package cache provides simple file-backed caching for flow.
Package cache provides simple file-backed caching for flow.
cmd
Package cmd defines all cobra commands for the flow CLI.
Package cmd defines all cobra commands for the flow CLI.
config
Package config provides path resolution for Flow's directory structure.
Package config provides path resolution for Flow's directory structure.
git
Package git wraps git CLI operations behind a testable interface.
Package git wraps git CLI operations behind a testable interface.
iterm
Package iterm provides iTerm2-specific terminal escape sequences.
Package iterm provides iTerm2-specific terminal escape sequences.
state
Package state handles workspace state file loading, saving, and validation.
Package state handles workspace state file loading, saving, and validation.
status
Package status handles status spec loading, validation, and resolution.
Package status handles status spec loading, validation, and resolution.
ui
Package ui provides styled terminal output and interactive prompts.
Package ui provides styled terminal output and interactive prompts.
workspace
Package workspace provides the core business logic for managing workspaces.
Package workspace provides the core business logic for managing workspaces.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL