| name | capture |
| description | Capture ideas, tasks, notes, research, and decisions into the second brain. Use whenever the user dictates a raw idea, shares a thought, asks to capture something, says '/capture', pastes a link or transcript, or provides any unstructured input that should be classified and stored. Also triggers on: 'brain dump', 'quick thought', 'remember this', 'log this', 'save this idea', 'note to self'. |
Capture Skill
You are the ingress layer of the second brain. Take raw, messy input and turn it into structured knowledge in the vault.
Read the yaml config block in CLAUDE.md first — owner name, streams list, confidence thresholds, and whether a cloud mirror is enabled all come from there. Never hardcode these values.
Pipeline
Raw Input → Parse → Classify each item → Confidence check → Confirm → Write to Vault → (Mirror, if enabled) → Compile (index + related + log + stream) → VERIFY CHAIN
This pipeline auto-chains. Once confirmed, all remaining steps run as one unbroken sequence — never stop after writing the vault file. The only legitimate pauses are content decisions (low confidence, duplicates, ambiguity). A capture without a verified chain receipt (Step 8) is an incomplete capture.
Step 1: Parse the Input
Inputs are often raw dictation — run-on sentences, multiple ideas crammed together, shorthand, half-finished thoughts. Figure out how many discrete items are in the input.
Split when:
- Topic shifts ("also...", "oh and...", "another thing...")
- Different action types mixed (idea + task + note)
- Different streams/projects referenced
Don't split:
- A single thought with supporting context
- A task with its rationale
- An idea with examples
Multilingual input: if the owner captures in more than one language:
- Write title and summary in one consistent language (default English, for uniform vault search)
- Keep the original text exactly as dictated in the "Original Input" section (preserves nuance)
- Add
original_language: xx to frontmatter
- When searching for connections, match concepts across languages
Step 2: Classify Each Item
For each discrete item, produce this classification:
{
"title": "string (max 8 words, descriptive)",
"type": "idea | task | research | note | decision",
"stream_id": "one of the stream ids from the CLAUDE.md config block | null",
"confidence": 0.0-1.0,
"entities": ["people", "projects", "technologies"],
"priority": "p0_urgent | p1_important | p2_normal | p3_someday",
"action_required": true/false,
"summary": "1-2 sentence distillation"
}
Type rules:
idea → new product, feature, capability, or concept
task → actionable item with a clear next step
research → external knowledge, articles, references, data points
note → meeting note, reflection, journal entry, observation
decision → a decision that was made (record for future reference)
Confidence:
- 0.9+ → crystal clear
- 0.7–0.89 → pretty sure, minor ambiguity
- 0.5–0.69 → could go either way
- < 0.5 → genuinely unsure, flag for review
Stream detection — map each item to the closest stream from the config block, using each stream's name and the keywords in its vault/streams/{stream_id}.md context file. If no match → stream_id: null. If multiple match → pick primary, note secondary in tags.
Sensitive-content check — if the owner's config or SOUL.md marks a stream as confidential (e.g., a day-job stream), obfuscate BEFORE showing the confirmation: people → [Role], organization names → [Org-X], figures → [significant value]. Add obfuscated: true to frontmatter. Show the obfuscated version — if it reveals too much, the owner will correct.
Step 3: Present Classification for Confirmation
Check autonomy level first. Read vault/AGENTS.md → Skill Registry → capture row → Autonomy column.
If Advisor (default):
Show a compact summary and wait:
Captured 2 items:
1. "Add referral program to side project" — idea (0.85) → ideas/
my-side-project / P1
2. "Review quarterly budget" — task (0.92) → tasks/
personal-finance / P2
Confirm to store, or tell me what to change.
Wait for explicit confirmation before writing. This gate is mandatory at Advisor level.
If Partner:
Items with confidence ≥ flag_review: store immediately, then show a post-capture summary. Items below flag_review: still hold and ask — the safety floor applies at every autonomy level.
Step 4: Write to the Vault (PRIMARY)
After confirmation, create a markdown file.
| Type | Vault Folder |
|---|
idea | vault/ideas/ |
task | vault/tasks/ |
research | vault/research/ |
note | vault/notes/ |
decision | vault/notes/ |
Filename: YYYY-MM-DD-slugified-title.md
File format:
---
type: idea
date: YYYY-MM-DD
status: New
priority: p1_important
stream_id: my-side-project
confidence: 0.85
entities: [referral, growth]
action_required: false
tags: [idea, my-side-project]
---
# Title
## Summary
One-two sentence distillation.
## Original Input
> [exact original text, verbatim]
## Related
[[my-side-project]] [[other-related-note]]
---
_Captured: YYYY-MM-DD HH:MM | Source: [channel]_
Wikilinks: link to the stream hub, any entities with existing pages, and any related vault notes (check vault/index.md first).
Duplicate detection: before creating the file, check the index and the target folder for similar titles. If a near-match exists, flag: "This looks similar to [[existing-note]]. Store as new or update the existing one?"
Step 5: Mirror Write (OPTIONAL — only if enabled)
Check integrations.cloud_mirror in the CLAUDE.md config block.
- If
none (default): skip this step entirely.
- If enabled (e.g.,
notion): create a page in the mapped database from integrations.cloud_mirror_databases, then write the page ID back to the vault file's frontmatter (mirror_page_id: <id>).
No silent skips. If the mirror is enabled but unreachable, do NOT just move on: set mirror_page_id: PENDING in frontmatter and note mirror: deferred in the chain receipt and log line. /lint picks up PENDING items for later sync. A skipped write that leaves no trace is the failure mode this rule exists to prevent.
Step 6: Post-Capture Summary
Brief confirmation, nothing more:
Stored 2 items:
- "Add referral program to side project" → vault/ideas/
- "Review quarterly budget" → vault/tasks/
Step 7: Compile — Update Index + Related Pages (Karpathy pattern)
A single capture should touch multiple pages, not just create one file. This is the "compile" step that makes knowledge compound.
7a. Update vault/index.md
Add a row to the appropriate section:
| [[YYYY-MM-DD-slugified-title]] | YYYY-MM-DD | stream_id | One-line summary |
7b. Update related pages
Search the vault (via the index) for pages related to the new capture. For each related page (typically 1–3; don't force connections):
- Add a
[[wikilink]] to the new capture in its ## Related section
- Ensure the new capture links back (bidirectional)
7c. Append to vault/log.md
## [YYYY-MM-DD HH:MM] capture | "Item title" → vault/ideas/ (stream: my-side-project)
7d. Update the stream activity log
If stream_id is set, append to vault/streams/{stream_id}.md Activity Log:
| YYYY-MM-DD | idea: "Add referral program" (P1) | chat |
Step 8: Verify Chain (MANDATORY — capture is not done without this)
Before reporting completion, verify each link of the chain actually happened and emit a compact chain receipt:
Chain receipt — "Add referral program to side project"
vault OK | index OK | related (2) OK | log OK | stream OK | mirror n/a
Verification means checking, not remembering:
- vault — the file exists at the expected path
- index —
vault/index.md contains the new row (search for the filename)
- related — N related pages got reciprocal wikilinks (N=0 is allowed, but must be a decision, not an omission)
- log —
vault/log.md has the capture line
- stream — stream activity log updated (if
stream_id ≠ null)
- mirror — page created + ID written back, or explicitly
deferred/n/a
If any check fails, fix it immediately — do not report success with a broken chain. Rationale: rules that aren't enforced by the skill die silently. This step is the enforcement.
Edge Cases
URL input: fetch and summarize the content first, then classify. URL goes in source_url frontmatter. If the full content is worth keeping, save a verbatim copy to vault/raw/ and reference it via source_file.
Audio/voice input: if a transcription tool is available, transcribe BEFORE classification; the transcript goes to vault/raw/ (immutable), the classified capture references it via source_file. If no tool is available, ask the owner to paste the text.
Decision-type items: in addition to the vault file in vault/notes/, append a DEC-NNN entry to vault/DECISIONS.md (next unused number): date, decision, rationale, status ACTIVE. If it supersedes an earlier decision, add supersedes: DEC-NNN and mark the old entry SUPERSEDED — never delete or rewrite old entries. Add decisions OK to the chain receipt.
Multi-stream input: if one thought spans streams, pick the primary stream and note the secondary in tags; link both stream hubs.
Empty/unclear input: "I couldn't extract a clear item from this. Could you rephrase?" Don't store noise.