Dispatch three subcommands: ingest, query, or lint. Manage tracked knowledge; .agro/knowledge/
owns source pages, patterns, and raw snapshots; local scratch is excluded.
Canonical schema: .agro/skills/wiki/references/schema.md. Procedures:
references/{ingest,query,lint}.md.
TRIGGER when: ingest a URL, path, or draft; query the wiki before planning;
or lint the index or review status.
$npx -y skills add mifunedev/openharness --skill wiki --agent claude-code
Installs into .claude/skills of the current project.
Are you the author of Wiki?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/mifunedev-wiki)
---
name: wiki
description: |
Dispatch three subcommands: ingest, query, or lint. Manage tracked knowledge; .agro/knowledge/
owns source pages, patterns, and raw snapshots; local scratch is excluded.
Canonical schema: .agro/skills/wiki/references/schema.md. Procedures:
references/{ingest,query,lint}.md.
TRIGGER when: ingest a URL, path, or draft; query the wiki before planning;
or lint the index or review status.
argument-hint: "ingest <url|path> [--slug <override>] | ingest --from-draft <slug> [--allow-stale] | query <topic> [--patterns] | lint [--dry-run]"
allowed-tools: Read, Write, Edit, Glob, Grep, Bash, WebFetch
---
# Wiki
One parameterized skill over the harness knowledge base. The first token of
`$ARGUMENTS` selects the operation; the remainder is that subcommand's argument
string. This dispatcher holds the routing logic and the rules shared by all three
operations; the full per-subcommand procedure lives in `references/`.
**Two surfaces, one owner each.** `.agro/knowledge/` owns the **data**; this skill
owns the **procedure**. No knowledge page lives under `.agro/skills/wiki/`, and no
schema rule lives anywhere but `references/schema.md`.
## Subcommands
| Subcommand | Argument form | Purpose | Reference |
|------------|---------------|---------|-----------|
| `ingest` | `<url\|path> [--slug <override>]` · `--from-draft <slug> [--allow-stale]` | Capture a source or promote a draft into an entity page (the only authorized write path) | `references/ingest.md` |
| `query` | `<topic> [--patterns]` | Frontmatter OR-search over tracked knowledge; read the top matches into context (≤3 entity, ≤5 pattern) | `references/query.md` |
| `lint` | `[--dry-run]` | Six correctness checks + atomic `.agro/knowledge/README.md` index regeneration | `references/lint.md` |
## Dispatch
Parse `$ARGUMENTS`: the first whitespace-delimited token is the subcommand; the
rest is the subcommand's argument string.
```bash
ARGUMENTS="${ARGUMENTS:-}"
SUB="${ARGUMENTS%% *}" # first token
REST="${ARGUMENTS#"$SUB"}" # everything after it
REST="${REST# }" # trim one leading space
```
Route on `$SUB`, then follow the matching reference document end-to-end (its
instructions are authoritative — this dispatcher does not restate them):
| `$SUB` | Action |
|--------|--------|
| `ingest` | Read `references/ingest.md`; execute it with `$REST` as its argument string. |
| `query` | Read `references/query.md`; execute it with `$REST` as the `<topic>`. |
| `lint` | Read `references/lint.md`; execute it with `$REST` (only `--dry-run` is recognized). |
| anything else (incl. empty) | Print the usage line from `argument-hint` and exit 0. Do not guess a subcommand. |
## Shared rules
These hold across all three subcommands; the reference docs assume them.
- **Knowledge root**: entity pages at `.agro/knowledge/source/<slug>.md`, pattern
pages at `.agro/knowledge/patterns/pattern-<subsystem>-<mode>.md`, immutable
external snapshots at `.agro/knowledge/raw/<yyyy-mm-dd>-<slug>.md`. Both entry
globs are flat and do not descend.
- **Tracked by default**: `source/`, `patterns/`, and `raw/` are committed like
any other repository content — a plain `git add`, no `-f`, no whitelist.
`.agro/knowledge/local/` is the only ignored tier.
- **`local/` is never an input**: no query path and no planning flow reads it. A
page one machine can see must not inform a plan another machine cannot
reproduce. Promotion goes through `ingest`.
- **The repository outranks the knowledge base**: a page is orientation, not
authority. Re-ground material claims against the sources a page cites before
relying on them.
- **Canonical schema**: frontmatter fields, the three kinds, provenance forms,
freshness, slug derivation, the word cap, cross-links, the confidence
lifecycle, and the body-merge strategy all live in
`.agro/skills/wiki/references/schema.md`. The reference docs and this dispatcher
defer to it — they never redefine it.
- **Frontmatter extraction** (canonical, used identically by every consumer):
```bash
awk '/^---$/{f=!f; next} f{print}' .agro/knowledge/source/<slug>.md
```
- **One freshness implementation**: `.agro/skills/wiki/scripts/knowledge-impact.sh`
decides dependency-aware invalidation. `lint` calls it with `--verified`;
a build calls it with `--changed <paths>`. Nothing reimplements it.
- **Orchestrator-only write gate**: `ingest` writes (snapshots + entity pages),
pattern-page writes, and `lint`'s index regeneration are orchestrator-only. Sub-agents propose drafts to
`$TMPDIR/oh-wiki-drafts/<slug>.md`; the orchestrator promotes via
`/wiki ingest --from-draft <slug>`. A sub-agent that writes directly to
`.agro/knowledge/` is out of scope and may be reverted.
- **Index reflects the tracked entry set**: `.agro/knowledge/README.md`'s Index
table is generated state owned by `lint`, sorted by `updated:` descending.
Never hand-edit it.
## When NOT to use
- A topic that is a **behavioral norm** ("always do X") → a rule/skill, not
knowledge.
- A **session journal** entry ("this run showed Y") → the run's report. A
*recurring failure mode* the run revealed is different: that is a
`kind: pattern` entry, named for the mode not the run.
- A **proposal decision record** → `.agro/evals/decisions/skill-impact.md`, not a
knowledge page.
- **Human-facing prose** → `docs/` (knowledge pages are LLM-readable synthesis).
- Full-text body search → direct `grep`; `query` is intentionally
frontmatter-only.
## See Also
- `.agro/skills/wiki/references/schema.md` — canonical schema and authoring rules
- `.agro/skills/wiki/references/ingest.md` · `query.md` · `lint.md` — full procedures
- `.agro/skills/wiki/scripts/knowledge-impact.sh` — dependency-aware invalidation
- `.agro/knowledge/README.md` — the generated index
- `.agro/evals/decisions/skill-impact.md` — the skill-change ledger the proposer reads
- `.agro/evals/probes/wiki-readme-index.sh` — drift guard for the generated index