This is Ted's personal Obsidian vault for knowledge management, reading notes, work documentation, and personal thoughts. Content is in both English and Chinese.
- Archive/ — Archived/inactive content. Contains
Entertainment/(hobbies, e.g., Mahjong reference notes). - Attachments/ — Media files (images, etc.) for general vault notes. Also contains
Excalidraw/(drawings and diagrams). Each Learning plan manages its own attachments underLearning/<CODE>/Attachments/ - Inbox/ — Fleeting notes capture. Quick thoughts from any source (reading, work, life). Processed weekly into Zettelkasten or deleted.
- Zettelkasten/ — Permanent notes. Each note is one atomic idea in your own words, linked to other zettel via
Related::field. Frontmatter includestopics(list of keywords for filtering). - Learning/ — Structured learning plans, book reading, and skill training. Each plan lives in a subfolder named by its code (e.g.
Learning/AISA/). Contains00_plan.md(goals, phases, timeline),00_map.md(concept map),Weeks/(weekly logs),Courses/,Projects/, andAttachments/(plan-specific media). The folder name is the plan identifier — used as shorthand in all commands (/learning-log AISA). Also containsBooks/(book reading workflow — seeLearning/Books/CLAUDE.md) andTraining/(skill builder resources, related to Home Skills tab in the Work section). Managed via/learning/learning-init,/learning/learning-log,/learning/learning-review. - Note/ — Persistent quick-reference notes (credentials, demo setups, etc.). Unlike Inbox (which is processed weekly), these stay as-is for easy access.
- Matter/ — Article notes from Matter app. DO NOT MODIFY / DO NOT MOVE — synced by Matter plugin, folder path is fixed.
- Instapaper Notes/ — Saved article highlights from Instapaper. DO NOT MODIFY / DO NOT MOVE — synced by Instapaper plugin, folder path is fixed.
- Feeds/ — Auto-generated content feeds.
AI-Daily/contains daily AI news digests (中英文) generated by Shell Commands plugin on Obsidian startup.GitHub-Trending/contains daily GitHub trending repos digests (中英文) generated via Claude Code skill command. - Podcasts/ — Podcast episodes managed by the podcast pipeline.
episodes/contains episode notes (summary, transcript, audio embed).audio/contains .mp3 and .srt files (Media Extended plugin provides synced playback + subtitle on desktop).Podcasts.mdis the AI-powered recommendation dashboard. Managed via/feeds/podcast. Seescripts/podcast/docs/for full architecture. - scripts/ — Vault automation scripts.
ai-digest/— Hybrid Python + Claude Code RSS digest pipeline. Python fetches 92 Karpathy-curated feeds and deduplicates (fetch.py), then Claude Code CLI scores and summarizes bilingually (prompts/score.md,prompts/summarize.md), and Python assembles Obsidian markdown reports (write_reports.py). Run viabash scripts/ai-digest/run.sh.github-trending/— GitHub trending repos pipeline. Python fetches trending repos via GitHub Search API (fetch.py), Claude Haiku categorizes and scores with bilingual one-liners (enrich.py,prompts/enrich.md), and Python assembles Obsidian markdown reports (write_reports.py). Run viabash scripts/github-trending/run.sh.podcast/— Podcast pipeline. Python fetches RSS feeds and downloads audio (fetch.py), mlx-whisper transcribes locally with timestamps (transcribe.py), Claude Haiku scores and generates bilingual summaries (enrich.py), and Python generates Obsidian episode notes with embedded audio + transcript (write_notes.py). Lifecycle management auto-archives and cleans up old audio. Run viabash scripts/podcast/run.sh.
- Profile/ — Personal assessment and self-development. Contains
Personal Baseball Card.md(Ray Dalio-inspired Baseball Card with PrinciplesYou assessment + self-evaluation + cross-validation), PrinciplesYou assessment PDF, and profile photo. The Baseball Card is displayed onHome.mdvia a radar chart in the Work section's Card tab. - Templates/ — Note templates for all major workflows (Work Daily, Work Project, Learning Plan, Learning Week, Brownbag Session, Zettel, Inbox, Home backup, Work Dashboard/Weekly/Monthly backups).
- system/ — Module registry and control center. Each vault feature is a "module" with a standardized manifest in
system/modules/. Thesystem/registry.mdis a Dataview-powered dashboard showing all modules, their status, commands, dependencies, and configuration locations. When adding a new feature, create a module file first — seesystem/README.mdfor the workflow. - WeRead/ — Book highlights synced from WeRead (微信读书). DO NOT MODIFY / DO NOT MOVE — this folder is auto-synced by plugin, folder path is fixed.
- Work/ — Work documentation, organized by year and project
archive/— Past years and completed projects2026/— Current year daily notes (YYYY-MM-DD.md)Projects/— Project pages (one per project, created from template)Brownbag Sessions/— Brownbag session plans. Each session lives in its own subfolder (e.g.,Brownbag Sessions/Bedrock Cost Optimization/). Each session has a uniqueid(BB-1, BB-2, ...),createddate, and acceptance criteria checklist (## 验收标准). Status is auto-inferred from the checklist: all unchecked → planning, partially checked → in-progress, all checked → done. Created via/brownbag/brownbag <topic>. Index atBrownbag Sessions/Brownbag Sessions.md. Shared assets (e.g., slide templates) stay at theBrownbag Sessions/root.
- GETTING_STARTED.md — Onboarding guide for new users. Start here if you're setting up this vault for the first time.
- Home.md — Dashboard using Dataview queries. Avoid modifying unless asked. Uses pill/segment tab UI: Work section has
[Work | Card]tabs (Card shows Baseball Card radar chart with holographic effect); Feeds section has[AI Digest | GitHub Trending]tabs. - sortspec.md — Custom file explorer sort order (Custom File Explorer Sorting plugin). Do not delete.
- Work/Work Dashboard.md — Work dashboard with task views and project summary.
- Templates/Work Daily.md — Template for daily work notes.
- Templates/Work Project.md — Template for project pages.
- Templates/Learning Plan.md — Template for
00_plan.md(learning plan goals and phases). - Templates/Learning Week.md — Template for weekly learning logs (
Weeks/YYYY-WXX.md). - Templates/Brownbag Session.md — Template for brownbag session plans (used by
/brownbagcommand). - Templates/Home.md — Reference backup + design decisions log for
Home.md(note-creation button, toolbar design). - Templates/Work Dashboard.md — Reference backup + design decisions log for
Work/Work Dashboard.md. - Templates/Work Weekly View.md — Reference backup + design decisions log for
Work/Weekly View.md. - Templates/Work Monthly View.md — Reference backup + design decisions log for
Work/Monthly View.md.
- Frontmatter: Notes use YAML frontmatter for metadata (author, tags, dates, status, etc.)
- Links: Use
[[wikilinks]]for internal linking - Language: Mix of English and Chinese — match the language of the content being worked on
- Formatting: Use headers (##), callouts (
> [!tip]), blockquotes, and lists. Follow existing patterns in the vault. - Attachments: Place images/media in
Attachments/. Exception: Learning plan assets (screenshots, diagrams, etc.) go inLearning/<CODE>/Attachments/ - New notes: Place in the appropriate existing folder. If unsure, use
Inbox/ - Zettel notes: One idea per note, written in your own words (not copy-paste). Use
[[wikilinks]]in theRelated::field to connect to other zettel. Title should be a descriptive statement (e.g., "Distributed systems trade consistency for availability"). - Inbox notes: No format required. Just capture the thought. Run
/zettelkasten/inbox-reviewweekly to process: convert to zettel or archive toInbox/archive/YYYY-MM/. - Project tasks: Group tasks under
### ProjectNameheadings in daily notes (e.g.,### IS2,### IFM). The heading name must match the filename inWork/Projects/. Dataview queries uset.section.subpathto filter tasks by project. - Daily note H1: Use
# DayNameonly (e.g.,# Tuesday). The date is already in the filename anddate:frontmatter — repeating it in the H1 is redundant. BothTemplates/Work Daily.mdand the Home.md note-creation button follow this format. - Dataview tag filtering: Use
p.file.tags.includes("#tag")(notp.tags) in dataviewjs queries for reliable tag matching. - Dashboard template sync: When editing
Work/Work Dashboard.md,Work/Weekly View.md, orWork/Monthly View.md, update the correspondingTemplates/Work *.mdreference file and bump itsupdated:frontmatter date. Append a new dated> [!note]entry to the Design Decisions section when making structural changes.
Dataview, Kanban, Calendar, Excalidraw, Tag Wrangler, Table Editor, Footnotes, Mind Map, Homepage, Hider, Style Settings, URL into Selection, WeRead, Plugin Update Tracker, Custom File Explorer Sorting, Spaced Repetition, Shell Commands, Media Extended
All vault features are tracked as modules in system/modules/. See system/registry.md for the live dashboard.
Commands are organized by module in .claude/commands/:
.claude/commands/
├── zettelkasten/ # /zettelkasten/zettel, /zettelkasten/retro, ...
├── work/ # /work/daily, /work/project, ...
├── learning/ # /learning/learning-init, ...
├── feeds/ # /feeds/ai-digest, /feeds/github-trending
├── brownbag/ # /brownbag/brownbag
├── vault-ops/ # /vault-ops/organize, /vault-ops/backup, ...
└── module-toggle.md # /module-toggle (global)
Each module has an enabled field in system/modules/<name>/module.md:
enabled: true— module active, all commands and automations run normallyenabled: false— module disabled:- Commands: Each command file has a guard that checks
enabledand refuses to run - Hooks:
upgrade-zettel-status.pychecks zettelkasten module status before executing - Pipelines:
run.shscripts check their module status before executing
- Commands: Each command file has a guard that checks
Toggle a module: Use /module-toggle <name> (e.g., /module-toggle feeds-ai-digest)
Each module declares external dependencies via the requires frontmatter field:
| Sub-field | What it checks | Example |
|---|---|---|
cli |
CLI tools on PATH | [claude, git] |
python |
Python minimum version | ">=3.13" |
pip |
Python packages | [aiohttp] |
plugins |
Obsidian plugin IDs | [dataview, obsidian-shellcommands] |
env |
Environment variables | {ANTHROPIC_API_KEY: "description"} |
/module-toggle checks all requires when enabling a module and blocks if hard prerequisites are missing.
- Create module manifest:
system/modules/<name>/module.mdwithenabled: true - Create command files in
.claude/commands/<module>/with module guard at top - Create templates/scripts as needed
- The registry auto-discovers the module via Dataview
- Update this file (CLAUDE.md) if the feature affects vault structure
- Check
system/registry.mdfor dependency/impact analysis - Make changes
- Update the module file's frontmatter (
updateddate, any changed fields)
- NEVER modify or move
WeRead/,Matter/,Instapaper Notes/— these are plugin-synced folders with fixed paths - Preserve existing frontmatter when editing notes
- When adding wikilinks, only link to notes that exist or that you are creating
- Keep the vault organized — use existing folders before creating new ones
- Match the language of the source content (English or Chinese)
- New features must have a module file in
system/modules/— create it before or alongside implementation
See Learning/Books/CLAUDE.md for the full reading workflow.
When working inside the Learning/Books/ folder, that file takes precedence for all book-related tasks.