Use for OpenPlan repositories when you need to initialize planning, list plans, create new plans, or edit `.plans/` files directly.
Use OpenPlan as a filesystem-native planning system that keeps the source of truth on disk.
openplan init to initialize OpenPlan in a repository.openplan list to discover current work.openplan new [title] to create a new plan file.openplan --help when you need the full command surface.inbox: captured but not yet shaped.plan: researched and scoped.active: implementation in progress.done: completed and verified.cancelled: stopped or superseded..plans/.id, title, status, tags, parent.Objective, Context, Research, Open Questions, System Surfaces, Invariants, Touch Points, Outputs, Verification, Execution Plan, and Notes.Open Questions should always be present. Use None. when there are no open questions to record.Touch Points should always be present. Use None. when there are no concrete artifacts to record.System Surfaces should be interface-first: group by file or ownership boundary, then list the meaningful surfaces under it.System Surfaces entry to a code block with an APOSD-style interface comment plus the signature, command, or surface line itself.System Surfaces entry only when the code block alone is not enough to explain an important boundary, constraint, or dependency.Invariants for non-negotiable ownership rules, interface guarantees, and design constraints that must remain true during implementation.Touch Points as a compact artifact inventory, not a second design section.Touch Points by repo or subsystem when useful.A, M, D, or R, with the path bolded on the first line and one short explanation below it.Example System Surfaces shape:
## System Surfaces
### `lua/openplan/cli.lua`
- `list_plans(opts?)`
```lua
--- Return the current repository's OpenPlan catalog in a plugin-ready shape.
--- This surface centralizes CLI invocation and decoding so callers do not depend
--- on process execution details or wire-format knowledge.
---@param opts? { all?: boolean }
---@return { plans: openplan.PlanRow[], issues: openplan.ValidationIssue[] }|nil, string? err
list_plans(opts)
```
Example Touch Points shape:
## Touch Points
### `openplan.nvim`
- **A `lua/openplan/cli.lua`**
Add the machine-facing adapter for list and create flows.
- **M `README.md`**
Document installation, commands, and picker behavior.
<PREFIX>-<NUMBER>_<SUFFIX>.<NUMBER> is allocated from the local repository state.<SUFFIX> is an immutable 8-character Crockford base32 string that keeps IDs merge-friendly.list to discover plans and new to allocate IDs, then work on files directly.