CLI Command Matrix
Loaded on demand from SKILL.md. One row per subcommand: purpose, inputs, and the JSON shape written to stdout. Errors are JSON on stderr with a non-zero exit code.
| Command | Purpose | Input | Output (JSON) |
|---|---|---|---|
init |
Create wiki structure | vault path | {"status": "ok"|"already_initialized", "created": [...]} |
scan |
Classify sources as new/modified/deleted | vault path | {"version": 1, "vault": "...", "stats": {...}, "new": [...], "modified": [...], "deleted": [...]} |
plan |
Split pending sources (new+modified) into batches; write task report to wiki/_archived/ingest-tasks.md |
vault path, --batch-size (default 20), --resume |
{"ok": true, "total": N, "batch_size": N, "report": "...", "resumed": bool, "batches": [{"id": 1, "status": "pending", "count": N, "items": [...]}]} |
batch-done |
Mark a round complete after verifying every doc in it was cache-put |
vault path, --batch |
{"ok": true, "batch": N, "remaining": [...], "complete": bool} or {"error": "batch_incomplete", "missing": [...]} |
cache-get |
Query cache entry | source relative path | {"path": "...", "sha256": "...", ...} or {"path": "...", "status": "absent"} |
cache-put |
Record ingest completion | source path, topic list | {"ok": true, "path": "...", "sha256": "..."}; topic paths outside wiki/topics/ → {"error": "invalid_topic_path"} |
cleanup |
Remove deleted sources from topics | vault path | {"removed": N, "archived": M, "details": [...], "errors": [...]} |
status |
Wiki health metrics (read-only). index_stale is true when any page is newer than the index file or the indexed page set no longer matches disk (deleted topics) |
vault path | {"vault": "...", "sources_tracked": N, "topics_total": N, "topics_orphaned": N, "errors": [...], "index_exists": bool, "index_topics": N, "index_stale": bool, "index_errors": [...], "batch": {...}|null, "quality_distribution": {...}, "featured_count": N, "aliases_count": N, "backlinks_max": N, "gaps_count": N, "wanted_count": N, "stale_count": N, "site_exists": bool, "site_stale": bool, ...} |
index |
Rebuild wiki/.wiki-index.json from topic frontmatter (no .base written); --incremental reuses entries whose file mtime is unchanged, other files parse in parallel |
vault path, --incremental |
{"ok": true, "topics": N, "errors": [...]} |
normalize-source-type |
Rewrite each topic's source_type frontmatter to its sources[] file format (in place; no-source topics skipped) |
vault path | {"ok": true, "changed": [{"path": "...", "source_type": "..."}], "skipped": N, "errors": [...]} |
gen-base |
Rebuild the index, then write Obsidian Bases views (index + master table) | vault path, --name |
{"ok": true, "prefix": "...", "written": [...]} |
save-report |
Register an Agent-authored research report under wiki/queries/, ensure kind: query, log it |
name, vault path | {"ok": true, "path": "queries/<name>.md", "kind": "query"} |
gen-canvas |
Generate per-topic JSON Canvas 1.0 graph(s) under wiki/graphs/ from the index (topic center + sources[] ring + 1-hop neighbor topics) |
vault path, --topic <name> or --all |
{"ok": true, "path": "wiki/graphs/<name>.canvas", "nodes": N, "edges": M} or {"ok": true, "written": [...], "count": K} |
gen-home |
Build/refresh the wiki/index.md skeleton + one managed "工作区" block (Dataview card grid when detected, else static list); refreshes only the managed block on re-run (agent prose preserved); never touches index.base. Writes atomically; --emit-only renders the content to stdout without writing, so the Agent can perform the write over MCP |
vault path, --cards auto|on|off (default auto), --emit-only |
{"ok": true, "path": "wiki/index.md", "cards": bool, "write_via": "atomic"}; with --emit-only: {"ok": true, ..., "write_via": "none", "obsidian_path": "...", "content": "..."} |
extract-authors |
Raw 作者 row per topic source note (read-only) | vault path | {"ok": true, "topics": {"<topic>.md": [{"src": "...", "file": "...", "authors": "..."}]}} |
aggregate-authors |
Deduplicated first author per topic for frontmatter backfill (read-only) | vault path | {"ok": true, "authors": {"<topic>.md": ["作者1", ...]}} |
quality |
Compute quality tier distribution and metrics per topic (read-only) | vault path | {"ok": true, "tiers": {"<topic>.md": {"tier": "...", "metrics": {...}}}, "distribution": {"stub": N, ...}, "errors": [...]} |
coverage |
Identify covered sources vs gaps (read-only) | vault path | {"ok": true, "covered": N, "gaps": [{"path": "..."}], "coverage_ratio": 0.0-1.0} |
keywords |
Inventory keywords across topics, frequency-descending, plus uncategorized topic keys — the input for the Agent to derive subject categories (read-only) | vault path | {"ok": true, "keywords": [{"keyword": "...", "count": N, "topics": [...]}], "uncategorized": [...]} |
worklist |
Get maintenance worklists: wanted (missing dedicated pages), unresolved (ambiguous targets), review (source-changed topics/reports), and stale (low-quality/index-stale topics) (read-only) |
vault path | {"ok": true, "wanted": [{"target": "...", "inbound": N, "linked_from": [...]}], "unresolved": [{"target": "...", "candidates": [...], "linked_from": [...]}], "review": [{"path": "...", "kind": "topic"|"query", "reason": "source_changed"}], "stale": [{"path": "...", "tier": "...", "reason": "low_tier"|"source_changed"|"index_stale", "reasons": [...]}]} |
gen-site |
Generate self-contained static HTML site under wiki/site/ (optional; requires markdown package; degrades gracefully to escaped plaintext if absent) |
vault path | {"ok": true, "pages": N, "out": "wiki/site", "degraded": bool, "errors": [...]} |
Global flags: --vault PATH (or AGENT_WIKI_VAULT), -v/--verbose (progress to stderr), --version.