| name | Dependency Analysis |
| description | Analyze task dependencies including finding blocked tasks, checking dependency chains, and identifying bottlenecks. Use when investigating why tasks are blocked or planning parallel work. |
| allowed-tools | mcp__task-orchestrator__query_container, mcp__task-orchestrator__query_dependencies |
Dependency Analysis Skill
Purpose
This Skill helps you analyze task dependencies within Task Orchestrator to:
- Find all blocked tasks in a feature
- Analyze dependency chains to understand task relationships
- Identify bottleneck tasks that are blocking multiple others
- Recommend which dependencies to resolve first for maximum parallel work
When to Use This Skill
Use Dependency Analysis when:
- ✅ User asks "what's blocking progress?" or "why can't we start this task?"
- ✅ Planning parallel work across team members
- ✅ Feature appears stalled with no tasks in progress
- ✅ Need to prioritize which tasks to complete first
- ✅ Investigating circular dependencies
- ✅ Optimizing task execution order
Don't use this Skill when:
- ❌ Creating new dependencies (use
manage_dependencydirectly) - ❌ Removing dependencies (use
manage_dependencydirectly) - ❌ Just checking a single task's dependencies (use
query_dependenciesdirectly)
Core Workflows
Workflow 1: Find All Blocked Tasks
When to use: User wants to know what tasks can't be started yet
Steps:
- Get feature ID (from context or ask user)
- Search for all tasks in feature:
query_container(operation="search", containerType="task", featureId=<id>) - For each task, check dependencies:
query_dependencies(taskId=<id>, direction="incoming") - Filter tasks that have incomplete blocking dependencies
- Present summary: "X tasks are blocked, waiting on Y dependencies"
Example:
User: "What's blocking progress on the authentication feature?"
You (using this Skill):
1. query_container(operation="search", containerType="task", featureId="auth-feature-id", status="pending,in-progress")
2. For each task: query_dependencies(taskId="...", direction="incoming", includeTaskInfo=true)
3. Found 3 blocked tasks:
- "Implement login UI" (blocked by "Create auth API" - status: in-progress)
- "Add logout flow" (blocked by "Create auth API" - status: in-progress)
- "Add password reset" (blocked by "Create auth API", "Implement login UI")
4. Response: "3 tasks are blocked. Priority: Complete 'Create auth API' first (unblocks 3 tasks)"
Workflow 2: Analyze Dependency Chains
When to use: Need to understand full sequence of task dependencies
Steps:
- Start with target task ID
- Call
query_dependencies(taskId=<id>, direction="incoming") - Build dependency tree:
- Direct dependencies (must complete immediately before)
- Full dependency chain from returned data
- Identify longest chain (critical path)
- Present visual representation
Example:
User: "What needs to happen before we can deploy the feature?"
You (using this Skill):
1. query_dependencies(taskId="deploy-task-id", direction="incoming", includeTaskInfo=true)
2. Chain discovered:
- Deploy Feature (target)
← Integration Tests
← Frontend Implementation
← API Implementation
← Database Schema
3. Response: "Critical path is 5 tasks deep. Start with 'Database Schema' (no dependencies)"
Workflow 3: Identify Bottleneck Tasks
When to use: Want to know which tasks are blocking the most work
Steps:
- Get all tasks in feature with
query_container(operation="search", containerType="task", featureId=<id>) - For each pending/in-progress task:
- Count how many tasks depend on it (outgoing dependencies)
- Sort by dependent count (descending)
- Highlight top bottlenecks with dependent task counts
Example:
User: "Which tasks should we prioritize to unblock the most work?"
You (using this Skill):
1. query_container(operation="search", containerType="task", featureId="feature-id", status="pending,in_progress")
2. Analyze outgoing dependencies:
- "Create auth API" → 5 tasks depend on this (BOTTLENECK)
- "Setup database" → 3 tasks depend on this
- "Design user flow" → 2 tasks depend on this
- "Write documentation" → 0 tasks depend on this
3. Response: "Priority 1: 'Create auth API' (unblocks 5 tasks). Priority 2: 'Setup database' (unblocks 3 tasks)"
Workflow 4: Recommend Resolution Order
When to use: Multiple blocked tasks, need to decide what to work on
Steps:
- Search for all tasks:
query_container(operation="search", containerType="task", featureId=<id>) - For each task, get dependencies:
query_dependencies(taskId=<id>, direction="all", includeTaskInfo=true) - Identify tasks that are blocking others (outgoing dependencies with incomplete status)
- For each blocking task:
- Count how many tasks it unblocks
- Get task priority and complexity from search results
- Calculate resolution score:
- Higher score = unblocks more tasks + higher priority + lower complexity
- Recommend top 3 tasks to complete first
Scoring formula:
Score = (tasks_unblocked × 10) + (priority_weight × 5) - (complexity_weight × 2)
Priority weights: critical=5, high=4, medium=3, low=2, trivial=1
Complexity: use inverse (10 - complexity_rating)
Example:
User: "We have 10 blocked tasks. What should we work on first?"
You (using this Skill):
1. query_container(operation="search", containerType="task", featureId="feature-id", status="pending,in-progress")
2. For each task: query_dependencies(taskId="...", direction="outgoing", includeTaskInfo=true)
3. Analyze blocking dependencies:
- "Create auth API": unblocks 5 tasks, priority=high, complexity=6
Score = (5×10) + (4×5) - (6×2) = 50 + 20 - 12 = 58
- "Setup database": unblocks 3 tasks, priority=critical, complexity=8
Score = (3×10) + (5×5) - (8×2) = 30 + 25 - 16 = 39
4. Response: "Work on 'Create auth API' first (score: 58, unblocks 5 tasks)"
Advanced Patterns
Pattern: Detect Circular Dependencies
Problem: Tasks depend on each other, creating a deadlock
Detection:
- Get task dependencies recursively
- Track visited tasks
- If you encounter a task already in the chain → circular dependency found
Response:
"⚠️ Circular dependency detected:
Task A depends on Task B, which depends on Task C, which depends on Task A.
Action required: Remove one dependency to break the cycle."
Pattern: Find Parallelizable Work
Goal: Identify tasks that can be worked on simultaneously
Steps:
- Get all pending tasks
- Filter to tasks with no incomplete dependencies
- Group by specialist type (backend, frontend, etc.)
- Recommend parallel assignments
Example output:
"Ready to start in parallel:
- Implementation Specialist (Haiku): 'Implement user service' (backend-implementation Skill)
- Implementation Specialist (Haiku): 'Create login form' (frontend-implementation Skill)
- Implementation Specialist (Haiku): 'Add user indexes' (database-implementation Skill)
All 3 tasks have no dependencies and can proceed simultaneously."
Pattern: Critical Path Analysis
Goal: Find the longest sequence of dependent tasks
Steps:
- Build complete dependency graph
- Calculate longest path from start to each task
- Identify tasks on critical path (longest sequence)
- Recommend focusing on critical path to minimize total time
Tool Usage Guidelines
Finding Blocked Tasks
Approach: Search for tasks, then check each for blocking dependencies
Steps:
- Search for tasks:
query_container(operation="search", containerType="task", featureId=<id>, status="pending,in-progress") - For each task:
query_dependencies(taskId=<id>, direction="incoming", includeTaskInfo=true) - Filter tasks where any incoming dependency has status != "completed" and status != "cancelled"
Usage:
// Step 1: Get all active tasks
query_container(operation="search", containerType="task", featureId="550e8400-e29b-41d4-a716-446655440000", status="pending,in-progress")
// Step 2: Check each task for blockers
query_dependencies(taskId="task-id", direction="incoming", includeTaskInfo=true)
// Step 3: Identify blocked tasks from dependency status
query_dependencies
Purpose: Get dependencies for a specific task
Parameters:
taskId(required): Task to analyzedirection(optional): "incoming", "outgoing", or "all" (default: all)type(optional): "BLOCKS", "IS_BLOCKED_BY", "RELATES_TO", or "all"includeTaskInfo(optional): Include task titles and status
Returns: Dependencies with direction filtering and counts
Usage:
// All dependencies
query_dependencies(taskId="task-id")
// Just incoming dependencies (what blocks this task)
query_dependencies(taskId="task-id", direction="incoming", includeTaskInfo=true)
query_container (get task)
Purpose: Get full task details including summary and priority
Parameters:
operation: "get" (required)containerType: "task" (required)id(required): Task UUIDincludeSections(optional): Include detailed content sections
Usage:
query_container(
operation="get",
containerType="task",
id="task-id",
includeSections=false
)
query_container (search tasks)
Purpose: Find tasks by criteria
Parameters:
operation: "search" (required)containerType: "task" (required)featureId(optional): Filter by featurestatus(optional): Filter by statustags(optional): Filter by tags
Usage:
// Find all pending tasks in feature
query_container(operation="search", containerType="task", featureId="feature-id", status="pending")
// Find all in-progress tasks
query_container(operation="search", containerType="task", status="in_progress")
Best Practices
1. Start Broad, Then Narrow
Always begin with feature-level analysis:
Step 1: query_container(operation="search", containerType="task", featureId=X) → Get all tasks
Step 2: query_dependencies(taskId=Y, ...) for each task → Identify blocked tasks
Step 3: Analyze patterns and prioritize resolution
2. Consider Task Metadata
When recommending priorities, factor in:
- Priority: Critical tasks should be resolved first
- Complexity: Lower complexity = faster to complete
- Blocking count: More tasks unblocked = higher impact
- Specialist availability: Can the right person work on it?
3. Visualize Chains
Present dependency chains visually:
Task E (Deploy)
← Task D (Integration Tests)
← Task C (Frontend)
← Task B (API)
← Task A (Database Schema)
Critical path: 5 tasks, start with Task A
4. Provide Actionable Recommendations
Don't just report problems, suggest solutions:
- ❌ "Task X is blocked by Task Y"
- ✅ "Complete Task Y first to unblock 3 tasks including Task X"
5. Watch for Anti-Patterns
Warn users about:
- Circular dependencies (deadlock situation)
- Long dependency chains (>5 tasks deep = brittle)
- Single bottleneck tasks (risk if that person is unavailable)
- Tasks with many dependencies (complexity, coordination overhead)
Common Mistakes to Avoid
Mistake 1: Not Checking Complete Dependency Chains
Problem: Missing hidden dependencies in the chain
Solution: Recursively query dependencies using direction="incoming" to build complete dependency tree
Mistake 2: Ignoring Task Status
Problem: Counting completed tasks as blockers
Solution: Filter to status=pending,in_progress when analyzing blockers
Mistake 3: Overwhelming Users
Problem: Dumping full dependency graph without interpretation
Solution: Summarize findings, prioritize recommendations
Mistake 4: Not Updating Analysis
Problem: Dependencies change, old analysis becomes stale
Solution: Re-run analysis when tasks complete or dependencies change
Response Templates
Blocked Tasks Summary
Found [N] blocked tasks in feature "[Feature Name]":
Priority 1: Complete "[Task Title]" → Unblocks [X] tasks
Priority 2: Complete "[Task Title]" → Unblocks [Y] tasks
Priority 3: Complete "[Task Title]" → Unblocks [Z] tasks
[N-3] other tasks blocked with lower impact.
Recommendation: Focus on Priority 1 for maximum parallel work.
Bottleneck Identification
Dependency Analysis for "[Feature Name]":
Bottleneck Tasks (blocking multiple others):
1. "[Task Title]" (complexity: [X]/10) → Blocking [N] tasks
Status: [status] | Priority: [priority]
2. "[Task Title]" (complexity: [Y]/10) → Blocking [M] tasks
Status: [status] | Priority: [priority]
Recommendation: Complete task #1 first to unblock maximum work.
Critical Path Report
Critical Path Analysis for "[Feature Name]":
Longest dependency chain: [N] tasks deep
Path: [Task A] → [Task B] → [Task C] → [Task D] → [Task E]
Estimated sequence:
1. [Task A] (complexity: [X]/10, priority: [priority])
2. [Task B] (complexity: [Y]/10, priority: [priority])
... [etc]
Ready to start now: [Task A] (no dependencies)
Integration with Other Skills
Works Well With
Feature Management Skill:
- Use dependency analysis to recommend next task intelligently
- Check for blockers before recommending new work
Task Management Skill:
- Validate dependencies before marking task complete
- Route blocked tasks appropriately
Planning Specialist (Subagent):
- Provide dependency analysis to inform task breakdown
- Identify dependencies during feature planning
See Also
- examples.md: Concrete usage scenarios with sample data
- troubleshooting.md: Common dependency issues and solutions
- Feature Management Skill: Task recommendation workflow
- Task Management Skill: Task completion workflow