From harness-claude
Audits developer experience artifacts (READMEs, API docs, getting-started guides, examples) and produces a structured DX scorecard with specific improvements.
How this skill is triggered — by the user, by Claude, or both
Slash command
/harness-claude:harness-dxThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> Audit developer experience artifacts -- README quality, API documentation coverage, getting-started guides, and example code validation. Produces a structured DX scorecard with specific improvements and scaffolds missing documentation.
Audit developer experience artifacts -- README quality, API documentation coverage, getting-started guides, and example code validation. Produces a structured DX scorecard with specific improvements and scaffolds missing documentation.
Resolve project root. Use provided path or cwd.
Locate documentation artifacts. Search for:
README.md, README.rst, readme.mdGETTING_STARTED.md, QUICKSTART.md, docs/getting-started.mddocs/api/, API.md, generated docs in docs/, site/examples/, demos/, samples/, code blocks in READMECHANGELOG.md, CHANGES.md, HISTORY.mdCONTRIBUTING.md, .github/CONTRIBUTING.mdScore README completeness. Check for the presence and quality of each section:
Evaluate installation instructions. Check:
Assess API documentation coverage. For every exported function, class, or endpoint:
documented / total * 100Check for time-to-hello-world. Estimate the number of steps from git clone to seeing the project work. Fewer than 5 steps is good. More than 10 is a problem.
Extract code examples from documentation. Parse all markdown files for fenced code blocks with language annotations. Track:
Extract standalone examples. Scan examples/, demos/, samples/ for:
Validate example syntax. For each extracted code example:
Run executable examples. When --validate-examples is set:
node or tsx executionpython executionCheck example freshness. Compare examples against the current API surface:
Build coverage map. Map examples to the APIs they demonstrate. Identify APIs with zero examples (documentation gaps).
Generate README sections. For any missing README section identified in Phase 1:
package.json, setup.py, Cargo.toml, or equivalentGenerate API documentation stubs. For undocumented exports:
Generate example files. For APIs with no examples:
examples/Generate getting-started guide. If no quickstart exists:
Propose documentation structure. If documentation is scattered or missing:
docs/ directory structureCheck link integrity. Verify all links in documentation:
Check version consistency. Verify documentation matches the current version:
Check cross-references. Verify README links to detailed docs, and detailed docs link back to the README and to each other where appropriate.
Output DX scorecard. Present the complete audit results:
DX Scorecard: [GRADE]
README: [score]/12 ([grade])
API Coverage: [N]% ([documented]/[total] exports)
Examples: [working]/[total] passing
Time to Hello World: ~[N] steps
Links: [valid]/[total] verified
GAPS:
- Missing: getting-started guide
- Missing: 12 undocumented exports
- Broken: examples/advanced.ts references removed API
GENERATED:
- docs/getting-started.md (draft)
- 4 API documentation stubs added
- examples/basic-usage.ts created
Verify scaffolded content compiles. If documentation was generated, verify:
harness skill run harness-dx -- Primary command for running the DX audit.harness validate -- Run after scaffolding documentation to verify project health.Glob -- Used to locate README files, documentation directories, example folders, and API docs.Grep -- Used to extract exported symbols, find documentation comments, and locate code examples in markdown.Read -- Used to read documentation files, package manifests, and source files for API extraction.Write -- Used to scaffold missing documentation, generate example files, and create getting-started guides.Bash -- Used to run example validation, check link targets, and execute code snippets.emit_interaction -- Used to present the DX scorecard and request confirmation before generating scaffolded files.--validate-examples is setPhase 1: AUDIT
README score: 5/12 (C)
Present: title, description, license
Missing: installation, quick example, API reference link, contributing
API coverage: 23% (7/30 exports documented)
Time to hello world: ~14 steps (too many, target: <5)
Phase 2: EXTRACT
Code examples found: 3 (all in README)
examples/ directory: empty
Validation: 2/3 examples pass syntax check
Broken: README line 45 references `sdk.connect()` -- renamed to `sdk.init()` in v2.0
Phase 3: SCAFFOLD
Generated: docs/getting-started.md (5-step quickstart)
Generated: examples/basic-usage.ts (demonstrates init, query, cleanup)
Generated: 23 JSDoc stubs from TypeScript signatures
README patches: added installation section, updated broken example
Phase 4: VALIDATE
Links: 8/10 valid (2 broken anchors in README)
Generated examples: syntax valid
DX Scorecard: C -> B (projected after applying changes)
Phase 1: AUDIT
README score: 11/12 (A)
Missing only: contributing guide link
API coverage: 89% (142/160 functions documented)
Sphinx docs at docs/_build/html: present, 45 pages
Time to hello world: ~4 steps (good)
Phase 2: EXTRACT
Code examples: 28 in docs, 12 in examples/
Validation: 37/40 pass (3 use deprecated pandas.append)
Stale examples: 3 files last modified 8 months ago, source changed since
Phase 3: SCAFFOLD
Generated: 18 docstring stubs for undocumented functions
Updated: 3 stale examples to use pandas.concat
Added: CONTRIBUTING.md link to README
Phase 4: VALIDATE
Links: 52/52 valid
DX Scorecard: A (maintained, minor freshness issues resolved)
Phase 1: AUDIT
README score: 7/12 (B)
Present: title, description, installation (cargo install), license, API link
Missing: quick example showing actual CLI usage, contributing
API coverage: N/A (CLI tool, not library)
CLI help text: present via clap derive
Time to hello world: ~6 steps
Phase 2: EXTRACT
Code examples: 2 in README (both installation commands)
examples/ directory: 1 example config file, no runnable examples
Missing: actual usage examples showing command output
Phase 3: SCAFFOLD
Generated: docs/getting-started.md with:
1. cargo install myctl
2. myctl init
3. myctl run --config example.toml
(with expected output at each step)
Generated: examples/basic-config.toml with annotated comments
Generated: README quick-example section with terminal output
Phase 4: VALIDATE
CLI help flags match documented flags: YES
Config example matches current schema: YES
DX Scorecard: B -> A (projected after applying changes)
| Rationalization | Reality |
|---|---|
| "The README has an installation section but it only covers npm — yarn and pnpm users can figure it out. I'll mark installation as complete." | Installation instructions must cover all package managers the project supports. If yarn.lock or pnpm-lock.yaml exists alongside package-lock.json, all three installers must be documented. Partial coverage is scored as partial, not complete. |
"This code example in the README uses the old sdk.connect() API — but it still parses syntactically, so it passes the syntax check." | Stale API references are broken examples regardless of syntax validity. A syntactically valid example that calls a renamed or removed function fails the freshness check and must be flagged as broken in the scorecard. |
"The API function's behavior is complex, but I can infer what it does from the name parseAndValidate — I'll write the docstring stub based on that." | Documentation must be derived from actual source code: type signatures, test files, and existing docs. Inferring behavior from function names produces fabricated documentation. Flag functions that cannot be documented from source as requiring developer-written docs. |
| "The getting-started guide already exists in the wiki — it's not in the repo, but I'll mark the quickstart as present." | Documentation must be locatable from the repository root. A wiki link from the README satisfies the API reference link criterion only if the link is explicit. A guide that requires knowing where the wiki is does not meet the discoverability requirement. |
| "There are 18 undocumented exports — I'll generate all 18 JSDoc stubs and commit them without showing the user first." | Scaffolded documentation must be presented for review before being written. Generated stubs may contain inaccurate parameter descriptions or wrong return type assumptions. Use emit_interaction to present scaffolded content and wait for approval. |
emit_interaction to present scaffolded content and wait for approval.init() accepts a string, but the TypeDoc shows it accepts InitConfig. Which is current?"npx claudepluginhub intense-visions/harness-engineering --plugin harness-claudeProvides checklists, metrics, scoring, and grep-based detection patterns for auditing README, API, and architecture documentation quality.
Reviews documentation completeness, accuracy, and audience-appropriateness against a project's inferred norms rather than an idealized checklist.
Validates documentation quality for research software using Vale prose linting, HTMLProofer link checking, markdownlint Markdown validation, code example testing, container instructions, and CI integration.