Persisting Progress Across Sessions
SkillWeb & browsingResume an interrupted orchestration run across Claude Code sessions using MANIFEST.yaml
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Persisting Progress Across Sessions skill
What this skill tells your AI
The instructions your AI receives, as published by porcupine-md/anoa-browser in .claude/skills/core/persisting-progress-across-sessions/SKILL.md and read by ahel’s review.
Use this skill when a session ends mid-orchestration (context compaction, manual restart, crash) and you need to resume without repeating completed work.
The Resume Protocol
Step 1 — Find the Incomplete MANIFEST
# List all in-progress features
ls .jonggrang/.output/features/
Look for a MANIFEST.yaml with status: running or status: paused. Read it:
cat .jonggrang/.output/features/{feature_id}/MANIFEST.yaml
Key fields to read:
current_phase— next phase to executeactive_phases— which phases this run is executingphases— per-phase status (completed / failed / pending)agents— which agents ran and their output pathsvalidation— review_passed, tests_passed, coverage_met
Step 2 — Reconstruct Context from Phase Outputs
Do NOT re-run completed phases. Read their outputs instead:
# Phase 7 output (architecture plan)
cat .jonggrang/.output/features/{feature_id}/07-lead-architecture-plan.json
# Phase 8 output (implementation)
cat .jonggrang/.output/features/{feature_id}/08-developer-{task_id}.json
# Any reviewer reports
cat .jonggrang/.output/features/{feature_id}/09-reviewer-report.json
Step 3 — Identify Resumption Point
current_phase in MANIFEST → start from this phase
phases[N].status == 'failed' → retry this phase
phases[N].status == 'completed' → skip, output already exists
Step 4 — Resume the Orchestration
Call orchestrating-feature with resume: true and the feature_id. Pass the reconstructed context as a summary — do NOT re-read all source code; trust the phase outputs.
Resuming feature: {feature_id}
Completed phases: 1, 2, 3, 4, 7, 8
Current phase: 9 (design-verification)
Architecture plan: [summary from 07-lead-architecture-plan.json]
Implementation: [summary from 08-developer.json]
Cross-Session State Guarantee
The MANIFEST survives session resets. The ephemeral state does NOT:
| File | Survives reset? | Action on resume |
|---|---|---|
MANIFEST.yaml | ✅ Yes | Read to get current phase |
feedback-loop-state.json | ❌ No | Assume clean state, re-run review/test if dirty_bit lost |
compaction-state.json | ❌ No | Will be refreshed on next Task spawn |
session-roles.json | ❌ No | Will be re-populated on next session start |
When Tests Were Running
If context compacted during phase 13 (testing), check validation.tests_passed in MANIFEST:
false→ re-spawn testertrue→ proceed to phase 14 (coverage)
Stale Lock Cleanup
On resume, clean up any stale lock files left by crashed agents:
const { cleanStaleLocks } = require('./lib/locks');
cleanStaleLocks(projectRoot); // removes locks older than 30 minutes
Example Resume Flow
Session ended at phase 9.
MANIFEST shows: phases[8].status = 'completed', phases[9].status = 'running'
Resume steps:
1. Read 07-lead-architecture-plan.json → architecture context
2. Read 08-developer-*.json → what was implemented
3. Re-spawn reviewer for phase 9 with the implementation context
4. Continue from phase 9 forward
Signals
- GitHub stars
- 23
- Forks
- 2
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
persisting-progress-across-sessions- Source
- github.com/porcupine-md/anoa-browser