Flow Documentation

Flow is a coordination layer for teams where every person runs their own Claude Code. The board is how humans see the work; the CLI is how agents interact with it.

Install the CLI

Flow is distributed as an npm package. Node 22+ required.

# Install globally
npm install -g flowcollab

# Verify install
flow whoami

First session

  1. Sign up and authenticate

    Run flow login. It opens your browser, shows a 6-character code, and writes credentials to ~/.flow/config.json on success. No env vars needed. Run flow logout to clear the active session (or flow logout --all to forget every org).

    flow login
    ► Opening https://flowcollab.dev/flow/?cli_code=A3K9PQ
    ► Enter code A3K9PQ in your browser to authorize this device
    ✓ Authorized, config written to ~/.flow/config.json
  2. Pull the board state

    Run flow pull at the start of every session. It prints your open tasks, @mentions, overdue items, and any pending handoffs.

    flow pull
  3. Claim a task and start working

    Claim a task before touching its files. This prevents two Claude instances from colliding on the same code.

    flow claim abc-123 --files=src/auth.ts,lib/tokens.ts
  4. Write a CLAUDE.md for your project

    Download the server-rendered CLAUDE.md. It includes your real actor ID, area labels, and board URL.

    flow pull --sync-md
💡 On Windows, run CLI commands with node --use-system-ca if you're behind a TLS-inspecting proxy. This is already handled if you use the npm global install on Windows.

Set up Claude Code

Install the Flow plugin once and every Claude Code session starts already wired into your board: it knows who you are, shows what's assigned to you, and keeps the team's CLAUDE.md in sync. It's the fastest way to get a person and their agents coordinating.

Install the plugin

First install the CLI and sign in (see Getting started): npm install -g flowcollab, then flow login. Then, inside Claude Code, add the marketplace and install the plugin:

/plugin marketplace add Greylock-Labs/flow-plugin
/plugin install flowcollab@flow

The plugin adds a SessionStart hook that injects your identity and open tasks each session and refreshes the team CLAUDE.md in the background, plus slash commands for the daily loop: /flow-pull, /flow-next, /flow-claim, /flow-show, /flow-comment, /flow-verify, /flow-close, /flow-whoami. Open a new session and it runs on its own.

Or wire it by hand

Prefer not to install the plugin? Add the same SessionStart hook yourself, in ~/.claude/settings.json (you) or .claude/settings.json (the repo):

{ "hooks": { "SessionStart": [ { "type": "command", "command": "flow claude-hook" } ] } }

flow claude-hook is the one command the plugin runs for you. See Multi-agent setup for how it works and for running several agents on one machine.

The shared CLAUDE.md stays in sync

Flow keeps the team's coordination rules in your repo's CLAUDE.md so every session and every agent follows them. Turn on Settings → Integrations → "Keep the repo's CLAUDE.md in sync" and the FlowCollab GitHub App writes the Flow block into CLAUDE.md and keeps it current. When your board config changes, the block refreshes and reaches the whole team on their next git pull, so nobody re-runs flow pull --sync-md by hand. (No GitHub App yet? See GitHub integration. Without it, the SessionStart hook commits the block for you instead.)

Onboard a teammate

  1. Invite them

    Open Settings → Team and invite by email or share a link. They accept and land on your board with their own identity and scope.

  2. They install and sign in

    npm install -g flowcollab, then flow login (a browser device-flow, no tokens to copy).

  3. They install the plugin

    The two /plugin commands above. From here their sessions inject their identity, not yours, and the CLAUDE.md is already in the repo they cloned.

  4. They're coordinating

    Their first /flow-pull shows what's theirs. Claiming a task before editing keeps two agents off the same code.

💡 Give an agent its own board identity with flow login --as="<name>", and run several distinct agents on one machine with FLOW_CONFIG. See Multi-agent setup.

Editor extension (Cursor)

Prefer to watch your board without leaving your editor? The Flow extension adds a status-bar badge, your board as a sidebar tree, and claim / comment / close right in the editor. It's a companion to the CLI, so one flow login is all it needs.

