Docs / Plans
Plans
The plan file format, how versions work, and how freshness is checked.
File format
Every plan managed by Flanner starts with YAML frontmatter. The tools write it; you do not edit it by hand.
---
mcp_plan_file: true
plan_manager_version: '1.0'
project_id: 3d816ecd-489a-4fa0-abe2-15ec93f60d5a
project_name: my-app
plan_file_id: 59c34f9c-8471-47fc-97f2-8dcfefa15434
plan_name: architecture
version: 2
created_at: 2025-01-15T10:30:00Z
created_by: claude
---
# Architecture Plan
Your plan content here...Versioning
Each version is its own file — architecture_v1.md, architecture_v2.md — and the database records which one is current. Versions are plain revision numbers, not semantic versions. A raw write into the plan directory is refused by the guard hook; a file you add by hand is picked up by flanner sync.
# Ask your agent to revise the plan. The MCP tools write
# .plans/architecture_v2.md and record it; nothing to hand-edit.
flanner history architecture # every version, who wrote it, when
flanner sync # import a file you added by handChange per version
- Increment
versionby 1 - Update
created_at - Change the content
Keep the same
plan_file_id— links all versionsproject_idandplan_namemcp_plan_file: true
Working through an agent, you never touch the frontmatter yourself — the MCP tools version the file for you. Ask Claude to “show the version history for the architecture plan” to browse it.
Freshness
Freshness tells you whether a plan still matches the code, with the evidence behind the verdict. It is computed on demand from the plan text plus git: nothing is stored, git access is read-only, and every status can show its reasons. It extracts the paths and symbols a plan cites, checks they still exist, anchors the plan version to the commit history, and counts how many commits touched the cited files since.
$ flanner freshness payment-webhooks
payment-webhooks v2: suspect
- 24 commits touched cited files since anchor 4c19aef
anchored_at_commit: 4c19aef8b21d
referenced_paths: ['src/webhooks.py']
referenced_symbols: ['verify_signature']
commits_since_anchor: 24
churn_scope: paths
age_days: 12The four statuses
Everything the plan cites still exists, and little has changed since it was written.
Some movement: 5 or more commits touched the cited files, or the plan is over 45 days old.
Heavy churn: 20 or more commits touched the cited files since the plan was written (60 for the whole repo when the plan cites no files).
The plan cites at least one path or symbol that no longer exists in the repo. The evidence names each one.
flanner why PLAN_NAME prints the reasoning. Agents can check the same thing over MCP with get_plan_freshness_tool before trusting a plan.