hplan
by @noirewinter
Hierarchical persistent planning for complex multi-phase tasks. Use when the user asks to plan, break down, or execute a task involving multiple steps, deliv...
clawhub install hplanπ About This Skill
name: hplan description: > Hierarchical persistent planning for complex multi-phase tasks. Use when the user asks to plan, break down, or execute a task involving multiple steps, deliverables, or coordinated work streams. Creates a .plan/ directory with overview.md (global summary) and per-phase directories (specs, checklists). Integrates with OpenClaw's memory system for cross-session continuity. Trigger phrases: plan, break down task, create plan, phased plan, multi-step task, start planning. version: 1.0.0 metadata: openclaw: emoji: "π" homepage: https://github.com/Noirewinter/hplan files: - "templates/*"
hplan β Hierarchical Persistent Planning
Use the file system as persistent working memory for complex multi-phase tasks. This skill solves two problems that arise in long task executions:
Core Idea
Context window = RAM (volatile, limited)
File system = Disk (persistent, unlimited)
Memory system = Long-term recall (cross-session, searchable)
β Task structure and specs go to .plan/ (file system)
β Key milestones and decisions go to memory (MEMORY.md / daily notes)
β The overview stays concise for quick re-reading
β All three layers work together to prevent drift and loss
.plan/ Directory Structure
All plan files are stored in the .plan/ directory under the current workspace:
.plan/
βββ overview.md β Global summary (β€25 lines, re-read frequently)
βββ decisions.md β Decision log
βββ errors.md β Error log
βββ phases/
βββ phase1_xxx/
β βββ spec.md β Detailed spec for this phase
β βββ checklist.md β Item-by-item completion status
βββ phase2_xxx/
β βββ ...
βββ ...
Use the templates in templates/ as starting points for each file. Always use relative paths (.plan/...) when reading and writing plan files.
Integration with OpenClaw Memory
hplan uses the file system for structured task data (.plan/ directory) and OpenClaw's memory system for cross-session awareness. They serve different purposes:
| Layer | What it stores | Why |
|-------|---------------|-----|
| .plan/ files | Full specs, checklists, detailed plans | Structured, complete, not subject to compaction |
| MEMORY.md | Task goal, current phase, key decisions | Survives session restarts, loaded automatically |
| Daily notes | Progress snapshots, phase completions | Searchable history, compaction-safe via memory |
When to write to memory
"Active hplan: [goal], phases: [list], plan at .plan/")"hplan progress: completed phase2_xxx, now on phase3_xxx, 2/4 phases done")decisions.md, also save a one-line summary to memory"hplan paused: phase2_xxx in_progress (3/5), next step: [description]")When to search memory
memory_search("hplan") to quickly find if there's an active plan and what state it was inMandatory Behaviors
Since this environment does not have automatic hook injection, you must follow these behaviors manually to maintain plan awareness:
1. Check .plan/ before any action
This is the first thing to do in every conversation, before any file writes.
Check if .plan/overview.md already exists:
.plan/ directory and proceed normally.Never overwrite or modify an existing .plan/ without checking its status first.
2. Re-read overview.md frequently
Before every significant action (producing deliverables, making decisions, starting a new step), re-read .plan/overview.md to stay aligned with the goal and current phase. This is the most important behavior β it prevents goal drift.
3. Re-read the current phase spec before working
When starting work on any phase, always read the full spec.md and checklist.md for that phase first. Do not skip this step.
4. Update progress after each subtask
After completing a subtask, immediately update:
checklist.md ([ ] β [x])overview.md (e.g., in_progress (3/6))5. Context recovery on new conversations
When a user says "continue" or references an existing plan:
1. First, use memory_search("hplan") to find the latest plan state
2. Then check if .plan/overview.md exists and read it
3. Read the current phase's spec.md and checklist.md
4. Confirm the current state with the user before proceeding
6. Save progress before session ends
When the conversation is ending with incomplete phases:
7. Check completion before finishing
Before ending your response on a planning task, verify whether all phases in overview.md are marked [x]. If incomplete phases remain, continue working or inform the user about remaining tasks. The user can exit the plan at any time by deleting the .plan/ directory.
Workflow
Step 1: Create the Plan
After receiving a complex task:
1. Check .plan/ status as described in Mandatory Behavior #1
2. Create the .plan/ directory structure
3. Write overview.md using the template (β€25 lines)
4. Create phase directories with spec.md (β€60 lines each) and checklist.md
5. Create decisions.md and errors.md
6. Save the task goal and phase list to memory for cross-session recall
Step 2: User Confirmation (cannot be skipped)
Present the plan to the user and wait for explicit confirmation before executing.
What to show:
overview.md content (goal and phase breakdown)spec.md (key deliverables and scope)What to ask:
Iterating on the plan:
overview.md and phase directories in sync during any modifications: adding a phase means both an overview entry AND a new directory; removing a phase means both are deletedOnly proceed to execution after the user explicitly confirms.
Step 3: Execute Phase by Phase
1. Read the current phase's spec.md and checklist.md in full
2. Work through checklist items one by one
3. Update checklist.md after each completed item
4. When a phase is complete:
- Update overview.md and move to the next phase
- Save a progress snapshot to memory
Step 4: Phase Switching
When moving to the next phase:
1. Mark the completed phase as [x] ... β complete in overview.md
2. Update current_phase to the next phase ID
3. Read the new phase's spec.md and checklist.md before starting work
4. Save the phase transition to memory
Step 5: Error Handling
1st failure: Diagnose and fix β record in errors.md
2nd failure: Try a different approach β record in errors.md
3rd failure: Re-examine assumptions β update spec.md
Still failing: Explain the situation to user, request guidance
Plan Lifecycle
New conversation with existing .plan/
When a new conversation starts, check if .plan/overview.md exists:
.plan/ directory automatically, then proceed with the new task.After plan completion
When all phases are marked [x]:
1. Save a completion summary to memory: "hplan completed: [goal], all N phases done"
2. Inform the user that all tasks are complete
overview.md Format (β€25 lines)
# [Project Name]
current_phase: phase2_xxxGoal
[One sentence describing the final objective]Phases
[x] phase1_xxx: [Phase description] β complete
[ ] phase2_xxx: [Phase description] β in_progress (2/4)
[ ] phase3_xxx: [Phase description] β pending Blockers
NoneLast Decision
[One-sentence summary]Last Error
None
Never put detailed task descriptions, lengthy requirements, or step-by-step procedures in overview.md. Those belong in the phase directories.
Key Constraints
overview.md β€ 25 lines (re-read it frequently to prevent goal drift)spec.md β€ 60 lines per phase (split into multiple phases if longer)decisions.md, errors in errors.md