From harness-engineering
Assesses codebase for AI agent readiness by detecting stacks, monorepos, git setup, and evaluating style, testing, code quality, secrets, and file sizes.
npx claudepluginhub jrenaldi79/harness-engineering --plugin harness-engineeringThis skill uses the workspace's default tool permissions.
Before any other step, resolve both the readiness skill's directory and the setup skill's resources:
Assesses codebase readiness for agents/production across 8 pillars, verifies commands/GitHub settings, reports all issues, auto-fixes agent readiness.
Runs Agent-Ready Codebase Assessment scoring codebase across 8 dimensions with parallel agents, producing weighted 0-100 score, band rating, and improvement roadmap. Supports Ruby, Python, PHP, TypeScript, JavaScript, Go, Java, Scala, Rust.
Evaluates codebase readiness for autonomous AI development across 8 pillars (style/validation, build, testing, docs, dev env, debugging/observability, security, tasks) and 5 maturity levels. Use /readiness-report to scan repos.
Share bugs, ideas, or general feedback.
Before any other step, resolve both the readiness skill's directory and the setup skill's resources:
SKILL_DIR=$(find ~/.claude/plugins -path "*/readiness/SKILL.md" -print -quit | xargs dirname)
SETUP_SKILL_DIR=$(find ~/.claude/plugins -path "*/setup/SKILL.md" -print -quit | xargs dirname)
SETUP_SCRIPTS=$SETUP_SKILL_DIR/scripts
SETUP_TEMPLATES=$SETUP_SKILL_DIR/templates
SETUP_REFERENCES=$SETUP_SKILL_DIR/references
If SKILL_DIR is empty, halt and tell the user: "Could not locate the readiness plugin directory under ~/.claude/plugins. Verify the plugin is installed."
If SETUP_SKILL_DIR is empty, halt and tell the user: "Could not locate the setup plugin directory. The readiness skill requires the setup skill to be installed as part of the same plugin."
The setup skill's files are references only — read them to understand what good enforcement looks like, but never blindly run install scripts on an existing project.
Check the working directory for:
Manifest files: package.json, pyproject.toml, go.mod, Cargo.toml, CMakeLists.txt, Makefile
Git: .git/ exists
Existing agent config: CLAUDE.md, AGENTS.md, .claude/, .cursor/
Stack detection: Infer language, framework, and package manager from manifest contents.
Monorepo detection: Check for:
package.json → workspaces fieldpnpm-workspace.yamlCargo.toml → [workspace]go.work)lerna.json), Nx (nx.json), Turborepo (turbo.json)If monorepo: identify each app/package as a separate scoring unit.
Previous report: Check for readiness-report.md. If present, read the YAML frontmatter to enable delta comparison at the end.
Use subagents to keep the main context clean. Each subagent receives:
Launch 3 subagents in parallel, each covering related pillars:
Reference files to read first:
$SETUP_REFERENCES/enforcement-scripts.md — secret scanning patterns, file size rules$SETUP_SCRIPTS/lib/check-file-sizes.js — 300-line limit implementation$SETUP_SCRIPTS/lib/check-secrets.js — secret patterns to scan for$SETUP_SCRIPTS/lib/check-test-colocation.js — test colocation rulesEvaluates: Pillar 1 (Style & Validation), Pillar 2 (Testing), Pillar 6 (Code Quality)
Reference files to read first:
$SETUP_SCRIPTS/hooks/pre-commit — what a good pre-commit hook runs (project hooks may live in .git/hooks/ or .husky/)$SETUP_SCRIPTS/hooks/pre-push — what a good pre-push hook runs (project hooks may live in .git/hooks/ or .husky/)$SETUP_TEMPLATES/settings.json — what a good settings file looks like$SETUP_TEMPLATES/rules/*.md — what path-scoped rules look likeEvaluates: Pillar 3 (Git Hooks & Enforcement), Pillar 5 (Agent Configuration), Pillar 7 (Dev Environment), Pillar 8 (Agentic Workflow)
Reference files to read first:
$SETUP_TEMPLATES/project-claude.md — what a well-structured CLAUDE.md contains$SETUP_TEMPLATES/global-claude.md — what global guidance contains$SETUP_REFERENCES/claude-md-guide.md — quality criteria for CLAUDE.md content$SETUP_SCRIPTS/lib/validate-docs.js — drift detection logic$SETUP_SCRIPTS/lib/generate-docs.js — auto-generation patternsEvaluates: Pillar 4 (Documentation)
Each subagent returns a structured JSON result:
{
"pillars": {
"pillar-name": {
"criteria": [
{ "name": "Linter configured", "pass": true, "evidence": "Found eslint.config.js with 12 rules" },
{ "name": "Formatter configured", "pass": false, "evidence": "No prettier/black/gofmt config found" }
]
}
},
"insights": [
"Tests exist but 4 of 12 test files contain only TODO stubs — technically passing but not testing anything",
"CLAUDE.md has a Commands section but lists npm scripts that don't exist in package.json"
]
}
The insights array captures nuanced observations that go beyond pass/fail — things only an intelligent agent would notice.
This section defines what each subagent evaluates. Each criterion is binary pass/fail with evidence — cite the specific file, config, or absence found.
For monorepos: repo-scoped criteria are evaluated once across the whole repo. App-scoped criteria are evaluated per app/package.
import/no-default-export or equivalent).claude/rules/tdd.md) that enforces test-first development as a process, not just test existence.git/hooks/pre-commit OR .husky/pre-commit — either location counts) covering linting, formatting, secret scanning.git/hooks/pre-push OR .husky/pre-push — either location counts).git/hooks/pre-commit or .husky/pre-commit (reference the patterns in check-secrets.js).git/hooks/pre-commit or .husky/pre-commit (reference check-file-sizes.js).git/hooks/pre-push or .husky/pre-push) uses SHA-based caching to skip test runs when HEAD hasn't changed (.test-passed file or equivalent)Compare the project's CLAUDE.md (or AGENTS.md) against $SETUP_TEMPLATES/project-claude.md section-by-section. Use $SETUP_REFERENCES/claude-md-guide.md for quality criteria: dense, high-signal content where every line saves a future session from re-discovery.
<!-- AUTO:name --> markers for sections that should stay in sync with code (or equivalent automation)claude-md-guide.md criteria: commands that save re-discovery, gotchas that prevent repeat debugging, config quirks that aren't obvious from code.claude/settings.json (or equivalent agent config) exists.claude/rules/ directory with rule files that use globs: frontmatter for file-pattern matching)src/, lib/, or equivalent directories)check-secrets.js: sk-or-*, sk-ant-*, AKIA*, ghp_*, -----BEGIN.*PRIVATE KEY-----).env.example or equivalent environment template existsCheck whether a structured plan-before-build workflow system is installed.
_bmad/ directory, _bmad-output/, or BMAD skills in .claude/skills/superpowers: prefix (brainstorm, write-plan, execute-plan).claude/skills/gstack/ directory or ~/.claude/skills/gstack/validate-docs.js --full instruction in CLAUDE.md, a session-start hook, a SessionStart hook in settings, or a skill that audits state before coding beginsIf no agentic workflow system is detected, recommend Superpowers as the default:
/plugin install superpowers@claude-plugins-officialgithub.com/obra/superpowersAfter all 3 subagents return, merge their results into a unified scorecard in the main context.
Scoring rules:
| Level | Name | Requirements |
|---|---|---|
| 1 | Bare | Has manifest + git. That's it. |
| 2 | Basic | Linter + formatter + test runner exist and work. |
| 3 | Enforced | Git hooks block bad commits. CLAUDE.md exists with essential sections. Agent settings configured. |
| 4 | Automated | Auto-generated docs, drift detection, path-scoped rules, smart test caching. Agentic workflow system installed. |
| 5 | Autonomous | Full harness coverage. TDD enforced. Docs in sync. Plan-before-build + session-start validation active. Agent can work for hours without going off the rails. |
Monorepo scoring: Show per-app scores for app-scoped pillars (e.g., "Testing: 3/4 apps pass"). Overall level is gated by the weakest app — all apps must meet the level threshold.
readiness-report.md)Write the report with YAML frontmatter for machine-parseable delta tracking on future runs.
---
generated: YYYY-MM-DD
level: 2
level_name: Basic
score: 12
total: 37
stack: node-typescript
monorepo: false
pillars:
style-validation: { pass: 3, total: 4 }
testing: { pass: 2, total: 5 }
git-hooks: { pass: 0, total: 5 }
documentation: { pass: 2, total: 9 }
agent-config: { pass: 1, total: 5 }
code-quality: { pass: 3, total: 3 }
dev-environment: { pass: 1, total: 3 }
agentic-workflow: { pass: 0, total: 2 }
---
# Harness Readiness Report
**Project:** <name> (<stack>)
**Level:** X / 5 (<level-name>)
**Score:** X / 36 criteria passing
**Delta:** +N since last report (was Level X) ← only if previous report exists
## Pillar Scores
Style & Validation ████░░ X/4
Testing ███░░░ X/5
Git Hooks ░░░░░░ X/5
Documentation ██░░░░ X/9
Agent Configuration █░░░░░ X/5
Code Quality ██████ X/3
Dev Environment ██░░░░ X/3
Agentic Workflow ░░░░░░ X/2
## Monorepo Breakdown ← only if monorepo
| Package | Level | Score |
|---|---|---|
| packages/api | 3 | 25/37 |
| packages/web | 2 | 18/37 |
## Passing
- ✓ <criterion> (<evidence>)
- ...
## Failing
- ✗ <criterion> — <what's missing>
- ...
## Changes Since Last Report ← only if previous report exists
- ↑ Now passing: <criteria that improved>
- ↓ Regressed: <criteria that went from pass to fail, or "none">
Use the Unicode block characters for the progress bars:
█ for each passing unit (proportional to total)░ for each failing unitAfter writing the structured report, provide prose analysis in the conversation:
insights arrays (e.g., "Your tests exist but 4 of 12 are stubs with TODO comments — technically passing but not actually testing anything")Provide surgical, context-aware recommendations — not "run /setup" but specific actions that respect what already exists.
| Gap | Blunt (wrong) | Surgical (right) |
|---|---|---|
| No Commands section in CLAUDE.md | "Run /setup to generate CLAUDE.md" | "Add a Commands section to your existing CLAUDE.md listing your build/test/lint commands. See $SETUP_TEMPLATES/project-claude.md for the pattern." |
| No pre-commit hook | "Install husky" | "Your project uses lint-staged but has no hook trigger. Add a pre-commit hook that runs lint-staged + secret scanning. See $SETUP_SCRIPTS/hooks/pre-commit for a reference implementation." |
| No settings.json | "Run /setup" | "Create .claude/settings.json based on your existing npm scripts. Allow: test, lint, build. Deny: force push, rm -rf. See $SETUP_TEMPLATES/settings.json for the template." |
| CLAUDE.md exists but no Architecture section | "Regenerate CLAUDE.md" | "Add an Architecture section to your existing CLAUDE.md describing your current directory layout and key modules." |
| No agentic workflow | "Figure it out" | "Install Superpowers for structured development phases: /plugin install superpowers@claude-plugins-official" |
Order recommendations by impact — fixes that unlock the next maturity level come first. Group them:
.env.example)After presenting recommendations, ask: "Want me to apply any of these fixes?"
If yes, apply them surgically:
/readiness to verify improvement