Docs menuCLI reference

Docs / CLI reference

CLI reference

Every command, grouped by task.

Grouped by task; flanner --help groups them a little differently. Commands above the team section work without an account or a network connection.

Which of these your agent can call

45 MCP tools cover projects, plans, review and memory, and messages — what an agent needs while it works. Account, device and syncing commands are yours. For skills your agent can only read. In the mesh it can read, and also send a message, mute a teammate or set quiet hours; flanner tells it to do these only when you ask.

ActionAgent

Projects: 6 of 7 operations

project_context, initialize_project_tool, create_project_tool, list_projects …

MCP

Plans: 6 of 9 operations

create_plan_file_tool, update_plan_file_tool, get_plan_file_tool, list_plan_files_tool …

MCP

Review: 4 of 6 operations

propose_plan_revision_tool, record_plan_review_decision_tool, get_plan_workflow_status_tool, get_plan_assurance_tool

MCP

Memory: 16 of 21 operations

memory_remember, memory_recall, memory_get, memory_list …

MCP

Skills: 7 of 14 operations

skills_report, skills_usage, skills_submit_evidence, skills_propose …

MCP

Curb: 0 of 17 operations

flanner curb · hook

A map of what an agent can reach is a target list for a tricked agent, so Curb has no agent tools. See Flanner Curb for each one.

You

Mesh and your account: 4 of 16 operations

mesh_status, messages_inbox, messages_send, messages_reply …

MCP

Setup and maintenance: 0 of 10 operations

flanner setup · register · unregister · status · claude-info · doctor …

Registration, diagnostics and repair run where you can see the output.

You

The split follows three rules: an agent never authorises itself, anything that deletes or repairs files stays where you can watch it, and everything an agent needs mid-task is exposed. The full tool list is on the agents page.

Core

flanner init

Adopt the repository you are in: creates the store and registers the MCP server with every agent it finds

flanner init --setup codex

Register with one agent instead of all of them. Repeatable; the choices are the rows flanner status reports

flanner init --sync

Also import the plan files already in the repository. What you want when adopting one somebody else set up

flanner init --skip-claude

Skip registering with any agent. The repository's CLAUDE.md, AGENTS.md, hook and skills are still written

flanner init --print-codex-hook

Print the Codex messages hook entry, for an administrator who allows only managed hooks. Changes nothing

flanner status

Check server status and project information

flanner doctor

Check the catalog against the plan files on disk

flanner list

List all projects

flanner list --project PROJECT_NAME

List plan files for a specific project

Plans

flanner sync

Sync existing plan files into database

flanner sync --dry-run

Preview sync without making changes

flanner sync --project PROJECT_NAME

Sync specific project only

flanner history PLAN_NAME

Every version of a plan, newest first

flanner diff PLAN_NAME 2 3

What changed between two versions

Freshness

flanner freshness

Freshness status for every plan, with the evidence behind it

flanner freshness PLAN_NAME

Status and evidence for one plan

flanner why PLAN_NAME

Why a plan is judged fresh, aging, suspect or stale

$ flanner freshness payment-webhooks
● suspect  payment-webhooks.md  v2 · written 12 days ago

  ! 24 commits touched cited files since anchor 4c19aef
    src/webhooks.py

  It names 1 symbol; all still exist.
  verify_signature

Re-read it against those commits: git log 4c19aef.. -- src/webhooks.py
Revise it: flanner web opens the editor; flanner history payment-webhooks shows what changed.

Web interface

flanner web

Launch web UI on default port (8080)

flanner web --open-browser

Launch and auto-open browser

flanner web --port 3000

Launch on custom port

MCP server

flanner start

Run the MCP server in the background on 127.0.0.1, for clients that speak http

flanner stop

Stop the MCP server

Agent integration

flanner claude-info

Show flanner's entry in Claude Desktop's config. flanner status covers every agent

flanner setup

Re-run the agent registration on its own. flanner init already does this; use it to repair one

flanner register

Add the MCP server to Claude Desktop's config

flanner register --force

Rewrite Claude Desktop's entry even if one exists

flanner unregister

Remove the MCP server from Claude Desktop's config

Memory

flanner mem remember "..." --category fact

Save one durable memory as a Markdown file. --category is required: fact, decision, preference, constraint, lesson, relationship or task_context

flanner mem recall "..."

Search what earlier sessions knew, with why each result matched

flanner mem list

Browse memories rather than searching them

flanner mem show ID

One memory in full, with everything that happened to it. --related lists connected memories and why (0.13.0)

flanner mem tag ID TAG...

Add topic tags to a memory, or --remove one. The memory keeps its id and text (0.13.0)

flanner mem tags

The tags in use, most used first (0.13.0)

flanner mem list --tag auth

Only memories with that tag. recall takes --tag too, and remember takes it when saving (0.13.0)

flanner mem supersede ID --with "..."

Correct a memory by replacing it, keeping the old one readable

