From ai-brain-starter
Interactive wizard configures vault document types by detecting existing ones via grep, enabling extractors for notes like journals/books/meetings/clients/podcasts, and scaffolding custom extractors. Run post ai-brain-starter install or for new types.
npx claudepluginhub adelaidasofia/ai-brain-starter[--add <typename> | --list | --remove <typename>]This skill uses the workspace's default tool permissions.
Figure out which doc types belong in this vault, then wire the right extractors.
Extracts structured metadata from typed vault files (books, meetings, people, etc.), optionally runs knowledge-graph extraction, applies wikilinks, and surfaces cross-type insights. Use to map your second brain or refresh vault index.
Initializes any folder as a Bedrock-powered Obsidian vault by creating entity directories, copying templates, configuring language/domain taxonomy, scaffolding example entities, and checking dependencies. Use for 'bedrock setup' or new vault bootstrapping.
Guides interactive wizard to set up Obsidian second brain vault using LLM Wiki pattern: vault name, location, domain, agent configs (Claude Code, Cursor, etc.), CLI tools. Triggers on 'second brain', 'initialize vault', 'onboard'.
Share bugs, ideas, or general feedback.
Figure out which doc types belong in this vault, then wire the right extractors.
/second-brain-mapping ships with 18 extractors. You probably don't need all of them. This wizard:
No "start small" suggestion. You get all the capability for the types you have.
Scan the vault for files already declaring type: in frontmatter:
cd "$(vault-root)"
grep -rh "^type:" --include="*.md" -I . 2>/dev/null \
| sed 's/^type:\s*//' | sort | uniq -c | sort -rn | head -30
Tell the user: "Your vault already has these types declared: …"
Present this list, ask user to pick any/all that apply:
Core journaling & reflection:
[ ] journal — daily reflection / gratitude / mood
[ ] daily_log — task-log style (Roam/Capacities daily)
[ ] goal — OKRs, quarterly plans, vision docs
Reading & learning:
[ ] book — book notes, highlights, reviews
[ ] article — saved essays, blog posts, long reads
[ ] concept — evergreen concept notes (PKM backbone)
People & relationships:
[ ] person — CRM / contact notes
[ ] meeting — 1:1s, team syncs, call notes
Creative & publishing:
[ ] writing_draft — blog drafts, book chapters, newsletters
[ ] talk — speaking engagements, workshops given
Work & business:
[ ] business — pitches, memos, client docs, investor updates
[ ] strategy — strategic plans, frameworks, bets
[ ] negotiation_prep — deal prep, BATNA docs
[ ] company — entity notes (past/current ventures)
[ ] ai_chat — saved AI conversations (Claude, GPT, etc.)
[ ] playbook — SOPs, step-by-step guides
Lifestyle:
[ ] travel — trip notes, restaurants, places visited
Assets & reference:
[ ] asset — brand files, logos, templates
[ ] reference — cheat sheets, quick-lookup docs
Custom:
[+] Add your own type
For each checked type, symlink its extractor into the vault's scripts/extractors/ dir. Leave unchecked types uninstalled — no wasted files.
VAULT="$(vault-root)"
STARTER="$HOME/.claude/skills/ai-brain-starter" # or wherever it's installed
for type in ${SELECTED_TYPES[@]}; do
ln -sf "$STARTER/scripts/extractors/$type.py" "$VAULT/scripts/extractors/$type.py"
done
# Always install base + dispatcher
ln -sf "$STARTER/scripts/extractors/_base.py" "$VAULT/scripts/extractors/_base.py"
ln -sf "$STARTER/scripts/extractors/_dispatcher.py" "$VAULT/scripts/extractors/_dispatcher.py"
ln -sf "$STARTER/scripts/extractors/schemas.yaml" "$VAULT/scripts/extractors/schemas.yaml"
Prompt for:
podcast_episode, client_project)podcast_episode: guest_name, episode_number, record_date_iso, topics, pull_quotes_verbatim)Generate the extractor scaffold:
# scripts/extractors/<typename>.py
from _base import count_words, iso_date_from, extract_section, wikilinks_in, ExtractionResult
AUTO_FIELDS = ("<field1>", "<field2>", ...)
def extract(filepath, body, fm, context):
fields = {
"<field1>": ..., # TODO: user fills in extraction logic
"word_count": count_words(body),
}
return ExtractionResult(fields, AUTO_FIELDS, auto_fields=AUTO_FIELDS)
Also append the new type to schemas.yaml:
<typename>:
folder_hint: "<user-provided>"
fields:
- <field1>
- <field2>
...
Tell the user: "I scaffolded the extractor. Open scripts/extractors/<typename>.py and fill in the regex/section-parsing logic for each field. Then run /second-brain-mapping --type <typename> to test."
Offer to run /second-brain-mapping --metadata-only --dry-run to preview what would get extracted. If they agree, run it and report the counts per type.
After first real run, show them 3-5 Dataview queries they can now run on their data. Use the example_query field from schemas.yaml for each type they enabled. Example:
Now that you've extracted book metadata, try this query on any note:
```dataview
TABLE book_author, book_rating_1_5, book_themes
FROM "<your-books-folder>"
WHERE book_rating_1_5 >= 4
SORT book_rating_1_5 DESC
## Non-negotiables
- No "start small" recommendation. The user gets all capability for their doc types.
- No fabricated types. Only types they've confirmed they actually have, or scaffolds for custom types they explicitly name.
- Every custom extractor starts as a scaffold, not a guess. The user fills in the extraction logic.
- Idempotent: re-running `/setup-vault-types` doesn't break existing configuration — just updates the symlinks.
## Related skills
- `/second-brain-mapping` — runs the full extraction + insight pipeline. Use this AFTER setup.
- `/graphify` — optional Phase 2 of second-brain-mapping. Expensive, opt-in.