From dh
Queries and manages feature implementation task status in plan/ directory projects. Lists features, checks statuses, finds ready tasks via SAM CLI and MCP tools.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dh:implementation-managerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Available features (if in project with plan/ directory):**
Available features (if in project with plan/ directory):
!uv run sam list 2>/dev/null || echo '{"features": [], "count": 0, "message": "Not in a project with task files"}'
Active task context (if any):
!python3 -c "from dh_paths import context_dir; import os; cdir = context_dir(os.environ.get('CLAUDE_SESSION_ID', '')); files = list(cdir.glob('active-task-*.json')) if cdir.exists() else []; print(files[0].read_text() if files else 'No active task')" 2>/dev/null || echo "No active task"
A skill for querying and managing feature implementation task files. Provides programmatic access to task status for orchestrators coordinating multi-step feature implementations.
The SAM MCP server (mcp__plugin_dh_sam__*) is the primary interface for all SAM task file operations. The uv run sam CLI is available as fallback when MCP is unavailable.
Migration note (P1601 — 2026-Q1): The 8-tool SAM MCP API has been consolidated into 3 distributed-safe tools:
sam_plan(plan-level operations),sam_task(task-level operations), andsam_active_task(session context registration). The deprecated tools listed below remain as compatibility shims — they still work but new code must use the consolidated API.
Deprecated tool Consolidated replacement sam_listsam_plansam_statussam_plansam_readysam_plansam_read(plan-level)sam_plansam_read(task-level)sam_tasksam_claimsam_tasksam_statesam_tasksam_updatesam_plansam_createsam_plan
List all features with task files in the project's plan/ directory:
mcp__plugin_dh_sam__sam_list()
Output:
{
"features": [
{
"slug": "prepare-host",
"task_file": "tasks-1-prepare-host.md",
"path": "~/.dh/projects/{project-slug}/plan/tasks-1-prepare-host.md"
}
],
"count": 1
}
Get detailed status for a specific feature:
mcp__plugin_dh_sam__sam_status(plan="P1")
Output:
{
"feature": "prepare-host",
"task_file": "tasks-1-prepare-host.md",
"total_tasks": 8,
"completed": 8,
"in_progress": 0,
"not_started": 0,
"ready_tasks": [],
"tasks": [
{
"id": "1.1",
"name": "Add Data Models to shared/models.py",
"status": "complete",
"dependencies": [],
"agent": null,
"priority": 1,
"complexity": "low"
}
]
}
List tasks ready for execution (dependencies satisfied):
mcp__plugin_dh_sam__sam_ready(plan="P1")
Output:
{
"feature": "prepare-host",
"ready_tasks": [
{
"id": "1.3",
"name": "Create core/prepare.py Business Logic",
"agent": "python-cli-architect"
}
],
"count": 1
}
Read full plan data including task fields and context:
mcp__plugin_dh_sam__sam_read(plan="P1")
Claim a task in-progress (prevents duplicate dispatch):
mcp__plugin_dh_sam__sam_claim(plan="P1", task="T01")
Returns {"claimed": false, "error": "..."} if task is already claimed or not found.
Update plan-level fields (e.g., context manifest):
mcp__plugin_dh_sam__sam_update(plan="P1", context="Context Manifest content")
Task files use YAML frontmatter format. The SAM MCP tools validate all fields — do not parse task files directly.
---
task: T01
title: "Task title"
status: not-started
agent: python-cli-architect
dependencies: []
priority: 1
complexity: medium
accuracy-risk: low
skills: []
---
not-started — task has not been startedin-progress — task is claimed and being executedcomplete — task is doneblocked — task cannot proceedA task is "ready" when:
not-startedcomplete (or no dependencies)The task_status_hook.py script provides automated task status tracking via Claude Code hooks.
| Command | Hook Event | Matcher | Purpose |
|---|---|---|---|
/dh:execution | SubagentStop | (all) | Mark task COMPLETE, add Completed timestamp |
/dh:start-task | PostToolUse | Write|Edit|Bash | Update LastActivity timestamp during execution |
SubagentStop (Task Completion):
When /dh:execution launches a sub-agent via /start-task {task_file} --task {id}, the SubagentStop hook fires when the sub-agent completes. The hook script:
IN PROGRESS to COMPLETE**Completed**: {ISO timestamp} to the task sectionPostToolUse (Activity Tracking):
When /dh:start-task runs, it creates a context file at ~/.dh/projects/{slug}/context/active-task-{session_id}.json (resolved via dh_paths.context_dir(session_id)) containing the task file path and task ID. On each Write, Edit, or Bash operation, the PostToolUse hook:
**LastActivity**: {ISO timestamp} in the task section| Field | Added By | When |
|---|---|---|
**Started** | Agent (via /dh:start-task) | When agent begins work on task |
**Completed** | Hook (SubagentStop) | When sub-agent finishes |
**LastActivity** | Hook (PostToolUse) | On each Write, Edit, or Bash call |
The task_status_hook.py script supports environment-variable-based profile controls that adjust hook behavior without editing SKILL.md files.
Controls which hook handlers run. Case-sensitive lowercase. Default when unset or empty: standard.
minimal — PostToolUse (LastActivity updates) is skipped entirely. SubagentStop (task completion) runs normally. Use this to reduce I/O during task execution when activity timestamps are not needed.standard — All handlers run. This is the current default behavior and is backward compatible with sessions that do not set the variable.strict — All handlers run. SubagentStop additionally performs pre-completion validation checks and emits warnings to stderr. Warnings are observational only — they do not prevent task completion. Strict checks verify that the task was claimed (status was in-progress before completion) and that acceptance criteria were defined (non-empty).Invalid values produce a warning to stderr and fall back to standard.
Comma-separated list of hook IDs to disable. Each ID is stripped of whitespace. Empty segments are excluded. Unknown IDs are silently ignored for forward compatibility. Default when unset or empty: no hooks disabled.
Hook IDs for this script:
task-status:post-tool-use — the PostToolUse handler (LastActivity timestamp updates)task-status:subagent-stop — the SubagentStop handler (task completion marking)Disabled hooks take precedence over profile. If both CLAUDE_SKILLS_HOOK_PROFILE=strict and CLAUDE_SKILLS_DISABLED_HOOKS=task-status:subagent-stop are set, SubagentStop is skipped entirely (no strict checks run).
Disabled hooks exit 0 (Claude Code treats non-zero hook exit as an error that kills the hook chain).
# Skip PostToolUse activity tracking (reduces I/O during task execution)
export CLAUDE_SKILLS_HOOK_PROFILE=minimal
# Enable strict pre-completion validation warnings
export CLAUDE_SKILLS_HOOK_PROFILE=strict
# Disable a specific hook by ID
export CLAUDE_SKILLS_DISABLED_HOOKS=task-status:post-tool-use
# Disable multiple hooks
export CLAUDE_SKILLS_DISABLED_HOOKS="task-status:post-tool-use,task-status:subagent-stop"
The /dh:execution orchestrator uses this skill to:
mcp__plugin_dh_sam__sam_plan (deprecated: sam_status(plan="P{N}"))mcp__plugin_dh_sam__sam_plan (deprecated: sam_ready(plan="P{N}"))agent fieldnpx claudepluginhub jamie-bitflight/claude_skills --plugin dhExecutes SAM task plans: queries ready tasks via MCP, delegates to dh:task-worker agents with TeamCreate for parallel dispatch, updates status via hooks. Use post-planning with P{N} or feature slug.
Displays progress on incomplete task lists from .plans/tasks-*.yml files: total/completed counts, next actionable task per feature. Use to check active feature status.
Executes implementation plans by processing tasks from tasks.md, with vault logging, branch-based workflow tracking, and prerequisites validation.