{
  "schemaVersion": "1.0",
  "item": {
    "slug": "task-engine",
    "name": "Task Engine",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/zeron-G/task-engine",
    "canonicalUrl": "https://clawhub.ai/zeron-G/task-engine",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/task-engine",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=task-engine",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "CLAUDE.md",
      "DESIGN.md",
      "SKILL.md",
      "config/settings.yaml",
      "references/agent-capabilities.md",
      "references/state-transitions.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/task-engine"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/task-engine",
    "agentPageUrl": "https://openagent3.xyz/skills/task-engine/agent",
    "manifestUrl": "https://openagent3.xyz/skills/task-engine/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/task-engine/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Task Engine",
        "body": "Orchestrates multi-step projects across multiple agents (Claude Code, Eva, others) using a state machine with JSON-based persistence. Each task has subtasks dispatched to agents, tracked via heartbeat, and reported through Discord."
      },
      {
        "title": "CLI Commands",
        "body": "All commands run from the skill root:\n\ncd /home/zeron/.openclaw/workspace/skills/task-engine\n\nAll commands support --json for machine-readable output:\n\n{\"ok\": true, \"task_id\": \"TASK-001\", \"status\": \"PLANNING\", \"message\": \"Created TASK-001\"}"
      },
      {
        "title": "Create a task",
        "body": "python3 scripts/task_engine.py create \"Implement feature X\" --priority P0 --plan \"3 phases: models, API, tests\"\npython3 scripts/task_engine.py create \"Feature Y\" --priority P1 --json"
      },
      {
        "title": "View status",
        "body": "python3 scripts/task_engine.py status                    # All active tasks (table)\npython3 scripts/task_engine.py status TASK-001           # Detailed single task\npython3 scripts/task_engine.py status TASK-001 --json    # Machine-readable\npython3 scripts/task_engine.py status --all              # Include terminal tasks"
      },
      {
        "title": "Transition task state",
        "body": "python3 scripts/task_engine.py transition TASK-001 approve --note \"Plan approved\" --json\npython3 scripts/task_engine.py transition TASK-001 block --note \"Waiting on API key\"\npython3 scripts/task_engine.py transition TASK-001 complete --note \"All verified\" --json"
      },
      {
        "title": "Dispatch subtask to an agent",
        "body": "python3 scripts/task_engine.py dispatch TASK-001 \"Implement auth models\" \\\n    --agent claude-code --type dev --json\npython3 scripts/task_engine.py dispatch TASK-001 \"Run integration tests\" \\\n    --agent eva --type test --deps subtask_01,subtask_02\n\nDispatching the first subtask auto-transitions APPROVED -> IN_PROGRESS."
      },
      {
        "title": "Update subtask progress",
        "body": "python3 scripts/task_engine.py subtask TASK-001 subtask_01 start --progress 30 --json\npython3 scripts/task_engine.py subtask TASK-001 subtask_01 done --note \"Models complete\" --json\npython3 scripts/task_engine.py subtask TASK-001 subtask_02 fail --note \"Schema mismatch\" --json"
      },
      {
        "title": "Check tasks (heartbeat integration)",
        "body": "python3 scripts/task_engine.py check              # Check all active tasks (verbose)\npython3 scripts/task_engine.py check TASK-001      # Check one task\npython3 scripts/task_engine.py check --quiet       # Minimal output for cron\npython3 scripts/task_engine.py check --json        # Machine-readable JSON\npython3 scripts/task_engine.py check --discord     # Discord-formatted digest"
      },
      {
        "title": "Archive completed task",
        "body": "python3 scripts/task_engine.py archive TASK-001 --json    # Only works on terminal tasks"
      },
      {
        "title": "Auto-dispatch",
        "body": "Auto-dispatch scans subtasks and dispatches ready ones to appropriate agents:\n\npython3 scripts/task_engine.py auto-dispatch TASK-001             # Dispatch ready subtasks\npython3 scripts/task_engine.py auto-dispatch TASK-001 --dry-run   # Preview without acting\npython3 scripts/task_engine.py auto-dispatch --all                # All active tasks\npython3 scripts/task_engine.py auto-dispatch TASK-001 --subtask subtask_02  # Specific subtask\npython3 scripts/task_engine.py auto-dispatch TASK-001 --subtask subtask_01 --show-context  # View dispatch context\n\nOutput is always JSON with dispatches and skipped arrays."
      },
      {
        "title": "Notify (Discord formatting)",
        "body": "Generate Discord-formatted notification messages:\n\npython3 scripts/task_engine.py notify digest               # Full heartbeat digest\npython3 scripts/task_engine.py notify TASK-001 created     # Task creation message\npython3 scripts/task_engine.py notify TASK-001 status      # Status update with progress\npython3 scripts/task_engine.py notify TASK-001 transition   # Last transition\npython3 scripts/task_engine.py notify TASK-001 completed    # Completion summary\npython3 scripts/task_engine.py notify TASK-001 alert --type stuck --subtask-id subtask_01"
      },
      {
        "title": "Rebuild index (recovery)",
        "body": "Reconstruct index.json from task directories if it gets corrupted:\n\npython3 scripts/task_engine.py rebuild-index         # Scan and rebuild\npython3 scripts/task_engine.py rebuild-index --json  # Machine-readable output"
      },
      {
        "title": "Heartbeat Integration",
        "body": "Add step 4.3 to the heartbeat's cmd_beat() function, after the ongoing.json check:\n\n# 4.3 Task Engine check\nlogger.info(\"[4.3/8] Task Engine check\")\ntry:\n    import sys\n    sys.path.insert(0, str(Path(\"/home/zeron/.openclaw/workspace/skills/task-engine/scripts\")))\n    from engine.checker import check_all_tasks\n    te_result = check_all_tasks()\n    if te_result.get(\"alerts\"):\n        alerts.extend(te_result[\"alerts\"])\n        all_ok = False\n    if te_result.get(\"summary\"):\n        logger.info(\"  Tasks: %s\", te_result[\"summary\"])\nexcept ImportError:\n    logger.debug(\"  Task engine not installed, skipping\")\nexcept Exception as e:\n    logger.warning(\"  Task engine check failed: %s\", e)\n\nThe check is cheap (~300-500 tokens per heartbeat for 1-3 active tasks). It reads index.json first, then only loads task/subtask files for active tasks."
      },
      {
        "title": "State Machine",
        "body": "PLANNING ──approve──> APPROVED ──start──> IN_PROGRESS ──test──> TESTING ──review──> REVIEW ──complete──> COMPLETED\n    │                                         │  │                 │  │                │\n    │reject                              block│  │fail        reopen│  │fail       reopen│ fail\n    v                                         v  v                 v  v                v   v\n REJECTED                                BLOCKED FAILED      IN_PROGRESS FAILED   IN_PROGRESS FAILED\n                                           │\n                                      unblock│\n                                           v\n                                      IN_PROGRESS\n\nTerminal states: COMPLETED, FAILED, REJECTED.\n\nSee references/state-transitions.md for the full transition table."
      },
      {
        "title": "Subtask states",
        "body": "PENDING -> ASSIGNED -> IN_PROGRESS -> DONE\n                │            │\n                │block       │fail / block\n                v            v\n             BLOCKED      FAILED / BLOCKED"
      },
      {
        "title": "Auto-transitions (checked by heartbeat)",
        "body": "ConditionActionAll type: dev subtasks DONETask -> TESTINGAll type: test subtasks DONETask -> REVIEWFirst subtask dispatchedTask APPROVED -> IN_PROGRESSAny subtask FAILEDAlert for human interventionSubtask stuck 3+ heartbeatsAlert via DiscordTask past ETAAlert as overdue"
      },
      {
        "title": "Discord Formatting",
        "body": "The discord_formatter.py module generates formatted messages for Discord notifications. All formatting is pure string generation — no API calls.\n\nAvailable formats:\n\nTask created: New task announcement with priority and plan\nStatus update: Progress bars and subtask tree\nTransition: State change with emoji indicators\nAlert: Urgent stuck/overdue/failed alerts with human ping\nCompletion summary: Final report with subtask results\nHeartbeat digest: Full summary of all active tasks\n\nProgress bars render as: [████░░░░░░] 40%"
      },
      {
        "title": "Agent Capabilities",
        "body": "AgentKeyBest ForMax ParallelClaude Codeclaude-codeDev, refactor, debug, docs3EvaevaTest, validate, system-ops1\n\nAgent selection priority:\n\nPreferred agent (if specified and capable)\nMatch by preferred_types\nMatch by broader capabilities\nFallback to Eva\n\nSee references/agent-capabilities.md for full details."
      },
      {
        "title": "Corrupted index.json",
        "body": "python3 scripts/task_engine.py rebuild-index --json\n\nScans all tasks/TASK-*/task.json files and reconstructs the index. Skips invalid/unreadable files."
      },
      {
        "title": "Common errors",
        "body": "ErrorCauseFixInvalid transition: X + 'event'Transition not allowed from current stateCheck references/state-transitions.mdTask TASK-XXX not foundTask doesn't exist or was archivedCheck tasks/ and tasks/archive/Cannot archive: not terminalTask must be COMPLETED/FAILED/REJECTEDTransition to terminal state firstAgent at capacityMax parallel instances reachedWait for running subtasks to completeDependency not DONEBlocked by incomplete subtaskComplete blocking subtask first"
      },
      {
        "title": "JSON parse errors",
        "body": "The engine handles corrupt JSON files gracefully:\n\nDuring check: skips bad tasks, logs warning, continues\nDuring rebuild-index: skips unreadable files, reports in output\nAll CLI commands catch exceptions and return clean error messages (not tracebacks)"
      },
      {
        "title": "Data Location",
        "body": "Task files: /home/zeron/.openclaw/workspace/tasks/TASK-NNN/\nIndex: /home/zeron/.openclaw/workspace/tasks/index.json\nArchive: /home/zeron/.openclaw/workspace/tasks/archive/\nConfig: /home/zeron/.openclaw/workspace/skills/task-engine/config/settings.yaml\nAgent reference: /home/zeron/.openclaw/workspace/skills/task-engine/references/agent-capabilities.md\nState transitions: /home/zeron/.openclaw/workspace/skills/task-engine/references/state-transitions.md"
      }
    ],
    "body": "Task Engine\n\nOrchestrates multi-step projects across multiple agents (Claude Code, Eva, others) using a state machine with JSON-based persistence. Each task has subtasks dispatched to agents, tracked via heartbeat, and reported through Discord.\n\nCLI Commands\n\nAll commands run from the skill root:\n\ncd /home/zeron/.openclaw/workspace/skills/task-engine\n\n\nAll commands support --json for machine-readable output:\n\n{\"ok\": true, \"task_id\": \"TASK-001\", \"status\": \"PLANNING\", \"message\": \"Created TASK-001\"}\n\nCreate a task\npython3 scripts/task_engine.py create \"Implement feature X\" --priority P0 --plan \"3 phases: models, API, tests\"\npython3 scripts/task_engine.py create \"Feature Y\" --priority P1 --json\n\nView status\npython3 scripts/task_engine.py status                    # All active tasks (table)\npython3 scripts/task_engine.py status TASK-001           # Detailed single task\npython3 scripts/task_engine.py status TASK-001 --json    # Machine-readable\npython3 scripts/task_engine.py status --all              # Include terminal tasks\n\nTransition task state\npython3 scripts/task_engine.py transition TASK-001 approve --note \"Plan approved\" --json\npython3 scripts/task_engine.py transition TASK-001 block --note \"Waiting on API key\"\npython3 scripts/task_engine.py transition TASK-001 complete --note \"All verified\" --json\n\nDispatch subtask to an agent\npython3 scripts/task_engine.py dispatch TASK-001 \"Implement auth models\" \\\n    --agent claude-code --type dev --json\npython3 scripts/task_engine.py dispatch TASK-001 \"Run integration tests\" \\\n    --agent eva --type test --deps subtask_01,subtask_02\n\n\nDispatching the first subtask auto-transitions APPROVED -> IN_PROGRESS.\n\nUpdate subtask progress\npython3 scripts/task_engine.py subtask TASK-001 subtask_01 start --progress 30 --json\npython3 scripts/task_engine.py subtask TASK-001 subtask_01 done --note \"Models complete\" --json\npython3 scripts/task_engine.py subtask TASK-001 subtask_02 fail --note \"Schema mismatch\" --json\n\nCheck tasks (heartbeat integration)\npython3 scripts/task_engine.py check              # Check all active tasks (verbose)\npython3 scripts/task_engine.py check TASK-001      # Check one task\npython3 scripts/task_engine.py check --quiet       # Minimal output for cron\npython3 scripts/task_engine.py check --json        # Machine-readable JSON\npython3 scripts/task_engine.py check --discord     # Discord-formatted digest\n\nArchive completed task\npython3 scripts/task_engine.py archive TASK-001 --json    # Only works on terminal tasks\n\nAuto-dispatch\n\nAuto-dispatch scans subtasks and dispatches ready ones to appropriate agents:\n\npython3 scripts/task_engine.py auto-dispatch TASK-001             # Dispatch ready subtasks\npython3 scripts/task_engine.py auto-dispatch TASK-001 --dry-run   # Preview without acting\npython3 scripts/task_engine.py auto-dispatch --all                # All active tasks\npython3 scripts/task_engine.py auto-dispatch TASK-001 --subtask subtask_02  # Specific subtask\npython3 scripts/task_engine.py auto-dispatch TASK-001 --subtask subtask_01 --show-context  # View dispatch context\n\n\nOutput is always JSON with dispatches and skipped arrays.\n\nNotify (Discord formatting)\n\nGenerate Discord-formatted notification messages:\n\npython3 scripts/task_engine.py notify digest               # Full heartbeat digest\npython3 scripts/task_engine.py notify TASK-001 created     # Task creation message\npython3 scripts/task_engine.py notify TASK-001 status      # Status update with progress\npython3 scripts/task_engine.py notify TASK-001 transition   # Last transition\npython3 scripts/task_engine.py notify TASK-001 completed    # Completion summary\npython3 scripts/task_engine.py notify TASK-001 alert --type stuck --subtask-id subtask_01\n\nRebuild index (recovery)\n\nReconstruct index.json from task directories if it gets corrupted:\n\npython3 scripts/task_engine.py rebuild-index         # Scan and rebuild\npython3 scripts/task_engine.py rebuild-index --json  # Machine-readable output\n\nHeartbeat Integration\n\nAdd step 4.3 to the heartbeat's cmd_beat() function, after the ongoing.json check:\n\n# 4.3 Task Engine check\nlogger.info(\"[4.3/8] Task Engine check\")\ntry:\n    import sys\n    sys.path.insert(0, str(Path(\"/home/zeron/.openclaw/workspace/skills/task-engine/scripts\")))\n    from engine.checker import check_all_tasks\n    te_result = check_all_tasks()\n    if te_result.get(\"alerts\"):\n        alerts.extend(te_result[\"alerts\"])\n        all_ok = False\n    if te_result.get(\"summary\"):\n        logger.info(\"  Tasks: %s\", te_result[\"summary\"])\nexcept ImportError:\n    logger.debug(\"  Task engine not installed, skipping\")\nexcept Exception as e:\n    logger.warning(\"  Task engine check failed: %s\", e)\n\n\nThe check is cheap (~300-500 tokens per heartbeat for 1-3 active tasks). It reads index.json first, then only loads task/subtask files for active tasks.\n\nState Machine\nPLANNING ──approve──> APPROVED ──start──> IN_PROGRESS ──test──> TESTING ──review──> REVIEW ──complete──> COMPLETED\n    │                                         │  │                 │  │                │\n    │reject                              block│  │fail        reopen│  │fail       reopen│ fail\n    v                                         v  v                 v  v                v   v\n REJECTED                                BLOCKED FAILED      IN_PROGRESS FAILED   IN_PROGRESS FAILED\n                                           │\n                                      unblock│\n                                           v\n                                      IN_PROGRESS\n\n\nTerminal states: COMPLETED, FAILED, REJECTED.\n\nSee references/state-transitions.md for the full transition table.\n\nSubtask states\nPENDING -> ASSIGNED -> IN_PROGRESS -> DONE\n                │            │\n                │block       │fail / block\n                v            v\n             BLOCKED      FAILED / BLOCKED\n\nAuto-transitions (checked by heartbeat)\nCondition\tAction\nAll type: dev subtasks DONE\tTask -> TESTING\nAll type: test subtasks DONE\tTask -> REVIEW\nFirst subtask dispatched\tTask APPROVED -> IN_PROGRESS\nAny subtask FAILED\tAlert for human intervention\nSubtask stuck 3+ heartbeats\tAlert via Discord\nTask past ETA\tAlert as overdue\nDiscord Formatting\n\nThe discord_formatter.py module generates formatted messages for Discord notifications. All formatting is pure string generation — no API calls.\n\nAvailable formats:\n\nTask created: New task announcement with priority and plan\nStatus update: Progress bars and subtask tree\nTransition: State change with emoji indicators\nAlert: Urgent stuck/overdue/failed alerts with human ping\nCompletion summary: Final report with subtask results\nHeartbeat digest: Full summary of all active tasks\n\nProgress bars render as: [████░░░░░░] 40%\n\nAgent Capabilities\nAgent\tKey\tBest For\tMax Parallel\nClaude Code\tclaude-code\tDev, refactor, debug, docs\t3\nEva\teva\tTest, validate, system-ops\t1\n\nAgent selection priority:\n\nPreferred agent (if specified and capable)\nMatch by preferred_types\nMatch by broader capabilities\nFallback to Eva\n\nSee references/agent-capabilities.md for full details.\n\nTroubleshooting\nCorrupted index.json\npython3 scripts/task_engine.py rebuild-index --json\n\n\nScans all tasks/TASK-*/task.json files and reconstructs the index. Skips invalid/unreadable files.\n\nCommon errors\nError\tCause\tFix\nInvalid transition: X + 'event'\tTransition not allowed from current state\tCheck references/state-transitions.md\nTask TASK-XXX not found\tTask doesn't exist or was archived\tCheck tasks/ and tasks/archive/\nCannot archive: not terminal\tTask must be COMPLETED/FAILED/REJECTED\tTransition to terminal state first\nAgent at capacity\tMax parallel instances reached\tWait for running subtasks to complete\nDependency not DONE\tBlocked by incomplete subtask\tComplete blocking subtask first\nJSON parse errors\n\nThe engine handles corrupt JSON files gracefully:\n\nDuring check: skips bad tasks, logs warning, continues\nDuring rebuild-index: skips unreadable files, reports in output\nAll CLI commands catch exceptions and return clean error messages (not tracebacks)\nData Location\nTask files: /home/zeron/.openclaw/workspace/tasks/TASK-NNN/\nIndex: /home/zeron/.openclaw/workspace/tasks/index.json\nArchive: /home/zeron/.openclaw/workspace/tasks/archive/\nConfig: /home/zeron/.openclaw/workspace/skills/task-engine/config/settings.yaml\nAgent reference: /home/zeron/.openclaw/workspace/skills/task-engine/references/agent-capabilities.md\nState transitions: /home/zeron/.openclaw/workspace/skills/task-engine/references/state-transitions.md"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/zeron-G/task-engine",
    "publisherUrl": "https://clawhub.ai/zeron-G/task-engine",
    "owner": "zeron-G",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/task-engine",
    "downloadUrl": "https://openagent3.xyz/downloads/task-engine",
    "agentUrl": "https://openagent3.xyz/skills/task-engine/agent",
    "manifestUrl": "https://openagent3.xyz/skills/task-engine/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/task-engine/agent.md"
  }
}