From majestic-engineer
Orchestrates multi-step workflows using Claude Code's native Task system (TaskCreate, TaskUpdate, TaskGet, TaskList) for lifecycle management, parallel execution, crash recovery, and progress visibility. Use for 3+ step workflows with dependencies.
npx claudepluginhub majesticlabs-dev/majestic-marketplace --plugin majestic-engineerThis skill uses the workspace's default tool permissions.
Patterns for integrating Claude Code's native Task system into workflow orchestration.
Executes pending tasks in dependency order with wave-based concurrent execution via Agent Teams. Orchestrates via 3-tier hierarchy: Orchestrator, Wave Leads, Context Managers. Supports task filtering, parallelism, retries, dry runs.
Decomposes complex work into trackable tasks with dependency chains using TaskCreate, TaskUpdate, TaskGet, TaskList tools. For multi-step implementations, parallel coordination, and status tracking.
Reference for Claude Code's 6 task management tools—TaskCreate, TaskGet, TaskList, TaskUpdate for structured tracking, and TaskOutput, TaskStop for background execution. Covers parameters, status lifecycle, dependencies.
Share bugs, ideas, or general feedback.
Patterns for integrating Claude Code's native Task system into workflow orchestration.
TASK_TRACKING = /majestic:config task_tracking.enabled false
LEDGER_ENABLED = /majestic:config task_tracking.ledger false
LEDGER_PATH = /majestic:config task_tracking.ledger_path .agents/workflow-ledger.yml
AUTO_CLEANUP = /majestic:config task_tracking.auto_cleanup true
If NOT TASK_TRACKING: skip all Task operations, run workflow normally
TASK = TaskCreate(
subject: "Imperative verb phrase", # "Run security review"
description: "What and why",
activeForm: "Present continuous form", # "Running security review"
metadata: {
workflow: WORKFLOW_ID,
step: STEP_NUMBER,
milestone: true|false,
phase: "phase-name",
parallel_group: "group-id"
}
)
If TASK_TRACKING:
STEP_TASK = TaskCreate(subject: "Step N: Name", activeForm: "Doing name", metadata: {...})
TaskUpdate(STEP_TASK.id, status: "in_progress")
... existing step logic (unchanged) ...
If TASK_TRACKING:
TaskUpdate(STEP_TASK.id, status: "completed")
If LEDGER_ENABLED AND step.milestone:
Write checkpoint -> LEDGER_PATH
| Key | Type | Purpose | Example |
|---|---|---|---|
workflow | string | Groups tasks to one workflow run | "build-task-abc123" |
step | integer | Step number within workflow | 4 |
milestone | boolean | Whether step triggers ledger checkpoint | true |
phase | string | Named phase for multi-phase workflows | "discovery" |
parallel_group | string | Groups tasks launched in parallel | "reviewers" |
Workflow ID format: "{workflow-name}-{timestamp}" (e.g., "build-task-20260213T1430")
TASK_A = TaskCreate(subject: "Foundation step", ...)
TASK_B = TaskCreate(subject: "Depends on A", ...)
TaskUpdate(TASK_B.id, addBlockedBy: [TASK_A.id])
Rules:
Multi-phase example:
PHASES = [
{name: "Discovery", deps: []},
{name: "Architecture", deps: ["Discovery"]},
{name: "Implementation", deps: ["Architecture"]},
{name: "Review", deps: ["Implementation"]}
]
PHASE_TASKS = {}
For each P in PHASES:
PHASE_TASKS[P.name] = TaskCreate(
subject: "Phase: {P.name}",
activeForm: "Running {P.name}",
metadata: {workflow: WORKFLOW_ID, phase: P.name}
)
For each P in PHASES:
If P.deps is not empty:
BLOCKER_IDS = [PHASE_TASKS[d].id for d in P.deps]
TaskUpdate(PHASE_TASKS[P.name].id, addBlockedBy: BLOCKER_IDS)
Create all tasks first, then launch Task agents in a single message for parallelism.
GROUP_ID = "reviewers-{WORKFLOW_ID}"
REVIEWER_TASKS = []
For each REVIEWER in REVIEWER_LIST:
T = TaskCreate(
subject: "Run {REVIEWER}",
activeForm: "Running {REVIEWER}",
metadata: {workflow: WORKFLOW_ID, parallel_group: GROUP_ID, reviewer: REVIEWER}
)
REVIEWER_TASKS.append(T)
# Launch ALL agents in a SINGLE message (enables parallelism)
For each T in REVIEWER_TASKS: # all in ONE message
Task(subagent_type: T.metadata.reviewer, prompt: "...", run_in_background: true)
# Collect results
For each T in REVIEWER_TASKS:
RESULT = wait for agent completion
TaskUpdate(T.id, status: "completed")
Key rule: All Task() calls MUST be in the same response message. Splitting across messages forces sequential execution.
ALL_TASKS = TaskList()
GROUP_TASKS = [T for T in ALL_TASKS where T.metadata.parallel_group == GROUP_ID]
COMPLETED = [T for T in GROUP_TASKS where T.status == "completed"]
FAILED = [T for T in GROUP_TASKS where T.status != "completed"]
If FAILED is not empty: Handle failures per error table
Else: Aggregate results from COMPLETED tasks
YAML-based receipts for crash recovery at milestone steps.
version: 1
workflow_id: "build-task-20260213T1430"
workflow_type: "build-task"
started_at: "2026-02-13T14:30:00Z"
last_checkpoint: "2026-02-13T14:35:00Z"
current_step: 4
status: "in_progress" # in_progress | completed | failed
checkpoints:
- step: 1
name: "Workspace setup"
status: "completed"
completed_at: "2026-02-13T14:31:00Z"
data: {}
If LEDGER_ENABLED AND step.milestone:
CHECKPOINT = {step: STEP_NUMBER, name: STEP_NAME, status: "completed", completed_at: NOW(), data: {...}}
Read existing ledger from LEDGER_PATH (or create new)
Append CHECKPOINT to checkpoints array
Update last_checkpoint, current_step
Write ledger to LEDGER_PATH
| Workflow | Milestone Steps |
|---|---|
| build-task | Workspace setup (1), Build (4), Verify (5), Quality (7), Ship (9) |
| blueprint | Discovery (1), Architecture (4), Plan written (6), Execution (9) |
| run-blueprint | Task creation (2), Each task completion |
| quality-gate | Each reviewer completion, Final verdict |
If LEDGER_ENABLED:
LEDGER = Read LEDGER_PATH
If LEDGER exists AND LEDGER.status == "in_progress":
LAST_STEP = LEDGER.current_step
COMPLETED_STEPS = [C.step for C in LEDGER.checkpoints where C.status == "completed"]
For each STEP in WORKFLOW_STEPS:
If STEP.number in COMPLETED_STEPS: skip
Else: Execute STEP
Recovery decision table:
| Ledger State | Action |
|---|---|
| No ledger file | Fresh start |
status: completed | Fresh start (previous run finished) |
status: in_progress | Resume from last checkpoint |
status: failed | Resume from failed step |
| Ledger parse error | Log warning, fresh start |
# At workflow start: export task list ID
TASK_LIST_ID = current task list identifier
Set env: CLAUDE_CODE_TASK_LIST_ID = TASK_LIST_ID
# In new session: restore task list
If env CLAUDE_CODE_TASK_LIST_ID is set:
Restore task list from CLAUDE_CODE_TASK_LIST_ID
ALL_TASKS = TaskList()
Resume from incomplete tasks
Note: Cross-session persistence requires the task list ID to be stored externally (env var, file, or ledger).
If TASK_TRACKING AND workflow completed successfully:
If AUTO_CLEANUP:
ALL_TASKS = TaskList()
WORKFLOW_TASKS = [T for T in ALL_TASKS where T.metadata.workflow == WORKFLOW_ID]
For each T in WORKFLOW_TASKS:
TaskUpdate(T.id, status: "completed")
If LEDGER_ENABLED:
Update ledger: status = "completed", last_checkpoint = NOW()
| Error | Action |
|---|---|
| TaskCreate fails | Log warning, continue without tracking |
| TaskUpdate fails | Retry once, then log and continue |
| TaskList timeout | Fall back to ledger if available |
| TaskGet returns stale data | Re-fetch before update |
| Ledger write fails | Log warning, continue without checkpoint |
| Ledger parse error | Log warning, treat as fresh start |
| Dependency cycle detected | Log error, remove cycle, continue |
Principle: Task tracking failures MUST NEVER block workflow execution. Always degrade gracefully.
+---------------------------+ +---------------------------+
| Native Tasks | | YAML Ledger |
| (TaskCreate/Update/List) | | (.agents/workflow-ledger) |
+---------------------------+ +---------------------------+
| Source of truth for: | | Supplementary for: |
| - Current step status | | - Crash recovery |
| - Dependency tracking | | - Cross-session resume |
| - Progress visibility | | - Milestone receipts |
| - Parallel coordination | | - Audit trail |
+---------------------------+ +---------------------------+
PRIMARY SECONDARY
If conflict: Tasks win. Ledger is advisory only.