Inbox
The vault's capture buffer is the task backend's inbox, not a folder — paths.md owns
that rule and what Inbox/ on disk is for. A capture leaves the buffer for a proper
PARA folder once it is clear what it is, or stays in the backend if it is just an action.
Under TASKS = files the inbox is the Inbox/ folder (paths.md says what that means,
including strays); the steps below are unchanged except the strays handling.
Every task call is an operation from tasks.md, run per the adapter for TASKS. If the
backend is unavailable, tasks.md «Backend missing» applies.
Base layer
Read before acting, each as ../../para/<file>.md relative to this skill's base directory — these hold the shared rules, do not restate them from memory:
../../para/paths.md— always, including «Language»: the strings below come fromlang/<LANG>.md../../para/tasks.md— always: the operations; forprocessalso what a task is, area projects../../para/note-format.md— forprocess../../para/confirm.md— forprocess../../para/move.md— forprocess, when it routes a stray file out ofInbox/
Subcommands
The first word of $ARGUMENTS picks the subcommand. Anything that is not list or
process is treated as the text of an add, so /inbox a thought about sleep captures that
thought — the add keyword is optional. Empty $ARGUMENTS → show the three subcommands
and ask.
add <text> — capture
inbox.addwith atitleand optionaldescription. A short text is the title as given. A long one gets a short title inLANGderived from it (6 words or fewer) and the full text verbatim as the description.- Set nothing else — no date, priority or labels unless the user said them. This is a buffer, not a place to tidy the user's thought into shape.
- Report in one line what was created, so the user can rename if they disagree.
If the capture obviously belongs somewhere specific, say so in the report and offer
/inbox process — do not route it unasked.
list — show what is unprocessed
Read only.
inbox.list— every open capture.- Print a numbered list, oldest first, headed with the
inbox.headerstring ({n}captures,{days}the age of the oldest). Titles only, no descriptions. - Strays. Not under
TASKS = files(paths.md). List*.mdinInbox/(filenames only, do not open them). If any exist, add one line, theinbox.straysstring ({k}files). - An empty inbox is a valid, good answer: say so plainly.
process — route the captures
The valve on the buffer. Interactive, one capture at a time — never dump the whole inbox with proposed destinations and ask the user to approve in bulk.
-
List the inbox as above — backend captures first, oldest first, then strays from
Inbox/(underTASKS = filesinbox.listhas them all,paths.md). Say how many there are and start with the first. -
For each capture: show the title and the content (the description, or the file body for a stray) — briefly if it is long. Then give your read of what it is, and offer the routes. The route names are the
inbox.route.*strings oflang/<LANG>.md; the left column below is the key:Route What happens inbox.route.actiona to-do outside any project → the wording checked per tasks.md«What a task is» and a rewording proposed and agreed first, thentask.movewith theareathe user picks (the names are thosetasks.mdgives forarea) and the agreedtitleinbox.route.project_taska step of an existing project → the project found per find-target.md, the wording proposed pertasks.md«What a task is», thentask.movewith thatproject_refand the newtitle; the task stays open, nothing is created or closed. UnderTASKS = filesa taken basename is a collision:note-format.md«Name collisions»inbox.route.projectan effort with an end state → hand off to /projects createinbox.route.areaongoing responsibility → /areas create, or append to an existing Areainbox.route.resourceknowledge worth keeping → /resources createinbox.route.keepnot ripe yet — stays in the inbox, no shame in it inbox.route.deletejunk → close it (see below) Recommend one, with a reason in a sentence. The user decides.
-
Carry out the route, handing the capture's text to the skill that owns the destination — it builds the note from its own template. Never write a note here.
-
Close the capture once its route is carried out:
- Backend capture — routed into the vault, or junk →
inbox.close— reversible (tasks.md), so Tier 1 (confirm.md).inbox.route.actionandinbox.route.project_taskmove the task itself (task.move) and leave it open;inbox.route.keepleaves it where it is. - Stray file in
Inbox/— after/projects create,/areas createor/resources createhas taken its content, remove the file via/remove; forinbox.route.delete, hand it to/removedirectly.inbox.route.actionturns it into a task withtask.addandarea, then remove the file the same way.
- Backend capture — routed into the vault, or junk →
-
Then go to the next capture. Do not batch the closing to the end.
-
Stop when the user says stop, and report how many were processed and how many remain. Getting through the whole inbox in one sitting is not the goal.
Notes
- The inbox is deliberately low-friction:
addnever asks a question it can avoid.processis where the thinking happens. - Everything in
LANG, tasks included.