Skip to main content

task-planning

Guides agents through DAG task decomposition, dependency analysis, effort estimation, and pre-mortem failure analysis. Use when creating or revising implementation plans from feature requirements.

ソース情報

リポジトリ
zebbern/termstack
ソースの最終更新活動
2026年4月10日 22:53
検出された SKILL.md の言語
英語
スター
4
フォーク
3

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
task-planning
description
Guides agents through DAG task decomposition, dependency analysis, effort estimation, and pre-mortem failure analysis. Use when creating or revising implementation plans from feature requirements.
disable-model-invocation
true
argument-hint
Feature requirements or critic feedback to plan from
tags
["agloop","planning","dag","decomposition","estimation"]
# Task Planning ## When to Use This Skill Load this skill when: - Creating an implementation plan from feature requirements (Planner agent) - Revising a plan after critic feedback (Planner agent, revision mode) - Validating a plan's structure before approving it (Coordinator) - Checking plan integrity (dependency cycles, missing criteria) ## DAG Decomposition Methodology ### Step 1: Identify Atomic Deliverables Decompose the feature into the smallest independently testable units of work. Each task must be a **deliverable**, not a module or abstraction. **Good task titles** (deliverable-focused): - "Add search API endpoint returning paginated results" - "Create user profile page with avatar upload" - "Implement rate limiting middleware for public endpoints" **Bad task titles** (module/abstraction-focused): - "Create SearchHandler class" - "Set up database schema" - "Write utility functions" **Decomposition rules:** 1. Each task produces something a user or developer can observe or test 2. Each task modifies 1-5 files (if more, split it) 3. Each task has clear start and end states 4. Each task can be verified independently of future tasks ### Step 2: Map Dependencies For every task, ask: "What must be DONE before this task can START?" ``` dependency_rules: - A task depends on another ONLY if it literally cannot be implemented without the other's output - Shared utilities are a dependency; shared concepts are NOT - Database schema tasks typically come first - API endpoints depend on their data layer - UI components depend on their API endpoints - Integration tests depend on the components they test ``` ### Step 3: Check for Cycles If task A → B → C → A exists, the plan is invalid. To detect: ``` algorithm: topological_sort 1. Build adjacency list from depends_on fields 2. Compute in-degree for each task 3. Initialize queue with all tasks where in-degree = 0 4. While queue is not empty: a. Dequeue task, add to sorted order b. For each dependent: decrement in-degree c. If in-degree reaches 0, enqueue it 5. If sorted order length < total tasks → CYCLE EXISTS - Remaining tasks form the cycle — redesign their dependencies ``` **Cycle resolution strategies:** - Extract shared dependency into its own task - Merge tightly coupled tasks into one - Use interface/contract as the dependency boundary instead of implementation ### Step 4: Topological Ordering Order tasks so that every task appears after all its dependencies. Within the same dependency level, order by: 1. Foundation tasks first (fewer dependents → more dependents) 2. Lower task ID as tiebreaker (preserves planner intent) ## Pre-Mortem Analysis Framework Before execution begins, assume the project has FAILED. Identify why. ### Failure Mode Identification For each task and for the project as a whole, identify potential failure modes: | Category | Example Modes | | ------------ | ------------------------------------------------------------------- | | Integration | API contract mismatch, incompatible data formats, version conflicts | | Data | Migration failures, data loss, schema drift, concurrent access | | Performance | N+1 queries, unbounded fetches, missing indexes, memory leaks | | Security | Injection points, auth bypass, data exposure, CSRF | | Edge Cases | Empty states, max limits, Unicode input, concurrent mutations | | Dependencies | External API down, library breaking change, missing peer deps | | Scope | Underestimated complexity, hidden requirements, ambiguous specs | ### Likelihood × Impact Scoring For each failure mode, assess: ``` likelihood: low | medium | high low = unlikely given the codebase and approach medium = possible, has happened in similar projects high = probable without explicit mitigation impact: low | medium | high | critical low = cosmetic issue, easy fix medium = feature degraded, user-visible but recoverable high = feature broken, requires significant rework critical = data loss, security breach, or cascading failures ``` **Mitigation required if:** likelihood ≥ medium OR impact ≥ high. ### Pre-Mortem Template ```yaml pre_mortem: overall_risk_level: medium # low | medium | high | critical critical_failure_modes: - mode: "Database migration fails on existing data with NULL values" likelihood: medium impact: high mitigation: "Add NOT NULL with DEFAULT in migration, backfill script, test with production data snapshot" - mode: "Search endpoint returns unbounded results on empty query" likelihood: high impact: medium mitigation: "Enforce max page_size=100, require at least one filter parameter" assumptions: - "PostgreSQL 14+ is available in all environments" - "Existing auth middleware handles JWT validation" - "No concurrent schema migrations are running" ``` ## Task Writing Standards ### Required Fields Every task in `plan.yaml` must have ALL of these fields: | Field | Type | Description | | --------------------- | -------- | -------------------------------------------- | | `id` | string | Format: `task-NNN` (zero-padded to 3 digits) | | `title` | string | Deliverable-focused, action-verb start | | `description` | string | Detailed requirements for the implementer | | `depends_on` | string[] | Task IDs this depends on (empty if none) | | `acceptance_criteria` | string[] | Specific, verifiable criteria (≥1) | | `failure_modes` | object[] | Per-task risk analysis | | `estimated_effort` | enum | `small` \| `medium` \| `large` | | `files_to_modify` | string[] | Relative paths to create/modify | | `files_to_read` | string[] | Relative paths for context | | `specification_adherence` | object | `{ required_patterns[], forbidden_patterns[], tech_choices[] }` | ### Acceptance Criteria Standards Criteria must be **specific and verifiable** — a verifier must be able to confirm pass/fail with evidence. **Good criteria:** - "GET /api/search?q=test returns 200 with JSON body containing `results` array" - "File `src/middleware/rateLimit.ts` exports `rateLimitMiddleware` function" - "Error response for invalid input returns 400 with `{ error: string }` body" - "Component renders loading skeleton when `isLoading` is true" **Bad criteria:** - "Search works correctly" - "Error handling is implemented" - "Code is clean and well-structured" - "Performance is acceptable" ### Effort Estimation Guidelines ``` small: 1-2 files, simple logic, clear pattern to follow Examples: add a config value, create a simple utility, update a type Typical time: 1 executor delegation medium: 3-5 files, moderate complexity, some design decisions Examples: new API endpoint with validation, component with state management Typical time: 1-2 executor delegations large: 6+ files, complex logic, cross-cutting concerns Examples: auth system, search with indexing, real-time sync Typical time: 2-3 executor delegations (consider splitting) ``` **Rule:** If estimated_effort is `large`, consider splitting into smaller tasks. ## plan.yaml Output Format ```yaml plan_id: "plan-YYYYMMDD-HHmmss" feature: "verbatim user request" created_at: "2026-03-01T14:30:22.000Z" updated_at: "2026-03-01T14:30:22.000Z" status: "draft" pre_mortem: overall_risk_level: medium critical_failure_modes: - mode: "description of what could go wrong" likelihood: medium impact: high mitigation: "prevention or recovery strategy" assumptions: - "assumption the plan depends on" tasks: - id: "task-001" title: "Deliverable-focused title" description: "Detailed requirements for implementer" depends_on: [] acceptance_criteria: - "Specific, verifiable criterion" failure_modes: - mode: "what could go wrong" likelihood: low impact: medium mitigation: "how to handle it" estimated_effort: small files_to_modify: - "src/path/to/file.ts" files_to_read: - "src/path/to/context.ts" specification_adherence: required_patterns: - "pattern that must be followed" forbidden_patterns: - "pattern that must not appear" tech_choices: - "technology choice constraint" dag_edges: - ["task-001", "task-002"] critique_history: [] ``` ## plan.md Output Format ```markdown # Implementation Plan: {feature_name} **Created:** {created_at} **Status:** {status} **Risk Level:** {overall_risk_level} ## Summary {1-3 paragraph summary of the approach} ## Pre-Mortem Analysis ### Critical Risks | Risk | Likelihood | Impact | Mitigation | | ------ | ------------ | -------- | ------------ | | {mode} | {likelihood} | {impact} | {mitigation} | ### Assumptions - {assumption} ## Task Plan ### Task {id}: {title} - **Effort:** {estimated_effort} - **Depends on:** {depends_on or "none"} - **Files:** {files_to_modify} - **Acceptance Criteria:** 1. {criterion} ## Dependency Graph {text-based DAG visualization} ## Critique History {iterations with objections and responses} ``` ## Verification A valid plan satisfies ALL of these checks: 1. **Structural integrity**: Every `depends_on` references an existing task ID 2. **No cycles**: Topological sort produces a valid ordering of all tasks 3. **Criteria completeness**: Every task has ≥1 acceptance criterion 4. **Criteria quality**: Every criterion is specific and verifiable (no vague language) 5. **Pre-mortem present**: `pre_mortem` section exists with ≥1 failure mode and ≥1 assumption 6. **DAG edges consistent**: `dag_edges` matches the `depends_on` fields in tasks 7. **Effort estimated**: Every task has a valid `estimated_effort` 8. **Files specified**: Every task has non-empty `files_to_modify` 9. **IDs sequential**: Task IDs follow `task-NNN` format, are unique, and sequentially ordered 10. **No orphans**: Every task is either a root (no deps) or reachable from a root via the DAG
GitHubで見る