Skip to main content

Plan file management for AI assistants via MCP

Project description

Flanner

CI License: MIT

A plan-file manager for AI coding agents, wired into Claude Code and other assistants over MCP (Model Context Protocol).

AI agents write markdown constantly: design docs, migration plans, architecture notes. It piles up fast, scattered across your repo, quietly going stale, and easy to commit by accident. Flanner gives those files one home, versions them automatically as the agent revises, and keeps them out of git until you decide otherwise, with a browsable reading view and an audit trail on top.

Today Flanner is local-first; the goal is cloud-hosted plans: shared workspaces for easier collaboration, effectively unlimited storage and history, and clean links to the tools teams already work in, from product trackers and chat to second brains like Notion.

flanner reading view: a versioned plan file

Features

  • MCP integration: exposes plan-file tools to Claude Code and Codex.
  • Automatic headers and versioning: every plan gets YAML frontmatter, and each revision is a new version with a full history.
  • Git protection: plans live in .plans/ and are kept out of commits automatically.
  • Agent integration: flanner init wires CLAUDE.md, AGENTS.md, and a guard hook so agents save plans through flanner instead of scattering raw markdown.
  • Reading view: a browser dashboard to read, edit, and walk the history of plans (light and dark, fully offline).
  • Per-project config: customize the plan directory per repository.

Quick start

cd flanner
pip install -e .     # provides the `flanner` command
flanner init         # database, MCP registration, and a project for this repo

Then ask your agent to work with plans:

"Create an architecture plan for the auth service"

"Show me the history of the architecture plan"

And open the dashboard to browse them:

flanner web --open-browser     # http://localhost:8080

flanner init is safe to re-run. It detects your git root, creates .plans/, updates .gitignore, registers the MCP server with Claude Code, and installs the agent integration.

CLI commands

flanner init [--project-root PATH] [--plan-dir DIR]     # set up a project
flanner status                                          # projects, plan files, db path
flanner list [--project NAME] [--output json]           # list projects or a project's plans
flanner sync [--project NAME] [--dry-run]               # import existing .plans/ files
flanner config NAME [--plan-dir DIR] [...]              # change project settings
flanner web [--port 8080] [--host 127.0.0.1] [--open-browser]
flanner register [--force] / flanner unregister         # MCP registration with Claude Code
flanner claude-info                                     # integration status
Plan file format

Every managed plan carries YAML frontmatter, generated by the tools and never hand-written:

---
mcp_plan_file: true
project_id: 3d816ecd-489a-4fa0-abe2-15ec93f60d5a
plan_file_id: 59c34f9c-8471-47fc-97f2-8dcfefa15434
plan_name: architecture
version: 2
created_by: claude
---

# Architecture Plan

Your plan content here...
Web interface

flanner dashboard

A server-rendered dashboard, no build step, works offline:

  • Dashboard (/): projects, stats, and recent activity
  • Project detail (/projects/{id}): a project's plans, paginated
  • Plan viewer (/plans/{id}): rendered markdown, version selector, frontmatter
  • Editor (/plans/{id}/edit) and version history (/plans/{id}/history)

The web UI binds 127.0.0.1 with no authentication. Do not expose it beyond localhost.

Where data lives
  • Catalog (SQLite): ~/.flanner/data.db, override with FLANNER_HOME or FLANNER_DB_PATH
  • Plan files: .plans/ in your repo, git-ignored, named name_v1.md, name_v2.md, and so on
Architecture

Layering is enforced by tests/test_architecture.py:

  • foundation (exceptions, utils, frontmatter, git_integration, jira_utils) imports nothing else from the package
  • data (database, storage) sits on the foundation only
  • composition roots (server for MCP, web, cli) wire everything together and do not import each other (except cli, which launches both)

Decisions are recorded in docs/adr/, with more guides in docs/.

How it works

An agent calls get_plan_config to learn where plans go, then create_plan_file_tool or update_plan_file_tool to write them. Flanner places the file in the project's plan directory, adds the header, and bumps the version. Files stay in .plans/ (git-ignored), so they never land in a commit by accident.

Roadmap

Flanner is local-first today. Planned next:

  • Cloud-hosted plans: a PostgreSQL catalog and S3-backed storage for effectively unlimited history
  • Shared workspaces for team collaboration
  • Full-text search across plans
  • Links out to product trackers, chat, and second brains like Notion
  • Real-time updates in the web UI

Contributing

Setup, the CI gates, benchmarks, and the release process are in CONTRIBUTING.md.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flanner-0.4.0.tar.gz (80.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flanner-0.4.0-py3-none-any.whl (68.3 kB view details)

Uploaded Python 3

File details

Details for the file flanner-0.4.0.tar.gz.

File metadata

  • Download URL: flanner-0.4.0.tar.gz
  • Upload date:
  • Size: 80.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.26

File hashes

Hashes for flanner-0.4.0.tar.gz
Algorithm Hash digest
SHA256 5aae4151c770591c865740f7506666f70b189340a119fc88640472c34b2443b5
MD5 430c792b4ae6bb92a14efe93b2375bfc
BLAKE2b-256 a0c7e07faa733f982a4763c1b8eaf2101ec13aa5b6ce11246d063b244db4c7da

See more details on using hashes here.

File details

Details for the file flanner-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: flanner-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 68.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.26

File hashes

Hashes for flanner-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1b928d387506c2cd266b49333957578102b21b74934bed57c5d840c033098287
MD5 2e935c918f345939d1c5a3612ed311ad
BLAKE2b-256 7ce6184bb2d050617d53e4f1a59473502105b1535286e2db7750f83e0e238d71

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page