skills/sdd-tasks/SKILL.md
Breaks down the design into an atomic, ordered, and verifiable task plan stored in tasks.md. Trigger: /sdd-tasks <change-name>, task plan, break down implementation, task breakdown.
npx skillsauth add fearovex/claude-config sdd-tasksInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Breaks down the design into an atomic, ordered, and verifiable task plan.
Triggers: /sdd-tasks <change-name>, task plan, break down implementation, task breakdown, sdd tasks
The task plan converts the design into an executable work list. Each task is atomic (one single thing), concrete (has a file path), and verifiable (can be marked as done).
It is the input for sdd-apply. Without an approved tasks file, nothing gets implemented.
When the orchestrator launches this sub-agent, it resolves the skill path using:
1. .claude/skills/sdd-tasks/SKILL.md (project-local — highest priority)
2. ~/.claude/skills/sdd-tasks/SKILL.md (global catalog — fallback)
Project-local skills override the global catalog. See docs/SKILL-RESOLUTION.md for the full algorithm.
Follow skills/_shared/sdd-phase-common.md Section F (Project Context Load) and Section G (Spec Context Preload). Both are non-blocking.
I must read:
mem_search(query: "sdd/{change-name}/design") → mem_get_observation(id).mem_search(query: "sdd/{change-name}/spec") → mem_get_observation(id).## Supersedes section:
mem_search(query: "sdd/{change-name}/proposal") → mem_get_observation(id).I identify the natural implementation order:
## Supersedes from proposal.md.INFO: no Supersedes section in proposal.md — skipping removal task generation and proceed to Step 4 with standard phase organization.For each REMOVED item in Supersedes:
Remove: [feature name] with:
For each REPLACED item in Supersedes:
Remove old: [old feature name] — delete/unregister the old implementationImplement new: [new feature name] — add the replacement (link to spec requirement)All removal and replacement tasks (from Step 3b) MUST be grouped into Phase 1: Removals and Replacements. Standard addition/implementation tasks start from Phase 2 or later. Phase 2 MUST NOT begin until Phase 1 is complete — enforce this with an explicit sequencing note in tasks.md.
Removal task format:
### Phase 1: Removals and Replacements
- [ ] 1.1 Remove: [feature name] from `path/to/file`
Linked spec: [Requirement name from spec, or "N/A — no spec for this removal"]
Files: `path/to/file` (DELETE), `path/to/other.ts` (remove registration/import)
Acceptance: File deleted AND related flows continue without runtime errors
- [ ] 1.2 Remove old: [old feature name] from `path/to/old-file`
Linked spec: [Requirement: Replacement requirement name]
Files: `path/to/old-file` (DELETE or MODIFY)
Acceptance: Old implementation fully removed; no lingering imports or references
- [ ] 1.3 Implement new: [new feature name] in `path/to/new-file`
Linked spec: [Requirement: new feature requirement]
Depends on: 1.2
Files: `path/to/new-file` (CREATE or MODIFY)
Acceptance: New implementation active; spec scenarios pass
---
⚠️ Phase 2 MUST NOT begin until all Phase 1 tasks are complete.
---
I group addition/implementation tasks into logical phases after Phase 1 (or Phase 1 if no removals):
Phase 1 — Removals and Replacements [if Supersedes has items] OR Foundation [if purely additive]
Phase 2 — Foundation: types, interfaces, schemas, configuration [if Phase 1 is Removals]
Phase N — Core: main business logic
Phase N+1 — Integration: connect with the rest of the system
Phase N+2 — Testing: tests for previous phases
Phase N+3 — Cleanup: remove temporary code, update docs
(I adapt phase names to the context of the change)
While analyzing each task, I MUST identify ambiguities, risks, or open decisions that could affect implementation. For each one found, I classify it as one of:
MUST_RESOLVE — A warning that blocks implementation until the user provides an explicit answer. Use this when:
"business rule decision — external system behavior is ambiguous"ADVISORY — A warning that is logged for awareness but does not block implementation. Use this when:
"performance consideration — does not affect correctness""style or naming preference — no impact on current task"Each warning classification MUST include a reason statement explaining why it belongs in its category.
Every warning identified in Step 4a MUST be recorded inline with the affected task in tasks.md, using the following formats:
MUST_RESOLVE format:
- [ ] X.Y Task description [WARNING: MUST_RESOLVE]
Warning: [human-readable warning text]
Reason: [classification reason, e.g., "business rule decision — external system field ambiguous"]
Question: [clarifying question derived from the warning]
ADVISORY format:
- [ ] X.Y Task description [WARNING: ADVISORY]
Warning: [human-readable warning text]
Reason: [classification reason, e.g., "performance consideration — does not affect correctness"]
Placement rules:
Example task with MUST_RESOLVE warning:
- [ ] 2.1 Create `src/services/payment.service.ts` with method `processPayment(dto: PaymentDto): Promise<PaymentResult>` [WARNING: MUST_RESOLVE]
Warning: Stripe invoice field for failure date is ambiguous — `status_transitions.marked_uncollectible_at` vs `status_transitions.voided_at` may both apply depending on invoice state.
Reason: business rule decision — external system behavior is ambiguous
Question: Which Stripe invoice field should be used to record the payment failure date?
I persist the task plan to engram:
Call mem_save with topic_key: sdd/{change-name}/tasks, type: architecture, project: {project}, content = full tasks markdown. Do NOT write any file.
If Engram MCP is not reachable: skip persistence. Return task plan content inline only.
Content format:
# Task Plan: [change-name]
Date: [YYYY-MM-DD]
Design: engram:sdd/[name]/design
## Progress: 0/[total] tasks
## Phase 1: [Phase Name]
- [ ] 1.1 Create `src/types/auth.types.ts` with interfaces `LoginRequest`, `LoginResponse`, `JwtPayload`
- [ ] 1.2 Create `src/schemas/auth.schema.ts` with Zod schemas for login validation
- [ ] 1.3 Modify `src/config/jwt.config.ts` — add `refreshSecret` and `refreshExpiresIn`
## Phase 2: [Phase Name]
- [ ] 2.1 Create `src/services/auth.service.ts` with methods `login()`, `logout()`, `refreshToken()`
- [ ] 2.2 Modify `src/repositories/user.repository.ts` — add `findByEmail()` method
- [ ] 2.3 Create `src/middleware/auth.middleware.ts` for JWT validation on protected routes
## Phase 3: [Phase Name]
- [ ] 3.1 Create `src/controllers/auth.controller.ts` with endpoints POST /login, POST /logout, POST /refresh
- [ ] 3.2 Modify `src/routes/index.ts` — register auth routes
- [ ] 3.3 Modify `src/app.ts` — integrate auth middleware on protected routes
## Phase 4: Testing
- [ ] 4.1 Create `tests/unit/auth.service.spec.ts` — unit tests for AuthService
- [ ] 4.2 Create `tests/integration/auth.controller.spec.ts` — endpoint tests
- [ ] 4.3 Verify scenario coverage from spec (review engram:sdd/[name]/spec)
## Phase 5: Cleanup
- [ ] 5.1 Update `README.md` — document new endpoints
- [ ] 5.2 Update `ai-context/architecture.md` if there were structural changes
---
## Implementation Notes
[Design decisions the implementer must keep in mind:]
- [important note 1]
- [important note 2]
## Blockers
[Tasks that cannot start until something external is ready:]
- [blocker]: [what resolves it]
[If none: "None."]
- [ ] 2.1 Create `src/services/payment.service.ts` with method `processPayment(dto: PaymentDto): Promise<PaymentResult>`
- [ ] Add payment logic
Rule: Each task must answer "which file and what specific change?"
Return ONLY this JSON block. Do NOT add free-form text, command suggestions, or implementation steps after it.
{
"status": "ok|warning|blocked",
"summary": "Plan for [change-name]: [N] phases, [M] total tasks. Estimate: [Low/Medium/High].",
"artifacts": ["engram:sdd/{change-name}/tasks"],
"next_recommended": ["sdd-apply"],
"risks": ["[blocker if any]"]
}
The orchestrator will present next_recommended to the user as /sdd-apply (hyphen-separated, with slash prefix). Do not format it yourself.
tasks.md + the JSON block. I NEVER implement any task, write code, or modify project files beyond creating tasks.mddevelopment
Governs AI-assisted generation of images, video, and audio (Gemini Nano Banana Pro, FLUX, etc.) from any project, with a focus on key security and cost control. Trigger: generate an image/illustration/asset with AI, "generate an image", nano banana, gemini image, generate video, configure an image API.
business
Turns an already-investigated customer issue into a short, non-technical engineering-to-CS brief: one natural message that leads with the finding (root cause, real scope, open question), ready to paste into Slack for the support team. Trigger: /support-brief, support brief, brief for support, resumen soporte.
development
Parks the current Claude Code session before going to sleep. Analyzes the conversation, writes a handoff document to docs/handoffs/ in the current project, mirrors the same summary to engram tagged with the session ID, and prints the exact `claude --resume <id>` command for tomorrow. Zero interaction — runs end-to-end on a single invocation. Trigger: /night-park, night park, park session, me voy a dormir, guardar sesion.
testing
Interactive creator for a project feature: scaffolds the domain knowledge markdown at ai-context/features/<slug>.md AND the antenna skill at .claude/skills/<slug>/SKILL.md, both from the canonical templates. Also registers the antenna in the project's CLAUDE.md. Trigger: /feature-define <name>, define feature, documentar funcionalidad, nueva feature.