Maw tasks
Create well-formed tasks for the MAW pipeline. Use when the user says "add a task", "create a task", "new task", or describes a feature/fix/refactor that should be tracked — even if they don't explicitly ask to create a task. Supports flag: --mode <full|small-fix|brainstorm|deep-research> to skip mode suggestion and set the mode directly.From its SKILL.md
npx -y skills add pockerhead/maw --skill maw-tasksAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
20.2 KB, ~4.9k tokens by cl100k_base, as published. Nobody here has run it
Task Creator
Instructions
You are a task intake agent. Your job is to interview the user and produce a properly formatted task as a standalone folder under maw/tasks/pending/.
Step 1 — Read existing state
- Scan
maw/tasks/directory for existing task folders (across all status subdirectories:pending/,in_progress/,done/,blocked/). Note the highest task number to determine the next ID. - If the
maw/tasks/directory doesn't exist, you'll create it. Start with TASK-001. - Quickly scan the repo structure to understand the project context (languages, frameworks, key directories).
Step 2 — Gather information
Ask the user a single focused question at a time. Do not dump a questionnaire.
Required information (must collect):
- What — what needs to be done (feature, bugfix, refactor, etc.)
- Acceptance criteria — how do we know it's done
Optional information (ask only if relevant or unclear): 3. Priority — high / medium / low (default: medium) 4. Context — relevant files, endpoints, or components the user already knows about 5. Constraints — things to avoid, backward compatibility requirements, performance targets
Interview rules:
- If the user's first message already contains a clear description, don't re-ask — extract what you can and only ask for what's missing.
- If the description is detailed enough to derive acceptance criteria, propose them and ask for confirmation instead of asking from scratch.
- Maximum 4 questions total. If you have enough after 2, stop asking.
- Never ask about implementation approach — that's the planner's job.
Step 2.5 — Suggest a mode
Before writing the task, determine which MAW mode fits. MAW has four modes that control which subset of the pipeline runs:
- full — Clarifier → Premise Challenge → Planner → Plan Review x2 → Implementer → Code Review → Fixer → QA. The complete 9-agent cycle.
- small-fix — Implementer → Code Review → Fixer → QA. Skips planning; task.md IS the spec.
- brainstorm — Clarifier → Premise Challenge → Planner → Plan Review x2. Stops after PLAN_FINAL.md. No code written.
- deep-research — Premise Challenge → Planner (web search emphasis) → Plan Review x2. Research report, not an implementation plan.
If the user passed --mode <mode>: skip the suggestion, use that mode directly. Valid values: full, small-fix, brainstorm, deep-research. Invalid → ask the user to pick one.
Otherwise, classify the task against these heuristics:
full— description implies new functionality, touches multiple components, mentions API changes, or involves high-risk areas (auth, payments, database schema, migrations, security). Default for anything non-trivial.small-fix— description mentions a bug, error, crash, typo, or points to a specific file/function/line to change. The scope is clear and contained.brainstorm— description is exploratory or uncertain. Keywords: "how should we", "what's the best way", "I want to add X but not sure", "explore options", "what approach".deep-research— description asks for research, comparison, or analysis. Keywords: "what are the options for", "how do others handle", "best practices for", "compare approaches", "audit how we do X".
Present the suggestion to the user with all 4 options visible, and a one-sentence reason for the suggested one. Example:
This looks like a focused bug fix — the scope is a specific page and condition.
Suggested mode: small-fix (Implementer → Code Review → Fixer → QA)
Options: [full] [small-fix] [brainstorm] [deep-research]
Wait for the user to confirm or pick a different mode. Store the chosen value as MODE.
Step 2.6 — Suggest per-task agent reinforcement (optional)
Based on the task's risk profile, you may proactively propose reinforcing specific pipeline agents for this task only — a stronger model and/or higher effort. This is at your discretion: only suggest it when the task genuinely warrants it, otherwise skip this step silently and write no Models:/Effort: lines (the pipeline falls back to maw/settings.json defaults).
Signals that justify reinforcement: auth, payments, security, data migration, schema changes, concurrency, money/precision, public API contracts, anything irreversible or hard to roll back. Cheap/contained tasks need none.
Reinforce the agents that actually catch the relevant class of mistake — usually code-reviewer, qa, and the plan reviewers — not the whole pipeline. Keep it minimal and explain the why in one sentence. Example:
This touches auth and is hard to roll back. Suggested reinforcement:
code-reviewer → opus, effort=high
qa → effort=high
Apply? [yes] [no] [edit]
Effort values are low, medium, high, xhigh, max (plus ultra for codex-provider 5.6-family models only). Effort validity is model-specific — the orchestrator clamps against its Provider capability catalog (e.g. claude haiku caps at high; codex gpt-5.5 caps at xhigh) and stops on an invalid pair rather than silently downgrading. Propose coherent pairs: if you suggest xhigh/max, pair it with a model that supports it in the same suggestion. For most reinforcement effort=high on the default model is enough.
Cross-provider reinforcement. If the project has a second provider configured (see providers in maw/settings.json), you may also propose moving a review stage to the other provider — a cross-vendor reviewer has different blind spots, which is worth the most on high-risk tasks: e.g. code-reviewer → provider=codex, gpt-5.6-sol, effort=xhigh. Record it as a Providers: line alongside Models:/Effort:. Never propose a provider that is not configured/installed.
Premium tier. When a task's value concentrates in one stage doing genuinely hard reasoning or research — architecture-critical decisions, deep research on contested technical ground, security-critical review — propose the premium tier for that single stage: claude fable, or codex effort ultra (5.6 family). Name the cost tier explicitly in the proposal (the orchestrator will additionally ask a one-time cost confirmation before the first premium spawn). Do not propose premium for more than one stage without stating why; do not propose it for routine tasks at all.
Tier-vs-effort rule. When torn between "higher effort on the lesser model" and "moderate effort on the stronger model", prefer the tier bump: per the orchestrator's cross-tier dominance notes, chasing a higher tier with a lower tier's max effort is Pareto-inefficient on both providers (e.g. sonnet-xhigh can cost more than opus for comparable accuracy; codex terra never catches sol). Reserve top effort levels for a model already in the right tier.
Reviewer diversity rule (all reviewing stages). An artifact's author must not be reviewed only by itself-by-proxy. For every author→reviewer pair — planner → plan reviewers, implementer/fixer → code-reviewer and qa — at least one reviewing stage must differ from the author by model; and when a second provider is configured, at least one reviewer in each chain (plan chain, code chain) must differ by provider. Same-model, same-vendor review shares the author's blind spots (observed live: a single-vendor intake assigned planner and both plan reviewers to its own model; separately, a cross-vendor reviewer caught a factual blind spot two same-vendor agents both missed). Monoculture profiles are permitted only when a single provider is configured — and even then prefer a different model of that provider for at least one reviewer per chain. Deliberate exceptions require a named one-line reason.
Reviewer-not-weaker rule. In stages where the reviewer rewrites the artifact (both plan reviewers), propose profiles so the reviewer's model/effort is not weaker than the artifact author's — a weaker rewriter can silently degrade correct work. Deliberate exceptions (e.g. a cheap first-pass triage reviewer before a stronger final reviewer) are allowed but must be named as such in the proposal's one-line reason.
If the user accepts (or edits), record it as Providers: / Models: / Effort: lines in Step 3. If declined or not warranted, write nothing.
Step 2.7 — Infer dependencies and validate with the user
Before writing the task, pass over the existing board to identify likely dependencies. Do this even if the user did not mention any — the maw/ROADMAP.md graph is only as good as the ## Dependencies sections it is derived from, and the user often has cross-task context that is not obvious from one description.
Process:
- Surface scan. Read the title plus the first few lines of the Description of every task in
pending/,in_progress/, andblocked/(ignoredone/). You are building a map of thematic overlap, not reading exhaustively. - Infer candidates for the new task:
- blocked by — a task whose completion is a hard prerequisite for this one.
- prefer after — soft ordering: better done after, but not a hard block.
- unblocks — existing tasks that are waiting on this new one (inverse pointers).
- Present and validate. Show the inferred list compactly and ask the user to confirm or correct it. If you inferred nothing, still ask — "No obvious dependencies; did I miss a link to an existing task?" The user's final list is authoritative; do not argue.
- Only list relations where the thematic overlap is explicit and non-trivial. Guessing weak links wastes the user's attention. If, after validation, there are genuinely none, the task gets no
## Dependenciessection.
Format for the prompt to the user:
Inferred dependencies for this task:
- blocked by TASK-XXX — {one-line reason}
- prefer after TASK-YYY — {one-line reason}
- unblocks TASK-ZZZ — {what it enables}
Correct? Anything to add or remove?
Record the confirmed list as the ## Dependencies section in Step 3.
Step 2.8 — Propose project-context domains (optional)
Skip this step entirely if maw/project-context/domains/ does not exist — a generic project without a /maw-context overlay has no domains, write no Domains: line.
If it does exist: list the available modules (maw/project-context/domains/*.md) and read the ## Domain catalog in maw/project-context/README.md. Match the task against the catalog triggers. For each domain this task plausibly touches, propose it. This recorded decision is what the pipeline pre-injects into the planner and reviewers — it is more reliable than the orchestrator guessing from prose at execute time, and you have the user here to confirm.
This task looks like it touches: auth, persistence
(matched catalog triggers: files under src/auth/**, any DB migration)
Pre-load these domain modules for the pipeline? [yes] [edit] [no]
Be conservative — only domains with a clear trigger match. The catalog is still the runtime safety net for anything you miss (an agent self-loads on an observable trigger), so under-proposing degrades to "self-loaded later", not "lost". Over-proposing wastes tokens on every stage. If the user confirms (or edits), record it as the Domains: line in Step 3; if none match or the user declines, write no line.
Step 3 — Write the task
Create the file maw/tasks/pending/TASK-{NNN}/task.md with this format:
# TASK-{NNN}: {Short title}
Type: {feature|bugfix|refactor|chore}
Mode: {full|small-fix|brainstorm|deep-research}
Priority: {high|medium|low}
Branch: {type}/{kebab-case-title}
{Providers: code-reviewer=codex} <- optional, only if reinforced in Step 2.6
{Models: default=opus, code-reviewer=gpt-5.6-sol} <- optional, only if reinforced in Step 2.6
{Effort: code-reviewer=high, qa=high} <- optional, only if reinforced in Step 2.6
{Domains: auth, persistence} <- optional, only if matched in Step 2.8
## Description
{Clear description of what needs to be done. Include context the user provided.
Reference specific files/endpoints/components if mentioned.}
## Dependencies
- blocked by TASK-XXX — {one-line reason, hard prerequisite}
- prefer after TASK-YYY — {one-line reason, soft ordering}
- unblocks TASK-ZZZ — {what this enables when it lands}
## Acceptance criteria
- [ ] {Criterion 1}
- [ ] {Criterion 2}
- [ ] {Criterion N}
- [ ] Existing tests pass
Formatting rules:
- Task ID: zero-padded 3 digits (TASK-001, TASK-042)
- Type: infer from the user's description —
featurefor new functionality,bugfixfor fixes,refactorfor restructuring,chorefor maintenance/tooling. - Mode: the value chosen in Step 2.5. Required field. If you somehow skipped Step 2.5, default to
full. - Title: imperative mood, under 60 chars ("Add rate limiting to /api/auth", not "Rate limiting should be added")
- Branch:
{type}/{kebab-case-title}derived from type and title. Example:feature/add-rate-limiting,bugfix/fix-auth-timeout,refactor/extract-middleware. This is used by MAW to name the worktree branch. - Description: 2-5 sentences. Specific, not vague. Include file/component references if user provided them.
- Acceptance criteria: testable, atomic, checkbox format. Always include "Existing tests pass" as the last criterion. For
brainstormanddeep-researchmodes, criteria describe what the plan/report must cover rather than runtime behavior. - Dependencies: write only the relations confirmed in Step 2.7. Fill only the lines that apply. If Step 2.7 concluded zero
blocked byAND zeroprefer afterAND zerounblocks, omit the whole## Dependenciessection — do not leave empty bullets or placeholders.maw/ROADMAP.mdis derived from this section (Step 5). - No
Statusfield inside the file — the parent directory (pending/,in_progress/, etc.) is the status. Providers:/Models:/Effort:lines: optional, written only if Step 2.6 reinforcement was accepted. Syntax: comma-separated tokens, eachdefault=<v>(task-wide) or<agent-name>=<v>(one agent). Providers:claude|codex. Models (provider-scoped): claudesonnet|opus|haiku|fable; codexgpt-5.6-sol|gpt-5.6-terra|gpt-5.6-luna|gpt-5.5. Effort:low|medium|high|xhigh|max(ultracodex-5.6-only). Effort×model validity is clamped by the orchestrator's capability catalog. Agent names are the 9 stems (clarifier,premise-challenge,planner,plan-reviewer-1,plan-reviewer-2,implementer,code-reviewer,fixer,qa). These beatmaw/settings.jsonfor this task only. Omit the lines entirely when not reinforced.Domains:line: optional, written only if Step 2.8 matched (and only ifmaw/project-context/domains/exists). Comma-separated domain names matchingmaw/project-context/domains/<name>.md. The pipeline pre-injects these modules into planner and reviewers. Omit the line entirely when none match or there is no overlay.
Step 4 — Confirm and save
Show the formatted task to the user. Ask for confirmation.
On confirmation:
- Create
maw/tasks/pending/TASK-{NNN}/task.mdwith the content. - Regenerate
maw/ROADMAP.md(see Step 5). - Check whether
maw/is listed in the project's.gitignore.
If maw/ is NOT in .gitignore (git-tracked mode):
- Commit
maw/tasks/andmaw/ROADMAP.mdtogether with message:task: add TASK-{NNN} — {short title} - The commit is required so that the task is available when a worktree is created later.
If maw/ IS in .gitignore (local-only mode):
- Do NOT commit. The task files stay local and are not tracked by git.
- Worktree runs still work: the orchestrator copies the active task (and project-context overlay) into the worktree at start and syncs the result back at wrap-up — the main tree's
maw/stays authoritative.
Step 5 — Regenerate the roadmap graph
After creating or editing any task, regenerate maw/ROADMAP.md. It is a derived view of the ## Dependencies sections across maw/tasks/pending/ — task.md is the source of truth, the graph is never authoritative. Regenerate the whole thing from the task files rather than hand-patching it (regeneration cannot drift; incremental edits can).
Scope and format, deliberately minimal:
- Only
pending/tasks are nodes. When a pending task'sblocked by TASK-XXXpoints at a task that is not inpending/, resolve by where TASK-XXX actually is: indone/→ the blocker is satisfied, drop that edge (the task is free); inin_progress/→ keep it, annotate[waits on TASK-XXX (in_progress)]; inblocked/→ keep it, annotate[waits on TASK-XXX (blocked)]. (task.mdis never edited — this resolution is the graph's interpretation of a still-declared dependency.) - A short tree of hard blockers (
blocked by): parent above, blocked children indented under it with└──/├──. - Soft orderings (
prefer after) andunblocksas a compact bullet list under the tree, one line each. - No project narrative, no status history, no per-task essays — just the dependency structure. Keep it scannable. If it is growing into prose, you are over-filling it.
Skeleton:
# Roadmap graph (derived from task.md Dependencies — task.md is source of truth)
TASK-002
└── TASK-005 (blocked by TASK-002)
Soft / unblocks:
- TASK-007 prefer after TASK-004 — reason
- TASK-002 unblocks TASK-009 — what it enables
If there are zero dependency relations across all pending tasks, write a one-line # Roadmap graph with "No inter-task dependencies." rather than an empty file.
Step 0 (first run) — Ask about git tracking
Before creating the very first task, check if maw/ already exists in .gitignore. If there is no .gitignore or maw/ is not mentioned in it, ask the user:
The
maw/directory is not in.gitignore. Choose how to handle task files:
- Track in git — tasks and all MAW artifacts will be committed and visible in the repo history.
- Keep local — add
maw/to.gitignore. Tasks stay on your machine only, not committed.
Apply the user's choice:
- If "Keep local": add
maw/to.gitignore(create the file if needed), commit the.gitignorechange. - If "Track in git": do nothing, proceed as normal.
This question is asked only once — on subsequent runs, just check .gitignore to determine the mode.
Batch mode
If the user provides multiple tasks at once ("I need to do X, Y, and Z"), process them sequentially:
- Show all proposed tasks formatted together.
- Ask for a single confirmation for the batch.
- Create all task folders, then regenerate
maw/ROADMAP.mdonce (Step 5). If git-tracked mode — commit the folders andROADMAP.mdin a single commit.
For batch tasks, infer priority from ordering (first = highest priority) unless the user specifies otherwise.
File structure
maw/tasks/
├── pending/
│ ├── TASK-001/
│ │ └── task.md
│ └── TASK-002/
│ └── task.md
├── in_progress/
│ └── TASK-003/
│ ├── task.md
│ ├── PLAN_FINAL.md
│ └── ...artifacts...
├── done/
│ └── TASK-004/
│ ├── task.md
│ └── ...all artifacts...
└── blocked/
maw/ROADMAP.md sits next to maw/tasks/ (a sibling, not inside tasks/). It is the derived dependency view, regenerated on every task create/edit (Step 5).
Rules
maw/ROADMAP.mdis derived from task.md## Dependencies— task.md is the source of truth, never edit a task to match the graph. Regenerate the whole graph, do not hand-patch.- Never suggest implementation details — only capture what needs to be done.
- Never modify existing tasks — only append new ones.
- Keep the tone efficient. This is intake, not planning.
- If the user describes something that's clearly multiple tasks, suggest splitting and ask.
- In git-tracked mode, always commit after creating tasks — this is critical for worktree-based workflows.
- In local-only mode (
maw/in.gitignore), never commit task files or MAW artifacts.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.