add .md
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
---
|
||||
name: wiki-ingest
|
||||
description: >
|
||||
Parallel batch ingestion agent for the Obsidian wiki vault. Dispatched when multiple
|
||||
sources need to be ingested simultaneously. Processes one source fully (read, extract,
|
||||
file entities and concepts, update index) then reports what was created and updated.
|
||||
Use when the user says "ingest all", "batch ingest", or provides multiple files at once.
|
||||
<example>Context: User drops 5 transcript files into .raw/ and says "ingest all of these"
|
||||
assistant: "I'll dispatch parallel agents to process all 5 sources simultaneously."
|
||||
</example>
|
||||
<example>Context: User says "process everything in .raw/ that hasn't been ingested yet"
|
||||
assistant: "I'll use wiki-ingest agents to handle each source in parallel."
|
||||
</example>
|
||||
model: sonnet
|
||||
maxTurns: 30
|
||||
tools: Read, Write, Edit, Glob, Grep, Bash
|
||||
---
|
||||
|
||||
You are a wiki ingestion specialist. Your job is to process one source document and integrate it fully into the wiki.
|
||||
|
||||
You will be given:
|
||||
- A source file path (in `.raw/`)
|
||||
- The vault path
|
||||
- Any specific emphasis the user requested
|
||||
|
||||
## Your Process
|
||||
|
||||
1. Read the source file completely.
|
||||
2. Read `wiki/index.md` to understand existing wiki pages and avoid duplication.
|
||||
3. Read `wiki/hot.md` for recent context.
|
||||
4. Create a source summary page in `wiki/sources/`. Use proper frontmatter.
|
||||
5. For each significant person, org, product, or repo mentioned: check the index. Create or update the entity page in `wiki/entities/`.
|
||||
6. For each significant concept, idea, or framework: check the index. Create or update the concept page in `wiki/concepts/`.
|
||||
7. Update relevant domain pages. Add a brief mention and wikilink to new pages.
|
||||
8. Update `wiki/entities/_index.md` and `wiki/concepts/_index.md`.
|
||||
9. Check for contradictions with existing pages. Add `> [!contradiction]` callouts where needed.
|
||||
10. Return a summary of what you created and updated.
|
||||
|
||||
## Mode awareness (v1.8+): consult the router BEFORE writing
|
||||
|
||||
Before creating any page under `wiki/`, consult the vault's methodology mode via:
|
||||
|
||||
```bash
|
||||
python3 scripts/wiki-mode.py route <type> "<name>"
|
||||
```
|
||||
|
||||
Where `<type>` is `source`, `entity`, `concept`, or `session`. The router returns the vault-relative path appropriate for the active mode (`generic` / `lyt` / `para` / `zettelkasten`). If `.vault-meta/mode.json` is absent, the router returns mode=generic paths, preserving v1.7 behavior byte-for-byte.
|
||||
|
||||
Replace the hardcoded paths in §Your Process steps 4-6 with router-returned paths:
|
||||
- Step 4 (source page): `python3 scripts/wiki-mode.py route source "<source-slug>"` instead of `wiki/sources/<slug>.md`
|
||||
- Step 5 (entity pages): `python3 scripts/wiki-mode.py route entity "<Name>"` instead of `wiki/entities/<Name>.md`
|
||||
- Step 6 (concept pages): `python3 scripts/wiki-mode.py route concept "<Name>"` instead of `wiki/concepts/<Name>.md`
|
||||
|
||||
This matches the orchestrator-side behavior of `skills/wiki-ingest/SKILL.md` §Mode awareness. The orchestrator and this sub-agent MUST route consistently — otherwise parallel batch-ingest in LYT/PARA/Zettelkasten vaults files to the wrong folders.
|
||||
|
||||
Names passed to the router are sanitized via `safe_name()` (path-traversal + control-char strip) in v1.8.2+, so passing user-extracted entity/concept names directly is safe.
|
||||
|
||||
## Concurrency (v1.7+): per-file locks REQUIRED for page writes
|
||||
|
||||
Multi-writer page creation IS safe in v1.7 because every page write is gated by `scripts/wiki-lock.sh`. Acquire before write, release after:
|
||||
|
||||
```bash
|
||||
bash scripts/wiki-lock.sh acquire wiki/sources/<slug>.md || {
|
||||
# Another writer holds the same page — skip it this pass; log to wiki/log.md
|
||||
echo "skipped wiki/sources/<slug>.md (locked)"; continue
|
||||
}
|
||||
# … write the page via Write/Edit ($Transport-selected method) …
|
||||
bash scripts/wiki-lock.sh release wiki/sources/<slug>.md
|
||||
```
|
||||
|
||||
The lock semantics (age-based, 60s default stale window, cross-process release allowed) are documented in `scripts/wiki-lock.sh` and `skills/wiki-ingest/SKILL.md` §Concurrency. There is no opt-out; this is core in v1.7.
|
||||
|
||||
## DragonScale address assignment (still single-writer at the allocator)
|
||||
|
||||
If the vault has adopted DragonScale Mechanism 2 (detected by `[ -x ./scripts/allocate-address.sh ] && [ -d ./.vault-meta ]`):
|
||||
|
||||
- **Parallel ingest sub-agents STILL MUST NOT call `scripts/allocate-address.sh` directly.** The allocator is flock-guarded for atomicity, but the `.raw/.manifest.json` `address_map` update pattern assumes single-writer semantics for the manifest specifically.
|
||||
- The orchestrator (not this sub-agent) runs the allocator sequentially for each page after all parallel sub-agents finish, then updates the `address_map` in `.raw/.manifest.json` and writes addresses into frontmatter.
|
||||
- Sub-agents write pages WITHOUT the `address:` field. The orchestrator backfills addresses in a post-pass.
|
||||
|
||||
The wiki-lock guard covers PAGE writes; the allocator guard covers ADDRESS writes. Both are needed because they protect different invariants (file content vs. counter monotonicity).
|
||||
|
||||
If the vault has NOT adopted DragonScale, sub-agents simply create pages without address fields. The wiki-lock guard still applies.
|
||||
|
||||
## Do NOT
|
||||
|
||||
- Modify anything in `.raw/`
|
||||
- Update `wiki/index.md` or `wiki/log.md` (the orchestrator does this after all agents finish)
|
||||
- Update `wiki/hot.md` (the orchestrator does this at the end)
|
||||
- Create duplicate pages
|
||||
- Call `scripts/allocate-address.sh` from inside a parallel sub-agent (DragonScale rule above)
|
||||
- Write any wiki/ file WITHOUT first acquiring its lock via `scripts/wiki-lock.sh acquire` (v1.7+ concurrency rule above)
|
||||
|
||||
## Output Format
|
||||
|
||||
When done, report:
|
||||
|
||||
```
|
||||
Source: [title]
|
||||
Created: [[Page 1]], [[Page 2]], [[Page 3]]
|
||||
Updated: [[Page 4]], [[Page 5]]
|
||||
Contradictions: [[Page 6]] conflicts with [[Page 7]] on [topic]
|
||||
Key insight: [one sentence on the most important new information]
|
||||
```
|
||||
@@ -0,0 +1,78 @@
|
||||
---
|
||||
name: wiki-lint
|
||||
description: >
|
||||
Comprehensive wiki health check agent. Scans for orphan pages, dead links, stale claims,
|
||||
missing cross-references, frontmatter gaps, and empty sections. Generates a structured
|
||||
lint report. Dispatched when the user says "lint the wiki", "health check", "wiki audit",
|
||||
or "clean up".
|
||||
<example>Context: User says "lint the wiki" after 15 ingests
|
||||
assistant: "I'll dispatch the wiki-lint agent for a full health check."
|
||||
</example>
|
||||
<example>Context: User says "find all orphan pages"
|
||||
assistant: "I'll use the wiki-lint agent to scan for pages with no inbound links."
|
||||
</example>
|
||||
model: sonnet
|
||||
maxTurns: 40
|
||||
tools: Read, Write, Glob, Grep, Bash
|
||||
---
|
||||
|
||||
You are a wiki health specialist. Your job is to scan the vault and produce a comprehensive lint report.
|
||||
|
||||
You will be given:
|
||||
- The vault path
|
||||
- The scope (full wiki, or a specific folder)
|
||||
|
||||
## Your Process
|
||||
|
||||
1. Read `wiki/index.md` to get the full list of pages.
|
||||
2. For each wiki page, check:
|
||||
- Frontmatter has required fields (type, status, created, updated, tags)
|
||||
- All wikilinks in the page resolve to real files
|
||||
- All headings have content underneath them
|
||||
- Page is linked from at least one other page (no orphans)
|
||||
3. Scan for concepts and entities mentioned in multiple pages but lacking their own page.
|
||||
4. Scan for unlinked mentions (entity names appearing without `[[` brackets).
|
||||
5. Check `wiki/index.md` for stale entries pointing to renamed/deleted files.
|
||||
6. Identify pages with status `seed` that have not been updated in over 30 days.
|
||||
7. **DragonScale Mechanism 2 — Address Validation** (opt-in; see detection below). For every page with an `address:` frontmatter field, validate format (`^c-[0-9]{6}$` or `^l-[0-9]{6}$`), uniqueness across the vault, counter-drift against `./scripts/allocate-address.sh --peek`, and consistency with `.raw/.manifest.json` `address_map`. Post-rollout pages (frontmatter `created:` >= the vault's rollout baseline) that lack an `address:` field are lint **errors**. Legacy pages are informational.
|
||||
8. **DragonScale Mechanism 3 — Semantic Tiling** (opt-in; see detection below). If `scripts/tiling-check.py` is present AND `./scripts/tiling-check.py --peek` exits 0, delegate to it with `--report wiki/meta/tiling-report-YYYY-MM-DD.md`. Surface exit codes 0/2/3/4/10/11 distinctly — do not collapse into "unknown".
|
||||
|
||||
## DragonScale feature detection
|
||||
|
||||
Both items 7 and 8 are opt-in. Before running them:
|
||||
|
||||
```bash
|
||||
[ -x ./scripts/allocate-address.sh ] && [ -f ./.vault-meta/address-counter.txt ] && DRAGONSCALE_ADDR=1 || DRAGONSCALE_ADDR=0
|
||||
[ -x ./scripts/tiling-check.py ] && command -v python3 >/dev/null 2>&1 && DRAGONSCALE_TILE=1 || DRAGONSCALE_TILE=0
|
||||
```
|
||||
|
||||
If the vault has not adopted DragonScale, skip items 7 and 8. The other checks still run.
|
||||
|
||||
Full procedure, schema for the `## Address Validation` and `## Semantic Tiling` sub-sections of the lint report, and banded-threshold behavior are documented in `skills/wiki-lint/SKILL.md`. This agent follows that skill spec.
|
||||
|
||||
## Output
|
||||
|
||||
Create a lint report at `wiki/meta/lint-report-YYYY-MM-DD.md`.
|
||||
|
||||
Use this structure:
|
||||
```
|
||||
## Summary
|
||||
- Pages scanned: N
|
||||
- Issues found: N (N critical, N warnings, N suggestions)
|
||||
|
||||
## Critical (must fix)
|
||||
[dead links, missing required frontmatter]
|
||||
|
||||
## Warnings (should fix)
|
||||
[orphan pages, stale claims, large pages over 300 lines]
|
||||
|
||||
## Suggestions (worth considering)
|
||||
[missing pages for frequently mentioned concepts, cross-reference gaps]
|
||||
```
|
||||
|
||||
List each issue with:
|
||||
1. The affected page (wikilink)
|
||||
2. The specific problem
|
||||
3. A suggested fix
|
||||
|
||||
Do not auto-fix anything. Report only. The user reviews the report and decides what to fix.
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
description: Bootstrap or check the claude-obsidian wiki vault. Reads the wiki skill and runs setup workflow.
|
||||
---
|
||||
|
||||
Read the `wiki` skill. Then run the setup workflow:
|
||||
|
||||
1. Check if Obsidian is installed. If not, offer to install it (see `skills/wiki/references/plugins.md`).
|
||||
2. Check if this directory has a vault (look for `.obsidian/` folder). If yes, report current vault state.
|
||||
3. Check if the MCP server is configured (`claude mcp list`). If not, ask if the user wants to set it up.
|
||||
4. Ask ONE question: "What is this vault for?"
|
||||
|
||||
Then build the entire wiki structure based on the answer. Don't ask more questions. Scaffold it, show what was created, and ask: "Want to adjust anything before we start?"
|
||||
|
||||
Examples of what the user might say:
|
||||
- "Map the architecture of github.com/org/repo"
|
||||
- "Build a sitemap and content analysis for example.com"
|
||||
- "Track my SaaS business — product, customers, metrics, roadmap"
|
||||
- "Research project on [topic] — papers, concepts, open questions"
|
||||
- "Personal second brain — health, goals, learning, projects"
|
||||
- "Organize my YouTube channel — transcripts, topics, tools mentioned"
|
||||
- "Executive assistant brain — meetings, tasks, business context"
|
||||
|
||||
If the vault is already set up, skip to checking what has been ingested recently and offering to continue where things left off.
|
||||
Reference in New Issue
Block a user