Public reference for the on-disk .tasks/STATUS.md block format the autonomous poller parses: header regex, status emoji, and the **Weight:** / **Notify:** / **Requirements:** fields. Ships with factory where the internal wiki and MCP source can't reach. Distinct from delegate-task (MCP-tool delegation) and using-tasks (board mechanics). Authored via superpowers:writing-skills TDD: - RED: 3 baseline subagents w/o skill — 2/3 used ###/bullet headers the parser cannot recognize as a task, 2/3 omitted **Weight:** (invented risk/tier/ claimable-by), 2/3 put notify in prose, 1/3 used 🟢 for a ready task. - GREEN: 2 fresh subagents w/ skill — both parser-valid, incl. correct **Weight:** needs-human for the critical-infra scenario. - REFACTOR: no new format loopholes. Ground truth verified vs live source (status-md.ts parser, claim.ts gate, fleet-router.js routing): missing Weight finds no backend tier -> poller parks to blocked, so Weight is operatively required for pickup. Closes [create-task-format-for-poller-skill]. Install to ~/.claude/skills + hermes mapping deferred as follow-up. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.1 KiB
title, type, updated
| title | type | updated |
|---|---|---|
| task-format skill — design | concept | 2026-06-11 |
task-format skill — design
Why it exists
The autonomous poller (agents-task-runner) reads each project's .tasks/STATUS.md and decides what to claim, how to route it, and whom to notify. Those decisions hang on a handful of fields — most critically **Weight:** and **Notify:**. The formatting rules for those fields lived only in internal sources: the parser (projects-meta-mcp/src/lib/status-md.ts), the writer (status-md-writer.ts), and the ops runbook (.common/.wiki/concepts/agents-task-runner-ops.md).
The wiki is internal; skills ship with factory to external users. An external operator pointing the poller at their own board has no access to the wiki or the MCP source — so the on-disk task-block format had no public, copy-pasteable reference. task-format is that reference.
Scope — and why it's a separate skill
Three adjacent skills, deliberately not merged:
delegate-task— workflow for creating a task for another project/agent viamcp__projects-meta__tasks_create. The tool emits the field format for you; the skill is the pre-flight gate + body template.using-tasks— policy for working an existing board (claim / switch / close / per-task files).task-format(this skill) — the byte-level field format the poller parses, for hand-edited STATUS.md blocks and for understanding whattasks_createproduces.
A hand-edit scenario triggers none of the other two: delegate-task is about the MCP tool, using-tasks is about board mechanics, neither documents the exact header regex / Weight vocabulary / Notify line. Hence a focused reference skill.
Ground truth (sources of record)
- Header regex
TASK_HEADER = /^##\s+(\S+)\s+\[([^\]]+)\]\s+—\s+(.+)$/uand all**Field:**regexes —status-md.ts. - Canonical field order and the writer —
status-md-writer.ts(formatTaskBlock). - Claim gate: only
weight === 'needs-human'is excluded at claim; capability/runtime gates —claim.tsselectClaimableTask. - Missing-Weight behavior: the claim gate does not reject a weightless task, but the fleet router (
fleet-router.jsresolveBackend) finds no backend for anundefinedtier, so the poller parks it to 🔵 blocked (no backend for weight_tier: unknown) and inboxes Notify. Net effect — confirmed by source, not folklore — a task without Weight does not run. The skill states this as the operative rule. - Notify resolution + inbox write —
crossProjectAgentPoller.jsmakeInboxWriter.
TDD record (per superpowers:writing-skills)
RED — 3 baseline subagents, no skill, asked to author a poller-claimable STATUS.md block (ordinary work ×2, critical-infra ×1). Failures: 2/3 used ### /bullet-list headers the parser cannot recognize as a task at all; 2/3 omitted **Weight:** entirely (invented risk: low, tier: L, claimable-by); 2/3 put the notification in prose instead of a **Notify:** field; 1/3 used 🟢 (done) for a ready task. The one partial success only got Weight/Notify right because it read the board and found the spec — a crib an external user lacks.
GREEN — 2 fresh subagents with the skill loaded, same scenarios. Both produced parser-valid blocks: correct ## ⚪ [slug] — header, **Field:** lines, **Weight:** + **Notify:**. The critical-infra agent correctly chose **Weight:** needs-human in canonical vocabulary (baseline had invented tier: L / auto: ❌).
REFACTOR — no new format loopholes surfaced; the skill maps every documented RED failure to a Common-mistakes row.
Decisions
- Version 0.1.0 — new skill; project-discipline Rule 3 first-version clause (matches
delegate-taskstarting at 0.x). - Reference skill, ~900 words — exceeds the <500 word target for frequently-loaded skills, justified: it loads only when authoring/editing a task block, and a field reference needs the full table to be useful.
- The
needs-humancritical-infra list mirrorsdelegate-taskpre-flight Q0 and the ops runbook's "Critical-infra защита" — kept consistent on purpose.