From Claude Harness
Saves session progress by committing changes, pushing to remote, creating/updating PRs, persisting decisions to memory, and archiving features. Use when saving work or checkpointing.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-harness:checkpoint [optional commit context][optional commit context]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Create a checkpoint of the current session: commit, push, PR, memory persistence, and feature archival.
Create a checkpoint of the current session: commit, push, PR, memory persistence, and feature archival.
Arguments: $ARGUMENTS
Session ID: ${CLAUDE_SESSION_ID} — session state lives in .claude-harness/sessions/${CLAUDE_SESSION_ID}/.
FEATURES_FILE=".claude-harness/features/active.json"ARCHIVE_FILE=".claude-harness/features/archive.json"MEMORY_DIR=".claude-harness/memory/"PROGRESS_FILE=".claude-harness/claude-progress.json"SESSION_DIR=".claude-harness/sessions/${CLAUDE_SESSION_ID}/"${PROGRESS_FILE} with:
Memory layers are an OKF v0.1 bundle at ${MEMORY_DIR}: one markdown concept file per entry with YAML frontmatter (required type field), plus an index.md listing per directory. See schemas/okf-memory.md for the format.
1.6. Persist session decisions to ${MEMORY_DIR}/decisions/:
dec-{NNN}-{slug}.md (next NNN from existing files; slug = lowercased decision, non-alphanumerics as hyphens, <=48 chars):
---
type: Decision
id: dec-{NNN}
title: "{what was decided, <=80 chars}"
timestamp: {ISO timestamp}
feature: {feature-id}
---
# {full decision text}
## Rationale
{why this decision was made}
## Alternatives
- {other options considered}
## Impact
{files or areas affected}
* [{id}: {title}](/decisions/{filename}) - {short description} to ${MEMORY_DIR}/decisions/index.md1.7. Update semantic memory with discovered patterns:
${MEMORY_DIR}/semantic/architecture.jsonstructure.entryPoints, structure.components, etc.patterns.naming with discovered naming conventionspatterns.fileOrganization with discovered structurespatterns.codeStyle with observed patternslastUpdated to current timestamp1.8. Update semantic entities (if new concepts discovered):
${MEMORY_DIR}/semantic/entities.json1.9. Persist reusable patterns to ${MEMORY_DIR}/patterns/:
${MEMORY_DIR}/patterns/index.md to avoid duplicates):
pat-{NNN}-{slug}.md with frontmatter (type: Pattern, id, title) and body # {pattern} + ## Source* [...](...) line to ${MEMORY_DIR}/patterns/index.md1.9.5. Write persistent session briefing to .claude-harness/session-briefing.md:
/start# Session Briefing
Last updated: {ISO timestamp}
## Active Features
- {id}: {name} [{status}]
{one-line description}
Acceptance: {N} scenarios | Files: {relatedFiles summary}
## Recent Decisions (last 5)
- {decision} ({feature}, {date})
## Approaches to AVOID
- {approach} -> {rootCause} ({feature})
## Learned Rules
- {title}: {description}
## Current Status
Last checkpoint: {commit message summary}
Branch: {current branch}
Next steps: {immediate actionable items}
${FEATURES_FILE} plus the OKF memory bundle (${MEMORY_DIR}/decisions/, ${MEMORY_DIR}/failures/, ${MEMORY_DIR}/rules/ concept files) -- or run python3 "${CLAUDE_PLUGIN_ROOT}/scripts/compile-briefing.py" .claude-harness --write to generate it/clear, and machine reboots1.10. Auto-reflect is always enabled:
1.11. Run reflection with auto mode:
minConfidenceForAuto:
${MEMORY_DIR}/rules/rule-{NNN}-{slug}.md (frontmatter type: Rule, id, title, timestamp, active: true; body = # {title} + description) and add it to ${MEMORY_DIR}/rules/index.md1.12. Report auto-reflect results (if rules extracted):
AUTO-REFLECTION
High-confidence rules auto-saved: {N}
- {rule title}
- {rule title}
Lower-confidence (manual review needed): {N}
(Low-confidence rules queued for next checkpoint review)
1.13. If no corrections detected:
git add .claude-harness/ (sessions/ and working/ are gitignored, so only persistent state is staged)git add -A (except secrets/env files).claude-harness/sessions/${CLAUDE_SESSION_ID}/loop-state.jsontype is "fix": Use fix({linkedTo.featureId}): <description> prefixtype is "feature" or undefined: Use feat({feature-id}): <description> prefixFixes #{fix-issue-number} and Related to #{original-issue-number}git push -u origin {branch}If on a feature/fix branch (gh CLI must be authenticated -- check gh auth status on failure):
git remote get-url origingh pr list --head {branch} --json number,urlgh pr create --title "{title}" --body "{body}" --label "{labels}"
feat: <description>fix: <description>refactor: <description> for refactoringdocs: <description> for documentationstatus:ready-for-reviewbugfix + linked-to:{feature-id} + status:ready-for-reviewgh pr edit {number} --body "{updated body}"gh pr comment {number} --body "..."gh pr view {number} --json state,mergeable,reviewDecision,statusCheckRollup${FEATURES_FILE} features array with prNumber${FEATURES_FILE} fixes array with prNumberPR Title Convention (Conventional Commits):
feat: New feature (triggers MINOR version bump)fix: Bug fix (triggers PATCH version bump)refactor: Code refactoringdocs: Documentationtest: Testschore: Maintenance.claude-harness/sessions/${CLAUDE_SESSION_ID}/loop-state.jsonstatus is "completed" and matches current feature/fix:
TaskList to find the feature's tasksTaskUpdate to mark as "completed"schemas/loop-state.schema.json for canonical shape):
{
"version": 9,
"feature": null,
"featureName": null,
"type": "feature",
"linkedTo": null,
"status": "idle",
"attempt": 0,
"maxAttempts": 12,
"startedAt": null,
"lastAttemptAt": null,
"verification": {},
"history": [],
"tasks": {
"enabled": false,
"chain": [],
"current": null,
"completed": []
},
"lastCheckpoint": "{commit-hash}",
"escalationRequested": false
}
Archive completed features and fixes:
${FEATURES_FILE}Archive features:
${ARCHIVE_FILE} (create if missing with {"version":3,"archived":[],"archivedFixes":[]})archived[] arrayArchive fixes:
Find all fixes with status="passing"
If any completed fixes exist:
archivedFixes[] arrayReport: "Archived X completed fixes"
Write updated ${FEATURES_FILE} and ${ARCHIVE_FILE}
Read .claude-harness/agents/context.json
Skip if no currentSession or no agentResults
For each entry in agentResults (write OKF concept files, list each in the directory's index.md):
${MEMORY_DIR}/successes/ (suc-{NNN}-{slug}.md, type: Success; body # {approach} + ## Files + ## Patterns)${MEMORY_DIR}/failures/ (fail-{NNN}-{slug}.md, type: Failure; body # {approach} + ## Errors + ## Root Cause + ## Prevention)If sharedState.discoveredPatterns has new entries:
${MEMORY_DIR}/patterns/ (skip ones already listed in patterns/index.md)If architecturalDecisions has entries:
${MEMORY_DIR}/decisions/Clear agentResults array (already persisted to memory)
Set currentSession to null
Update lastUpdated timestamp
If teamState is non-null (Agent Teams was active):
agentResults (if not already there)teamState to null (team cleanup complete)Write updated files
Report: "Persisted {N} agent results to procedural memory"
Display checkpoint summary:
CHECKPOINT COMPLETE
Progress saved to memory layers
Commit: {hash}
PR: #{number} (if applicable)
Your progress is preserved in:
- claude-progress.json (session summary)
- memory/decisions/ (Decision concepts)
- memory/successes/ + memory/failures/ (Success/Failure concepts)
- memory/rules/ (learned Rule concepts)
- session-briefing.md (pointed to at next session start)
NOTE: There is no need to /clear after a checkpoint. Feature work runs
in isolated subagents (fresh context per feature), and Claude Code's native
compaction preserves task-relevant context automatically. Clear only if you
want a full manual reset.
npx claudepluginhub joshuarweaver/cascade-ai-ml-agents-agent-framework --plugin panayiotism-claude-harnessWraps up a work session by recording changed files, caveats, decisions, and next steps so a fresh session can resume without re-deriving context.
Closes out a session cleanly by reviewing work, updating project tracking files, committing changes, and capturing session knowledge. Use when a task is complete with no passoff needed.
End-of-session ritual. Captures decisions, lessons, gotchas, and open threads. Writes narrative session log and stores memories via Wenlan MCP.