alpacalabsllc/tasklist
Maintain a project's canonical TASKS.md or an opted-in studio portfolio task register with permanent IDs, ownership, lifecycle dates, and source provenance. Use to list, add, update, complete, or cancel tasks, view tasks across registered projects, or import selected action items from project artifacts. Do not use for planning the work itself or silently turn every proposed action into a task.
npx skills add https://github.com/AlpacaLabsLLC/skills-for-architects --skill tasklist
Own exactly one resolved TASKS.md: either a project's register or an opted-in studio portfolio register. Give every action a permanent identity, explicit lifecycle, and traceable source. This skill manages actions; /as:workplan may define future work, but it is neither required nor invoked implicitly.
/as:tasklist list
/as:tasklist add Coordinate reflected ceiling plan with electrical — owner: Sam — due: 2026-08-03
/as:tasklist update T0012 owner: Priya due: 2026-08-07
/as:tasklist complete T0012
/as:tasklist cancel T0014 reason: superseded by T0018
/as:tasklist import meetings/YYYY-MM-DD-owner-review.md#A3
TASKS.md; portfolio task mode uses the studio-root TASKS.md. They are never simultaneously writable for the same studio.T0001, T0002, and so on. Never delete, reuse, or renumber an ID. Allocate max(all parseable IDs) + 1, including completed and cancelled rows; gaps stay gaps.conversation:YYYY-MM-DD#instruction-N. Never invent a file or persist an absolute machine path.link, update, or new and wait for the user's choice./as:workplan are optional conveniences, never runtime requirements.Resolve a typed target once before any operation. /as:tasklist with no arguments means list; do not require an argument and do not open a confirmation gate for a read-only list.
skills/project/references/context-resolution.md. Its typed result and validated choices are authoritative; do not reimplement manifest or filesystem validation in prose.Task register from STUDIO.md and confirm the project is a matching registered descendant:project mode returns project-register at <project-root>/TASKS.md;portfolio mode returns portfolio-filter at <studio-root>/TASKS.md, filtered to the Project ID.A standalone project with no owning studio uses project mode.
studio-picker, select the sole choice or use one structured gate listing validated projects plus All projects. Do not ask the same question first in prose.no-projects, offer /as:studio create-project; for no-context, ask for a project/studio path or offer /as:studio; for invalid, stop. Never create a register at an inferred directory.TASKS.md. Validate each register independently, preserve local IDs, and display them as <project-id>:<task-id> (for example 2401:T0007). Never persist the merged view or renumber a task.<project-id>:TNNNN and mutate only that project's register. A read-only merged view itself is never a mutation target.Create TASKS.md only after a valid target has been resolved and the first mutation is previewed and confirmed. Project mode uses bundled templates/tasks.md; portfolio mode uses templates/portfolio-tasks.md. Resolve templates relative to this skill's own directory. If bundled-resource resolution is unavailable, reproduce the applicable schema rather than searching unrelated installed copies.
The task table has these required columns:
| Field | Contract |
|---|---|
| ID | Permanent TNNNN identifier |
| Description | One observable action |
| Owner | Named person, role, or Unassigned |
| Due | YYYY-MM-DD or — |
| Status | open, in-progress, blocked, completed, or cancelled |
| Created | YYYY-MM-DD |
| Updated | YYYY-MM-DD |
| Completed | YYYY-MM-DD or — |
| Cancelled | YYYY-MM-DD or — |
| Source | Canonically relative Markdown link with an exact heading/stable item ID, or conversation:YYYY-MM-DD#instruction-N |
| Related | Optional plan-unit or decision link, otherwise — |
The portfolio schema adds Project ID immediately after ID. Every value must match one eligible active or on-hold project in the current studio manifest. File links are relative to the studio register and begin with that project's registered path; validation also confirms they remain within that project. Portfolio task IDs remain permanent across the studio; project-filtered views never change them.
Lifecycle history lives under ## History, one append-only bullet per change:
- 2026-07-21 — T0007 created as `open` from source item `meetings/YYYY-MM-DD-owner-review.md#A3`.
- 2026-07-23 — T0007 owner changed from Sam to Priya; status changed from `open` to `in-progress`.
- 2026-07-28 — T0007 completed.
Treat missing required columns, duplicate IDs, invalid IDs or statuses, unparseable required dates, or a task row whose Source is neither a valid project-relative item link nor a valid canonical conversation token as malformed. Do not normalize or rewrite such a file without authorization.
<project-id>:<task-id> and label missing or malformed registers independently; one malformed project must not make another project appear empty.Unassigned, —, and the current date are valid explicit defaults. For a direct instruction with no file source, allocate the next unused conversation:YYYY-MM-DD#instruction-N token for that date and show it in the preview.Status: completed, Updated: today, and Completed: today.Status: cancelled, Updated: today, and Cancelled: today.Imports may read any user-specified artifact. Common sources are plans/, meetings/, site-reports/, and decisions/, but none is required.
TASKS.md.If direct invocation of another skill is unavailable, preserve the source and print the exact /as:tasklist import <path>#<item> command. Never claim an import occurred without reading the resulting TASKS.md.
When TASKS.md is malformed:
After a mutation, re-read the canonical register and report the project identity, affected permanent IDs, resulting statuses, and source links relative to the owning project or studio as appropriate. After a read-only operation, state that no files changed.
Take alpacalabsllc/tasklist from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.