ADR-0030: Plan the vault with the full set of vault planning tools, and pass every preview back on execute
Status: proposed ยท 2026-11-02 ยท supersedes ADR-0029
Contextโ
ADR-0029 made planning a set of Claude Code skills that reach the vault only through kb-template's vault server (ADR-0003). The server could not add a task to an existing note, change a task or goal, edit frontmatter or prose, plan several days at once, or report a task's ๐ rule, so the skills turned those changes into hand edits the user made in Obsidian. ADR-0029 listed them as requests for kb-template.
kb-template built them on 2026-11-02 (its ADR-KI-0064): add_tasks, update_task, plan_days, set_frontmatter, edit_note and create_workstream; richer plan_period goals and ad-hoc tasks (priority, recurrence, ๐, โ, several links); and planning_overview with scope: "period", an overdue list, and each task's line, blockId, id, blockedBy and recurrence. Every planning write now returns versions, a hash of each note it changes; passed back with execute: true, a note changed since its preview is refused. Without them the write runs unchecked, except update_task by line, which refuses. The server refuses to tick or cancel a repeating task, because the Tasks plugin writes the next occurrence only when the habit is ticked in Obsidian.
Decisionโ
- ADR-0029 Decisions 1, 2, 5 and 6 stand: planning is the skills in
.claude/skills/, they reach the vault only through thelife-vaulttools, every write previews first, and the user's rules live invault-planning/rules.md. - A task is written into its owner's note with
add_tasks, including habits, subtasks, dependencies and priority. A plan's ad-hoc lines hold only tasks no note owns. A task note (capture+file_note) is kept for a large batch with a purpose of its own. - Existing lines are changed where they stand with
update_task: rescheduling, resizing, ticking, cancelling, a goal's parent, dependencies. A task is addressed byblockIdwhen it has one, otherwise by thelineplanning_overviewreports, otherwise by a unique part of its text. - Frontmatter goes through
set_frontmatter, prose and reviews throughedit_note, new workstreams throughcreate_workstream, and several days through oneplan_dayscall. A goal's second link is alinksentry, not text. - Every execute passes back the
versionsits preview returned. A refusal is answered by previewing again and showing the user what changed. A call that addresses tasks by line runs before calls that add lines to the same note. - Days and weeks are read with
scope: "period". The full overview is read only when the skill needs the projects, areas or unscheduled work. - Habits are ticked in Obsidian, never by a tool, and a stray note is deleted by the user. These and moving a task line between notes are the only hand edits left.
- The first line written with
๐,โ, a priority or๐in a session is checked by the user in a Tasks query, because the signifier order the server writes is assumed, not tested against the plugin version in the vault (ADR-KI-0064).
Consequencesโ
- Tasks added by the coach show when the user opens their workstream, and planning leaves almost no hand edits behind.
- A day or week is read in one small call instead of the vault's every open task.
- Edits the user makes in Obsidian between a preview and its execute are no longer overwritten, as long as the skills pass
versionsback. Skills must keep each preview'sversions; a batch that touches one note twice must execute in order and preview the later call again. - The skills depend on six more tool names and shapes. The
life-vaultserver must run a build of kb-template from 2026-11-02 or later; the skills tell the user to rebuild and restart it when the tools are missing. - The tools can now remove prose (
edit_note) and end a habit (update_taskwithrecurrence: null). The preview, the user's yes and the version check are the only guards. - No ai-coach code changes; the
coachCLI still calls no planning tool.