flanner mem forget ID

Stop recalling a memory, or erase it from this machine

flanner mem mode suggest

How much this project captures: off, explicit, suggest (the default) or auto_safe. A project may only tighten the machine-wide policy

flanner mem pending

Suggestions waiting on you, with approve and reject

flanner mem attach ID FILE

Attach a screenshot, PDF or recording as evidence

flanner mem share ID

Share one memory with the team. Always explicit

flanner mem withdraw ID

Ask peers to stop recalling one you shared

$ flanner mem recall "concurrent writers"
Postgres over SQLite: we need concurrent writers decision
  project · confirmed · exact title match, current project, confirmed

Skills

flanner skills scan

Read every skill package your agent would load, and record what was found. Nothing in a package is executed

flanner skills list --all

What is in effect, and with --all the copies being shadowed by another

flanner skills doctor

What is wrong with the collection. Exits 1 on a defect so a check can gate on it

flanner skills inspect NAME

One skill in full, including every copy of it and where each lives

flanner skills observe enable

Start recording which skills get invoked here. Off until you run it; installs a hook

flanner skills observe status

Where observation is on, what it has seen, and what it could not store

flanner skills report --days 30

What was used, over a window you can see. --json and --csv carry the window with the numbers

flanner skills data purge

Delete what was recorded. Never scheduled, always asked for

flanner skills adopt NAME

Keep a copy of a package where flanner can put it back. A copy, not a move

flanner skills install HASH

Install a stored version. Snapshots what it replaces; refuses a directory flanner did not install

flanner skills rollback ID

Put back what an install replaced

flanner skills evidence submit "..."

Hand over one piece of work to learn from. Nothing is harvested

flanner skills propose NAME --file DRAFT

Draft a skill for review. Must name the evidence it came from

flanner skills review ID

The draft, its evidence, and what it would change

flanner skills approve ID

Approve one exact draft. Editing it afterwards sends it back for another look

flanner skills share HASH

Send a package to your workspace. Carries the files and nothing private

flanner skills transfers

Packages that arrived, and whether each was received, verified or installed

flanner skills import ID

Install a package a teammate sent. A separate decision from receiving it

flanner skills channel subscribe NAME

Be told when a new version arrives. Notifies; never installs

Your team

flanner accept TOKEN --as your-user-id

Accept an invitation: joins the team and enrols this machine. Once per machine

flanner login CODE

Enrol this machine with an enrollment code from the team console

flanner whoami

This device's identity, what its entitlement allows, and which workspaces you may enter

flanner logout

Forget this device's session. The device keeps its identity

flanner join WORKSPACE_ID

Bind this repository to a workspace. Run with no id to list the ones you may use

flanner invite someone@company.com

Invite somebody to your organization (admins only)

flanner members

Your organization's members and seat count (admins only)

flanner devices list

The machines enrolled under your account. devices add mints a code to enrol another; devices revoke DEVICE_ID retires one

Syncing with other machines

flanner peer serve

Serve this device's catalog to authorised peers, and receive teammates' messages. Opens no port and needs no admin rights

flanner peer start / flanner peer stop

The same thing in the background, so it keeps serving after you close the terminal. peer autostart on starts it each time you log in

flanner peer pull DEVICE_ID

Take whatever a peer holds that this device lacks

flanner peer push DEVICE_ID

Send a peer whatever it lacks. The peer checks each item and may refuse

flanner peer pushes on|off

Whether teammates may push to this device. On by default: pushes come only from authorised teammates and overwrite nothing

flanner peer status

How this device is reachable, or how it reaches one peer

flanner mesh connect

Connect to the team's private network, if it has one. Separate from join, which binds a repository

flanner mesh status / flanner mesh leave

Whether this device is on that network, and how to come off it

Messages

flanner messages inbox

Threads with unread messages. --all adds the ones you have read

flanner messages read ID

One conversation, with delivery for what you sent

flanner messages send HANDLE... "..."

Message one or more teammates. Shows what will be sent, and to whom, first

flanner messages broadcast "..."

Message everyone in a workspace. Always asks first

flanner messages reply ID "..."

Answer everyone on a thread

flanner messages mute HANDLE

Keep a teammate's messages from interrupting you, on this device

flanner messages quiet-hours 22:00-07:00

Show or set quiet hours on this device, or turn them off

flanner messages interrupt channel|tool|prompt

How agents show new messages

flanner messages notifications on|off

Desktop notifications for new messages on this device

flanner messages wait / flanner messages watch

Wait up to 15 minutes for the next message, print it and exit (for agents); or print messages as they arrive

flanner peer autostart on|off

Start receiving messages now and whenever you log in, with no admin rights. It runs flanner peer serve, which also syncs your plans

Review and retire

flanner review propose PLAN_NAME

Offer a plan's newest version for review

flanner review decide PLAN_NAME approve

Record a decision on a proposal: approve, reject, request_changes or withdraw

