From knowledge_management
Creates and maintains a persistent wiki knowledge base of interlinked markdown files. Ingests sources (URLs, papers, notes), auto-lints, cross-references, and answers queries.
How this skill is triggered — by the user, by Claude, or both
Slash command
/knowledge_management:wikiThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<wiki>
Unlike traditional RAG (which rediscovers knowledge from scratch per query), the wiki compiles knowledge once and keeps it current. Cross-references are already there. Contradictions have already been flagged. Synthesis reflects everything ingested.
Division of labor: the human curates sources and directs analysis. The agent summarizes, cross-references, files, and maintains consistency.
<when_to_activate> Use this skill when the user:
wiki_auto_shaper agent (see <lint_and_audit>).wiki/
├── SCHEMA.md # Conventions, structure rules, domain config
├── index.md # Sectioned content catalog with one-line summaries
├── log.md # Chronological action log (append-only, rotated yearly)
├── raw/ # Layer 1: Immutable source material
│ ├── articles/ # Externally-published articles, web clippings
│ ├── papers/ # PDFs, arxiv papers
│ ├── meetings/ # Meeting notes, interviews, spoken-word transcripts (podcasts, talks)
│ ├── notes/ # Internal memos, discussion writeups, ad-hoc observations, internal docs not published externally
│ └── assets/ # Images, diagrams referenced by sources
├── entities/ # Layer 2: Entity pages (people, orgs, products, models)
├── concepts/ # Layer 2: Concept/topic pages
├── comparisons/ # Layer 2: Side-by-side analyses
├── queries/ # Layer 2: Filed query results worth keeping
├── summaries/ # Layer 2: Standalone overview / digest pages
└── procedures/ # Layer 2: Procedure / workflow / how-to pages
Layer 1 — Raw Sources. Immutable. The agent reads but never modifies these.
Layer 2 — The Wiki. Agent-owned markdown files. Created, updated, and
cross-referenced by the agent. Page types split into declarative (what / why)
and procedural (how) — see <page_types> below.
Layer 3 — The Schema. SCHEMA.md defines structure, conventions, and tag
taxonomy. The linter reads its ## Frontmatter yaml block to learn the
page-type enum, so wikis can declare additional types there without modifying
the linter.
<folder_layout>
The folder tree is the type axis only. Every page lives directly at
<pluralized-type>/<slug>.md — flat, one layer deep. No thematic prefix
(themes/ai/concepts/foo.md is wrong), no sub-folder nesting inside a type
folder (concepts/ai/foo.md is wrong), no bare files at the wiki root.
Thematic scope belongs in tags: and type:, not in folder names — tags have
an enumerated taxonomy in SCHEMA.md and don't drift the way emergent theme
folders do. The linter's structure check enforces this with blocking
severity on misfiled pages (with a concrete move suggestion) and warn
when an expected type folder is missing on disk. Because the wiki's primary
consumer is an LLM with tools — which greps and follows links rather than
browsing — visual folder shelving adds no real value and trades it for
filing-drift risk.
</folder_layout>
<page_types> Each page type answers a different shape of question. Pick by the entry point you (or a future operator) will re-find the page from.
| Type | Answers | When to use |
|---|---|---|
| entity | "Who/what is X?" | A single named person, org, product, model, place — something with identity. |
| concept | "What does X mean, and why?" | An idea, mechanism, or technique that's describable on its own. |
| comparison | "How does X compare to Y?" | Side-by-side with dimensions and a verdict. |
| summary | "What's the overview of topic X?" | Topic-organized digest. Re-found by browsing the topic. |
| query | "What's the answer to my specific question?" | Question-organized synthesis. Re-found by re-asking. |
| procedure | "How should X be done?" | An evergreen rule, convention, or workflow. The page holds the rule; the instance that prompted it lives elsewhere. |
<declarative_vs_procedural>
Declarative vs procedural — the load-bearing split. Entity, concept,
comparison, summary, and query capture what is true and why (subject
knowledge). procedures/ captures how to act and how things should be
organized (operational knowledge — workflows, conventions, runbooks, build
steps, sourcing rules, review checklists, naming rules). A wiki without
procedure pages is a research notebook; a wiki without the declarative types
is just a runbook collection. Most projects need both.
</declarative_vs_procedural>
<summary_vs_query> summary vs query. Same content, different framing. Topic-organized → summary. Question-organized → query. When both work, prefer summary — broader entry surface. File as query only when the question shape itself is what makes the answer valuable. </summary_vs_query>
<procedure_vs_concept> procedure vs concept. Both page types can answer "how" questions, but they answer different ones:
main.mdl") — they are facts about how the project is built,
not actions a contributor performs."How transformers attend" (how does X work → concept) vs "How to add a new training run" (how do I do X → procedure). Both contain "how". The first describes the system; the second prescribes an action sequence.
The trap: a page about how the system works can wear imperative voice and operator-facing scaffolding — trigger lists, "must" bullets, pitfalls — and still be a concept. Authorial rules that describe system properties belong on concept pages even when they constrain author behavior. A procedure page is the one that lists the actual steps a contributor takes (open file X, add variant Y, run command Z). If you are not writing those steps, you are not writing a procedure.
Test before you file. Write the question the page answers. "How does X work?" or "What is X?" → concept. "How do I do X?" or "What do I do when Y?" → procedure. If the answer to "how does this page help me?" is "I now understand how the system works", that is a concept; if the answer is "I now know the steps to take", that is a procedure. </procedure_vs_concept>
<page_anatomy> Page anatomy. Once the type is picked, write the sections in this order:
| Type | Sections (in order) |
|---|---|
| entity | Overview · Key facts and dates · Relationships to other entities |
| concept | Definition / explanation · Current state of knowledge · Open questions or debates · Related concepts |
| comparison | What is being compared and why · Dimensions (table preferred) · Verdict / synthesis |
| summary | Topic and scope · Key findings by sub-topic · Open threads |
| query | Question (verbatim, as the page title) · Synthesized answer with cross-links · Confidence and caveats |
| procedure | One-paragraph rule summary · When this applies (the trigger) · The rule · Pitfalls / edge cases (optional, rule-shaped only) · See Also |
Cross-links go in every section that references another wiki page. Source
attribution lives in the sources: frontmatter — a list of
raw/<kind>/<slug>.md paths the lint validates against disk. The frontmatter
is the single source of truth; pages do not carry a separate body "Sources"
section, and per-claim attribution uses inline standard-markdown links rather
than footnote markers (see <write_or_update_pages>). External material the
page was distilled from but that stays outside raw/ — e.g. doctrine in
another repo — goes into an optional ## Derived from body section at the
page bottom; the renamed heading does not match the linter's deprecated
## Sources regex, so it does not collide with the structured sources:
channel.
</page_anatomy>
</page_types>
Three bundled scripts handle discovery, init, and lint. **Always run `discover_wiki.sh` first** — never resolve the wiki path with your own inline Python or shell logic; the script is the single source of truth for walk-up semantics, and bypassing it is what causes silent upstream adoptions.if output=$(scripts/discover_wiki.sh); then
WIKI="$output" # auto-resolved
else
rc=$?
case $rc in
2) candidates="$output" ;; # ambiguous → ASK USER
*) exit "$rc" ;;
esac
# On exit 2, follow <resolving_the_wiki_location> below before
# touching any wiki file. Do not pick a candidate yourself.
fi
[[ -d "$WIKI" ]] || scripts/init_wiki.sh "$WIKI" # scaffold if missing
python3 scripts/lint.py # health-check
<discover_wiki>
discover_wiki.sh walks up level by level from the current working directory
toward $HOME. At each level:
<level>/.no_wiki present → opted out; skip and continue up.<level>/wiki/ present → record as the existing wiki and STOP walking
(the search never crosses an existing wiki).The script auto-resolves on stdout (exit 0) when it can:
wiki/ → print that path.$HOME is opted out via .no_wiki → print
$HOME/wiki (the explicit "use the global wiki" chain).Otherwise the script exits 2 and lists every candidate in walk order on stdout, one per line, prefixed with its kind:
AVAILABLE:/Users/foo/projects/myproject/src
AVAILABLE:/Users/foo/projects/myproject
AVAILABLE:/Users/foo/projects
EXISTING:/Users/foo/wiki # only as the last entry, if found
When CWD is not at or under $HOME, walk-up is disabled and the script
falls back to the pre-walk-up behavior (./wiki/, ./.no_wiki, or ask).
.no_wiki is the explicit opt-out: drop an empty file by that name in any
directory you do not want a local wiki for, and the walk skips that level.
Place it at an existing <wiki-path>/.no_wiki to retire that wiki dir
without deleting it.
</discover_wiki>
<init_wiki>
init_wiki.sh materializes SCHEMA.md, index.md, log.md, and the
standard directory tree from canonical templates in
references/template_schema.md, template_index.md, template_log.md. It
refuses to overwrite an established wiki. To customize the schema beyond the
placeholders, read references/template_schema.md for the full annotated
template (domain, tag taxonomy, page-type sections, update policy).
</init_wiki>
<fallback_without_scripts>
Without access to the scripts, perform discovery inline by walking up from
CWD toward $HOME: at each level, treat <level>/.no_wiki as "skip", a
present <level>/wiki/ as a hit (and stop walking), anything else as a
creation candidate. Auto-resolve only when the closest non-opted-out level
already has wiki/ or every level up through $HOME is opted out (use
$HOME/wiki). Otherwise follow the explicit workflow in
<resolving_the_wiki_location> — never silently route to an upstream wiki.
</fallback_without_scripts>
<resolving_the_wiki_location> This is the discovery flow. Every wiki operation — ingest, query, update, archive, lint, audit, init — runs it before touching any file in a wiki. The rule applies regardless of how the user phrased their request ("update the wiki", "add a page", "lint", etc.); the operation does not begin until this resolves.
<the_hard_rule>
The hard rule. When discover_wiki.sh exits 2, you MUST present the
candidates and ask the user, unless <adopt_when_user_named_the_path>
applies. Do not silently adopt an upstream EXISTING: candidate
when CWD is an unresolved AVAILABLE: level — the user may want a local
wiki for this directory, and silently writing to a wiki one or more
levels above the current project is a confidentiality and scoping
mistake. Exit 2 is the script telling you the location is ambiguous,
not a recommendation.
</the_hard_rule>
<adopt_when_user_named_the_path>
Carve-out to <the_hard_rule>. When the user's current request
explicitly names one of the AVAILABLE: or EXISTING: paths returned
by exit 2, adopt that path without prompting and report the adoption
in one line so the auto-choice is observable to the user, e.g.
Using $WIKI=/path/to/wiki (per your message).
The user can correct in the next turn if the match was wrong — silence is the failure mode this surface report exists to prevent. Two bounds keep this safe:
<the_flow> — never invent or extrapolate a wiki location.<the_flow>
<run_discovery>
Run scripts/discover_wiki.sh.
$WIKI. If the path does not yet exist on disk, init it
with scripts/init_wiki.sh "$WIKI" before proceeding.AVAILABLE:<path> or
EXISTING:<path> per line, in walk order from CWD upward). Continue
with <present_candidates>. Do not pick a candidate yourself.
</run_discovery><present_candidates> Present every candidate to the user, in walk order, with the kind spelled out so the choice is unambiguous:
AVAILABLE — no wiki at that level yet; selecting it creates one
there via init_wiki.sh.EXISTING — a wiki already lives at that level; selecting it adopts
that wiki for the current operation.Ask: "Which path should host the wiki for this operation?" Wait for the user's answer. </present_candidates>
<offer_no_wiki_markers>
Offer .no_wiki markers for the unchosen AVAILABLE candidates
between CWD (inclusive) and the chosen path (exclusive) — the levels
the user walked over to reach their pick. Ask once, covering all of
them in a single yes/no:
"Drop a
.no_wikiopt-out marker in<path-1>,<path-2>, … so future walks from those subtrees skip straight past?"
On yes, create an empty .no_wiki file at each path. On no, leave
them untouched. Levels above the chosen path are not offered markers —
the walk-up will short-circuit at the chosen wiki anyway.
</offer_no_wiki_markers>
<proceed_with_operation>
Only now scaffold (if the chosen path needs it via
init_wiki.sh) and proceed with the operation against $WIKI.
</proceed_with_operation>
</the_flow>
<common_case>
Common case worth calling out. CWD has no wiki and no .no_wiki,
but a parent directory does. The script reports
AVAILABLE:<CWD> followed by EXISTING:<parent>/wiki and exits 2. The
default response is to ask — silently routing to the upstream is the
mistake <the_hard_rule> exists to prevent. The user may want to
(a) create a wiki right here, (b) drop a .no_wiki here and let the
upstream wiki own this subtree from now on, or (c) adopt the upstream
wiki for this session without a marker. They pick. The single
exception is <adopt_when_user_named_the_path> — when the user's
current request already named one of the candidates, adopt it and
report the adoption in one line instead of asking.
</common_case>
</resolving_the_wiki_location>
<resuming_an_existing_wiki> When the user has an existing wiki, always orient yourself before doing anything:
SCHEMA.md — understand the domain, conventions, and tag taxonomy.index.md — learn what pages exist and their summaries.log.md — read the last 20–30 entries with
tail -n 350 "$WIKI/log.md" (cap each entry at roughly 20 lines; tune the
tail by entry length). The log can grow to 500 entries before rotation; a
full read wastes context.Only after orientation should you ingest, query, or lint. Skipping this causes duplicate pages, missed cross-references, schema-contradiction, and repeated work.
For large wikis (100+ pages), also run a quick recursive search (rg /
grep -r) for the topic at hand before creating anything new.
</resuming_an_existing_wiki>
<initializing_a_new_wiki>
When the user asks to create or start a wiki, <resolving_the_wiki_location>
already covers steps 1–3 (run discovery, present candidates, offer
.no_wiki markers in unchosen levels). The init-specific steps follow once
$WIKI is chosen:
init_wiki.sh "$WIKI" against the chosen path to scaffold
SCHEMA.md, index.md, log.md, and the directory tree.SCHEMA.md has placeholder text
in the Domain and Tag Taxonomy sections. Read
references/template_schema.md for what each section should contain.
Define 10–20 starting tags before any pages are written, since the
linter flags off-taxonomy tags.<core_operations>
When the user provides a source (URL, file, paste), integrate it into the wiki:<capture_raw_source> Capture the raw source:
raw/articles/.raw/papers/.raw/meetings/.raw/notes/.raw/ subdirectory by kind, not by source format.references/raw_taxonomy.md — the canonical reference for bucket meanings and classification heuristics.raw/articles/transformer-architecture-2024.md.source_url, ingested, sha256 of the body —
body-only). Compute and write the hash with
python3 scripts/compute_sha256.py raw/<kind>/<slug>.md — never invent
the value by hand. On re-ingest of the same URL: run the same command,
skip if it reports ok, flag drift if it reports update..md
link from one raw file to another is ingester synthesis, not source
content (originals cite by URL, not by ingester-picked slugs).
File the cross-reference on the wiki page that cites both sources
instead.
</capture_raw_source><discuss_takeaways> Discuss takeaways with the user — what's interesting, what matters for the domain. (Skip in automated/cron contexts.) </discuss_takeaways>
<check_what_already_exists>
Check what already exists — search index.md and run a recursive
search to find existing pages for mentioned entities/concepts. The
difference between a growing wiki and a pile of duplicates.
</check_what_already_exists>
<write_or_update_pages> Write or update wiki pages:
<archive>.contradictions: [other-page-slug] and contested: true.updated date.SCHEMA.md's taxonomy. Add new tags to SCHEMA.md before using them on a page.Transformers replaced RNNs by 2019 ([Vaswani 2017](../raw/papers/attention-is-all-you-need.md)). No footnote markers ([^name] / [^name]: …) and no bottom-of-page "Sources" collection: both split the claim from its evidence across the page, force the reader (human or LLM) to resolve markers separately, and duplicate what the frontmatter already encodes. The page-level sources: frontmatter is the canonical inventory; inline links pin specific claims to specific sources within that inventory, and the lint validates both against disk.## Derived from body section near the bottom of the page (bulleted list of external paths, URLs, or descriptors with whatever standing commentary applies, e.g. "no parallel repo at the time of writing; re-anchor when one exists"). The renamed heading is deliberately distinct from ## Sources so the linter does not flag it as the deprecated body-Sources collection. Use ## Derived from for "the page exists because that exists, but that is not raw material to ingest"; use sources: frontmatter for "this page draws on raw/<kind>/<slug>.md material the wiki owns". A page may have either, both, or neither.confidence: medium or low. Reserve high for multi-source support.
</write_or_update_pages><update_navigation> Update navigation:
index.md under the correct section, alphabetically.
Update "Total pages" + "Last updated".log.md: ## [YYYY-MM-DD] ingest | Source Title. List only
files actually created or updated in this ingest. Skip files that were
inspected, considered, or deliberately left unchanged, and do not
narrate decisions about what not to do. Aim for roughly 20 lines per
entry — if it grows past that, the entry is logging non-changes or
prose that belongs on a wiki page instead.
</update_navigation><run_linter_and_iterate>
Run the linter and iterate — python3 scripts/lint.py. Fix every
blocking finding before declaring complete. This is the narrow
post-ingest check; for broad audits across the whole wiki, spawn the
wiki_auto_shaper agent instead. See <lint_and_audit> below.
</run_linter_and_iterate>
<report_what_changed> Report what changed to the user — list only files actually created or updated, matching what the log entry contains. </report_what_changed>
<bulk_ingest>
Bulk ingest (multiple sources at once): batch the work — read all sources
first, identify all entities/concepts in one pass, check existing pages once
(not N times), write in one pass, update index.md once, single batch log
entry. Bulk ingests are the most likely operation to introduce structural
issues, so always lint to clean.
</bulk_ingest>
<capture_procedure> When the user asks to record a workflow rule, convention, or runbook — or you notice an operational pattern worth keeping — file it as a procedure page. The page holds the evergreen rule; the worked example that prompted it lives elsewhere. The default failure mode here is over-indexing on the current example: a procedure page should still read as a rule six months from now on a different task, with none of today's specifics in it.
Run every step in order:<name_the_rule>
Name the rule. State the policy in 1–3 sentences using the form
"When [trigger], do [action], because [reason]." Keep the trigger and
action operator-neutral; "after every ingest that touches 5+ entities" is a
trigger, "the user just asked X" is not. Confirm the page reads as steps
for an operator to follow — pages that read as facts about how a
mechanism works belong in concepts/, even when worded as "rules".
</name_the_rule>
<strip_the_instance> Strip the instance. Replace every proper noun, file path, person's name, date, error message, command output, and task-specific value with a category placeholder, or delete it. Read the page back. If it still reads as a rule, the rule is the carrier; if the page collapses without the stripped specifics, the example was the carrier and the rule still needs to be written. </strip_the_instance>
<hoist_non_rule_content> Hoist non-rule content to its proper home:
raw/<kind>/<slug>.md.concepts/
page.<bound_the_page>
Bound the page. Keep atomic procedure pages 30–80 lines. Hub pages
that chain atomics stay 30–60 lines and link out rather than restating
the underlying rules. Past the bound, hoist worked content per
<hoist_non_rule_content> or split into two atomic pages.
</bound_the_page>
<generality_tests> A procedure page that survives all three tests is a keeper:
X. Read the page back. The rule still reads as a rule.procedures/.
</generality_tests><update_navigation_for_procedure>
Update navigation: add the new procedure page to index.md under the
procedures section, alphabetically. Update "Total pages" + "Last updated".
</update_navigation_for_procedure>
</capture_procedure>
When the user asks a question about the wiki's domain:index.md to identify relevant pages..md files for key terms — the index alone may miss relevant content.comparisons/ for X-vs-Y, summaries/ for
topic-organized digests, queries/ for question-organized answers (see
<page_types>). Skip trivial lookups.log.md with the query and whether it was filed.
_archive/ if it doesn't exist; move the page there preserving its
path (e.g., _archive/entities/old-page.md).index.md.python3 scripts/lint.py to catch any inbound link you missed.
<lint_and_audit> Two paths, picked by scope.
<broad_audits>
Broad audits — spawn the wiki_auto_shaper agent. When the user asks
to lint, audit, fix, health-check, clean up, or auto-repair the wiki — or
the wiki has accumulated drift across many pages — delegate to the
wiki_auto_shaper agent. The agent runs a complete
assess → fix → verify loop in an isolated context: runs lint.py,
audits the prose for issues the linter cannot see (topic mixing,
type/anatomy mismatch, procedure-page instance leakage, content violations
of the page-type anatomy), fixes every blocking and warn finding, splits
or relocates pages where the schema demands it, re-lints until the wiki is
clean, appends the audit entry to log.md, and reports back a per-file
change list. Keep that work in the agent rather than running the iteration
loop inline — the fix loop on a real wiki touches dozens of files and
displaces conversation context.
</broad_audits>
<narrow_inline_checks>
Narrow inline checks — run lint.py directly. After a single ingest,
a single archive, a schema edit, or a small batch update, run the linter
in-flow and fix what it surfaces:
python3 scripts/lint.py # auto-discover ./wiki (or ~/wiki when ./.no_wiki present)
python3 scripts/lint.py /custom/path # explicit override
python3 scripts/lint.py --quiet # blocking + warn only
Findings come in three buckets:
index.md, missing or unparseable SCHEMA.md (no extractable type enum).
Exits 1; must fix.references/).Full check matrix: references/lint_checks.md.
</narrow_inline_checks>
<inline_iteration_loop>
Inline iteration loop. When the lint scope is narrow (one ingest, one
archive), run, fix the highest-severity findings, re-run. Repeat until the
script exits 0 or only acceptable info-level findings remain. Append the
outcome to log.md:
## [YYYY-MM-DD] lint | N blocking, N warn, N info
If a check is wrong for the situation (e.g., a deliberately oversized
synthesis page), don't silence by editing the script — note the rationale on
the page or in SCHEMA.md and accept the info-level finding. The script
surfaces, doesn't enforce.
</inline_iteration_loop>
</lint_and_audit>
</core_operations>
<operational_discipline>
```bash rg "transformer" "$WIKI" -g "*.md" # by content fd -e md . "$WIKI" # by filename rg "tags:.*alignment" "$WIKI" -g "*.md" # by tag tail -n 350 "$WIKI/log.md" # ~last 20 log entries ```<appending_to_log>
"Append-only" means newest at the bottom of the file. The Edit tool's
old_string matching makes it easy to anchor on a header and insert
before it, producing inverted order. Avoid that:
Anchor on the previous entry's last body line, never on a
## [YYYY-MM-DD] header. New content (blank line + new header + body)
goes after the anchor.
Cluster ordering matches file ordering. When one workflow produces several entries (ingest → sidecar update → cite), write them earliest-first within the cluster — same direction as the whole-file rule. Resist reverse-chronological "outcome first" narrative ordering.
Verify after every log edit:
grep -n '^## \[' "$WIKI/log.md" | tail -5
The new entry's line number must be the largest. If not, fix before continuing. </appending_to_log>
</operational_discipline>
Quick-scan reminders. See the named section for full guidance.<resolve_before_writing>
Resolve before writing — discover_wiki.sh exit 2 means ambiguous, not "use the upstream". Always present candidates and ask the user, even when an EXISTING: parent wiki shows up in the list. Silent upstream adoption is a confidentiality and scoping mistake. (see <resolving_the_wiki_location>)
</resolve_before_writing>
<orient_first>
Orient first — read SCHEMA + index + recent log before any operation. (see <resuming_an_existing_wiki>)
</orient_first>
<raw_is_read_only>
raw/ is read-only — corrections live in wiki pages, not in the source.
</raw_is_read_only>
<cross_references_are_layer_2>
Cross-references are layer 2, not raw — synthesis links between sources live on the wiki page that cites both, never inside a raw body. (see <capture_raw_source> in <ingest>)
</cross_references_are_layer_2>
<update_navigation_reminder>
Update navigation — index.md and log.md lag → wiki degrades. (see <update_navigation> in <ingest>)
</update_navigation_reminder>
<log_only_what_changed>
Log only what changed — log entries list files actually created or updated; never narrate inspected-but-unchanged files or "did not edit" decisions. (see <update_navigation> in <ingest>)
</log_only_what_changed>
<page_thresholds>
Page thresholds — passing mentions don't earn a page. (template_schema.md)
</page_thresholds>
<cross_link_or_vanish> Cross-link or vanish — every page links to ≥2 others. </cross_link_or_vanish>
<frontmatter_is_required> Frontmatter is required — enables search, filtering, staleness detection. </frontmatter_is_required>
<tags_from_taxonomy_only> Tags from taxonomy only — add new tags to SCHEMA first. </tags_from_taxonomy_only>
<pages_stay_scannable> Pages stay scannable — split at >200 lines; deep dives go to dedicated pages. </pages_stay_scannable>
<generalize_procedure_pages>
Generalize procedure pages — name the rule, strip the instance, hoist worked content to raw/ sidecars or concept pages. The page reads as a rule on a different task next month, or it isn't a procedure. (see <capture_procedure>)
</generalize_procedure_pages>
<procedure_or_concept>
Procedure or concept? — file pages an operator reads as steps to follow under procedures/; file pages a reader reads as facts about how something works under concepts/. Wording the body as "rules govern X" does not turn a description into a procedure. (see <page_types> and <capture_procedure>)
</procedure_or_concept>
<confirm_scope> Confirm scope — ingests touching 10+ existing pages need user OK first. </confirm_scope>
<rotate_log_at_500>
Rotate the log at 500 entries — log.md → log-YYYY.md.
</rotate_log_at_500>
<contradictions_are_explicit> Contradictions are explicit — record both with dates, mark in frontmatter, flag for review. </contradictions_are_explicit>
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Applies a firm's KYC/AML rules grid to parsed onboarding records: assigns risk rating, checks required documents, outputs rule outcomes with citations, and routes for escalation.
Generates daily or weekly digests of activity from connected sources (chat, email, docs, tasks, CRM), highlighting action items, decisions, mentions, and project updates.
npx claudepluginhub theafh/ai-modules --plugin knowledge_management