Add super-tasker skill (opt-in, with responsive-agent dep) - #8
Open
asdigitos wants to merge 3 commits into
Open
Conversation
A new skill bundled at workspace/skills/super-tasker/ that owns a file-backed task DB and operates in two modes: - Lead (default): scans the open frontier, decides per-task whether to execute, plan, wait, or ask, and delegates work via background tasks. - Executor: spawned with [stask-exec:<id>] anchor, scoped strictly to one task's context window. Designed for the ductor / Slack environment — no internal agentic loop, no time/step/token budgets. Continuation is driven by responsive-agent resumes and cron ticks. State lives at ~/.ductor-slack/workspace/super_tasker_state/. Includes: - SKILL.md spec (modes, data model, transitions, frontier semantics, re-eval cadence, executor rules, user intervention verbs) - scripts/tasker.py — single-file CLI (init/add/list/show/update/event/ split/merge/brief/gc/rebuild-index) - scripts/spawn_executor.py — wrapper that builds the executor prompt with the right anchor and context window and calls tools/task_tools/create_task.py. Honors Victor's design constraints: Status enum, S/M/L complexity, SplitFrom/MergedFrom/DependsOn relations, MAX_DEPTH=3, Splitted as a terminal state, top-level definition for user listing. Re-evaluation cadence defaults to triggered (reeval-request / never-planned / user-note / stale) rather than every-pass, with rationale in SKILL.md. Depends on the responsive-agent skill for human-in-the-loop continuation.
super-tasker depends on responsive-agent for pause/resume continuation (no in-loop budgets — long work is suspended and resumed via Slack). Ship them together so a fresh install gets a working super-tasker. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Both skills now live at repo-root skills/<name>/ instead of ductor_slack/_home_defaults/workspace/skills/, so a fresh ductor install does not auto-pick them up via the skill-sync mechanism. Per Victor: the skill should not be installed by default — install is a deliberate copy into the live workspace. skills/README.md documents the manual install path.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds two opt-in skills at repo-root
skills/:skills/super-tasker/— file-backed multi-track task orchestration.skills/responsive-agent/— pause-and-ask / resume protocol (dependency).Neither is bundled into
ductor_slack/_home_defaults/, so a fresh ductorinstall does not pick them up automatically. Install is a deliberate
copy into the live workspace (see
skills/README.md).super-taskerturns the agent into a Lead that walks a file-backedfrontier of tasks and dispatches Executor sessions per leaf via
tools/task_tools/create_task.py. It builds onresponsive-agentforhuman-in-the-loop continuation — no in-loop budgets, no self-trigger.
What changed since the previous round
Three rounds of review feedback from Victor are folded in:
ductor_slack/_home_defaults/workspace/skills/into top-levelskills/.skills/README.mddocuments the manual install path.ductor session, so the previous "cron sends self a
[super-tasker:lead-pass]message" framing was wrong. SKILL.md now enumerates the four real
external triggers for a lead pass:
create_task.py,responsive-agentresume,the agent talking to itself).
The doc explicitly states the agent cannot wake itself.
SKILL.md: once
a → a1, a2, parentais permanentlySplittedandstops being tracked; active set replaces it with
{a1, a2}. Onceb1, b2 → b3, sources are permanentlyMergedand stop being tracked.No rollup, no revival. The lead walks the frontier (non-terminal
tasks whose split_from parent is terminal-or-absent), not "top-level".
resume.pysurfaces the executor anchor on the first output line.Previously the resumed agent had to scan the body for
[stask-exec:<id>]to know it should re-enter executor mode. Now
resume.pydoes thatscan itself and re-emits the anchor as the first line of stdout.
[stask-exec:<id>]is also the canonical anchor inspawn_executor.pyand SKILL.md (the old
[super-tasker mode=executor task=...]form isgone).
File layout
Design decisions worth review
is_top_level(strict: no SplitFrom parent,not in any merged_from) is kept for the user-facing "list my major
initiatives" view.
is_frontier(non-terminal AND parent isterminal-or-absent) is what the lead pass walks. Both predicates are
exposed via
list --top-levelandlist --frontier.one of: executor appended
reeval-request, task was never planned,user-note contains a reeval intent, or task is
Openfor ≥STASK_STALE_DAYS(default 3) with no events. Rationale: each re-eval is a subagent call;
sweeping every Open task every pass is expensive and noisy.
tasker.py(depth-3 tasks rejectsplit).asynchronously via
user-noteevents; the lead reads them on the nextpass. The intervention verb table is in SKILL.md.
spawn_executor.pybuilds a prompt that lists theallowed read window (task.json + events.jsonl + context/ + the absolute
paths in
context_files) and rule 1 forbids reading the wider workspace.Status
Design review, round 2. Not for auto-install — files live at repo-root
skills/precisely so merging does not push them into anyone'sworkspace. Next step after approval: copy into Ethan's running ductor
instance and exercise on a real task.
Test plan
tasker.py init→add→briefreturns the new task as frontiersplitcreates depth-1 children; parent becomesSplittedand isexcluded from the frontier; children become the frontier
splitmergeon terminal task is rejected;mergeon two Open taskscreates a result and sources go to
Merged--textworks before or after the subcommandresume.pyinjects[stask-exec:<id>]as the first stdout line whenit appears in the saved context (smoke-tested locally)