Skip to content
Back to skills

Knowledge Craft

ASecurity

> 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_decision`? Fifth non-design member of the craft-pipeline initiative. Emits 3-axis findings (tier × imp...

  • 20 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 11, 2026
businesssqlnodeapi

Works with

  • cli
  • api
  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 11, 2026

npx -y skills add Intense-Visions/harness-engineering --skill knowledge-craft --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Knowledge Craft?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Knowledge Craft
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/intense-visions-knowledge-craft/badge)](https://www.skillsdirectory.com/skills/intense-visions-knowledge-craft)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# Knowledge Craft

> 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_decision`? Fifth non-design member of the craft-pipeline initiative. Emits 3-axis findings (tier × impact × confidence per ADR 0019).

## When to Use

- During PR review on a new or substantially-rewritten knowledge entry
- After authoring a knowledge entry, before adding it to the index
- When onboarding a new contributor (audit entries they introduced)
- Periodically (per-sprint or per-release) to catch knowledge-entry rot
- As a quality gate before `harness-knowledge-pipeline` ingests an entry into the graph
- NOT for ADR / proposal critique (use `spec-craft` — `decisions/` is its territory)
- NOT for AGENTS.md critique (different shape: navigational manifest, not fact-bearing entry — v1.x)
- NOT for autofix / knowledge-entry rewriting (this is judgment-only; v1.x may add `align-knowledge` sibling)
- NOT for graph-membership checks (no graph reads at runtime — references the taxonomy in rubric prompts)
- NOT for source-code comment critique (use `code-craft` or `docs-craft`)

## Capability Roles

<!-- Capability seam: this skill participates in a real extension point whose three roles are named and concrete. A seam with only one role filled is accidental single-implementation lock-in. See harness-skill-authoring Phase 1C. -->

- **Defines (Service Definition):** the shared craft critique contract (`packages/cli/src/shared/craft/`) — `LlmProvider` + finding/axes schema + run store — shared across all `*-craft` skills. This skill implements, and does not own, that contract.
- **Provides (Provider):** **this skill** — a knowledge-artifact critique implemented over the shared contract (`packages/cli/src/knowledge-craft/`).
- **Consumes (Consumer):** `craft-fleet` (the craft-pipeline elevation sweep) and the `harness` natural-language router, which invoke every `*-craft` provider uniformly through the shared critique/finding shape

## Process

### Phase 1: DISCOVER — Find knowledge entries

1. **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 skip

