Skip to content
Back to skills

Harness Plan

ASecurity

Plans and tracks tasks in .claude/harness/plans.json. Use when creating plans, adding tasks, updating markers, checking progress, or brainstorming an idea into tasks.

  • 34 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 12, 2026
documentationgobashgitapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 11 files and shows the line behind each finding

Scanned September 12, 2026

npx -y skills add tim-hub/powerball-harness --skill harness-plan --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Harness Plan?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Harness Plan
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tim-hub-harness-plan/badge)](https://www.skillsdirectory.com/skills/tim-hub-harness-plan)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: harness-plan
description: "Plans and tracks tasks in .claude/harness/plans.json. Use when creating plans, adding tasks, updating markers, checking progress, or brainstorming an idea into tasks."
when_to_use: "create a plan, add a task, mark task done, where am I, check progress, sync plans, archive phases, brainstorm idea, rough idea, design spec"
allowed-tools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob", "WebSearch", "Task"]
argument-hint: "[create|add|update|sync|archive|brainstorm|sync --no-retro|sync --snapshot|--ci]"
effort: xhigh
model: opus
---

# Harness Plan

## Bootstrap Check (runs before any subcommand)

Before executing any subcommand, ensure the JSON plans storage is initialised:

1. If `.claude/harness/plans.json` exists → proceed normally.
2. If `Plans.md` exists but `.claude/harness/plans.json` does not → auto-migrate:
   ```bash
   harness plan-cli migrate
   ```
3. If neither exists → no action needed; the JSON file is created automatically on the first write (`harness plan-cli add-phase ...`).

This check is performed silently. Inform the user only if migration was triggered.

## Quick Reference

| User Input | Subcommand | Behavior |
|------------|------------|----------|
| "create a plan" | `create` | Default behavior, interactive interview → `harness plan-cli add-phase`/`add-task` |
| "add a task" | `add` | Add new task via `harness plan-cli add-task` |
| "mark complete" | `update` | Change task status to cc:done via `harness plan-cli update` |
| "where am I?" / "check progress" / `harness-plan sync` / "sync status"| `sync` | Compare implementation with plan state (`harness plan-cli list`/`get`) and sync via `harness plan-cli update` |
| `harness-plan sync --snapshot` | `sync --snapshot` | Save point-in-time progress snapshot |
| "rough idea" / "brainstorm" / `harness-plan brainstorm` | `brainstorm` | Shape idea → design spec → tasks via `harness plan-cli add-phase`/`add-task` |
| "archive old phases" / `harness-plan archive` | `archive` | Archive phases via `harness plan-cli archive <phase-id>` (sets `status: archived` in plans.json) |

## Subcommand Details

Each subcommand has its own reference file. Open the matching file when invoking that subcommand.

| Subcommand | Reference |
|------------|-----------|
| `create` | [references/create.md](${CLAUDE_SKILL_DIR}/references/create.md) — interview flow, TDD decision rules, plan generation via `harness plan-cli` |
| `add` | [references/add.md](${CLAUDE_SKILL_DIR}/references/add.md) — insertion rules, DoD/Depends auto-inference |
| `update` | [references/update.md](${CLAUDE_SKILL_DIR}/references/update.md) — marker mapping, single-task status changes |
| `sync` | [references/sync.md](${CLAUDE_SKILL_DIR}/references/sync.md) — discrepancy detection, retrospective, --snapshot |
| `brainstorm` | [references/brainstorm.md](${CLAUDE_SKILL_DIR}/references/brainstorm.md) — two-stage idea → spec → plan flow |
| `archive` | [references/archive.md](${CLAUDE_SKILL_DIR}/references/archive.md) — phase archival, retention, naming |
| _(CLI reference)_ | [cli-reference.md](${CLAUDE_SKILL_DIR}/../../references/cli-reference.md) — all subcommands, flags, exit codes, agent examples |
| _(quality gate)_ | [references/planning-quality.md](${CLAUDE_SKILL_DIR}/references/planning-quality.md) — 8-step planning quality contract for `create` and high-impact `add` |

**CI mode** (`--ci`) — applies to `create` only: no interview; uses the existing plan state (`harness plan-cli list`) and only performs task decomposition. See [references/create.md](${CLAUDE_SKILL_DIR}/references/create.md) "CI Mode" section.

**Retrospective skip** (`--no-retro`) — applies to `sync` only: skips the automatic retrospective pass. See [references/sync.md](${CLAUDE_SKILL_DIR}/references/sync.md) "Step 6: Retrospective".

## Plans Format Conventions

Task data is stored in `.claude/harness/plans.json` (repo root — **never** the plugin cache path). The canonical schema is defined in `plan_types.go`. Key invariants:

- **Newest phase first** — `add-phase` prepends; phases are listed newest-on-top.
- **Phases are never reordered** — gaps in IDs are allowed (archived phases are soft-deleted via `status: archived`).
- **DoD must be verifiable** — yes/no answerable; banned: "looks good", "works properly".
- **All writes go through the CLI** — never edit `plans.json` directly; use `harness plan-cli` subcommands.
- **Location rule** — see [`harness/rules/plans-json-location.md`](${CLAUDE_SKILL_DIR}/../../rules/plans-json-location.md); plugin cache copies are frozen snapshots and must not be read or written.

## Marker List

Compact summary. For full semantics (including the `cc:done [hash]` artifact format and `blocked` reason annotation), see [references/task-fields.md](${CLAUDE_SKILL_DIR}/references/task-fields.md) "Status Markers".

| Marker | Meaning |
|--------|---------|
| `pm:requested` | Requested by PM |
| `cc:TODO` | Not started |
| `cc:WIP` | In progress |
| `cc:done` | Worker completed |
| `pm:confirmed` | PM review completed |
| `blocked` | Blocked (reason must always be noted) |
| `[ralph]` | Iterative loop task — executed by `harness-ralph-loop`; requires `Verify:` line. See [references/ralph-tasks.md](${CLAUDE_SKILL_DIR}/references/ralph-tasks.md) |

## Optional Briefs / Manifest

`harness-plan create` attaches briefs only when needed.

- Tasks involving UI get a `design brief`
- Tasks involving API get a `contract brief`
- Briefs are supplementary materials that briefly define what to build; they do not replace the plan
- A machine-readable JSON list of skill frontmatter can be generated with `scripts/generate-skill-manifest.sh`

Reference:

- `docs/plans/briefs-manifest.md`

## Delegation to `harness-planner` Agent

For mechanical plans mutations (mark task status, add a row, archive completed phases), skills and agents may delegate to the **`harness-planner` agent** (Haiku, low effort) instead of running the edit inline.

The planner agent now calls the `harness plan-cli` binary — it **does not edit Plans.md or `plans.json` directly**. All writes go through the CLI so atomic I/O guarantees are preserved.

| Subcommand handled by agent | CLI call used internally |
|------------------------------|--------------------------|
| `update` | `harness plan-cli update <task_id> --status <status>` |
| `add` | `harness plan-cli add-phase` or `harness plan-cli add-task <phaseID>` |
| `archive` | `harness plan-cli archive <phaseID>` |

> The same CLI calls apply when this skill performs the edit **inline** (without delegating): the SSOT is `.claude/harness/plans.json`, and every read goes through `harness plan-cli list`/`get`, every write through a `harness plan-cli` subcommand.

Subcommands **not** delegated (require Opus reasoning, stay in this skill): `create`, `brainstorm`, `sync`.

**Invocation pattern** — callers use the `Agent` tool with `subagent_type: "harness-planner"` and pass a `planner-request.v1` JSON payload. The agent returns a `planner-response.v1` JSON. See [`harness/agents/harness-planner.md`](${CLAUDE_SKILL_DIR}/../../agents/harness-planner.md) for the full schema and per-operation flows.

The `harness-plan` skill itself remains the user-facing entry point — delegation is opt-in for callers that want cheap, deterministic edits without burning Opus tokens.

## Team Mode / Issue Bridge

`.claude/harness/plans.json` is maintained as the source of truth, and GitHub Issue integration is only used in opt-in team mode.

- Do not use the bridge for solo development
- Team mode creates one tracking issue and generates dry-run sub-issue payloads for each task underneath it
- `scripts/plans-issue-bridge.sh` does not actually update GitHub; it always returns dry-run payloads
- This bridge does not modify the plan

Reference:

- `docs/plans/team-mode.md`

## Related Skills

- `harness-work` — Implement planned tasks
- `harness-review` — Review implementation
- `harness-setup` — Project initialization

## Related Agents

- `harness-planner` — Haiku worker for mechanical plan mutations via `harness plan-cli` (see "Delegation" section above)

Files in this skill

  • SKILL.md8 KB
  • references/add.md2.7 KB
  • references/archive.md1.8 KB
  • references/brainstorm.md3.5 KB
  • references/create.md15.6 KB
  • references/planning-quality.md7.6 KB
  • references/ralph-tasks.md2.8 KB
  • references/sync.md6.4 KB
  • references/task-fields.md2.1 KB
  • references/update.md2.3 KB
  • templates/plans-md-template.md1.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.