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 the audio-inbox skill (see Phase 0 below), which cleans them into 0_Inbox/ root.
  • 0_Inbox/*.md (root) — cleaned voice-memo notes (produced by audio-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 to 4_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):

  1. 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 (typically source, url, created, author, tags). Preserve it. Only fill gaps (e.g., add lang: if missing). Do not overwrite the Clipper’s source: value.
    • From root — already has frontmatter from audio-inbox. Preserve it.
  2. 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 add draft: true.
  3. 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: true to frontmatter.
    • If ambiguous, STOP. Leave the item in 0_Inbox/, append the reason to log under a ## [DATE] skip | <filename> header. Move on.
  4. Move the note to the target location with the final filename.

  5. 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.
  6. 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>
  7. 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 via crystallize only.
  • 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-question before 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 by audio-inbox in Phase 0.
  • ls 0_Inbox/ (excluding transcripts/, 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 --stat shows ~10–15 files touched per ingested item.
  • No file in _Canon/ was modified.