harness
Audits, bootstraps, updates, and improves a project's agent harness: the skills, agents, hooks, and instructions for Claude Code and Codex.
Skill by dougborg
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/dougborg-harness
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: security, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Shell scripts
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/harness
Tools it pre-approves 13
From allowed-tools in SKILL.md: the agent may use these without asking you each time.
Bash(ls*),Bash(grep*),Bash(git*),Bash(claudeplugin*),Bash(${CLAUDE_SKILL_DIR}/discover-verification-cmd.sh*),Bash(${CLAUDE_SKILL_DIR}/vendor-snapshot.sh*),Bash(${CLAUDE_SKILL_DIR}/check-snapshot.sh*),Bash(${CLAUDE_SKILL_DIR}/migrate-inventory.sh*),Read,Glob,Write,
Show 1 more
Edit
What's inside
- Skill name
harness- Description
- Audits, bootstraps, updates, and improves a project's agent harness: the skills, agents, hooks, and instructions for Claude Code and Codex. Modes: audit, bootstrap, update, add, migrate, retro, hoist; each reads its own protocol reference.
- License
- Apache-2.0
- Allowed tools
- Bash(ls*),, Bash(grep*),, Bash(git*),, Bash(claude, plugin*),, Bash(${CLAUDE_SKILL_DIR}/discover-verification-cmd.sh*),, Bash(${CLAUDE_SKILL_DIR}/vendor-snapshot.sh*),, Bash(${CLAUDE_SKILL_DIR}/check-snapshot.sh*),, Bash(${CLAUDE_SKILL_DIR}/migrate-inventory.sh*),, Read,, Glob,, Write,, Edit
- Instructions
- 158 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
- Pre-approves some shell commands
Files (24)
- SKILL.md
- architecture-patterns.md
- audit.md
- bootstrap.md
- check-snapshot.sh
- design-principles.md
- discover-verification-cmd.sh
- external-plugins.md
- find-python.sh
- github-action.md
- harness-update.sh
- harness-update.yml
- hoist.md
- hooks-patterns.md
- hooks-reference.md
- migrate-inventory.sh
- migrate.md
- project-facts.md
- release-please-reference.md
- resolve-upstream.sh
- retro.md
- update.md
- vendor-snapshot.sh
- vendoring.md
SKILL.md (first lines)
# Harness
Quality gates for an agent harness: the skills, agents, hooks, and docs that
teach agents how to work in a project. Harness quality is agent quality; a
stale or badly structured skill gets followed exactly as written.
The skill works on a project that has harness content in `.claude/`,
`.agents/`, or `.codex/`, or one you are bootstrapping. Generic skills and
agents arrive as a vendored snapshot that nobody edits (ADR 0001): what is
specific to the project lives in facts, and a need the facts can't express
becomes a declared fork. `.harness/lock.json` lists the snapshot's files;
anything else in the host trees is project-local. The project's verification
command must be runnable.
## Pick the mode
On Claude Code the modes are `/harness <mode>`; on Codex, `$harness <mode>`.
```text
harness Auto-detect: bootstrap if no harness, audit if one exists
harness audit Audit the current harness (delegates setup health to /doctor)
harness bootstrap Analyze the project, write its facts and project-specific additions, vendor the generic set
harness update Re-vendor the snapshot from a newer harness-kit release
harness add <repo> Vendor skills from another repository
harness migrate Move a copy-and-edit harness (.harness-lock.json) to a vendored snapshot
harness retro Post-session retrospective on the environment
harness hoist Propose generic local improvements back upstream
```
With no mode given, run `bootstrap` if none of `.claude/`, `.agents/`, or
`.codex/` holds harness content, and `audit` otherwise. A project with a
`.harness-lock.json` predates vendoring: suggest `migrate` before auditing.
Read the file for the selected mode before doing any work, and only that one;
each is self-contained.
| Mode | Read | What it covers |
| --- | --- | --- |
| `audit` | `${CLAUDE_SKILL_DIR}/audit.md` | Audit protocol, `/doctor` division of labor, gap classification, output format |
| `bootstrap` | `${CLAUDE_SKILL_DIR}/bootstrap.md` | harness-builder handoff, approval gate, facts and project-local content, vendoring the snapshot |
| `update` | `${CLAUDE_SKILL_DIR}/update.md` | Running the vendoring script against a newer release; acting on its report |
| `add` | `${CLAUDE_SKILL_DIR}/update.md` | Adding third-party skills to the vendored set (second half of the file) |
| `migrate` | `${CLAUDE_SKILL_DIR}/migrate.md` | Inventory of `.harness-lock.json` copies, each edit to a fact or fork, preview gate, vendoring |
| `retro` | `${CLAUDE_SKILL_DIR}/retro.md` | Environment audit, gap classification A/B/C/D/E, routing lessons to facts, local skills, or hoist |
| `hoist` | `${CLAUDE_SKILL_DIR}/hoist.md` | Proposing project-local content, facts patterns, and forks back upstream |
Done when the mode file is read and its final step reports done.
## Topic references
Read these as needed from any mode; each is linked directly from here.
| Topic | Read | When |
| --- | --- | --- |
| Project facts and `.harness/config.toml` | `${CLAUDE_SKILL_DIR}/project-facts.md` | Stating a project's verification command or other facts; deciding prose (`AGENTS.md`) versus config; reading or writing the config's keys |
| Vendoring a snapshot and `.harness/lock.json` | `${CLAUDE_SKILL_DIR}/vendoring.md` | Writing or rewriting a project's vendored skills, agents, and hooks with `vendor-snapshot.sh`; reading the lock; checking the snapshot is unedited with `check-snapshot.sh` |
| Skill and agent design patterns | `${CLAUDE_SKILL_DIR}/design-principles.md` | Writing or reviewing a skill or agent; deciding what belongs upstream vs local |
| Hook staging and exit codes | `${CLAUDE_SKILL_DIR}/hooks-patterns.md` | Configuring or auditing hooks (PostToolUse stages, Stop hooks); a hook that exits non-zero on a no-op is covered under Hook Exit Code Safety |
| Bundled skills and official plugin catalog | `${CLAUDE_SKILL_DIR}/external-plugins.md` | Bootstrap or audit needs bundled-skill delegation targets, stack-matched plugin recommendations, and overlap flags |
| Multi-agent architecture patterns | `${CLAUDE_SKILL_DIR}/architecture-patterns.md` | Bootstrap picks an architecture pattern for the project |
| Plugin `hooks.json` schema | `${CLAUDE_SKILL_DIR}/hooks-reference.md` | Writing or debugging a plugin's `hooks/hooks.json` |
| Claude Code GitHub Action in CI | `${CLAUDE_SKILL_DIR}/github-action.md` | Setting up or auditing a workflow that runs `claude-code-action` on a repo with a vendored snapshot |
| Release Please setup | `${CLAUDE_SKILL_DIR}/release-please-reference.md` | Recommending automated semver releases for a Conventional Commits + GitHub project |
## Treat the audit as advice
Run `harness audit` before shipping a skill. It catches what nothing else
does: invalid frontmatter, unrestricted "read-only" agents, oversized or vague
skills. Fix its defects (a frontmatter field the runtime silently ignores is a
defect) and weigh its recommendations (whether a description reads vague is
your call). It is advisory, not a gate.
## Classify every finding
Every finding from audit or retro gets a type, which decides where the fix
goes:
- **Type A**: content gap in an existing skill. Fix the skill.
- **Type B**: skill missing entirely. Add it.
- **Type C**: the builder template would not have generated this. Fix the
builder; this double loop is the most valuable fix.
- **Type D**: a lightweight pattern not worth a skill. Store it in memory or
`.claude/patterns/` (retro only).
- **Type E**: an environment change (a check, hook, CI job, standard, doc
pointer, or access grant) made in the project; also Type C when the builder
should have recommended it (retro only).
A vendored file (one `.harness/lock.json` lists) is never the fix site: a
Type A on it is a project fact, a project-local skill, or an upstream fix,
and a generic Type B goes upstream too. Retro mode routes each one.
## Fix gaps as you meet them
When any session (not only harness work) exposes a behavioral gap in the
harness:
1. Fix the immediate issue in the current task.
2. Decide the scope: upstream (a generic workflow that helps every project) or
project-local (a fact, or a domain-specific skill).
3. Hand the fix to a background subagent and keep working.
An upstream fix clones harness-kit (or the other upstream source), fixes it,
and opens a PR. On Claude Code:
```text
Agent(
description: "fix harness gap: [brief description]",
run_in_background: true,
prompt: "Fix [gap] in harness-kit.
1. git clone --depth 1 https://github.com/dougborg/harness-kit /tmp/harness-fix
2. cd /tmp/harness-fix && git checkout -b fix/[name]
3. Fix skills/<area>/[skill]/SKILL.md (find it with ls skills/*/[skill])
or agents/[agent].md, then run scripts/generate-claude-skills.sh.
A new skill goes in a topic-area folder and that area's README.md.
If fixing inline bash, extract it to a script instead of patching
in place.
4. Commit, push, open PR with gh
5. Clean up: rm -rf /tmp/harness-fix"
)From dougborg/harness-kit, Apache-2.0.
More from dougborg/harness-kit
- 0.565score
adhd-mode
dougborg
Shapes every response for a reader with ADHD: the next action first, numbered steps, progress restated each turn, tangents held back, concrete time estimates…
SkillAFreshness: AClaude Code +9 - 0.565score
agent-standup
dougborg
Reconciles and coordinates shared work across multiple coding agents and human operators.
SkillAFreshness: AClaude Code +9 - 0.565score
codebase-design
dougborg
Shared vocabulary and principles for designing deep modules: a lot of behaviour behind a small interface, at a clean seam, testable through that interface.
SkillAFreshness: AClaude Code +9 - 0.565score
commit
dougborg
Creates conventional commits with quality gates — stages intentionally, checks for uv.lock drift, runs the project's verification command, and writes the…
SkillAFreshness: AClaude Code +9 - 0.565score
diagnosing-bugs
dougborg
A disciplined diagnosis loop for hard bugs and performance regressions: build a tight feedback loop that goes red on this bug, minimise, hypothesise…
SkillAFreshness: AClaude Code +9 - 0.565score
documentation-writer
dougborg
Writes and revises human-facing documentation — READMEs, contributor and setup guides, reference pages, architecture notes, CLAUDE.md, and changelog entries.
SkillAFreshness: AClaude Code +9 - 0.565score
domain-modeling
dougborg
Builds and sharpens a project's domain language as decisions are made: challenges fuzzy or conflicting terms, stress-tests concepts with edge-case scenarios…
SkillAFreshness: AClaude Code +9 - 0.565score
grilling
dougborg
Interviews the user relentlessly about a plan, design, decision, or idea until every branch of the decision tree is resolved and nothing is silently assumed.
SkillAFreshness: AClaude Code +9 - 0.565score
harness-issue
dougborg
Files a bug report, idea, or proposed change against the upstream harness repo resolved from the project's config, from any project that uses harness-kit.
SkillAFreshness: AClaude Code +9 - 0.565score
code-reviewer
dougborg
Reviews a diff across six dimensions — correctness, design, readability, performance, testing, security — plus the repo's documented standards, code smells…
SkillAFreshness: AClaude Code +9 - 0.561score
budget
dougborg
Check the Claude usage/token budget before dispatching subagents or large fan-outs.
SkillAFreshness: AClaude Code +9 - 0.558score
groom
dougborg
Groom the GitHub backlog into theme buckets, umbrella status, a prioritized PR train, stale flags, and untracked gaps.
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 1
- Open issues
- 8
- Last commit (this folder)
- Oct 18, 2026 (10 days ago)
- Last release
- Oct 18, 2026 (10 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/dougborg/harness-kit
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from dougborg
- 0.565score
agent-standup
dougborg
Reconciles and coordinates shared work across multiple coding agents and human operators.
SkillAFreshness: AClaude Code +9 - 0.565score
adhd-mode
dougborg
Shapes every response for a reader with ADHD: the next action first, numbered steps, progress restated each turn, tangents held back, concrete time estimates…
SkillAFreshness: AClaude Code +9 - 0.565score
code-reviewer
dougborg
Reviews a diff across six dimensions — correctness, design, readability, performance, testing, security — plus the repo's documented standards, code smells…
SkillAFreshness: AClaude Code +9 - 0.565score
codebase-design
dougborg
Shared vocabulary and principles for designing deep modules: a lot of behaviour behind a small interface, at a clean seam, testable through that interface.
SkillAFreshness: AClaude Code +9 - 0.565score
commit
dougborg
Creates conventional commits with quality gates — stages intentionally, checks for uv.lock drift, runs the project's verification command, and writes the…
SkillAFreshness: AClaude Code +9 - 0.565score
diagnosing-bugs
dougborg
A disciplined diagnosis loop for hard bugs and performance regressions: build a tight feedback loop that goes red on this bug, minimise, hypothesise…
SkillAFreshness: AClaude Code +9
Cite this page
harness skill. Agent Mart. https://agentmart.dev/skills/dougborg-harness (last updated 2026-10-24)