harness-driven-dev
CLAUDE.md15 starsChanged 6 months agoMITView on GitHub
This is a demo Task Board (vanilla HTML/CSS/JS) used to demonstrate Harness-Driven Development: an approach where an AI agent enforces software best practices mechanically via scripts, hooks, and gates. The harness connects Linear (project management) with GitHub (code) through automated enforcement. The agent has 5 skills that connect with the harness: Note: DEMO-X is used as an example. Replace with your actual Linear team key prefix (e.g., HAR-5, EXP-1). The team key is set when you create your team in…
- Reads credentials
In this repository5 other files it gives its agents.
- close-issueSkill
- create-issueSkill
- fix-secretSkill
- start-issueSkill
- statusSkill
The file
We split this CLAUDE.md into the rules it gives an agent
9 rules. About 0 are common, 3 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 28
No code without issue: Before touching code, run /start-issue.
- Very specific: line 29
Refs, never Closes: Commit messages MUST contain Refs DEMO-XXX.
- Very specific: line 30
NEVER use Closes, Fixes, or Resolves — they bypass harness gates.
- Very specific: line 31
Mechanical Definition of Done: Use /close-issue to close issues.
- Distinctive: line 32
NEVER close manually in Linear.
- Distinctive: line 36
Evidence always: Every issue closure includes an audit trail comment in Linear.
- Very specific: line 40
When gitleaks blocks a commit because a secret was hardcoded, run the /fix-secret skill.
- Distinctive: line 43
Remove the secret from the code.
- Very specific: line 44
Ensure .env.example documents the variable name (placeholder only).
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
CLAUDE.md — Harness-Driven Development
Project
This is a demo Task Board (vanilla HTML/CSS/JS) used to demonstrate Harness-Driven Development: an approach where an AI agent enforces software best practices mechanically via scripts, hooks, and gates.
The harness connects Linear (project management) with GitHub (code) through automated enforcement.
Skills
The agent has 5 skills that connect with the harness:
| Skill | When to use |
/create-issue <title> | Create a new issue in Linear with acceptance criteria. |
/start-issue DEMO-X | ALWAYS before writing code. Reads Linear issue, creates branch, moves to In Progress. |
/close-issue DEMO-X | ALWAYS to finish work. Runs 3 gates (tests + CI + criteria), posts evidence, moves to Done. |
/fix-secret | When gitleaks blocks a commit. Moves the secret to env, asks the user to populate .env, WAITS for confirmation before retrying. |
/status | Check project dashboard: issues, branch, CI status. |
Note:
DEMO-Xis used as an example. Replace with your actual Linear team key prefix (e.g.,HAR-5,EXP-1). The team key is set when you create your team in Linear.
Harness Rules
- No code without issue: Before touching code, run
/start-issue. - Refs, never Closes: Commit messages MUST contain
Refs DEMO-XXX. NEVER useCloses,Fixes, orResolves— they bypass harness gates. - Mechanical Definition of Done: Use
/close-issueto close issues. NEVER close manually in Linear. The harness runs 3 gates first. - No secrets in code: gitleaks blocks commits with secrets
automatically. When it blocks, follow the Secret Blocked Flow
below — never bypass it with
--no-verify. - Evidence always: Every issue closure includes an audit trail comment in Linear.
Secret Blocked Flow
When gitleaks blocks a commit because a secret was hardcoded, run the
/fix-secret skill. This flow is mandatory and non-negotiable:
- Remove the secret from the code; read it from an environment variable.
- Ensure
.env.exampledocuments the variable name (placeholder only). - Ask the user to put the real value in
.env, then STOP. - WAIT for the user's explicit confirmation that
.envis ready. The agent MUST NOT retry the commit before this confirmation. - Retry the commit (now clean) and continue (push → PR →
/close-issue).
The agent NEVER reads, writes, or creates .env — the user owns secrets.
Commit Message Format
<type>: <short description>
<optional body>
Refs DEMO-XXXTypes: feat, fix, docs, test, chore, refactor
Scripts
| Script | Purpose |
scripts/linear_client.py | GraphQL client for Linear API (get, move, comment, list) |
scripts/close_issue.sh | Gate script: tests + CI + acceptance criteria |
scripts/check_issue_ref.sh | Commit-msg hook: enforces Refs DEMO-XXX |
scripts/ci_failure_bridge.py | Auto-creates Linear bug when CI fails |
Tech Stack
- Frontend: HTML + CSS + vanilla JS (no frameworks)
- Tests: Node.js + jsdom
- Harness scripts: Python 3 (stdlib only) + Bash
- CI: GitHub Actions
- Project management: Linear
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

