A PLANNING CONVENTION

Track what you're building. In your repo.

A markdown convention for solo devs and small teams. One source of truth for what's active, shipped, and next.
AI assistants (Claude Code, Cursor, Antigravity) read it natively, as a bonus.
No accounts. No SaaS. Plain files in your repo.

v0 · MIT license plain markdown + json git-excluded by default
~/your-project/plans/roadmap.html

Initiative timeline

shipped in flight queued
Apr 18 Apr 28 May 06 May 14 May 22
P1Onboarding
shipped 04/23
P0Search index
phase 1 of 2
P1Dark mode
phase 2 of 3
P1Mobile responsive
queued · alex
P2Theme picker
blocked by dark mode
P2Search autocomplete
blocked by index

The real problem

It wasn't the AI. I didn't have a picture either.

Before

After

plans/
├── active/
│   ├── SEARCH_INDEX.md
│   ├── DARK_MODE.md
│   └── MOBILE_RESPONSIVE.md
├── shipped/
│   ├── ONBOARDING.md
│   └── AUTH_REWRITE.md
├── superseded/
├── STATUS.md
├── plans.json
└── roadmap.html
38 plan files at the repo root.
15min per session, finding which still mattered.
0 clear picture — for the AI, or for me.

THE SYSTEM

Three files. One source of truth.

One file per feature. One file that answers "where are we?".
One static dashboard for everyone else. Plain markdown and JSON — no database, no account, no daemon.

01

plans/active/*.md

Write a plan

YAML frontmatter machines can parse. A status banner humans can read. Both must agree — frontmatter wins on conflict.

dark-mode.md
---
status:        active
priority:      P1
owner:         alex
type:          feature
depends_on:    []
blocks:        [THEME_PICKER]
last_updated:  2026-05-06
in_flight:     true
---
## Dark mode
# Phase 2 of 3. Token layer done.
# Next: component audit.
syncs to

02

plans/STATUS.md

Check what's live

Open it in the morning. In flight, up next, recently shipped — one file answers "where are we?" for you and your AI.

STATUS.md
InitiativePhaseState
Search index1 of 2in flight
Dark mode2 of 3in flight
Mobile0 of 2up next
Onboarding1 of 1shipped
renders to

03

plans/roadmap.html

See the full picture

A static file that reads plans.json. Gantt timeline, blocking-chain graph, filterable list. No server.

roadmap.html
Onboarding
Search index
Dark mode
Mobile
Theme picker

LIVE DASHBOARD

The actual roadmap. Embedded.

Real plans.json from the demo project, rendered by roadmap.html.
Gantt timeline, blocking-chain dependencies, filterable plan list.

~/your-project/plans/roadmap.html
redesigned roadmap · live data Open roadmap full-screen → Status page →

INSTALL

One command. Then your AI knows.

Clones to ~/.local/share/plans — re-run any time to update Run plans-init in any project to bootstrap Auto-detects CLAUDE.md, AGENTS.md, .cursorrules Git-excluded by default — plans stay local
curl -sSL https://raw.githubusercontent.com/yrangana/Plans/main/install.sh | bash
  1. 1
    Install the CLI

    One curl. Re-run any time to update the system itself. Installs to ~/.local/share/plans.

  2. 2
    Bootstrap a project

    Run plans-init /path/to/project. Creates plans/, excludes it from git, wires up your assistant.

  3. 3
    Open the dashboard

    Run npx serve . in your project root, then open localhost:3000/plans/roadmap.html.

  4. 4
    Write your first plan

    Replace the example plan with a real one, or type /plans new in your AI assistant.

~ — bash

PLATFORM COMPATIBILITY

Same plans/. Every assistant.

The plans/ directory is identical across every platform. Only the instruction file your assistant reads changes. Switch tools without rewriting a single plan.

plans/
active/
  DARK_MODE.md
  SEARCH_INDEX.md
shipped/
  ONBOARDING.md
STATUS.md
plans.json
roadmap.html

Same directory.
Every project.

Claude Code supported
CLAUDE.md
Antigravity supported
AGENTS.md
Cursor community
.cursorrules
Windsurf community
.windsurfrules
Any editor always works
manual · no config

What changes vs what stays

Always the same

  • plans/ directory
  • active/ & shipped/
  • Plan filenames
  • STATUS.md
  • plans.json
  • roadmap.html

Per assistant

  • CLAUDE.md
  • AGENTS.md
  • .cursorrules
  • .windsurfrules
  • Prompt syntax
5
platforms
1
directory
0
rewrites