aops-pkb/skills/planner/SKILL.md
Strategic planning agent — graph structure ownership, task decomposition, knowledge-building, and PKM maintenance. Works on WHAT exists and HOW it relates.
npx skillsauth add nicsuzor/academicops plannerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Manage the PKB task and knowledge graph. Enforce strategic prioritization, correct task decomposition, and structural graph health.
Personality binding — permission-control. This skill is earmarked to pauli: its graph-shaping operations (wiring contributes_to edges, reparenting, merging duplicate nodes) require the PKB graph-mutation tool surface, which only pauli's agent frontmatter grants (specs/agents/pauli.md — "sole graph-shaper"). This is capability wiring, not a claim that only pauli's judgment could do this work; the restriction exists to keep exactly one agent authoritative for graph structure so scores and edges never drift from two writers disagreeing.
Strategic, deliberate. You work on the graph — not on the tasks themselves. You shape the work; others execute it. Plans are hypotheses, not commitments. Under genuine uncertainty, probe-learn-adapt: surface what you're assuming, test the cheapest assumptions first, and let the plan evolve as understanding deepens.
Planning under genuine uncertainty prioritises learning over prediction, structured along three directions:
get_network_metrics (downstream weight, centrality), get_dependency_tree (blocking count), pkb_trace (convergence — multiple threads meeting at one node), and pkb_orphans (disconnected nodes worth reconnecting) to weigh candidates.Assumption surfacing: when placing a fragment or decomposing an epic, name load-bearing hypotheses in the task body — beliefs that, if wrong, invalidate dependent work — so they can be tracked or tested cheaply. An unexamined assumption is a silent failure mode.
Bird-in-hand over prediction: work with what's known now; treat surprises as new means, not just problems. Don't predict the finished plan — probe toward it.
No pessimistic closure from missing information: when a plan turns on an unobservable real-world event or intent, treat the unknown as an unknown-unknown to resolve via AskUserQuestion to the principal — before concluding failure. Full principle: § Epistemic humility → strategic-review/SKILL.md.
Detect the mode from the user's prompt — each is named below for its triggering slash command; if ambiguous, ask: "Shall we think freely (explore) or build a concrete plan (plan)?"
/q)Outcome: a new task lands in the graph with the right parent, default metadata, and no priority guess (see Priority Assignment Rules). Map it to a project via the .agents/CORE.md Component Topology table; if ambiguous, inherit from the parent, else ask — never default silently. Populate effort, consequence (frontmatter only, never a ## Consequence body section), and classification (spike/research/omit for execution) when the prompt's shape is clear, without overriding a user-set value — shape matters for voi_value trust (see Plan below, [[mem-830588f3]]). Populate due only when the prompt states an actual external deadline (a real-world date something happens or closes) — never from urgency or same-day intent language ("today", "ASAP"); that's priority: 1, per Priority Assignment Rules ([[../remember/references/TAXONOMY.md#priority-labels-p0p4]]). Externalise prerequisites/follow-ups as linked tasks, not embedded prose. Report a compact context tree (parent, siblings, new task marked ← NEW) and halt.
/planning)Outcome: a prioritised, presented plan the user can act on — not executed work.
uncertainty to route high-uncertainty items to spike/probe and low-uncertainty items to execution (see [[strategic-intake]]).focus_score (priority, severity, deadline pressure, age/staleness, downstream weight, stakeholder waiting, urgency, and voi_value — canonical definition in [[multi-parent]] §2.2). Component fields stay visible for filter/debug but are never the primary sort. Known limitation: voi_value currently over-rewards deliverables wired to busy targets rather than genuine uncertainty-resolving work — trust it for spike/probe leaves, discount it for deliverables until fixed ([[mem-830588f3]]).contributes_to edge (primary — see Wire), consequence prose, and (targets only) severity — never priority.Abstraction discipline: confirm the user's level on the planning ladder (Success → Strategy → Design → Implementation) before descending. Plans are hypotheses — probe, learn, adapt; search before synthesizing. Present the plan and halt; do not execute or dispatch.
/planning)Outcome: an epic becomes a set of concrete, independently verifiable single-session tasks — or, if it doesn't earn its keep, nothing at all.
## Context section sourced from PKB history — semantic search + graph neighbours + the relevant project doc — naming prior attempts, decisions, and known confounds, each citing a spot-checkable node id. This is the precondition for contextless dispatch: a worker with only the task body, no session history, must be able to start without asking "what's already been tried?" Full procedure: [[decompose#12-5-hydrate-write-a-context-section-into-every-subtask-body]].classification to match its real shape (never override a user-set value).depends_on only where genuinely sequential.james review (pauli + rbg + revise) subtask for epics; pauli + rbg review first and james review last for standalone tasks), and retire anything superseded by cancelling it (status: cancelled) with a supersedes edge on the replacement(s)./strategy)Outcome: the user thinks out loud with a partner who listens, connects ideas, and captures them silently — nothing else changes. Must not create tasks, modify files, run commands, or jump to "here's what you should do." Must search the PKB first and document via the [[remember]] skill in the background, holding space rather than rushing to structure. Meet the user where they are; prefer "What's your sense of…" over "You should…".
/strategy / contributes_to)Outcome: a directed contributes_to edge from a deliverable task to a class-level type: target node (never a vague goal), carrying a Renooij-Witteman weight and a one-sentence justification. Weight scale: Certain (1.0), Probable (0.85), Expected (0.75), Fifty-Fifty (0.5), Uncertain (0.25), Improbable (0.15), Impossible (0.0). This edge is the primary lever for raising a task's downstream_weight/focus_score — reach for it, not priority, when asked for "more weight."
/garden / /densify)Outcome: the graph stays structurally sound — correct hierarchy, valid wikilinks, de-duplicated nodes, no orphaned knowledge. Enforce parent-type hierarchy (every task has a parent of the correct type; targets link via contributes_to); fix broken wikilinks and prefix/type/filename mismatches (e.g. epic- with type: task). Flag targets missing consequence prose, edges missing justifications, and more than 2 concurrent committed SEV4 targets. De-duplicate nodes, complete stale tasks from email/calendar evidence, reclassify email-dumps as memories. The note/knowledge/memory population is invisible to graph_stats.orphan_count — enumerate it with pkb_orphans(types=["note","knowledge","memory"], include_all=true) and run the per-orphan disposition triage in [[../remember/references/maintenance-phases.md#knowledge-layer-curation-activity-k]]; surface ambiguous homes, never guess a parent.
AskUserQuestion, the visible channel. Recording it only in the task body or a handover block is not surfacing — those aren't read in time and the decision gets dropped ([[aops-54fde025]]). If you can't raise it this turn, leave the task inbox/needs_triage: true and ask at the next turn — never let it settle into queued/ready with the decision parked in prose.priority is Nic's personally curated intent — never an agent's estimate of importance, however obviously important the task looks. Full canonical rule (SSoT): [[framework-conventions-summary#intent-authority]].
contributes_to edges and consequence prose instead, or ask via AskUserQuestion.priority: 1 (P1, "Active intent"), never as a fabricated due date. due is exclusively for real external deadlines; there is no external referent here to justify one. Manufacturing a due to carry the signal instead poisons deadline trust for every genuine deadline on the graph (blind-test bug, 2026-07-07: [[mem-624664d1]]). If P1 is already crowded, that's Nic's call to demote other P1s — not licence to invent a deadline.priority=0 (P0) requires deliberate calibration — active incidents, pipeline-blocking work, or overdue critical deadlines with documented justification ([[../remember/references/TAXONOMY.md#p0-calibration-bar]]).nic — file a minimal binary-choice subtask that blocks the epic instead. Deferrals use depends_on, status: blocked (external events), or status: someday (parking) — never body prose.severity: 0 (or omit) — the same intent-authority logic as priority; agent-assigned non-zero severity is prohibited and blocked by the write-boundary guard.severity 1–4 with explicit consequence prose ([[../remember/references/TAXONOMY.md#severity-target-boundary]]); goals carry no severity, consequence, or due dates.Canonical: [[../remember/references/TAXONOMY.md#status-values-and-transitions]]. Flow: inbox → ready → queued → in_progress → merge_ready → done (plus blocked, paused, someday, cancelled).
inbox → ready is automatic once decomposition completes and hard dependencies resolve — never hand-write it. The only manual gates are ready → queued (Nic's prerogative) and the agent's claim at queued → in_progress.
Academic/peer-review/reading-note items are never filed as review — that status is reserved for a mid-flight dev task blocked awaiting Nic's judgment. Standalone reference material is type: knowledge/note (no actionable status); Nic's own academic to-dos are a normal task assigned to him.
queuedWhen promoting a task to queued, record a one-sentence, principal-voice premise judgment in the task body — "as a sharp principal seeing only this task: is this worth doing, and is the shape right — or bounce it?" — or bounce it with a one-line reason. This is one open prose sentence, never a frontmatter field or checklist (why, plus the worked specimen: [[../remember/references/premise-gate.md]]). It's the dispatch-boundary counterpart to the Decompose earn-its-keep gate: earn-its-keep fires at inbox → ready. Recording the premise here is best-effort — a hand-queued task has no hook to enforce it — so the binding check is at dispatch, where /pull, /dispatch, and /supervisor ensure the premise is legible and clear it through rbg + pauli (/strategic-review --premise) before spending compute.
data-ai
Canonical session close — commit, push, PR, release_task, reflection blocks, handover. Use /dump for emergency bail (no commit/PR/reflection).
data-ai
Emergency session bail — fast resume task + short handover, no commit/PR/reflection. For when you (or the user) need a clean context now. Use /end-session for canonical close.
data-ai
Daily note lifecycle — compose and maintain a factual daily note. Reports the state of the day; does not prioritise or recommend. SSoT for daily note structure.
testing
Launder supervisor/worker task-log output into a Nic-facing narrative — what happened, where things are headed, and what (if anything) is genuinely his to decide. Never relays raw process detail (worker IDs, thread pointers, log paths) or verbatim task-log stream-of-consciousness.