From harness-claude
Critiques knowledge entries (docs/knowledge/) against a rubric catalog to assess fact quality, value, and taxonomy fit. Used during PR review, authoring, onboarding, or periodic audits.
How this skill is triggered — by the user, by Claude, or both
Slash command
/harness-claude:knowledge-craftThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> LLM-judgment critique of knowledge-entry quality. Critiques `docs/knowledge/` entries (EXCLUDING `decisions/` — that's spec-craft's territory) against a curated rubric catalog: does this state a load-bearing FACT or paraphrase the code? Would deleting it lose specific signal? Does it earn its place in the knowledge graph as `business_fact` / `business_rule` / `business_concept` / `business_de...
LLM-judgment critique of knowledge-entry quality. Critiques
docs/knowledge/entries (EXCLUDINGdecisions/— that's spec-craft's territory) against a curated rubric catalog: does this state a load-bearing FACT or paraphrase the code? Would deleting it lose specific signal? Does it earn its place in the knowledge graph asbusiness_fact/business_rule/business_concept/business_decision? Fifth non-design member of the craft-pipeline initiative (#9 of 10). Emits 3-axis findings (tier × impact × confidence per ADR 0019).
harness-knowledge-pipeline ingests an entry into the graphspec-craft — decisions/ is its territory)align-knowledge sibling)code-craft #4 or docs-craft #2)Read project configuration. Check harness.config.json for:
craft.knowledge.enabled — gate (default true)craft.knowledge.maxFiles — entry count cap (default 50)craft.knowledge.excludeDirs — extra subdirs to skipWalk docs/knowledge/ recursively:
*.md files (case-insensitive README.md excluded)decisions/ subdir entirely (spec-craft's territory)--exclude-dirs--files overrides discovery for explicit scoping7 seed rubrics:
| Rubric | Title |
|---|---|
KNOW-R001 | States a load-bearing fact (not paraphrase) |
KNOW-R002 | Truth a code reader could not derive |
KNOW-R003 | Earns a place in the knowledge graph taxonomy |
KNOW-R004 | Carries forward a decision that would erode |
KNOW-R005 | Deleting would lose specific knowledge |
KNOW-R006 | Concrete and operationally defined |
KNOW-R007 | A stranger could pick it up six months from now |
For each (file, rubric) pair:
null (rubric doesn't apply / entry is fine) OR { tier, impact, confidence, message }.KnowledgeFinding with cite.rubricId populated for ADR 0020 traceability.KNOW-R003 is the rubric that references the graph taxonomy (business_fact, business_rule, business_concept, business_decision) inside its description — the LLM critiques against the taxonomy without knowledge-craft ever reading the graph.
Emit KnowledgeCraftOutput:
{
findings: KnowledgeFinding[];
summary: {
phaseRun: ['critique'];
mode: 'fast';
durationMs: number;
llmCalls: { provider, model, count, costUsd };
catalog: { rubricsApplied: string[] };
counts: { filesScanned, filesSkipped };
runId: string;
}
}
harness knowledge-craft — CLI entry. --files <glob> / --exclude-dirs <dirs...> / --max-files <n> / --json / --verbose.mcp__harness__knowledge_craft — MCP tool. Same input/output. Consumed by agents.critiqueKnowledgeFile(file, opts) exported from packages/cli/src/knowledge-craft/index.ts. Future craft skills (or harness-knowledge-pipeline) can call this on a single entry without re-walking the project.LlmProvider, MockLlmProvider, derivePriority, 3-axis types all live in packages/cli/src/shared/craft/.See docs/changes/craft-pipeline/knowledge-craft/proposal.md for the full 25 success criteria. Highlights:
catalog/rubrics/<id>.ts (file-per-rubric)cite.rubricId populated on every finding (ADR 0020)decisions/ subdir is hard-excluded from discovery (spec-craft territory)KNOW-R003 references graph node types in rubric prompt without graph imports at runtimecritiqueKnowledgeFile cross-cutting API works on a single file without project walkInput: docs/knowledge/auth/email-validator.md:
# Email Validator
The user service validates emails via the EmailValidator class, which
applies the standard regex pattern and rejects malformed addresses.
Output (mock LLM):
KNOW-R001 [foundational/large/medium] auth/email-validator.md
This entry restates what a reader would learn from opening
EmailValidator.ts. It states no load-bearing fact about the domain:
no upstream constraint, no historical reason for the choice, no business
rule that necessitated validation. Either rewrite to capture the WHY
(e.g., "emails must round-trip through Postmark within 30s for
deliverability tracking") or delete — the code already speaks.
KNOW-R005 [polish/medium/medium] auth/email-validator.md
Deleting this entry would lose nothing the code doesn't already convey.
Input: docs/knowledge/storage/postgres-over-dynamo.md:
# Why Postgres over DynamoDB
We chose Postgres over DynamoDB because our access patterns are
relational (frequent multi-table joins on tenant + user) and our team's
ops muscle is in SQL. DynamoDB's single-table design was rejected
because the modeling overhead of GSIs outweighs the latency win for
our request profile.
Output:
(no findings)
This entry carries forward a decision with the alternative AND the reason — KNOW-R004 passes, KNOW-R001 passes (load-bearing fact: the rejected option + the WHY), KNOW-R005 passes (deleting loses knowledge a reader couldn't reconstruct from the schema alone).
Input: Project has no docs/knowledge/ directory.
Output:
No knowledge-entry findings.
Summary: 0 findings across 0 entries (0 skipped, 7 rubrics, 0 LLM calls, $0.0000, 2ms)
align-knowledge deferred until signal warrants safe-to-apply rewrites.decisions/ is spec-craft's territory; double-critique on the same files produces noise..mdx support. Different parsing concerns; v1.x.maxFiles to 25, or scope explicitly with --files. Per-entry cost = rubrics × per-call; truncation already caps per-call cost at 4000 input chars.craft.knowledge.disabledRubrics: ['KNOW-R007']. Until then: filter findings by cite.rubricId in your consumer.<!-- knowledge-craft:skip --> HTML comment.harness spec-craft — ADRs are its territory. Knowledge-craft will refuse to walk decisions/.v1 — in implementation. See:
docs/changes/craft-pipeline/knowledge-craft/proposal.mdcraft-pipeline sub-project #9naming-craft (#1), spec-craft (#6), copy-craft (#5), test-craft (#3), harness-design-craft (design-pipeline #6)packages/cli/src/shared/craft/align-knowledge (FIX side), AGENTS.md / .mdx support, graph-aware mode, composition with harness-knowledge-pipeline at ingest time.npx claudepluginhub intense-visions/harness-engineering --plugin harness-claudeCritiques spec quality (proposals + ADRs) against curated rubrics with per-section critique and rubric-to-section mapping, emitting 3-axis findings (tier × impact × confidence).
Processes external resources like articles, blogs, and papers into stored knowledge via quality evaluation, curation, tidying, and routing to storage or codebase application. Use for capturing session knowledge into memory structures.
Audits and interactively cleans up Claude Code knowledge base: detects stale references, duplicates, orphaned files, frontmatter issues, and merge opportunities.