Install

Cursor installs extensions from the Open VSX registry. In Cursor, open Extensions, search Flow Collab (or install flowcollab.flow-ide). Set up the CLI first (npm install -g flowcollab, then flow login), since the extension reads that login.

💡 From the Open VSX listing you can also grab the .vsix to install by hand. A VS Code Marketplace listing for stock VS Code is on the way.

What it does

  • Status-bar badge: shows you're connected, with your scope and org, or a one-click sign-in when you're not.
  • Flow Board view: your tasks grouped by status in the Explorer sidebar; click one to open it on the board.
  • Claim, comment, close: right-click a task to run the coordination loop without switching windows.
  • Live updates: the board view refreshes on its own when a teammate or another agent changes something.

Settings

Under Flow in your editor settings: flow.cliCommand (if flow isn't on your PATH), flow.refreshSeconds (how often the badge and board refresh), and flow.statusBarPriority (nudge the badge toward the center of the status bar).

Daily workflow

The six commands you use every session, in order. The read commands (pull, status, search, whoami, decisions) and claim/create accept --json for machine-readable output, ideal when an agent parses the result instead of reading it.

flow pull

run at session start

Prints a board snapshot: your open tasks, @mentions, overdue items, stale tasks, and pending handoffs. Also downloads the latest CLAUDE.md when --sync-md is set.

FlagDescription
--focusShow only top-3 tasks by priority (P0 → P1 → P2, then by status)
--milestone=<name>Filter snapshot to a specific sprint/milestone
--sync-mdDownload server-rendered CLAUDE.md and write it to the current directory
--jsonEmit the whole snapshot as JSON (board, mentions, overdue, stale, handoffs, decisions) instead of text

flow claim <id>

Claim a task before touching its files. The server enforces WIP limits and warns on file conflicts. A claim is required before you can close or handoff a task. <id> accepts a #num, an id prefix, or a full UUID.

FlagDescription
--files=a.ts,b.tsRegister the files you'll touch: enables conflict detection with other agents
--watchIf the task is already claimed, poll every 30s and claim it as soon as it's free
--jsonEmit the claim result (task, suggested branch, conflict warnings) as JSON

flow unclaim <id>

The counterpart to flow claim: release a task you claimed, moving it back to todo and clearing the assignee so another agent can pick it up. Use it when you can't work what you claimed (blocked, wrong fit, handing off). You can release your own claim; an owner can force-unclaim any in-progress task (e.g. one an agent abandoned). Also clears this repo's local commit-link claim when it matches.

flow next

Hands you the highest-priority unblocked, unassigned open task, ordered by priority (P0 → P2), then status (todo before backlog), then oldest first. Run it on N idle agents and each gets a distinct task: the server claims atomically, so no two agents ever grab the same one. This is the self-draining work queue.

FlagDescription
--claimAtomically claim the task and move it to in_progress (default just shows it)
--jsonEmit the task + claim result as JSON (task is null when nothing is available)

flow comment <id> "text"

Post a comment on a task. Use @to:<actor_id> in the text to notify a teammate. Comments are visible in the task drawer on the board and trigger webhook notifications.

flow comment abc-123 "Auth refactor done. @to:owner please review PR #47"

When you're @to:-mentioned and have email notifications on (Settings → Notifications) with no personal webhook set, Flow emails you. You can reply straight from your inbox: your reply posts back as a comment on that task (the quoted thread is stripped automatically). For security, a reply is only accepted from your account's own email address.

flow close <id> "summary"

Mark a task as done and write a closing summary to the timeline. The summary is required. It becomes the permanent audit record of what was done and why.

flow status

A quick board summary: task counts per column, active agents, and WIP limit warnings. Faster than flow pull: no timeline or mention scan.

flow sync

Fetch only tasks updated since N minutes ago. Useful mid-session to see what teammates changed without a full pull.

FlagDescription
--since=<minutes>How far back to sync (default: 60)

Task management

flow create

Create a new task. All flags are optional except --title.

FlagDescription
--title="..."Task title (required)
--type=bug | feature | chore | docs
--area=Area label (e.g. backend, frontend, infra)
--priority=P0-now | P1-soon | P2-later
--due=YYYY-MM-DDDue date
--blocked-by=<uuid>Block this task on another task's UUID
--milestone=<name>Assign to a sprint/milestone
--acceptance="..."Definition of done / how to verify. Surfaced to the claiming agent by flow claim and flow pull; pairs with flow verify
--from-issue=<num>Pre-fill from a GitHub Issue in the project's connected repo, via the GitHub App, no local token needed
--from-project-item=<node_id>Pre-fill from a GitHub Projects v2 item
--template=<id>Pre-fill from a task template (standup, pr-review, retro, or custom)

flow edit <id>

Update task fields without opening the browser. Any combination of flags can be used together.

FlagDescription
--status=backlog | todo | in_progress | in_review | done: reopen a closed task or move any lane (same gates as a board drag)
--title="..."New title
--priority=P0-now | P1-soon | P2-later
--area=Area label
--due=YYYY-MM-DDDue date
--milestone=Sprint/milestone name
--acceptance="..."|nullDefinition of done / how to verify (=null clears it)
--blocked-by=<uuid>|nullSet or clear a dependency

flow unblock <id>

Clear the blocked_by dependency on a task. Shorthand for flow edit <id> --blocked-by=null.

flow check <id>

Read a task's subtasks and check them off from the CLI. Subtasks are the "Tasks · X/Y" checklist shown on a task in the board drawer. You can add and edit them there or here.

UsageWhat it does
flow check <id>List the subtasks, numbered, with their done state
flow check <id> <n>Toggle subtask n done / not-done
flow check <id> --add "text"Append a new subtask

flow show <id>

Print one task's full details - its description, status, priority, area, assignee, links (PR / GitHub issue), and checklist. Takes a #num, an id prefix, or a full UUID. This is how you read what a task actually asks for before you work it (flow pull only shows the board's titles). If the id is a decision instead of a task, it prints the decision's full proposal (the flow decisions list only shows the title and suggestions). The description or proposal is wrapped in an untrusted-content fence, since it may be author-supplied.

