Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/ernestolee13/para-knowledge-base/kb-initnpx skills add ernestolee13/para-knowledge-base --skill kb-initgit clone --depth 1 https://github.com/ernestolee13/para-knowledge-baseWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/ernestolee13/para-knowledge-base/kb-init)<a href="https://agentmods.dev/skills/ernestolee13/para-knowledge-base/kb-init"><img src="https://agentmods.dev/badge/skills/ernestolee13/para-knowledge-base/kb-init.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00052 | $0.01534 |
| Opus 5 | $0.00026 | $0.00767 |
| Sonnet 5 | $0.00010 | $0.00307 |
| Haiku 4.5 | $0.00005 | $0.00153 |
Grade A, and why
kb-init scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 137 lines — stays where its author put it; the contents beside it link to each section on GitHub.
KB Init — PARA Knowledge Base Setup
Set up the Knowledge Base layer on an existing PARA-structured Obsidian vault.
What It Does
- Detect vault — find
.obsidian/and existing.para-kb/config.json - Detect structure — use configured, numbered, or unnumbered PARA roots without renaming folders
- Create portable config — write
.para-kb/config.jsonwithout an absolute vault path - Create indexes and log — only for missing files, unless the user explicitly requests replacement
- Install agent guidance — append a marker-bounded KB rules fragment to
CLAUDE.mdand/orAGENTS.md, preserving existing content - Detect Obsidian CLI — configure the preferred search/backlink path and fallback strategy
Prerequisites
An Obsidian vault with either numbered or unnumbered PARA folders. Numbered example:
Vault/
├── 0. Common/ (shared: daily notes, dashboard, etc.)
├── 1. Projects/ (active projects with deliverables)
├── 2. Areas/ (ongoing responsibilities, no end date)
├── 3. Resources/ (reference material by topic)
├── 4. Archive/ (completed or paused items)
└── Inbox/ (optional — raw input landing zone)
Standard unnumbered roots (Common/, Projects/, Areas/, Resources/, Archive/) are also supported. For another layout, create .para-kb/config.json from templates/para-kb.config.json and set para_roots explicitly. Inbox/ is optional in every profile.
Execution Flow
Step 1: Detect vault root and configuration
Find .obsidian/ directory → that parent is the vault root
If .para-kb/config.json exists → validate and use it as source of truth
Else detect numbered or standard PARA roots
If neither profile is unambiguous → stop before creating folders and request a custom config
Step 2: Create/adopt portable config
Resolve the bundled helper from ${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}
Run: python3 "$PARA_KB_PLUGIN_ROOT/scripts/para_kb_telemetry.py" init-config --profile auto
The config stores only vault-relative paths and never overwrites an existing valid config
With --config-only or --adopt → stop after config + agent guidance; do not rewrite notes or indexes
Step 3: Check existing state
If _index.md or index.md already exist:
Default → preserve and adopt them
--force-indexes → replace only after an explicit destructive confirmation
Never overwrite CLAUDE.md, AGENTS.md, .para-kb/config.json, or a human log wholesale
Step 4: Scan and generate _index.md per category
For each configured PARA directory:
List subdirectories and standalone .md files
Read overview files for status (0.*.md, *-Project.md, project-overview.md)
Generate _index.md:
- frontmatter: title, type: kb-index, updated: today
- summary line with counts
- one line per item: **name** — status/description
Target: 10-20 lines of content per index
Step 5: Generate top-level {common}/index.md
Aggregate from category indexes:
Projects: count + highlights
Areas: count + major areas
Resources: count + categories
Archive: completed/paused counts
Recent: placeholder for log entries
Target: ~30 lines
Step 6: Create {common}/log.md
Header + initial entry:
"[date] init | KB initialized | N index files created"
Step 7: Update agent guidance
Render templates/KB-RULES.md.template with configured roots and paths
If CLAUDE.md exists → append/update only the marker-bounded PARA KB section
If AGENTS.md exists → append/update only the same marker-bounded section
If neither exists → create the file appropriate to the active host from its wrapper template
Never replace unrelated instructions in either file
Shared rules include:
Vault structure description
KB operation rules (ingest/query/lint)
Project lifecycle summary (promotion, durable-knowledge capture, decompose-before-archive — see templates/CLAUDE.md.template)
Tag conventions (#proj/, #type/, #topic/)
Wikilink rules
Index management rules
Step 8: Detect tooling
which obsidian → if found:
Run: obsidian version
Run: obsidian tags sort=count counts limit=20
Log "obsidian CLI v{version} detected — search, backlinks, tags available"
Record existing tag conventions for future ingest/lint use
If not found:
Log "obsidian CLI not available — using grep/glob fallback"
Note: All skills fully functional without CLI
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago First seen · 137 lines · 52 tokens per session scan A c32b5ee25a33
kb-init is a skill published in the GitHub repository ernestolee13/para-knowledge-base (21 stars, last pushed 27d ago), licensed MIT. It adds 52 tokens to every session and 1,534 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
llm-wiki
Build and maintain a persistent, interlinked Obsidian-compatible markdown wiki using Karpathy's LLM Wiki pattern. Extension-backed with auto-generated metadata, guardrails, and 14 custom tools (+3 opt-in agent-trajectory tools).
compile-wiki
Merge source summaries into durable concept pages with backlinks, index entries, and explicit open questions.
lint
Run the LLM Wiki health check: orphans, broken links, contradictions, stale pages, index sync, MOC coverage, frontmatter fields, Exploration Gate, v5 verification fields, Bias Check, cross-vault links, and Core Context freshness; also responds to /lint and 위키 점검.
refresh-context
Re-snapshot Core Context.md from the 9 mothership system files and key essays when the mothership changes or the snapshot is older than 30 days; also responds to /refresh-context and 코어 컨텍스트 갱신.
ingest-sources
Review newly ingested raw sources and draft or update source summary notes in notes/Sources/.
status
Show the LLM Wiki state at a glance: counts, recent activity, index drift, inbox backlog, collectionPurpose/mainVault/explored/verificationStatus coverage, and Core Context snapshot age; also responds to /status and 상태 점검.