name: harness-setup description: "Initializes and configures Harness in a project — CI, memory, duo workflow, Codex. Use when setting up a new project or adding Harness configuration." when_to_use: "initialize project, setup harness, configure CI, setup memory, duo workflow, gitignore" allowed-tools: ["Read", "Write", "Edit", "Grep", "Glob", "Bash"] argument-hint: "[init|codex|opencode|duo|cleanup|gitignore]" effort: medium model: sonnet
Harness Setup
Quick Reference
| User Input | Subcommand | Behavior |
|---|---|---|
harness-setup (no args) |
init |
Runs gitignore → project initialization (CLAUDE.md + plans.json + settings.json) |
harness-setup init |
init |
New project initialization: gitignore → CLAUDE.md + plans.json + settings.json |
harness-setup gitignore |
gitignore |
Merge harness-managed block into .gitignore (runs scripts/merge-gitignore.sh) |
harness-setup cleanup |
cleanup |
Periodic maintenance: delete old logs, archive completed phases (harness plan-cli archive), trim traces |
harness-setup codex |
codex |
Set up Codex CLI: copy config, rules, and skills to project .codex/ |
harness-setup opencode |
opencode |
Set up OpenCode: copy config, commands, and skills to project .opencode/ |
harness-setup duo |
duo |
Set up both Codex and OpenCode in one step |
Subcommand Details
init — Project Initialization
Introduce Harness to a new project.
Generated files (user's project):
project/
├── CLAUDE.md # Project configuration
├── .gitignore # Standard ignore rules (harness-managed block appended)
└── .claude/
├── settings.json # Claude Code permissions/sandbox/env
├── harness/plans.json # Task tracking (auto-created by harness plan-cli)
├── memory/ # Trace archive + schemas (archive/, schemas/)
├── output-styles/ # Custom output styles (if any)
├── rules/ # Custom rules (if any)
├── scripts/ # Custom scripts (if any)
└── skills/ # Custom skills (if any)
└── settings.local.json # Local custom settings (gitignored) for user overrides
Note: Neither
hooks/norharness.tomlis generated into a user's project.
- Hooks ship inside the installed plugin (
.claude-plugin/hooks.json) — Claude Code loads them from there automatically.harness.toml+harness syncis a plugin-author workflow for regenerating.claude-plugin/*files from a single TOML SSOT. User projects have no.claude-plugin/to regenerate, so the TOML would be an orphaned file. Users who want unified TOML authoring for their own.claude/settings.jsoncan opt in later via a dedicated subcommand (future work).
Flow:
- Run the
gitignoresubcommand (idempotent — callsscripts/merge-gitignore.sh) - Detect project type (Node.js/Python/Go/Rust/Other)
- Generate minimal CLAUDE.md
- Create
.claude/harness/directory (plans.json is auto-created on firstharness plan-cli add-phasecall) - Generate
.claude/settings.json(permissions/sandbox/env — safe defaults)
gitignore — Harness .gitignore Block
Merges the harness-managed block into the project's .gitignore. Safe to run multiple times — skips if the marker is already present.
Implementation: scripts/merge-gitignore.sh
bash "${CLAUDE_SKILL_DIR}/scripts/merge-gitignore.sh"
# Or with an explicit target path:
bash "${CLAUDE_SKILL_DIR}/scripts/merge-gitignore.sh path/to/.gitignore"
The block ignores .claude/sessions/, logs/, settings.local.json, and states/,
while force-tracking .claude/memory/, .claude/output-styles/, .claude/rules/,
.claude/scripts/, .claude/skills/, and .claude/settings.json.
codex — Codex CLI Setup
Sets up the project for Codex CLI by copying Harness config templates and skills. See Codex CLI Setup Reference for full file layout and troubleshooting.
Prerequisites: Codex CLI installed (npm install -g @openai/codex)
What it does:
- Checks that
codexis installed; prints install instructions if not - Copies
templates/codex/*→.codex/(config.toml, rules/harness.rules, .codexignore) - Copies
AGENTS.mdto the project root - Copies all skills from plugin
skills/→.codex/skills/withdisable-model-invocation: truepatched into each SKILL.md frontmatter - Overlays
templates/codex-skills/→.codex/skills/(codex-native variants of breezing and harness-work override the generic copies)
bash "${CLAUDE_SKILL_DIR}/scripts/setup-codex.sh"
Note: Excluded from the no-args
initrun — requires an external@openai/codexinstall that should be explicit opt-in.
opencode — OpenCode Setup
Sets up the project for OpenCode by copying Harness config templates, commands, and skills.
Prerequisites: OpenCode installed (see https://opencode.ai/)
What it does:
- Checks that
opencodeis installed; prints install instructions if not - Copies
templates/opencode/opencode.json→.opencode/opencode.json - Copies
templates/opencode/commands/→.opencode/commands/ - Copies
AGENTS.mdto the project root - Copies all skills from plugin
skills/→.opencode/skills/as-is (opencode ignores unknown frontmatter fields)
bash "${CLAUDE_SKILL_DIR}/scripts/setup-opencode.sh"
Note: Excluded from the no-args
initrun — requires OpenCode to be installed explicitly.
duo — Codex + OpenCode Setup
Runs both codex and opencode setup subcommands in sequence.
bash "${CLAUDE_SKILL_DIR}/scripts/setup-codex.sh"
bash "${CLAUDE_SKILL_DIR}/scripts/setup-opencode.sh"
Cleanup
Periodic maintenance tasks:
| Task | Command |
|---|---|
| Delete old logs | find .claude/logs -mtime +30 -delete |
| Archive completed phases | harness plan-cli archive |
| Delete old traces | tail -1000 .claude/state/agent-trace.jsonl > /tmp/trace && mv /tmp/trace .claude/state/agent-trace.jsonl |
Related Skills
harness-plan— Create project plans after setupharness-work— Execute tasks after setupharness-review— Review setup configuration