Skip to content
Back to skills

Wiki Curate

ASecurity

Audit the Research Vault concept wiki read-only for fragmentation, missing tags, write-only concepts, and draft or anatomy conformance, producing a Markdown report. Use when assessing wiki quality before maintenance. Not for promoting or merging concepts; use $wiki-grow or $wiki-merge.

  • 144 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 23, 2026
ai-agentspythongobash

Security analysis

A100/100

Scanned September 23, 2026

npx -y skills add flonat/flonat-research --skill wiki-curate --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Wiki Curate?

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

Security grade badge for Wiki Curate
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/flonat-wiki-curate/badge)](https://www.skillsdirectory.com/skills/flonat-wiki-curate)

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
---
name: wiki-curate
description: "Audit the Research Vault concept wiki read-only for fragmentation, missing tags, write-only concepts, and draft or anatomy conformance, producing a Markdown report. Use when assessing wiki quality before maintenance. Not for promoting or merging concepts; use $wiki-grow or $wiki-merge."
allowed-tools: Bash, Read
argument-hint: "(no arguments)"
skill-dependencies: [wiki-merge]
---

# Wiki Curate — Read-only Audit

> Reads the vault wiki and produces a triage report. Never writes.
> Detects four classes of issue: **overlap clusters** (fragmentation),
> **tag gaps** (untagged concepts + orphan/near-duplicate tags),
> **write-only concepts** (zero backrefs from the corpus), and
> **anatomy/lifecycle** issues (drafts awaiting curation + curated
> pages that regressed the concept anatomy). Companion to `wiki-grow`
> (which adds new concepts) and `wiki-merge` (which collapses overlap
> clusters).

## When to Use

- After a `wiki-grow` run, to check what the new stubs introduced.
- Before deciding which concepts to refine or merge.
- Monthly, to keep the wiki's signal-to-noise ratio high.

## When NOT to Use

- For project knowledge folders — those are audited via
  `knowledge-lint`.
- For atlas topics — that's `research-atlas-audit`.
- For mechanical edits — this skill never writes. Use `wiki-merge` to
  collapse overlap clusters and the planned tag-inference pass in
  `wiki-grow` to backfill missing tags.

---

## Architecture

```
scripts/wiki-curate-scan.py
  ├─ reads:  ~/vault/concepts/*.md
  │           ~/vault/atlas/<theme>/*.md         (for backref counts)
  │           ~/vault/books/<slug>/*.md         (for backref counts)
  │           <research-root>/<theme>/<proj>/CLAUDE.md   (for backref counts)
  └─ writes: /tmp/wiki-curate-report.md
             /tmp/wiki-curate.json
```

The skill is invoked by running the Python orchestrator. No Claude
dispatch — the audit is pure deterministic analysis.

---

## What it checks

### A. Overlap clusters (the headline feature)

Concept slugs are tokenised (kebab parts, stopwords removed, trailing
`s` stripped for crude singularisation). Any token shared by ≥2
concept slugs forms a **cluster**.

Within each cluster, the **canonical winner** is suggested by:

1. Human-curated (`auto_generated: false`) beats auto-generated.
2. Longer body beats shorter.
3. Alphabetically earliest slug breaks ties.

Pair-level **title-Jaccard ≥ 0.40** is flagged as 🔥 high confidence
(distinct from "shared keyword" — the slugs are substantively similar).

Example output from a recent run:

```
### `goodhart` (size 3)
- `goodhart-resistance`  — auto, 3533 chars
- `goodhart-taxonomy`    — auto, 3902 chars
- `goodharts-law`        — curated, 3111 chars  ← canonical (suggested)

Suggested action: wiki-merge goodharts-law goodhart-taxonomy goodhart-resistance
```

### B. Tag coverage

- **Untagged concepts** — frontmatter has no `tags:` field. Filters
  on `/concepts?tag=X` won't surface them.
- **Orphan tags** — used by exactly one concept. Either expand or
  retire.
- **Near-duplicate tags** — pairs differing only by case / hyphen /
  trailing `s` (e.g. `ml` vs `machine-learning`, `model` vs `models`).

### C. Backref health

For each concept, count:
- **Incoming wikilinks** — `[[slug]]` references from atlas topic
  bodies, book chapters, and project CLAUDE.md files.
- **Corpus mentions** — case-insensitive whole-word slug occurrences
  in the same corpus.

Concepts with **both counts zero** are flagged as write-only — they
don't surface anywhere. Two remedies:
1. Insert `[[slug]]` references in the atlas topics that should
   reference the concept (mechanism A from this session — body
   wikilinks auto-surface as chips on the topic page).
2. Add the slug to `~/vault/concepts/.denylist` and delete
   the file — accept the concept isn't carrying weight.

### D. Anatomy & lifecycle

The `status:` frontmatter field is the lifecycle axis: `draft`
(no guarantees, may be project-voiced) → `curated` (conforms to the
concept anatomy). Status is read from frontmatter with the same
fallback as atlas-workspace (`auto_generated: true` → draft, else
curated) so pages predating the field classify correctly. The
anatomy is defined in `packages/research-atlas-schema/schema.md` → "Concept
File Schema":

- `## In one line` — required definition block (machine-anchored).
- `## In my portfolio` — the boundary below which project-voiced
  prose ("the project", "this paper", "we propose", …) is allowed.

Two lists are reported:

- **Drafts awaiting curation** — every `status: draft` concept, with a
  ✓/— table showing which anatomy pieces already exist (`In one line`,
  `In my portfolio`) and how many project-voice phrases sit above the
  boundary. Higher counts mean more restructuring to do.
- **Curated pages violating the anatomy** — pages marked `curated` that
  regressed: missing the `In one line` definition, or project-voice
  prose above the `In my portfolio` boundary (including a portfolio
  section under a non-canonical heading). These are the priority fix —
  a curated page is supposed to conform.

The curation action itself is a Claude-driven restructuring edit (this
skill is read-only); see the triage workflow below.

---

## Output

`/tmp/wiki-curate-report.md` with three sections (A/B/C) and a
suggested triage order. Stdout from the script:

```
Concepts: 14 (6 curated, 8 draft)
Overlap clusters: 0
Drafts awaiting curation: 8
Curated pages violating anatomy: 1
Untagged: 8/14
Write-only (no backrefs): 0
Report: /tmp/wiki-curate-report.md
JSON:   /tmp/wiki-curate.json
```

The JSON sidecar feeds the planned `wiki-merge` skill so it can
read the suggested winner/fold-in lists without re-running the
detection.

---

## Modes

| Mode | Invocation | Behaviour |
|------|-----------|-----------|
| **Default** | `wiki-curate` (or `uv run python scripts/wiki-curate-scan.py`) | Run all three audits, write report + JSON, print summary to stdout. Read-only. |

There's no `--autonomous` flag here — the skill is already pure-read
and idempotent. Future cron integration: chained after the Saturday
06:45 `wiki-grow` run, the audit can land in
`log/audits/wiki-curate-YYYY-MM-DD.md` for a weekly health snapshot.

---

## Triage workflow

After running:

1. **Section D regressions first** — any curated page flagged as
   violating the anatomy is a bug: it claims `curated` but doesn't
   conform. Fix in place (add `## In one line`, or rename/add the
   `## In my portfolio` section and move project-voiced prose under it).
2. **Section A** — every overlap cluster fragments knowledge. Pick a
   canonical winner (often the suggestion) and run `wiki-merge
   <winner> <fold-in-slugs>` to collapse. Re-run `wiki-curate` to
   confirm the cluster is gone.
3. **Section D drafts** — curate each `draft` to the anatomy:
   - Extract a 2-4 sentence project-agnostic definition into
     `## In one line`.
   - Keep the cited, stable knowledge in encyclopedia voice.
   - Move all project-voiced prose under `## In my portfolio`.
   - Verify `references:` keys are canonical Paperpile keys
     (rekey hand-minted lookalikes).
   - Flip `status: draft` → `status: curated` in frontmatter and set
     `last_updated`.
4. **Section B** — untagged concepts won't surface in the tag filter.
   Until the planned `wiki-grow` tag-inference pass lands, add tags
   manually for the auto-promoted stubs you care about.
5. **Section C** — write-only concepts. Decide per-concept: link from
   a topic, denylist, or accept.

---

## Cross-References

| Skill | Relationship |
|-------|-------------|
| `wiki-grow` | Writes the auto-promoted concepts this skill audits. |
| `wiki-merge` | Acts on the overlap clusters this skill finds (planned — not yet built). |
| `compile-knowledge` | Upstream of `wiki-grow`; produces the project knowledge articles that get promoted. |
| `research-atlas-audit` | Audits atlas topics; complementary lens. |
| `knowledge-lint` | Audits per-project knowledge folders; complementary lens. |

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…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.