2. **Walk `docs/knowledge/` recursively:**
   - Include `*.md` files (case-insensitive `README.md` excluded)
   - EXCLUDE `decisions/` subdir entirely (spec-craft's territory)
   - EXCLUDE any user-supplied extra dirs via `--exclude-dirs`
   - Caller-supplied `--files` overrides discovery for explicit scoping

### Phase 2: CRITIQUE — Per (file, rubric) loop

7 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:

1. Build prompt with rubric description + file path + relative-to-knowledge-root path + entry contents (truncated to 4000 chars for cost).
2. LLM returns fenced JSON: `null` (rubric doesn't apply / entry is fine) OR `{ tier, impact, confidence, message }`.
3. On non-null: emit a `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.

### Phase 3: REPORT — Aggregate + cost telemetry

Emit `KnowledgeCraftOutput`:

```ts
{
  findings: KnowledgeFinding[];
  summary: {
    phaseRun: ['critique'];
    mode: 'fast';
    durationMs: number;
    llmCalls: { provider, model, count, costUsd };
    catalog: { rubricsApplied: string[] };
    counts: { filesScanned, filesSkipped };
    runId: string;
  }
}
```

## Harness Integration

- **`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.
- **Cross-cutting API:** `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.
- **Shared craft infrastructure:** `LlmProvider`, `MockLlmProvider`, `derivePriority`, 3-axis types all live in `packages/cli/src/shared/craft/`.

## Success Criteria

See `docs/changes/craft-pipeline/knowledge-craft/proposal.md` for the full 25 success criteria. Highlights:

- 7 seed rubrics ship at `catalog/rubrics/<id>.ts` (file-per-rubric)
- 3-axis output preserved (tier × impact × confidence, never collapsed)
- `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 runtime
- `critiqueKnowledgeFile` cross-cutting API works on a single file without project walk

## Rationalizations to Reject

These are common rationalizations that sound reasonable but lead to incorrect results. When you catch yourself thinking any of these, stop and follow the documented process instead.

| Rationalization                                                                       | Why It Is Wrong                                                                                                                                                                                        |
| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| "This entry is well-written and accurate, so KNOW-R001 passes."                       | Accuracy is not the bar. KNOW-R001 asks whether it states a load-bearing FACT a code reader could not derive. A polished, correct paraphrase of the implementation still fails.                        |
| "It lives under `docs/knowledge/`, so it earns a graph node — KNOW-R003 passes."      | Location does not confer membership. KNOW-R003 asks whether it maps to `business_fact` / `business_rule` / `business_concept` / `business_decision`. A how-the-code-works note fits none.              |
| "I personally would keep this entry, so KNOW-R005 (deleting loses something) passes." | The test is whether deletion loses knowledge a reader could not reconstruct from the source. If the code already conveys it, deletion loses nothing — your preference to keep it is irrelevant.        |
| "This entry sits in `decisions/` and bears a decision, so I'll critique it here."     | `decisions/` is hard-excluded — it is spec-craft's territory. Critiquing it here produces double-critique noise on the same file. Refuse to walk it.                                                   |
| "The entry explains the WHY, so KNOW-R004 (carries forward a decision) passes."       | Carrying forward a decision that would erode requires the rejected alternative AND the reason. The WHY alone, without the option that was turned down, leaves the choice reconstructible as arbitrary. |

## Examples

### Example: Paraphrase entry

**Input:** `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.
```

### Example: Decision-bearing entry

**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).

### Example: Empty project — no knowledge entries

**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)
```

## Gates

- **No autofix.** Sibling `align-knowledge` deferred until signal warrants safe-to-apply rewrites.
- **No ADR critique.** `decisions/` is spec-craft's territory; double-critique on the same files produces noise.
- **No AGENTS.md critique.** Navigational manifests need a different rubric vocabulary; v1.x.
- **No graph reads.** v1 references graph node types in rubric prompts so the LLM critiques against the taxonomy without a runtime graph dependency.
- **No graph persistence of findings.** Phase 1 MVP.
- **No per-section / per-claim mode.** v1 is per-file (knowledge entries are typically focused single-topic).
- **No `.mdx` support.** Different parsing concerns; v1.x.
- **No B' bootstrap.** Same posture as the rest of the craft family.

## Escalation

- **When LLM cost is too high:** drop `maxFiles` to 25, or scope explicitly with `--files`. Per-entry cost = rubrics × per-call; truncation already caps per-call cost at 4000 input chars.
- **When a rubric produces high false-positive rate:** v1 has no per-rubric disable; v1.x adds `craft.knowledge.disabledRubrics: ['KNOW-R007']`. Until then: filter findings by `cite.rubricId` in your consumer.
- **When an entry is intentionally scratchpad / in-progress:** low-confidence findings are de-emphasized per ADR 0019. v1.x adds per-entry opt-out via `<!-- knowledge-craft:skip -->` HTML comment.
- **When you want graph-aware critique (e.g., "this entry duplicates an existing business_fact node"):** v1.x opt-in mode will read the graph; v1 stays read-free.
- **When you want to critique an ADR:** use `harness spec-craft` — ADRs are its territory. Knowledge-craft will refuse to walk `decisions/`.

## Status

**v1 — in implementation.** See:

- Spec: `docs/changes/craft-pipeline/knowledge-craft/proposal.md`
- Roadmap entry: part of the `craft-pipeline` initiative
- Sibling craft skills: `naming-craft`, `spec-craft`, `copy-craft`, `test-craft`, `harness-design-craft` (design-pipeline)
- Shared infrastructure: `packages/cli/src/shared/craft/`
- Future: `align-knowledge` (FIX side), AGENTS.md / `.mdx` support, graph-aware mode, composition with `harness-knowledge-pipeline` at ingest time.

Files in this skill

  • SKILL.md11.8 KB
  • skill.yaml1.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…