planning-work
Skill2 starsChanged 4 months agoMITView on GitHub
Keep a project's PLAN.md a short list of one-line checkboxes. Use when adding, completing, reorganizing or migrating PLAN.md items, when PLAN.md holds prose, wrapped items, design notes or a pile of completed items, or before a handoff or commit that touches PLAN.md. Its scripts unwrap items, retire completed ones to docs/PLAN_LOG.md, and lint the format.
2 other projects use a version of this.
Adopted by
Most recently taken up by
- jjsizemore/jjskillstheir own version, first seen Nov 1, 2026
- MorganOnGitHub/tackletheir own version, first seen Sep 27, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- jjsizemore/jjskills★ 1same name
- MorganOnGitHub/tackle★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository27 other files it gives its agents.
- capture-collaboration-evidenceSkill
- clarify-before-buildingSkill
- cross-platform-project-build-archSkill
- deep-code-reviewSkill
- dispatchSkill
- erect-agent-stackSkill
- fix-zig-deps-hashSkill
- gather-project-intentionsSkill
- handoffSkill
- i18nSkill
- lean4-developmentSkill
- llvm-guided-optimizationSkill
- mechatron-ciSkill
- memoriesSkill
- mficSkill
- no-ai-slopSkill
- onboardSkill
- performance-profilingSkill
- scaffold-zig-projectSkill
- shipSkill
- test-isolationSkill
- universal-app-frontendSkill
- walking-decisionsSkill
- writing-bendSkill
- writing-nixSkill
- writing-rocSkill
- zig-microbenchmarksSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
16 rules. About 0 are common, 7 are distinctive, and 9 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 36
No prose paragraphs, plain bullets, block quotes, code fences or hard-wrapped continuation lines.
- Very specific: line 40
When checking an item off, append its completion stamp in the project's local time with its zone label, e.g.
- Very specific: line 44
Completed questions must carry their answers: When an item records a question from the owner, retain the question (or its recognizable …
- Distinctive: line 73
Before voluntarily ending a turn, review the open items in priority order:
- Distinctive: line 75
If an item needs no owner decision, work on it.
- Distinctive: line 77
If an item truly needs the owner's judgment, record the precise question and affected dependency.
- Distinctive: line 80
Stop when no actionable work remains, every remaining item is genuinely blocked, the owner explicitly stops/pauses work, or an actual …
- Very specific: line 94
All three are LuaJIT, take the plan path as the final argument (default PLAN.md), and print usage with --help.
- Very specific: line 134
Before committing a PLAN.md change, run plan-retire and then plan-lint.
- Very specific: line 135
Commit PLAN.md and docs/PLAN_LOG.md together.
- Very specific: line 136
If lint reports prose or a design note, move it to docs/plan_context/, MEMORIES/ or the ADR log according to the table above.
- Distinctive: line 142
Commit or otherwise back up the current state first.
- Very specific: line 144
Run plan-unwrap so each item is one line.
- Very specific: line 145
Run plan-retire --keep 10 to archive completed items.
- Very specific: line 146
Run plan-lint and relocate each remaining violation: context and essays to docs/plan_context/, lessons to MEMORIES/, completed narrative to …
- Distinctive: line 150
Update pointers in other documents (READMEs, documentation guides, code comments) that referred to moved sections.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Planning work
PLAN.md answers one question: what is left to do, in order? It stays small enough to read in full at the start of every session. Everything else moves somewhere with its own purpose.
Scope: apply this to the planning work you were asked to do. Do not migrate other projects' plans unrequested. Where a project already has a canonical home for any of the kinds below (a plan kept elsewhere, an Obsidian or business plan, an existing ADR or context directory), use that home instead of creating a competing one; the table names the default only.
| Content | Home |
| Open work, plus the last few completions for continuity | PLAN.md |
| Completed items, retired verbatim with their section path | docs/PLAN_LOG.md (append-only) |
| Background, evidence and design notes an open item needs | docs/plan_context/<topic>.md, linked from the item |
| Durable lessons that outlive any one item | project MEMORIES/ (see the memories skill) |
| Decisions bound to specific code paths | the project's ADR log, if it keeps one (optional) |
| Purpose, scope and non-goals | INTENT.md |
PLAN.md format
- A
# PLANtitle and a short preamble before the first##section (lint default: at most 5 lines), for example pointers to the log and the context directory. - Section headings ordered by priority. Lint accepts headings of any level.
- Each item is exactly one line:
- [ ] textor- [x] text. Nested checkboxes are indented (one tab per level is the convention; lint accepts any deeper indentation). - No prose paragraphs, plain bullets, block quotes, code fences or
hard-wrapped continuation lines. When an item needs more than one line of
explanation, write the explanation in
docs/plan_context/<topic>.mdand end the item with(context: docs/plan_context/<topic>.md). - When checking an item off, append its completion stamp in the project's
local time with its zone label, e.g.
(done 2026-09-23 10:15 EDT), and the commit that delivered it.plan-retireranks recency by the lastYYYY-MM-DD [HH:MM]on the line; an undated completion counts as oldest. - Completed questions must carry their answers. When an item records a
question from the owner, retain the question (or its recognizable subject)
and append a concise
Answer: ...on that same checked-off line. Include the actual conclusion and any qualification that changes its meaning. “Answered,” “discussed,” a chat reference or a link alone is insufficient. For a long answer, keep the useful summary inline and link the detailed explanation or evidence indocs/plan_context/. The owner must be able to review completed questions without searching conversation history. If the question remains unresolved or awaits a decision, leave it open and record what is missing; do not invent certainty just to close it. Preserve the question, answer and detail link together when retiring it todocs/PLAN_LOG.md.
Example:
- [x] Can the decoder consume stdin? Answer: Yes for sequential input; random-access decoding needs a seekable source (context: docs/plan_context/input-modes.md; done 2026-10-26 14:40 EDT; commit abc1234).Execute open work continuously
Open PLAN items are standing work to complete as soon as possible, including overnight, without sacrificing correctness, performance, testing or other project values. No separate overnight approval is required. A milestone is a checkpoint; it does not end work when actionable items remain.
Clock, bedtime and wake-time notices are informational context about the owner's availability. They never imply an agent sleep/wake schedule. Human biological rest requirements do not suspend actionable agent work.
Before voluntarily ending a turn, review the open items in priority order:
- If an item needs no owner decision, work on it. If a missing detail is easily reversible, choose reasonably, record the assumption and proceed.
- If an item truly needs the owner's judgment, record the precise question and affected dependency; continue independent items. A question on one item is not a project-wide stop. Do not request approval already given.
- Stop when no actionable work remains, every remaining item is genuinely blocked, the owner explicitly stops/pauses work, or an actual execution or resource limit prevents progress. Report the specific blocker or limit and checkpoint the next action. Do not describe the owner's absence, bedtime or a completed milestone as a blocker.
Explicit holds, budgets and action-specific approval requirements remain in force. Keep shelved ideas separate from actionable work. A checkbox does not authorize irreversible external actions or manufacturing new tasks to stay busy. Guidance cannot restart a terminated client; durable checkpoints support an existing authorized restart mechanism without pretending a scheduler exists.
Scripts
All three are LuaJIT, take the plan path as the final argument (default
PLAN.md), and print usage with --help. They use POSIX calls through the
LuaJIT FFI and support Linux and macOS; native Windows is not supported.
Supported inputs are readable ordinary files, or symlinks to them, with no
concurrent writers. Writes follow symlinks: the link stays and its target is
replaced, keeping the target's permission bits.
scripts/plan-unwrap [--check] PLAN.mdjoins hard-wrapped continuation lines into their list item.--checkexits 1 when anything is wrapped. Fenced blocks and prose are left alone for a human or agent to relocate.scripts/plan-retire [--keep N] [--log PATH] [--date YYYY-MM-DD] PLAN.mdmoves completed items, with their whole nested subtree (blank separators included), to the log (defaultdocs/PLAN_LOG.mdbeside the plan), keeping theNmost recent (default 10). A completed parent with completed children is one item. A completed item with an open descendant is reported as blocked and stays. Each retired line gains its section path:- [x] [Section › parent item] text. Safety: a log that resolves to the plan itself (same path, alias or symlink) is refused before anything is written; hardlinks are not detected. Only a log that does not exist starts empty; a log that exists but cannot be read stops the run with both files untouched. Every write is checked and goes through a unique temporary file and a rename. The log is written and synced before the plan is replaced, so a failure never drops completed items: before the log lands both files are untouched, and after it lands a retry may duplicate entries but never lose them. Exit 1 on an I/O failure, 2 on a usage error. Do not run two instances on one plan at once; the last rename wins.scripts/plan-lint [--max-bytes N] [--max-done N] [--max-preamble N] PLAN.mdexits 1 and printsfile:line: kind: textfor every line that is not a heading, preamble, blank or one-line checkbox. It also fails when the preamble exceeds--max-preamblelines (default 5), the file exceeds--max-bytes(default 65536), or more than--max-donecompleted items (default 10) are retirable. It counts exactly whatplan-retirecan move, soplan-retire --keep Nalways satisfiesplan-lint --max-done N.--classifyprints each line's kind for debugging.
Routine
- Complete an item by checking it and stamping it; for an owner question, include the answer on the same line before marking it complete.
- Before committing a PLAN.md change, run
plan-retireand thenplan-lint. Commit PLAN.md anddocs/PLAN_LOG.mdtogether. - If lint reports prose or a design note, move it to
docs/plan_context/,MEMORIES/or the ADR log according to the table above. Do not delete it and do not fold it into a giant single line.
Migrating a legacy PLAN.md
- Commit or otherwise back up the current state first; migration rewrites the file.
- Run
plan-unwrapso each item is one line. - Run
plan-retire --keep 10to archive completed items. - Run
plan-lintand relocate each remaining violation: context and essays todocs/plan_context/, lessons toMEMORIES/, completed narrative to the log. Condense any open item whose line became a paragraph into a one-line task plus a context link. - Update pointers in other documents (READMEs, documentation guides, code comments) that referred to moved sections.
Control
plan-lint is the mechanical check. A project can call it from its test suite
or a pre-commit hook to make the format blocking. It checks shape, not
content: it cannot tell whether an item is still relevant. That judgment stays
with the person or agent maintaining the plan.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

