Effective Harnesses
Purpose
Use this skill to keep long-running implementation or research projects reliable across many agent sessions. Maintain a small set of durable project files so any compatible agent can resume work without relying on hidden chat context.
Core Principles
- Work on one feature at a time unless the user explicitly requests parallel work.
- Track every feature in
feature_list.json.
- Run each feature's test/check command before marking it complete.
- Keep a human-readable progress log for recovery.
- Commit meaningful checkpoints when the environment and user instructions require git commits.
- Prefer portable files and commands over host-specific slash commands.
Harness Files
Create or maintain these files at the project root:
| File |
Purpose |
feature_list.json |
Canonical list of features, priorities, statuses, and test results. |
init.sh / init.ps1 / init.py |
Optional project bootstrap/start command for future sessions. Prefer init.ps1 or init.py on Windows native. |
agent-progress.md |
Chronological progress notes, decisions, blockers, and next steps. |
CODING_STANDARDS.md |
Optional project-specific coding/test/review conventions. |
If the project already has Claude-specific names such as claude-progress.txt, keep them if users rely on them, but prefer the portable agent-progress.md name for new projects.
Initialize a Project
- Identify the project goal, stack, default test command, and startup command.
- Create
feature_list.json from the schema below.
- Create a repeatable bootstrap if useful:
init.sh for Unix-like shells, init.ps1 or init.py for Windows native. Do not require Bash on Windows.
- Create
agent-progress.md with initial context, assumptions, and next feature.
- Create or update
CODING_STANDARDS.md only when project conventions are known or requested.
- Run the bootstrap and/or test command if safe in the current environment.
Add a Feature
Append a new feature object with:
- Unique sequential ID such as
feat-001.
- Category:
functional, bugfix, refactor, research, or another user-approved category.
- Priority: lower number means higher priority.
- Clear description and concrete steps.
- Test/check command that proves completion.
- Initial status:
pending and passes: false.
Resume a Session
At the beginning of a resumed project:
- Read
feature_list.json.
- Read recent git history if available.
- Read
agent-progress.md or legacy progress logs.
- Select the highest-priority feature with status other than
completed.
- Run
init.sh, init.ps1, init.py, or the documented startup command when appropriate for the host OS.
- Run a baseline test/check when safe, then begin work.
Complete a Feature
Before marking a feature complete:
- Verify implementation/research artifacts exist.
- Run the feature's
test_command or a justified equivalent.
- Store a concise
test_output summary.
- Set
test_status to passed only on success; otherwise use failed and leave passes: false.
- Update
agent-progress.md with what changed, validation, and next steps.
- Commit if required by user or project policy.
File-Mode Research Harness Pattern
For large research tasks, prefer a file-mode harness instead of chat-heavy handoff:
- Create a domain data directory such as
data/<domain>/ plus a depth/ subdirectory.
- Track run status and convergence in
data/<domain>/index.json.
- Split research into independent dimensions and write each dimension to
depth/<dimension>.json.
- If the user explicitly requests/allows parallel agents and the host supports them, workers should write JSON files and reply only
DONE; otherwise perform the same dimensions sequentially.
- Merge depth files into a main JSON data file, export any required CSV tables, then generate deliverables.
- Validate JSON/CSV/report files before marking the feature complete.
For renewable-energy market intelligence, use $renewable-market-research, which specializes this pattern for country + technology research and full/lite report generation.
feature_list.json Schema
{
"version": "1.1",
"project": "Project name",
"description": "One-sentence project goal",
"test_command": "npm test",
"created": "YYYY-MM-DD",
"features": [
{
"id": "feat-001",
"category": "functional",
"priority": 1,
"description": "Feature description",
"steps": ["Step 1", "Step 2"],
"test_command": "npm test",
"test_status": "pending",
"test_output": "",
"status": "pending",
"passes": false
}
]
}
Allowed status values: pending, in_progress, blocked, completed.
Allowed test_status values: pending, running, passed, failed, skipped.
Use skipped only with a clear reason in test_output.
Progress Log Format
Append entries like:
## YYYY-MM-DD — feat-001 short title
- Status: in_progress/completed/blocked
- Changed: ...
- Validation: `command` → result summary
- Decisions: ...
- Next: ...
Host Portability Notes
- Codex: use normal file edits, terminal commands, plan updates, and git commits according to the current instructions.
- OpenClaw: keep the same project files; place this skill under an OpenClaw skills directory or workspace skills directory.
- Windows native: prefer PowerShell (
.ps1) or Python (.py) startup/validation scripts; avoid Bash-only make.sh, sed, awk, chmod, or Unix path assumptions.
- Claude Code: legacy slash commands may be used if present, but do not require them for portability.
1---2name: effective-harnesses3description: Long-running agent project harness for Codex, OpenClaw, Claude Code, and other coding agents. Use to initialize or maintain projects that need feature decomposition, resumable progress tracking, test-gated completion, session recovery, and git-backed checkpoints through files such as feature_list.json, init.sh, progress logs, and coding standards.4---56# Effective Harnesses78## Purpose910Use this skill to keep long-running implementation or research projects reliable across many agent sessions. Maintain a small set of durable project files so any compatible agent can resume work without relying on hidden chat context.1112## Core Principles1314- Work on one feature at a time unless the user explicitly requests parallel work.15- Track every feature in `feature_list.json`.16- Run each feature's test/check command before marking it complete.17- Keep a human-readable progress log for recovery.18- Commit meaningful checkpoints when the environment and user instructions require git commits.19- Prefer portable files and commands over host-specific slash commands.2021## Harness Files2223Create or maintain these files at the project root:2425| File | Purpose |26|---|---|27| `feature_list.json` | Canonical list of features, priorities, statuses, and test results. |28| `init.sh` / `init.ps1` / `init.py` | Optional project bootstrap/start command for future sessions. Prefer `init.ps1` or `init.py` on Windows native. |29| `agent-progress.md` | Chronological progress notes, decisions, blockers, and next steps. |30| `CODING_STANDARDS.md` | Optional project-specific coding/test/review conventions. |3132If the project already has Claude-specific names such as `claude-progress.txt`, keep them if users rely on them, but prefer the portable `agent-progress.md` name for new projects.3334## Initialize a Project35361. Identify the project goal, stack, default test command, and startup command.372. Create `feature_list.json` from the schema below.383. Create a repeatable bootstrap if useful: `init.sh` for Unix-like shells, `init.ps1` or `init.py` for Windows native. Do not require Bash on Windows.394. Create `agent-progress.md` with initial context, assumptions, and next feature.405. Create or update `CODING_STANDARDS.md` only when project conventions are known or requested.416. Run the bootstrap and/or test command if safe in the current environment.4243## Add a Feature4445Append a new feature object with:4647- Unique sequential ID such as `feat-001`.48- Category: `functional`, `bugfix`, `refactor`, `research`, or another user-approved category.49- Priority: lower number means higher priority.50- Clear description and concrete steps.51- Test/check command that proves completion.52- Initial status: `pending` and `passes: false`.5354## Resume a Session5556At the beginning of a resumed project:57581. Read `feature_list.json`.592. Read recent git history if available.603. Read `agent-progress.md` or legacy progress logs.614. Select the highest-priority feature with status other than `completed`.625. Run `init.sh`, `init.ps1`, `init.py`, or the documented startup command when appropriate for the host OS.636. Run a baseline test/check when safe, then begin work.6465## Complete a Feature6667Before marking a feature complete:68691. Verify implementation/research artifacts exist.702. Run the feature's `test_command` or a justified equivalent.713. Store a concise `test_output` summary.724. Set `test_status` to `passed` only on success; otherwise use `failed` and leave `passes: false`.735. Update `agent-progress.md` with what changed, validation, and next steps.746. Commit if required by user or project policy.7576## File-Mode Research Harness Pattern7778For large research tasks, prefer a file-mode harness instead of chat-heavy handoff:79801. Create a domain data directory such as `data/<domain>/` plus a `depth/` subdirectory.812. Track run status and convergence in `data/<domain>/index.json`.823. Split research into independent dimensions and write each dimension to `depth/<dimension>.json`.834. If the user explicitly requests/allows parallel agents and the host supports them, workers should write JSON files and reply only `DONE`; otherwise perform the same dimensions sequentially.845. Merge depth files into a main JSON data file, export any required CSV tables, then generate deliverables.856. Validate JSON/CSV/report files before marking the feature complete.8687For renewable-energy market intelligence, use `$renewable-market-research`, which specializes this pattern for country + technology research and full/lite report generation.8889## `feature_list.json` Schema9091```json92{93 "version": "1.1",94 "project": "Project name",95 "description": "One-sentence project goal",96 "test_command": "npm test",97 "created": "YYYY-MM-DD",98 "features": [99 {100 "id": "feat-001",101 "category": "functional",102 "priority": 1,103 "description": "Feature description",104 "steps": ["Step 1", "Step 2"],105 "test_command": "npm test",106 "test_status": "pending",107 "test_output": "",108 "status": "pending",109 "passes": false110 }111 ]112}113```114115Allowed `status` values: `pending`, `in_progress`, `blocked`, `completed`.116Allowed `test_status` values: `pending`, `running`, `passed`, `failed`, `skipped`.117Use `skipped` only with a clear reason in `test_output`.118119## Progress Log Format120121Append entries like:122123```markdown124## YYYY-MM-DD — feat-001 short title125126- Status: in_progress/completed/blocked127- Changed: ...128- Validation: `command` → result summary129- Decisions: ...130- Next: ...131```132133## Host Portability Notes134135- Codex: use normal file edits, terminal commands, plan updates, and git commits according to the current instructions.136- OpenClaw: keep the same project files; place this skill under an OpenClaw skills directory or workspace skills directory.137- Windows native: prefer PowerShell (`.ps1`) or Python (`.py`) startup/validation scripts; avoid Bash-only `make.sh`, `sed`, `awk`, `chmod`, or Unix path assumptions.138- Claude Code: legacy slash commands may be used if present, but do not require them for portability.