Help the user set up afinance investment research-specific LLM Wiki(Karpathy mode): pure markdown files + [[wikilink]] interlinked + LLM-maintained, knowledge compounds with use.
But the core is not handing over an investment research template—it is guiding the user to distill his own way of making investment judgments into his own CLAUDE.md.
★ Read this first (the soul of this skill)
Everyone builds their own CLAUDE.md in their own language, with their own investment preferences.
Two investors looking at the same company may care about completely different things—one looks at "whether next quarter's orders can beat market expectations," the other at "management's tone and confidence on the earnings call."Giving them the same template erases the very thing that makes the wiki useful.
- ✅ Your job = interview the user → distill his dimensions of concern → usehis wordsto write into CLAUDE.md
- ❌ Your failure = applying a "standard investment research schema" for him to fill in, or having him copy
examples/
examples/investment-research-CLAUDE.md iswhat one person grew into, show the user the possibilities,copying is forbidden. If it gets carried off like a template, this skill has failed.
Red lines not to touch (Karpathy's original intent, don't over-engineer)
Pure markdown + wikilink.Don't use retrieval to replace compilation: knowledge compounds by being pre-compiled into structured pages, not by re-retrieving raw documents on every query—this is the fundamental difference between this mode and RAG, and also Karpathy's core idea. The search layer is not off-limits: his gist states that a hundred or so sources are enough with index.md , and that once the wiki grows it needs proper search, and names qmd (local BM25 + vectors + reranking)—what is searched is the compiled wiki pages, not replacing compilation with fragments of raw documents. Don't add mechanisms like knowledge graph / automatic health-check (some community versions add them; that is over-engineering).
Mechanism layer vs rule layer (a distinction that runs throughout)
| Content | Handling | |
|---|---|---|
| Mechanism layer | Three-layer directory + wikilink + lint + git hook | ✅ General engineering structure,scripts/init_vault.py install directly |
| Rule layer | Which dimensions to look at / how to record views / whether to attribute to analysts / how to review / whether you want long reports or three lines | ❌ The user's investment brain,grown through interviews, never give a template |
Copying the mechanism layer is fine (it is the engineering hygiene of Karpathy mode, unrelated to "how you invest"). Copying the rule layer = betraying the methodology.
Workflow
Phase 0 — Determine intent
- New vault → Phase 1
- Existing vault,ingest a source → directly read
references/ingest_sop.md - Existing vault,review a target after earnings →
references/fulfillment_sop.md - query → read the vault's
index.md+ related pages, synthesize an answer with citations; feed good answers back into synthesis
Phase 1 — scaffold the mechanism layer
python scripts/init_vault.py <目标目录>
Create an empty skeleton (three-layer directory + lint + hook placeholders + empty index/log + CLAUDE skeleton).This step only installs the mechanism layer and writes no schema.
Phase 2 — Interview to co-create CLAUDE.md ★core step
Read references/interview.md, interview the user one by one along its 8 dimensions, and write the answers inhis own wordsinto the placeholder of the <vault>/CLAUDE.md rules layer.
- Ask about one dimension at a time, don't dump them all at once
- Dimensions the user doesn't care aboutcut directly(minimal > comprehensive)
- Only when stuck, flip through
examples/for inspiration, and say explicitly "don't copy, pick what resonates with you" - Self-check: does the finished CLAUDE.md feel like "this person"?If it looks like a generic template, start over
Phase 3 — Enable anti-rot
cd <vault> && git init
git config core.hooksPath .githooks # local 配置,换机/重 clone 要重设
PYTHONUTF8=1 uv run --no-project --with pyyaml python3 scripts/lint-vault.py wiki # 确认绿灯
Existing vault — refresh the mechanism-layer tools
After updating this skill, explicitly refresh the linter and hook that were copied into the vault:
python scripts/init_vault.py --refresh-tools <vault>
Only update scripts/lint-vault.py and .githooks/pre-commit, don't touch wiki/、raw/ or the user's CLAUDE.md. When a file has changed, first keep a .before-refresh backup; if the backup already exists, fail-fast — review and move away the old backup before rerunning.
Phase 4 — First ingest demo
Take one of the user'sreal source(research report / earnings call / meeting notes), and walk through the HITL 5 checkpoints per references/ingest_sop.md , so he can see with his own eyes how the wiki grows out of the source.Use the user's own material, not examples.
Ongoing operations (read references as needed)
| Scenario | Read |
|---|---|
| ingest new source | references/ingest_sop.md(doc_type uses the user's own classification) |
| post-earnings review | references/fulfillment_sop.md(analyst backtests and tunes the analyst-track-record skill, don't reinvent it) |
| vault hygiene (derived-value drift) | references/prune_discipline.md |
| adversarial review of review pages | references/counter_review.md |
| how to interview and distill the user's investing brain | references/interview.md(the complete method from Phase 2) |
Why this skill is inline (no context: fork)
It needs to call the analyst-track-record skill (review backtesting), run Bash (scaffold / lint), and possibly run parallel Tasks to fetch earnings data — a subagent cannot call skills or spawn subagents, so it must be inline.
Next Step
Once the vault is set up and the user starts ingesting sell-side research reports, if he wants to backtest how accurate a certain analyst has been → suggest connecting the analyst-track-record skill (dual-dimension hit rate, with a validated script).