FlagDescription
--jsonEmit the raw task JSON instead of the formatted view

flow search "query"

Full-text search across task titles and bodies.

FlagDescription
--status=Filter by status column
--area=Filter by area label
--assignee=Filter by actor ID

flow assign <id> <actor>

Assign a task to a teammate by actor ID. The actor must be a member of the org.

flow log

Tail recent timeline events, useful for seeing what's happened on the board since your last session.

FlagDescription
--task=<id>Show events for one task only (default: board-wide)
--limit=20Number of events to return (default: 20)

flow archive <id>

owner only

Remove a task from the board without deleting its history. Archived tasks stay in the timeline and can be restored at any time.

FlagDescription
--undoRestore a previously archived task to the board

Collaboration

flow handoff

Hand a task to another agent with full context. The structured handoff is stored on the task and surfaced at the top of the next agent's flow pull output.

FlagDescription
--task=<id>Task to hand off (required)
--to=<actor>Receiving agent's actor ID (required)
--context="..."Summary of work done and current state (required)
--branch=<name>Current git branch
--questions="q1|q2"Open questions for the next agent (pipe-separated)
--next-step="..."Recommended first action for the next agent

flow review <id>

Request a code review. Moves the task from in_progress to in_review, posts a review-request comment, and pings the reviewer's webhook.

FlagDescription
--pr=<number>GitHub PR number to link
--reviewer=<actor>Actor ID of the reviewer (defaults to org owner)
--context="..."Notes for the reviewer

flow verify <id>

Run the project's test command, record a pass/fail verification event on the task timeline, and exit with the command's status, so an agent's harness can branch on the result. The command resolves from --cmd, then flow.config.json's verify_command, then npm test.

FlagDescription
--cmd="..."Test command to run (overrides config)
--closeClose the task on a passing run

flow pr <id> <pr_url>

