tasks
Skill187 starsChanged 5 months agoMITView on GitHub
Use to break a designed feature into atomic, ≤1-day tasks with a dependency graph, a per-task Definition of Done, and a machine-readable tasks.json that the implement engine consumes. Triggers on "task breakdown for {slug}", "break down tasks for {slug}", "tasks for {slug}", "plan the work for {slug}", "/sdd:tasks {slug}", "розбий на задачі {slug}", "декомпозиція {slug}", "список задач". Reads spec.md + sad.md + Accepted ADRs (+ data-model + openapi if present), writes docs/features/{slug}/tasks/{_epic,tracker,<task>}.md AND docs/features/{slug}/tasks.json. Tracker export to any issue tracker is optional and tool-neutral. Hard-refuses if spec.md or sad.md or an Accepted ADR is missing.
49 other projects use a version of this.
Adopted by
Most recently taken up by
- ai-search-guru/getcito-worlds-first-open-source-aio-aeo-or-geo-tooltheir own version, first seen Nov 8, 2026
- tandregbg/core-claude-skillstheir own version, first seen Nov 4, 2026
- kenbanks-peng/skillstheir own version, first seen Nov 1, 2026
- shakhruz/mila-coretheir own version, first seen Nov 1, 2026
- ananthanandanan/skillstheir own version, first seen Nov 1, 2026
- ansvisor/ansvisortheir own version, first seen Nov 1, 2026
Used with
Projects with it also use send-user-message, tinyagi-admin and 8 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
Maliot100XSkillsend-user-message
Send a proactive message to a paired user via their channel (Discord, Telegram, or WhatsApp). Use when the agent needs to notify, alert, or send an unsolicited message to a user — especially during heartbeat invocations, scheduled tasks, or when the agent wants to reach out without a prior user message in the current conversation. Triggers: 'send message to user', 'notify user', 'alert user', 'message the user on discord/telegram/whatsapp', or any need to proactively communicate with a paired sender.
Also in 4 projects that use this
jlia0Skilltinyagi-admin
Manage and operate the TinyAGI system itself — agents, teams, settings, queue, tasks, daemon lifecycle, and source code. Use when the agent needs to: list/add/remove/update agents or teams, check queue status, view logs, start/stop/restart TinyAGI, change settings (provider, model, channels), send messages to the queue, manage tasks, retry dead-letter messages, view recent responses, modify TinyAGI source code or configuration, or perform any administrative operation on the TinyAGI platform. Triggers: 'manage tinyagi', 'add an agent', 'remove a team', 'check queue', 'view logs', 'restart tinyagi', 'change provider', 'update settings', 'create a task', 'modify tinyagi code'.
Also in 3 projects that use this
ArvorCoSkillconstitution
Create or update the project constitution - personalized governance and coding principles. Use when starting a project or updating project standards. Triggers on: create constitution, update principles, set project rules.
Also in 4 projects that use this
GoogleSkillquality
Evaluates whether a GitHub issue is spam, empty, needs more information, or is OK to proceed.
Also in 3 projects that use this
anyprotoSkillskills-manager
Context-aware routing to skills and hooks management. Use when troubleshooting skill activation, fine-tuning keywords, or managing the automated documentation system.
Also in 3 projects that use this
bivexSkillschedule
Управление расписанием занятий с специалистами по самосовершенствованию. Используй когда пользователь спрашивает о расписании, хочет добавить/удалить/перенести занятие, посмотреть план на день или неделю.
Also in 4 projects that use this
Other versions49 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 49
- jlia0/tinyclaw★ 3.6ksame name
- TinyAGI/tinyagi★ 3.6ksame name
- TinyAGI/tinyclaw★ 3.6ksame name
- me2resh/apexyard★ 542same name
- snarktank/compound-product★ 542same name
- ai-search-guru/getcito-worlds-first-open-source-aio-aeo-or-geo-tool★ 432same name
- ansvisor/ansvisor★ 233same name
- mp-web3/claude-starter-kit★ 108same name
- ArvorCo/Relentless★ 98same name
- ariffazil/arifOS★ 53same name
39 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository22 other files it gives its agents.
- apiSkill
- clarifySkill
- classify-sizeSkill
- configSkill
- data-modelSkill
- decide-adrSkill
- designSkill
- design-systemSkill
- fixSkill
- glossarySkill
- implementSkill
- interviewSkill
- plan-testsSkill
- reviewSkill
- roadmapSkill
- scaffoldSkill
- screensSkill
- sequencesSkill
- shipSkill
- specifySkill
- surveySkill
- ux-flowsSkill
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 2 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 42 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 23
Every inlined chunk carries a one-line provenance signature — <file> §<section>, <identifier>, verbatim|abridged, e.g.
- Very specific: line 35
Read directly (not via an index): spec §5 AC + §6 NFR, sad §5 module boundaries + §6 runtime + §9 ADR index, each Accepted ADR, and — if …
- Very specific: line 48
Fill the task body — self-contained, not a link list: Every section of ./templates/task.md is sourced from a named artifact:
- Very specific: line 62
Optional tracker export: If an issue-tracker MCP is connected (Jira / Linear / GitHub Issues / Redmine — whichever the repo uses), offer to …
- Distinctive: line 98
Every task file is self-contained: a non-empty *Inlined context* and *Acceptance criteria*, a *Data delta* and an *API contract* section …
- Very specific: line 100
Every task's inlined-line count matches its context_budget band.
- Distinctive: line 101
Every task ≤1 day with an owner.
- Very specific: line 102
Every spec §5 AC is covered by ≥1 task's acs.
“Common” is measured: kept by at least 6 in 10 of the 42 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Skill: tasks
Task-breakdown generator: atomic tasks ≤1 day, each a separately reviewable change (≤~500 LOC preferred), with a visible dependency graph and a Definition of Done per task. One task = one focused session = one PR. "Build the feature" is not a task — break it down.
A task file is self-contained. The rule that governs every task body: inline the slice the task actually needs, name where it came from, and keep the link as the fallback for when the slice turns out not to be enough. A task that only points at spec.md §AC-N makes the executing agent go and rebuild the context this breakdown already had — it burns its budget on rediscovery and still misses. Alongside the human-facing markdown, this skill emits tasks.json, the contract the implement engine reads to build its dependency DAG.
Every inlined chunk carries a one-line provenance signature — <file> §<section>, <identifier>, verbatim|abridged, e.g. «spec.md §5, AC-02, verbatim» — never «see the spec». The signature is what makes an inline re-checkable: an inline is a snapshot taken at breakdown time, upstream can move after it, and the source always wins.
Task prose (title / dod, the markdown bodies) follows artifact_language — the tasks.json machine fields (id, layer, deps, acs, files_hint, slug) and tracker states stay English → ../_shared/artifact-language.md. An inlined chunk is quoted verbatim in the language its source artifact is written in; the signature is not translated.
Owner
Tech Lead.
Inputs
<slug>— feature slug.- Gate (hard refuse):
docs/features/<slug>/spec.md+docs/features/<slug>/sad.md+ ≥1 Accepted ADR inadr/. Missing → STOP and point at the producing skill (specify/design/decide-adr). - Read directly (not via an index): spec §5 AC + §6 NFR, sad §5 module boundaries + §6 runtime + §9 ADR index, each Accepted ADR, and — if present —
data-model.md,contracts/openapi.yamlandscreens.md(the screen manifestuitasks cite). - (Expected)
sad.mdfrontmattertarget_surfaces— gates which layers appear (step 4). Absent or empty → warn («surfaces undeclared — re-rundesign, or proceeding asbackend-service») and treat as[backend-service](→../_shared/surfaces.md); never silently emituitasks for an undeclared surface.
Protocol
- Prereq check (hard). spec.md + sad.md + ≥1 Accepted ADR, else refuse with the missing one named.
- Read upstream directly. Each task will carry the slices it needs, quoted from the source — so read the source text itself, never a paraphrase of it: the quote goes into the file.
- Read the templates from disk, then scaffold output. Read
./templates/task.mdbefore writing a single task file — its frontmatter keys and its##section list are the contract, and its<!-- instruction … -->comments are the per-section brief. Same for./templates/_epic.mdand./templates/tracker.md. Never write a task from memory of what a task file looks like: the self-contained format (theblocks/context_budgetkeys, the nine sections, the provenance signatures) is younger than most recollections of it, and a remembered shape silently reverts this skill to the link-only tasks it exists to replace. Output:docs/features/<slug>/tasks/with_epic.md(summary + links + the DAGflowchart),tracker.md(status table), one<task-slug>.mdper task. Validate the_epic.mdflowchartper../_shared/mermaid-check.md(render-parse withmmdcif available, else the structural lint; fix before committing). - Identify work-items by layer. Generic, stack-agnostic layers:
migration(DB) ·domain(entities/invariants) ·infra(repo/persistence) ·app(service/use-case) ·ports(handler/API) ·ui(UI components / screens / view-state — only when a UI surface is declared) ·tests·wiring(composition/DI) ·docs.sad.mdfrontmattertarget_surfacesgates which layers appear (→../_shared/surfaces.md): aweb-frontend/mobile-app/desktop-appsurface addsuitasks; a backend-only feature emits domain/infra/app/ports (noui); aclifeature app/ports; aworkerdomain/infra. Eachuitask names the existing components / tokens / styling it reuses (fromarchitecture-map.md§Frontend and thedocs/design-system.mdinventory) — a new component is listed only when no existing primitive fits — and, whendocs/features/<slug>/screens.mdexists, cites theSCR-NNid(s) + the states it builds (the manifest is the task's screen contract;implementbuilds to those states). List 8–20 items by size (see../_shared/size-matrix.md). - Atomic check — work size and context size. Each task ≤1 working day. More → split. And atomic in context: count the inlined lines the finished body will carry (the non-empty lines from
## Why (user story)through## Acceptance criteria) against thecontext_budgetbands —S≤40 ·M≤120 ·Lbeyond. AnLis a split signal: either split the task, or keep it and write the reason on the frontmatter line itself (context_budget: "L" # justified: <one line>). An unjustifiedLfails the step-13 self-check. A change >~500 LOC is a smell that the task is too wide. Contract-task rule: a task whose content is changing a shared interface/type that existing implementations must satisfy in a statically-checked language (Go, TS, Java, …) is not emitted standalone — it cannot be committed green on its own (the compile-time check breaks every implementer). Fold it into the first implementing task. If a split is still warranted (several implementers), mark the pair a compile-coupled lane: both tasks list the contract file infiles_hint(reusing the existing overlap-lane mechanics — notasks.jsonschema change), soimplementserializes them and may close them with one shared gate + commit. - Dependency graph. For each task,
deps: [...]— and its exact inverseblocks: [...], the ids waiting on this one, so a task shows what it holds up without the reader reconstructing the graph. Identify parallel branches (e.g. the migration and a pure-domain task can start together). This graph IS the DAGimplementwill topologically sort into phases. - Per-task DoD. Each task is testable: «unit tests for the new validation pass», «migration applies and reverts cleanly», «handler returns the spec'd outcome for AC-03». No subjective «done when I say so».
- AC refs + files hint. Each task lists the
acsit satisfies (spec §5 IDs) and afiles_hint— the directories/files it will touch.files_hintletsimplementserialize tasks whose file sets overlap, andlayer: migrationis always serialized (ordered migration sequence); a compile-coupled pair (step 5) shares the contract file across bothfiles_hints for the same reason;layer: uiis not auto-serialized — UI tasks parallelize unless theirfiles_hintoverlaps. A migration task'sfiles_hintis the staged pairdocs/features/<slug>/migrations/<NN>_*(whichimplementpromotes into the livemigrations/when it runs the task) — not a livemigrations/path. Fill the task body — self-contained, not a link list. Every section of
./templates/task.mdis sourced from a named artifact:- Place in the sequence ← the DAG (step 6):
depsandblocksby id + title, the wave, and the lane it shares (overlappingfiles_hint/ compile-coupled pair). - Why (user story) ←
spec.md§4 — theUS-NNblock verbatim, then one sentence on what this task contributes to it. - Inlined context ←
spec.md§1 committed approach ·spec.md§6 NFR +sad.md§11 for the Hard Rules this task must not violate ·sad.md§5 for the building block it lives in (boundary + collaborators) ·sad.md§6 for the runtime steps it implements, error branches included · the decision line of each Accepted ADR that constrains it ·screens.mdSCR-NN+ the states, foruitasks. - Data delta ←
data-model.md— only the entity/columns/constraints/indexes this task touches, plus the staged migration pair forlayer: migration. No schema change → the literal «No DB changes.», never an empty section. - API contract ←
contracts/openapi.yaml— only the operations this task implements or calls, with the request/response fields and error codes it owns. No surface → «Internal — no API surface.» - Acceptance criteria ←
spec.md§5 — the Given-When-Then of every id inacs, verbatim. The tests assert these; a paraphrase here becomes a wrong test downstream. - Edge cases ← the negative branches of those §5 ACs + the
sad.md§6 error paths, as a case/behaviour table.
Record the file you just wrote as the task's
file(repo-relativedocs/features/<slug>/tasks/<task-slug>.md) — step 11 emits it intotasks.json, and that pointer is the only wayimplementreaches this body.Signature. Each chunk ends with
<file> §<section>, <identifier>, verbatim|abridgedand the link to the full text. Cutting a long chunk: keep the sentences that change what gets built (the constraint, the number, the branch, the error code), drop narrative and anything belonging to another task, mark the resultabridged, keep the link. Budget: only this task's ACs, only the fields and endpoints it touches — a task carrying another task's context is as broken as one carrying none. The template also addresses the executing agent directly: an insufficient or code-contradicting slice means go read the named file, never invent the missing part.- Place in the sequence ← the DAG (step 6):
- Estimate + owner + context budget.
estimateS/M/L or hours (how long the work takes); a named owner (or<TBD lead>);context_budgetS/M/L — the honest cost of holding this task, measured (not guessed) as the step-5 count:S≤40 inlined lines and ≤1 extra file to open ·M≤120 lines, 2–4 files ·Lbeyond, carrying its# justified:reason. Adaptestimateto the team's sizing if any; the budget bands are fixed. - Emit
tasks.json(step contract below) — the same model the markdown reflects, in machine form, atdocs/features/<slug>/tasks.json. Every entry carriesfile, the repo-relative path of the markdown written in step 9; that pointer is what letsimplementhand the agent the inlined context instead of sending it back upstream. - Optional tracker export. If an issue-tracker MCP is connected (Jira / Linear / GitHub Issues / Redmine — whichever the repo uses), offer to create tickets from
_epic.md+ the task files. Otherwise provide copy-paste-ready bodies. Never hard-bind to one tracker. - Self-check. Every task ≤1 day; DAG acyclic with ≥1 parallel branch where the work allows;
blocksis the exact inverse ofdeps; DoD per task; every task's Inlined context and Acceptance criteria are non-empty; no upstream reference without a provenance signature; every task's inlined-line count sits inside itscontext_budgetband, and everyLcarries its# justified:reason; everyfilepoints at a markdown that exists on disk;acscover every spec §5 AC;tasks.jsonvalidates against the contract. - Commit + handoff. After the step-13 self-check passes, commit per
../_shared/write-and-commit.md— the wholetasks/directory +tasks.jsonare one commit (one model rendered twice):tasks: <slug> breakdown + tasks.json. Then emit the stage-handoff block per../_shared/handoff.md— What I did + Review (tasks/,tasks.json) + Run next — resolve the next stage per.route(the Routes table in../_shared/size-matrix.md): forward/sdd:plan-tests <slug>(onquickit always collapses to the inline## Test planinspec.md), then/sdd:implement <slug>;plan-tests' N/A condition = every task's DoD already names its test — only then skip target/sdd:implement <slug>directly (auto-skip onquick, offered↳ oronstandard, never onfull).
tasks.json contract (read by implement)
{
"slug": "<slug>",
"tasks": [
{
"id": "T1",
"title": "imperative, specific",
"layer": "migration|domain|infra|app|ports|ui|tests|wiring|docs",
"deps": ["T0"],
"acs": ["AC-01", "AC-02"],
"dod": "one testable sentence",
"files_hint": ["path/or/dir/the/task/touches"],
"file": "docs/features/<slug>/tasks/<task-slug>.md",
"status": "todo"
}
]
}fileis what makes the inlined context reachable. It is a repo-relative path (same convention asfiles_hintin the same object — not feature-folder-relative), and it is the pointerimplementfollows to hand the executing agent its task file. Without it the engine physically cannot find the markdown, and everything inlined per step 9 is read by humans only. Emit it for every task; a task whosefiledoes not exist on disk is a hard error, not a warning.- The markdown task files and
tasks.jsonuse the same field names (deps,acs,files_hint, …) — this skill emits both from one model, so there's no translation layer to drift. Downstream parses the JSON:implementbuilds its DAG fromtasks.jsonand reads the markdown body throughfile; the frontmatter keys are the human-readable mirror of the same model. Never rename or drop one on either side — the mirror is what keeps them auditable against each other. blocksandcontext_budgetstay markdown-frontmatter only and are deliberately absent from the JSON:blocksis derivable fromdeps(it is its inverse) andcontext_budgetis a breakdown-time budget check (step 5 / step 13), not an input to the DAG. Do not «fix» that by adding them totasks.json.fileis the opposite case and no exception to this rule: it adds no content, it is a pointer to content the engine otherwise cannot reach.statusis optional —todo | in_progress | blocked | review | done; absent meanstodo, so a breakdown written before this field still loads. This skill emits"status": "todo";implementkeeps it live (its Status protocol) and reads it on resume.step(SELECT · RED · GREEN · REFACTOR · GATE · REVIEW · COMMIT, or a blocked reason) is the opposite case tofile: likeblocksit lives in the markdown only — the task frontmatter and thetracker.mdStep column — because it is progress narration, not a DAG input.depsmust form a DAG (no cycles) and reference only ids present in the file.layer: migrationtasks are serialized byimplement(ordered migration sequence);layer: uiis not auto-serialized (UI tasks parallelize); tasks with overlappingfiles_hintare serialized into the same lane regardless of layer — a compile-coupled pair (step 5) rides this same mechanism via the shared contract file, andimplementmay commit the pair together (one gate, bothSDD-Tasktrailers).- Which layers are present is gated by
sad.mdfrontmattertarget_surfaces(a UI surface addsui; a backend-only feature has none) →../_shared/surfaces.md.
Definition of Done
tasks/_epic.md+tasks/tracker.md+ onetasks/<task>.mdper task exist.- Every task file is self-contained: a non-empty Inlined context and Acceptance criteria, a Data delta and an API contract section that either carry a slice or state the explicit «none», and a provenance signature on every quoted chunk — no bare «see the spec».
tasks.jsonexists and validates: acyclicdeps, everyacsentry is a real spec §5 AC, every task has adod, afiles_hintand afilethat resolves to an existing markdown.- Every task's inlined-line count matches its
context_budgetband; anLcarries its# justified:reason on the frontmatter line. - Every task ≤1 day with an owner; the DAG shows ≥1 parallel branch where the work allows.
- Every spec §5 AC is covered by ≥1 task's
acs. - The step-13 check (atomicity, acyclic DAG,
deps/blocksinverse, per-task DoD, self-containment, signature coverage, context budget,fileresolves, AC coverage,tasks.jsoncontract) is this skill's structural self-check (../_shared/self-check.md); its result is reported in the handoff.
Anti-patterns
- «Build the feature» as one task. Break into ≥8 atomic ones.
- 5-day monster tasks → unreviewable. Split.
- No dependencies → parallel starts that block each other the next day.
- No per-task DoD → «done when I decide».
- No owner → nobody starts, or everyone assumes the other will.
- Hard-binding to one tracker (Jira-only language). Export is optional and tool-neutral.
- A task that is only links («derives from spec §5, see sad §6») — the executing agent goes off to rebuild the context this breakdown already had, burns its budget, and still misses. Inline the slice.
- An inline with no provenance signature — an unattributable quote can't be re-checked when upstream moves, so nobody trusts it or updates it.
- A task file with no
filepointer intasks.json— the body is then unreachable byimplement, every inlined slice is decoration, and the agent goes back to re-reading spec/sad. This is the failure mode the inlining exists to kill. - A wholesale paste of a whole upstream document — the opposite failure, and just as expensive. Inline the slice THIS task needs, cut long chunks and mark them
abridged, link the rest. - A task written from memory instead of from
./templates/task.md— the giveaway is a task with## Why/## What/## Notesinstead of the nine sections, or a frontmatter missingblocks/context_budget. Re-read the template and rewrite. tasks.jsonentries withoutfile— the engine then cannot reach the body, every inlined slice becomes decoration, and the executing agent goes back to re-readingspec.md. That is the exact failure this format exists to remove.tasks.jsonout of sync with the markdown — they must reflect the same model.- A task that violates a Hard Rule from spec §6 / sad §11 (e.g. «edit another module» when the architecture forbids it).
References & template
./templates/_epic.md·./templates/tracker.md·./templates/task.md../_shared/size-matrix.md— how many tasks for the feature size.../_shared/surfaces.md—target_surfaces(read fromsad.md) gates which layers appear; a UI surface adds theuilayer (not auto-serialized).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

