process-inbox
Ingest operation. Each inbox item compiles into the wiki: routed to PARA, cross-linked into 10–15 related pages, logged, deleted.
When to use
- User runs
/process-inbox. - User asks to “process the inbox”, “drain the inbox”, “ingest today’s notes”.
- Scheduled daily routine fires.
Workflow
Sources this skill drains (all of 0_Inbox/):
0_Inbox/transcripts/*.md— raw Whisper transcripts. Pre-processed via theaudio-inboxskill (see Phase 0 below), which cleans them into0_Inbox/root.0_Inbox/*.md(root) — cleaned voice-memo notes (produced byaudio-inbox, either in a previous run or in Phase 0 of this run).0_Inbox/notes/*.md— small typed notes the user jots during the day.0_Inbox/Clippings/*.md— Obsidian Web Clipper output. Default route:3_Resources/Clippings/(but project-specific clippings may go to4_Projects/<project>/references/etc. — apply judgment).
Phase 0 — Clean transcripts
If 0_Inbox/transcripts/ contains any .md files, invoke the audio-inbox skill for each one before routing anything. audio-inbox produces cleaned notes in 0_Inbox/ root and deletes the raw transcript. Those cleaned notes are then picked up by Phase 1 below as part of the normal root-sweep.
Do not route transcripts directly — always go through audio-inbox first.
Phase 1 — Route each note
For each file in the four sources above (after Phase 0 has run):
-
Read the note.
- From
notes/— frontmatter may be absent. Add the required keys (created:,lang:,tags:,source: manual) before routing. - From
Clippings/— Web Clipper has already populated frontmatter (typicallysource,url,created,author,tags). Preserve it. Only fill gaps (e.g., addlang:if missing). Do not overwrite the Clipper’ssource:value. - From root — already has frontmatter from
audio-inbox. Preserve it.
- From
-
Classify privacy before choosing a route. See Privacy Classification for the full rules. A note is private if it contains:
- Personal/introspective content (diary, reflections, emotions, personal goals, health).
- Professional/work-confidential content (employers, clients, meetings, internal processes, NDA material).
- Confidential information shared in trust, legal or financial details.
- Copyrighted material that can’t be republished.
When in doubt, default to private — route to
6_Private/or adddraft: true.
-
Decide the route — a target PARA folder and final filename.
6_Private/— any note classified as private in step 2. Use existing subfolders (Zettel/,Memo/, employer-specific folders) where they fit.1_Home/— dashboards, daily notes, index pages.2_Areas/<domain>/— ongoing responsibility (Music, Japanese, etc.).3_Resources/— reference material, clippings, general knowledge.4_Projects/<project>/— active projects with a goal.5_Archive/— only if the item references completed/stale work.- For notes that belong in a PARA location for graph connectivity but have some sensitive content, route to the PARA location and add
draft: trueto frontmatter. - If ambiguous, STOP. Leave the item in
0_Inbox/, append the reason to log under a## [DATE] skip | <filename>header. Move on.
-
Move the note to the target location with the final filename.
-
Enrich the graph — aim for 10–15 touched pages:
- Add wikilinks in the new note to related existing pages.
- Add backlinks / “Related” sections in pages that should reference the new note.
- Update the relevant index page in
1_Home/if one exists for the domain. - If the topic has no index yet and the area is mature (many related pages), propose creating one — don’t auto-create.
-
Append to log:
## [YYYY-MM-DD] ingest | <final note title> - Source: 0_Inbox/<original-name>.md - Routed to: <target path> - Privacy: public | private (6_Private/) | draft (draft: true) — <reason if private> - Touched: [[page1]], [[page2]], ... (list all, aim for 10–15) - Notes: <one-line rationale if non-obvious> -
Move to the next inbox item.
Rules
- No branching, no PRs. Edit files directly. obsidian-git handles persistence.
- Never guess routing. When in doubt, skip and log. The user resolves ambiguity.
- Frontmatter must conform to the schema in AGENTS. Add missing required fields (
created:,lang:,tags:,source:) before moving. - Multilang: see AGENTS — body stays in source language, filename + wikilinks + structural headings in English where possible.
- Never touch
_Canon/from this skill. Canon is promoted viacrystallizeonly. - Don’t over-link. Cross-refs should be substantive (the other page genuinely relates). Spraying links degrades the graph.
- If you can’t answer a question the note raises — use
log-questionbefore moving on.
Aim
Karpathy’s number: 10–15 pages touched per ingest. If the inbox note is tiny (a one-liner), fewer is fine. If you can’t find 5 related pages, the note might belong in 5_Archive/ or suggests the area is new enough that an index page should exist.
Blocked cases
- Routing unclear → skip, log, move on.
- Note body incomplete / placeholder → skip, log
## [DATE] skip | <file> — incomplete content. - Obvious duplicate of an existing page → merge proposal goes to
consolidate, not here. Log and skip.
Verification
After a full run:
ls 0_Inbox/transcripts/(excluding.gitkeep) is empty — every transcript was cleaned byaudio-inboxin Phase 0.ls 0_Inbox/(excludingtranscripts/,notes/,Clippings/, and.gitkeep) is empty or only contains explicitly-skipped items.ls 0_Inbox/notes/(excluding.gitkeep) is empty or only contains explicitly-skipped items.ls 0_Inbox/Clippings/(excluding.gitkeep) is empty or only contains explicitly-skipped items.- Each processed item has a corresponding entry in log.
git diff --statshows ~10–15 files touched per ingested item.- No file in
_Canon/was modified.