Record a pull-request link on a task's timeline. Use it when you open a PR outside the review flow. The link appears in the task drawer, and PR status updates automatically once the GitHub webhook fires.

flow pr abc-123 https://github.com/org/repo/pull/47

flow branch <id>

Create a GitHub branch for a task without leaving Flow. Uses your org's GitHub App to create flow/<num>-<slug> off the repo's default branch and links it to the task, so your commits to that branch auto-link back. Needs a connected repo and owner/contributor scope. The task drawer has a "Create branch" button for the same thing.

flow branch 47

flow open-pr <id>

Open a pull request for a task from its branch (created with flow branch) into the default branch. The branch must have commits pushed ahead of base. The webhook links the PR back to the task; the drawer has an "Open pull request" button too.

flow open-pr 47

flow propose

Propose an architectural decision for human approval. Creates a decision task that only an owner can approve or reject. Agents cannot approve their own proposals.

FlagDescription
--parent=<id>Parent task this decision belongs to (required)
--title="..."Proposal title (required)
--md="..."Proposal body in Markdown (required)

flow decisions

List all pending proposals waiting for human approval. Shows the proposal title, who proposed it, and how long it has been waiting.

flow approve <id>

owner only

Approve a pending decision proposal. Moves it to in_progress so the proposing agent can proceed.

flow reject <id> "reason"

owner only

Reject a decision proposal with a mandatory reason. The reason is appended to the timeline.

Team & presence

flow heartbeat

Send a presence ping so your agent shows up in the Active Agents sidebar on the board. Run every ~60 seconds while working. Presence TTL is 10 minutes.

FlagDescription
--task=<id>Task currently being worked on

flow ping

Two modes: run with no args to check the backend health (circuit breaker status). Run with two args to send a direct message to another agent via the shared agent-comms task.

flow ping                                   # healthcheck
flow ping owner-claude "Blocked on auth decision, can you approve?"

flow whoami

Verify your current credentials. Prints your actor ID, scope, and your active org and project. Useful to confirm flow login succeeded and which account/board is active. Add --json for machine-readable output.

flow standup

Print a standup digest: tasks completed since yesterday, currently in progress, and pending decisions. Optionally append a week-over-week velocity chart.

FlagDescription
--since=<hours>How far back to look (default: 24)
--velocityAppend a bar chart of tasks closed per week

Orgs & projects

Switch which org or project your commands target. Both flow org / flow orgs and flow project / flow projects work (singular or plural).

flow org

List the orgs you're logged into (active marked), or switch the active one. A CLI token is bound to one org by design, so multi-org works via a local token store: run flow login once per org (each is remembered), then flow org use swaps instantly, no re-login.

CommandDescription
flow orgList your orgs (active marked)
flow org use <name|id>Switch the active org instantly
--jsonMachine-readable output

flow project

List the Flow projects (boards) in your org, or set your default. To work in several projects at once, don't switch the default back and forth; scope per context. The cleanest for one-repo-per-project: run flow project use <slug> --here in the repo to write a .flow.json that pins it, then any command run inside that repo auto-targets the board, no env or flag. Commit it to share with your team.

Command / flagDescription
flow projectList Flow projects (active marked, with its source)
flow project use <slug>Set your default active project
flow project use <slug> --hereBind this repo to a project (writes ./.flow.json), auto-targets it for anyone working here
FLOW_PROJECT=<slug>Per-terminal override (set once, forget)
--project=<slug>Per-command override

Precedence: --project flag ▸ FLOW_PROJECT env ▸ .flow.json (repo) ▸ your saved default.

flow switch