flanner review comment PLAN_NAME --on "quoted text" -m "note"

Leave a note against a quotation in a plan. Both --on and -m are required

flanner review status PLAN_NAME

A plan's proposals and its accepted baseline

flanner review pack PLAN_NAME

Write a plan as one file somebody outside the team can annotate

flanner retire PLAN_NAME

Ask peers to stop showing a plan, or show it again with --restore

$ flanner review status auth-rework
accepted: sha256:f71be17c1b06…
PROPOSAL                STATE     PROPOSER             APPROVALS
sha256:6a0db90f291d...  accepted  @dani (Dani Okafor)  @maya (Maya Ross)

Curb

What your agents can reach. Only policy and fleet need an account, on Flanner Mesh. The rest send nothing unless you ask.

flanner curb map

What each Claude Code and Codex launch from this folder can reach, channel by channel, with a severity. Names no credential and no location. --json gives the same report, redacted the same

flanner curb map --dir DIR --agent codex --profile ci

Another launch: --dir is the folder the agent starts in, --agent is claude or codex, --profile is the Codex profile

flanner curb map -- claude --settings ./ci-settings.json

Assess the launch command given after --, flags and all, instead of the default one

flanner curb show

Open the full report, with names and locations, in a window on this machine's screen. Prints nothing from it. Takes the same launch options as map

flanner curb inventory

The agents here and what each loads: settings layers, MCP servers, hooks, skills and scheduled jobs. Takes --json and the same launch options

flanner curb sweep

Find secrets agents left behind, counted by exposure class. Needs the flanner[sweep] extra. --dir names the project folder; --json prints the counts

flanner curb sweep --validate

Also ask each secret's own issuer whether it still works. Asks you first, every run

flanner curb show --sweep

Open each finding's type and location in a window. Add --validate to ask the issuers, after the same question

flanner curb forget

Delete what Curb keeps on this machine. Asks first; --yes skips the question. With --yes, --backups deletes settings backups too

flanner curb fix --dry-run

Show the fixes and change nothing. --dir and --agent narrow it

flanner curb fix

Apply them to each agent's own user settings, after your operating system asks you. Each file is backed up for 7 days

flanner curb fix --undo

Put back the files the last fix changed

flanner curb test

Prove each block by asking the agent itself to get past it. States the token cost and asks first. --dir and --agent narrow it

flanner curb decoys

How many decoys the tester planted, and when the first expires. --renew keeps them another 30 days; --remove deletes them

flanner curb scrub FILE

Replace the secrets in one file with placeholders, after you have rotated them. No backup, so no undo. --dry-run only checks

flanner curb log --enable

Install the hooks that log each tool call's metadata. Asks first. --disable removes them; --agent picks one agent

flanner curb log --verify

Check that no record was changed, removed or reordered

flanner curb observed

What each agent has been seen using, per channel. Takes --agent and --json

flanner curb policy

Your organization's agent policy on this device: its version, what is applied and what waits for you. --json prints the state

flanner curb policy --enrol

Let signed org policy make changes that only tighten, after one approval. --withdraw ends that

flanner curb policy --check-in

Fetch the newest policy now, apply what may apply, and report

flanner curb policy --approve

Review and apply the change that waits for you

flanner curb policy --export DIR

Write the policy as admin-owned settings files, for device management to deliver

flanner curb fleet

Each device's newest report, checked here by the device's own signature (admins only). --json prints them

flanner curb ci

Judge the agent steps in this repository's GitHub Actions workflows. Takes a PATH; --json prints the findings

flanner curb ci --sarif curb.sarif --fail-on high

Write SARIF for code scanning, and exit 1 at this severity or above: high, medium, low, or never (the default)

flanner curb ci --fix

Make the one-line fixes that are safe without a person. Open a pull request with them

flanner curb app

Find the LLM calls in an app's Python code, and label each one's shape. Takes a PATH, --sarif FILE and --json

flanner curb attribution --setup

Give each agent a signing key of its own and sign its commits with it. --github also adds the public keys to GitHub, with your own gh

flanner curb attribution

Each agent's key, and whether rotation is due. --json prints the keys and the registry's state

flanner curb attribution --rotate

Replace each agent's key. The old one is retired and signs nothing new

flanner curb verify main..HEAD

Which agent key signed each commit, as one of five states. Give a commit or a range; the last commit if left out. Takes --json

What flanner sends

flanner updates on|off

A daily request to pypi.org for the latest version number. Off until you turn it on

flanner crash-reports on|off

Send crash reports to flanner's developers: the error type and where in flanner it happened. Off until you turn it on (0.14.0)

flanner crash-reports show

Print exactly what is waiting to be sent, or what was sent last. The privacy policy lists every field (0.14.0)

Project configuration

flanner config PROJECT_NAME --plan-dir DIR

Configure project settings

flanner setup-gitignore PROJECT_NAME

Update .gitignore manually