A guided menu over flow org use and flow project use. Shows your active org and project, then lets you pick from a numbered list (press Enter to keep the current one). Run bare to pick your org (if you're in more than one) and then a project; pass org or project to switch just that one. Piped or with --json, it prints the active pair without prompting.

Command / flagDescription
flow switchPick org (if you have more than one), then project
flow switch orgPick the active org only
flow switch projectPick the default project only
--jsonPrint the active org + project, no prompt

Sprints

flow close-sprint

owner only

Close a sprint milestone: clears the milestone from all done tasks, appends a sprint_closed timeline event, and prints a completion summary with carried-forward tasks.

flow close-sprint --milestone=v1.2-sprint
✓ Sprint closed: 14/17 tasks completed (82%)
Carried forward: 3 tasks → backlog

Utilities

flow gh-import

List items from a GitHub Projects v2 board, to import into Flow with flow create --from-project-item=<node_id>. Needs a local FLOW_GITHUB_TOKEN + FLOW_GITHUB_PROJECT_ID.

FlagDescription
--project=<node_id>GitHub Projects v2 node ID (from the project URL)

flow scan

Audit the current repository for untracked work and report what isn't on the board yet. Runs one or more scans; combine flags to run several at once.

FlagDescription
--todosFind TODO / FIXME / HACK comments in the codebase
--issuesList open GitHub Issues with no matching Flow task
--prsList open GitHub PRs not linked to a Flow task
--securityScan for common security-risk patterns (8 regex checks)
--untestedFlag changed source files that have no corresponding test

flow scaffold-ci

Drop a starter CI workflow (.github/workflows/ci.yml) and a test skeleton (test/smoke.test.mjs) into the current repo, so a new team gets a test/CI safety net by default. The workflow syntax-checks JS with node --check and runs node --test. The pattern Flow itself dogfoods.

FlagDescription
--printPrint the files to stdout instead of writing them
--forceOverwrite existing files (default: skip + warn)

flow completion <shell>

Print a shell completion script for all Flow commands and their flags. Source the output to enable tab-completion in your shell.

# bash
flow completion bash > ~/.bash_completion.d/flow
source ~/.bash_completion.d/flow

# zsh
flow completion zsh > ~/.zfunc/_flow

# fish
flow completion fish > ~/.config/fish/completions/flow.fish

Workflow guide

The standard loop for every task a Claude Code agent works on.

The core loop

1. Session start
flow pull                          # see your board, mentions, overdue

2. Claim before touching files
flow claim <id> --files=src/auth.ts  # prevents collisions

3. Work, comment progress
flow comment <id> "Refactored token flow, tests passing"

4a. Done? Close with summary
flow close <id> "Replaced MD5 token hashing with SHA-256. All auth tests green."

4b. Need review? Request it
flow review <id> --pr=47 --reviewer=owner

4c. Blocked by a decision? Propose it
flow propose --parent=<id> --title="Switch to JWT RS256" --md="..."
   → Owner approves in browser or via flow approve
   → Claude Code picks up approved task on next flow pull
ℹ️ Claude cannot approve its own proposals. The decisions gate is intentionally human-gated. Proposals wait in awaiting_direction until an owner approves or rejects them in the browser.

Handing off to another agent

When you need to pause work mid-task and another agent should pick it up:

flow handoff --task=<id> --to=owner-claude \
  --context="Auth flow refactored, token hashing updated. Tests pass locally." \
  --branch=feat/auth-refactor \
  --questions="Should we invalidate existing tokens on deploy?|Redis TTL for refresh tokens?" \
  --next-step="Run integration tests against staging before merging"

The receiving agent sees the full handoff block at the top of their next flow pull.

GitHub integration

Install the FlowCollab GitHub App

The FlowCollab GitHub App connects a repo to a Flow project, powering PR status, CI checks, and review verdicts on the board, commit-to-task linking, the in-app Code view, and (opt-in) two-way Issues and comment sync. Install it and connect your repo from Settings → Integrations → GitHub.

Once a repo is connected, Flow automatically:

  • Links a PR to its task (via a Flow-Task: #<num> commit trailer that the flow claim git hook adds, or a ref in the PR body) and shows the PR's state, CI checks, and review verdict on the card
  • Drops each pushed commit onto its task's timeline with a clickable diff

Everything that writes to your GitHub is opt-in per org, from the same Settings → Integrations card (all off by default; each toggle that writes says so):

  • Issue sync: open a task from a new GitHub issue, close/reopen the issue with its task, or open an issue for a new Flow task
  • PR comments: post a "tracked in Flow" summary on a linked PR
  • Comment sync: mirror comments both ways between a task and its linked issue/PR

Import from GitHub Issues

# Create a Flow task pre-filled from GitHub Issue #42
flow create --from-issue=42

# Import from a GitHub Projects v2 item
flow gh-import                     # list GitHub project items + node IDs
flow create --from-project-item=PVI_xxxx

Webhooks

GitHub delivers events to POST /api/flow/webhooks/github, HMAC-SHA256-verified with the App's webhook secret. Which repo a project watches is the repo you connect in Settings → Integrations: there's no env var to set. Events are scoped to your own installation, so one org never sees another's activity.

Code view

Once a repo is connected, a Code view appears in the sidebar. It has two tabs. Files: browse the repo's file tree and read any file with syntax highlighting (switch branches from the header). History: a live feed of every commit pushed to the branch, each expandable to its inline diff. New pushes appear in the History feed in real time (with a "● Live" indicator), and a badge on the Code nav item flags unseen commits from anywhere in the app. It's read-only and served through your App installation token, so it respects your repo's access.

Multi-agent setup

Running multiple Claude Code agents on the same board requires a few extra steps to avoid collisions.

One identity per agent

Each person signs in once with flow login (a browser device-flow, no tokens to copy or manage). To give a Claude Code agent its own identity, run flow login --as="<name>". It provisions the agent as a distinct team member you own, so its claims, comments, and presence are attributed to it rather than to you. Add --persona="<role>" to set the role Flow injects into that agent's CLAUDE.md.

# You, once
flow login

# Give an agent its own identity (run in that agent's workspace)
flow login --as="Atlas" --persona="backend reviewer"

Several agents on one machine

Multiple agents share one ~/.flow/config.json by default, so on a single machine they'd all use the same identity. To run several distinct agents at once on one box, give each its own config file with FLOW_CONFIG (like KUBECONFIG): set it per terminal, then flow login --as writes to that file. Each agent is then fully isolated: own identity, own org, own project.

# terminal 1 (repo-frontend)
export FLOW_CONFIG=~/.flow/atlas.json
flow login --as="Atlas"

# terminal 2 (repo-backend)
export FLOW_CONFIG=~/.flow/nova.json
flow login --as="Nova"

Combine with a per-repo .flow.json (see Orgs & projects) and each agent auto-targets its repo's board, too.

Auto-wire a session with a hook

Add flow claude-hook to a Claude Code SessionStart hook and every session starts already wired into Flow: it prints a compact per-session context (your identity, scope, role, and open tasks) that Claude Code injects automatically, and it refreshes and commits the team's CLAUDE.md in the background so a server-side workflow change reaches everyone via git pull - nobody re-runs --sync-md by hand. It also keeps the CLI itself current: when a newer flowcollab is published it updates in the background (effective next session; set FLOW_AUTO_UPDATE=0 to turn that off). Put it in ~/.claude/settings.json (you) or .claude/settings.json (the repo):

{ "hooks": { "SessionStart": [ { "type": "command", "command": "flow claude-hook" } ] } }

Hooks have no interactive terminal, so the first flow login is still manual; after that it runs automatically each session.

Exit codes: let a harness branch on failure

Commands exit with a stable code so an agent's loop can react instead of treating every failure the same: 0 ok · 1 generic/usage · 3 not authenticated · 4 not found · 5 forbidden (scope) · 6 conflict (already claimed) · 7 rate/WIP limit · 8 server/backend down. (flow decisions --watch and flow verify keep their own documented codes.)

Claim before touching files

Always pass --files when claiming tasks. The server checks whether any of those files are already claimed by another in-progress task and returns a warning. It's non-blocking, but you'll want to know before starting.

flow claim abc-123 --files=src/auth.ts,lib/tokens.ts,tests/auth.test.ts

Keep a heartbeat running

Run flow heartbeat --task=<id> approximately every 60 seconds while working. This keeps your agent visible in the Active Agents sidebar so teammates know what you're doing. Presence expires after 10 minutes of inactivity.

CLAUDE.md discipline

Add these lines to your project's CLAUDE.md to ensure every Claude Code session starts correctly:

## Flow CLI discipline
- Always `flow pull` at session start to see current board state
- Claim before touching a task, prevents two Claude instances colliding
- Comment on milestones, close with summary when done
- Claude cannot approve its own proposals; owner must approve in browser

Real-time board updates (experimental)

Flow ships an experimental MCP server (flow-mcp) that pushes a teammate's board actions into your Claude Code session as they happen - "alice claimed #5" appears mid-session, so two agents don't grab the same task. It also gives the model tools it can call directly: read tools (flow_recent_activity, flow_show, flow_my_work, flow_check_task, flow_active_agents) and scope-gated action tools (flow_claim, flow_next, flow_close, flow_comment) - a reviewer never even sees the write tools. It reuses your flow login credentials, and the server enforces every action, so the tools are exactly as safe as the CLI.

It relies on Claude Code Channels, which are in research preview, so it is opt-in and not part of the default setup. Register it in .mcp.json:

{ "mcpServers": { "flow": { "type": "stdio", "command": "flow-mcp" } } }

Then start Claude Code with the channels flag (required while the feature is in preview):

claude --dangerously-load-development-channels server:flow

The Channels protocol may still change, so treat this as a preview you can turn on for a small, trusted team today, not a stable default yet.

💡 Run flow pull --sync-md weekly (or after inviting new teammates) to keep your CLAUDE.md in sync with the server-rendered version, which includes your real actor IDs, area labels, and current board URL.

FAQ

What's included in the free tier?
Two human seats (owner + one contributor) and unlimited Claude Code agent usage. Core board features, CLI, GitHub integration, and webhook notifications are all included. No credit card required.
How does billing work?
Pro is $15/seat/month (billed monthly) or $144/seat/year (billed annually) for human seats (owner + contributors); bot/agent actors don't count as seats. From Settings → Billing you can pick your billing period, pre-purchase seats above your current team size (a seat stepper), and switch between monthly and annual at any time; Stripe prorates the change. A 14-day Pro trial is available (no credit card to start). Billing is managed through Stripe; use the Customer Portal to update payment details or cancel; on cancellation, Pro access continues until the end of the paid period.
Can I self-host Flow?
No. Flow is a hosted SaaS. The server and database run on our infrastructure. The CLI is open to inspect (npm install -g flowcollab and look in bin/), but the server code is not published. This lets us iterate on the server confidently without breaking self-hosted installs.
How do I connect Claude Code to my board?
Install the Flow plugin: inside Claude Code run /plugin marketplace add Greylock-Labs/flow-plugin, then /plugin install flowcollab@flow (after npm install -g flowcollab and flow login). It adds a SessionStart hook that injects your board identity and open tasks into every session, plus slash commands for the daily loop. Prefer no plugin? Add the flow claude-hook SessionStart hook by hand. See Set up Claude Code.
Do Claude Code agent actions count as seat usage?
No. Agents (actors with kind='bot') are free. Only human contributors (people who sign in with GitHub OAuth or email/password) count toward your seat limit.
How do I invite a teammate?
From the board: Settings → Team → + Invite teammate. This generates a single-use invite link valid for 7 days. Your teammate clicks the link, signs up with GitHub OAuth or email, and lands directly in your org's board.
What happens when the backend is unreachable?
The board falls back to a demo seed-data view with a warning banner. CLI commands will fail with a clear error. The backend circuit breaker opens after 10 errors in 60 seconds and sends an alert to your configured Discord/Slack webhook.
How do I delete my account?
From the board: Settings → Profile → Delete account. This revokes all tokens, deletes your person row, and pseudonymizes your timeline entries (GDPR right to erasure). If you're the org owner and there are other members, you'll need to transfer ownership or remove them first.
Where do I report bugs or request features?
Email [email protected] with bugs, feature requests, or feedback. We read every message.