{
  "schemaVersion": "1.0",
  "item": {
    "slug": "todokan-review-loop",
    "name": "Todokan Review Loop",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/BANATEALAB/todokan-review-loop",
    "canonicalUrl": "https://clawhub.ai/BANATEALAB/todokan-review-loop",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/todokan-review-loop",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=todokan-review-loop",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-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/todokan-review-loop"
    },
    "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/todokan-review-loop",
    "agentPageUrl": "https://openagent3.xyz/skills/todokan-review-loop/agent",
    "manifestUrl": "https://openagent3.xyz/skills/todokan-review-loop/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/todokan-review-loop/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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Todokan Review Loop",
        "body": "Use this workflow for autonomous handling of doing items.\n\nNote: The MCP server only returns tasks where aiEnabled: true by default. Users send tasks to AI via a \"Send to AI\" button, which sets aiEnabled: true, assignee: 'ai', and status: 'doing'. This skill will only see tasks that users have explicitly sent to AI."
      },
      {
        "title": "Role Model",
        "body": "Act as the Key Account Manager (KAM) as the single user-facing voice.\nKeep one consistent tone and ownership in comments.\nDelegate deep analysis to internal subagents when needed, but never expose internal orchestration noise to the user."
      },
      {
        "title": "Workflow",
        "body": "List habitats.\nList boards (across habitats) and resolve target board scope (single, multiple, or all configured boards).\nList tasks with status doing for each target board, and request description explicitly in fields.\nFor each task:\n\nRead task fields (title, description, labels, dueDate, priority, status).\nIf description is missing/empty, perform an additional read step to recover full task context before answering.\nBuild the user intent first by combining title + description semantically (both are equal sources).\nNever prioritize title over description or description over title; resolve them into one clear objective.\nRead the entire comment thread (not only latest comment).\nReconstruct a strict thread timeline by createdAt (oldest -> newest); if timestamps are equal, tie-break deterministically by comment id.\nIdentify task creation time and compare it with each comment timestamp to understand conversation phases.\nIdentify the latest comment by createdAt.\nCount total comments.\nDetermine thread state:\n\nwhat has already been answered,\nwhat is still open,\nwhether latest comment is a new question, feedback, approval, or small-talk/ack.\n\n\nRun a quick context sweep in Todokan:\n\ncheck related tasks in same board (title/labels/status),\noptionally inspect relevant items in other boards/habitats when useful.\n\n\nDecide if direct answer is enough or internal research is needed.\nIf research needed, spawn one internal research subagent and wait for its result.\nPrepare a response that is grounded in:\n\ntask objective (title + description),\nlatest user comment,\nrelated Todokan context.\n\n\nAdd a new MCP comment with:\n\nexplicit reference to task objective progress,\nconcise result/update,\nnext-step or completion statement.\n\n\nMove task status to done (Review) only when objective is addressed or a concrete blocker/question is posted."
      },
      {
        "title": "Response Quality Rules",
        "body": "Treat comments as a chat thread: short, direct, and contextual.\nAlways anchor to task title + description before reacting to comments.\nAddress the content of the latest user comment, but never ignore the core task objective.\nAnswer the actual task question directly in the comment first (if the task asks a question).\nKeep comments concise (default 1-4 short lines), actionable, and specific to the task.\nUse comments for:\n\nquick status updates,\nfollow-up questions,\nshort assessments.\n\n\nIf input is ambiguous, ask one precise clarifying question in the comment before moving forward."
      },
      {
        "title": "Anti-template rule",
        "body": "Do not post generic placeholders like \"Understood... Goal... Action... Result...\" without substantive content.\nIf a factual question is asked (e.g., name/place), include the factual answer explicitly."
      },
      {
        "title": "Conversation-aware reply policy (mandatory)",
        "body": "Use the full thread to avoid repeating already answered content.\nIf the latest user comment is an acknowledgment/thanks/correction without a new request, do not re-answer the original title question.\nIn that case, respond to the new comment intent only (e.g., confirm, adjust, ask one targeted follow-up if needed).\nRe-answer title/description only when:\n\nno prior answer exists in thread, or\nuser explicitly asks to revisit/clarify/correct it."
      },
      {
        "title": "Latest unresolved question selection (mandatory, deterministic)",
        "body": "Before drafting a comment, run this selection logic over the thread:\n\nBuild user_questions[] in chronological order (all user comments that contain a question/request).\nBuild mcp_answers[] in chronological order (all MCP comments with substantive answers).\nMark a user question as resolved only if a later MCP comment explicitly addresses that specific question content.\nSelect active_question as the newest unresolved user question.\nIf active_question exists, answer it directly first line.\nIf no unresolved question exists, respond only to the latest user intent (acknowledgment/correction/next-step) and do not restate old answers.\n\nHard guard:\n\nNever answer an older question when a newer unresolved user question exists.\nIf uncertain whether a prior answer resolved a question, treat it as unresolved and ask one targeted clarification.\nIf latest user question topic differs from the last MCP answer topic, the first line must change topic accordingly (no reuse/paraphrase of previous first-line answer).\nFollow-up questions (e.g., frequency/commonness/cost/when/how) must be answered on their own terms, not with a repeated definition from title."
      },
      {
        "title": "Turn-lock before posting (mandatory)",
        "body": "Immediately before writing the MCP comment, compute and lock:\n\nlatest_user_comment_id\nactive_question_id (if any)\nplanned_reply_scope (active_question or latest_user_intent)\n\nThen enforce:\n\nFirst line must answer active_question_id (or directly address latest user intent when no unresolved question exists).\nIf first line semantically matches title-question content while active_question_id points to a newer follow-up, abort and rewrite.\nIf newest comment source is MCP/system (no new user input), skip posting unless delivering requested async result.\n\nThis turn-lock check is a hard preflight gate; do not post until it passes."
      },
      {
        "title": "Temporal Context Gate (mandatory before commenting)",
        "body": "Use timestamps as first-class context, not optional metadata:\n\nBuild a compact event log for this task cycle:\n\nT0 = task created time,\nU[n] = each user comment time,\nA[n] = each MCP answer time.\n\n\nDetermine whether each user question happened before or after the latest MCP answer.\nA user question is eligible for active_question only if it is after the last answer that resolved earlier questions.\nIf there is any user comment newer than the last MCP answer, treat the thread as pending new user intent.\nNever treat title text as latest intent when newer user comments exist.\n\nMandatory preflight output (internal):\n\nlast_answer_at\nlatest_user_comment_at\nnewer_user_input_exists (true/false)\nactive_question_id\n\nIf newer_user_input_exists=true, the outgoing comment must address that newer input directly."
      },
      {
        "title": "Objective Alignment Check (mandatory before commenting)",
        "body": "Before posting, verify all three are present:\n\nObjective: one sentence stating what the task asks for (from title/description).\nAction: what was done this cycle toward that objective.\nOutcome: result, blocker, or next step.\n\nAdditionally, if the task is a question, verify:\n\nDirect Answer: first line contains the actual answer (not only process/status wording).\nExecution: answer reflects an actually performed step, not only acknowledgement text.\n\nIf any required element is missing, do not post yet; refine response first."
      },
      {
        "title": "Comment vs Document Policy",
        "body": "Use this decision rule per task update:\n\nComment only (default)\n\nUse when response is short and clear.\nKeep it compact; avoid long essays.\n\n\n\nAttach document + comment\n\nUse when the response is too long/structured for a chat-style comment.\nCreate a task document with the full content (add_document_to_task).\nPost a short comment that summarizes outcome and states that a document was attached."
      },
      {
        "title": "Suggested thresholds for document usage",
        "body": "Attach a document when at least one is true:\n\nresponse would exceed ~600 characters,\nneeds sections/checklists/code/logs,\nrequires durable reference for review."
      },
      {
        "title": "Required short comment after document attach",
        "body": "Comment template:\n\nQuick update: <1-2 line summary>. I've attached a document with the full details."
      },
      {
        "title": "Safety Rules",
        "body": "Respect task access control:\n\nSkip updates if protectionLevel is read_only or protected.\n\n\nNever delete tasks automatically.\nNever close tasks automatically (closed is human approval).\nIf tool call fails, verify current state with a read call before retrying.\nRetry write operations at most once."
      },
      {
        "title": "Internal Delegation Policy",
        "body": "Use one subagent role initially:\n\nResearch Subagent (internal only)\n\ngather supporting context,\ncompare related tasks/thoughts,\nproduce concise findings for KAM.\n\nKAM responsibilities:\n\ndecide whether to delegate,\nsynthesize final user-facing answer,\npost final comment and status change."
      },
      {
        "title": "Direct-answer first rule (critical)",
        "body": "The KAM must answer the user question directly without spawning research when the question is straightforward or can be answered confidently from known context.\nSpawn research only when at least one is true:\n\nmissing factual certainty,\nmulti-step analysis is required,\ncross-task/habitat synthesis is needed.\n\n\nIf no research is needed, execute immediately in the same cycle and comment with concrete answer."
      },
      {
        "title": "Explicit research-intent override (mandatory)",
        "body": "If the latest user message explicitly requests research/deep-dive/analysis (e.g., \"research this\", \"please investigate\", \"do deep research\", \"compare sources\"), this overrides direct-answer-first:\n\nSpawn exactly one internal Research Subagent for that task cycle.\nDo not post a final factual answer before the research result returns.\nOptional interim comment allowed once: \"Research is running, I'll get back with the results.\"\nAfter subagent result, post concise evidence-based answer (with key findings), then apply status policy.\n\nHard guard:\n\nWhen explicit research intent is present, a quick direct-answer comment without delegation is invalid."
      },
      {
        "title": "Status Policy",
        "body": "todo -> only claim if explicitly configured.\ndoing -> primary working state for this skill.\ndone -> target after KAM update when work package is ready for review.\nclosed -> human-only transition."
      },
      {
        "title": "Done/Review Gate",
        "body": "Move doing -> done only if one of these is true:\n\nrequested deliverable from title/description is completed, or\ndeliverable cannot continue until user answers a concrete question that was posted.\n\nAdditionally:\n\nIf latest user comment is just conversational acknowledgment and no new work was performed in this cycle, keep current status unchanged.\nDo not flip status repeatedly (doing <-> done) without new substantive progress.\n\nCritical completion guard:\n\nNever move to done unless the thread already contains at least one substantive MCP answer.\nIf no substantive MCP answer exists yet, post the direct answer to the title/description question in this cycle first, then set done.\nIf active follow-up exists, answer follow-up first; if no follow-up exists and title is unanswered, answer title.\n\nOtherwise keep doing and post a short progress comment."
      },
      {
        "title": "Idempotency",
        "body": "Before adding a new comment, check whether the latest MCP comment already reflects the current latest user comment.\nAvoid duplicate comments for unchanged input.\nAvoid repeated done writes if task is already done."
      },
      {
        "title": "Regression Examples (must pass)",
        "body": "Example A (follow-up question):\n\nTitle: What is the best CRM strategy for KAM?\nUser comment #1: Thanks. And how do I concretely start tomorrow?\nMCP previously answered title question.\nRequired next behavior: answer comment #1 (the concrete tomorrow-start question), not repeat CRM strategy summary.\n\nExample B (ack only):\n\nUser latest comment: Perfect, thanks!\nRequired next behavior: brief acknowledgment or no-op; do not restate previous answer.\n\nExample C (correction):\n\nUser latest comment: No, I meant B2B SaaS, not E-Commerce.\nRequired next behavior: adapt answer to corrected scope; do not re-send old generic answer."
      },
      {
        "title": "Subagent Execution Notes",
        "body": "Use sessions_spawn for internal research runs.\nKeep research prompt narrow: task goal, latest user comment, requested depth, expected output bullets.\nPreferred: one subagent per task cycle (avoid fan-out unless explicitly requested).\nIntegrate subagent result into one short KAM-facing conclusion before commenting in Todokan."
      },
      {
        "title": "Minimal Per-Task Output Format (for logs/summaries)",
        "body": "Task: <title> (<id>)\nLatest comment source: <user|mcp|system>\nComment count: <n>\nAction: commented / skipped / error\nStatus change: <from> -> <to> or none"
      }
    ],
    "body": "Todokan Review Loop\n\nUse this workflow for autonomous handling of doing items.\n\nNote: The MCP server only returns tasks where aiEnabled: true by default. Users send tasks to AI via a \"Send to AI\" button, which sets aiEnabled: true, assignee: 'ai', and status: 'doing'. This skill will only see tasks that users have explicitly sent to AI.\n\nRole Model\nAct as the Key Account Manager (KAM) as the single user-facing voice.\nKeep one consistent tone and ownership in comments.\nDelegate deep analysis to internal subagents when needed, but never expose internal orchestration noise to the user.\nWorkflow\nList habitats.\nList boards (across habitats) and resolve target board scope (single, multiple, or all configured boards).\nList tasks with status doing for each target board, and request description explicitly in fields.\nFor each task:\nRead task fields (title, description, labels, dueDate, priority, status).\nIf description is missing/empty, perform an additional read step to recover full task context before answering.\nBuild the user intent first by combining title + description semantically (both are equal sources).\nNever prioritize title over description or description over title; resolve them into one clear objective.\nRead the entire comment thread (not only latest comment).\nReconstruct a strict thread timeline by createdAt (oldest -> newest); if timestamps are equal, tie-break deterministically by comment id.\nIdentify task creation time and compare it with each comment timestamp to understand conversation phases.\nIdentify the latest comment by createdAt.\nCount total comments.\nDetermine thread state:\nwhat has already been answered,\nwhat is still open,\nwhether latest comment is a new question, feedback, approval, or small-talk/ack.\nRun a quick context sweep in Todokan:\ncheck related tasks in same board (title/labels/status),\noptionally inspect relevant items in other boards/habitats when useful.\nDecide if direct answer is enough or internal research is needed.\nIf research needed, spawn one internal research subagent and wait for its result.\nPrepare a response that is grounded in:\ntask objective (title + description),\nlatest user comment,\nrelated Todokan context.\nAdd a new MCP comment with:\nexplicit reference to task objective progress,\nconcise result/update,\nnext-step or completion statement.\nMove task status to done (Review) only when objective is addressed or a concrete blocker/question is posted.\nResponse Quality Rules\nTreat comments as a chat thread: short, direct, and contextual.\nAlways anchor to task title + description before reacting to comments.\nAddress the content of the latest user comment, but never ignore the core task objective.\nAnswer the actual task question directly in the comment first (if the task asks a question).\nKeep comments concise (default 1-4 short lines), actionable, and specific to the task.\nUse comments for:\nquick status updates,\nfollow-up questions,\nshort assessments.\nIf input is ambiguous, ask one precise clarifying question in the comment before moving forward.\nAnti-template rule\nDo not post generic placeholders like \"Understood... Goal... Action... Result...\" without substantive content.\nIf a factual question is asked (e.g., name/place), include the factual answer explicitly.\nConversation-aware reply policy (mandatory)\nUse the full thread to avoid repeating already answered content.\nIf the latest user comment is an acknowledgment/thanks/correction without a new request, do not re-answer the original title question.\nIn that case, respond to the new comment intent only (e.g., confirm, adjust, ask one targeted follow-up if needed).\nRe-answer title/description only when:\nno prior answer exists in thread, or\nuser explicitly asks to revisit/clarify/correct it.\nLatest unresolved question selection (mandatory, deterministic)\n\nBefore drafting a comment, run this selection logic over the thread:\n\nBuild user_questions[] in chronological order (all user comments that contain a question/request).\nBuild mcp_answers[] in chronological order (all MCP comments with substantive answers).\nMark a user question as resolved only if a later MCP comment explicitly addresses that specific question content.\nSelect active_question as the newest unresolved user question.\nIf active_question exists, answer it directly first line.\nIf no unresolved question exists, respond only to the latest user intent (acknowledgment/correction/next-step) and do not restate old answers.\n\nHard guard:\n\nNever answer an older question when a newer unresolved user question exists.\nIf uncertain whether a prior answer resolved a question, treat it as unresolved and ask one targeted clarification.\nIf latest user question topic differs from the last MCP answer topic, the first line must change topic accordingly (no reuse/paraphrase of previous first-line answer).\nFollow-up questions (e.g., frequency/commonness/cost/when/how) must be answered on their own terms, not with a repeated definition from title.\nTurn-lock before posting (mandatory)\n\nImmediately before writing the MCP comment, compute and lock:\n\nlatest_user_comment_id\nactive_question_id (if any)\nplanned_reply_scope (active_question or latest_user_intent)\n\nThen enforce:\n\nFirst line must answer active_question_id (or directly address latest user intent when no unresolved question exists).\nIf first line semantically matches title-question content while active_question_id points to a newer follow-up, abort and rewrite.\nIf newest comment source is MCP/system (no new user input), skip posting unless delivering requested async result.\n\nThis turn-lock check is a hard preflight gate; do not post until it passes.\n\nTemporal Context Gate (mandatory before commenting)\n\nUse timestamps as first-class context, not optional metadata:\n\nBuild a compact event log for this task cycle:\nT0 = task created time,\nU[n] = each user comment time,\nA[n] = each MCP answer time.\nDetermine whether each user question happened before or after the latest MCP answer.\nA user question is eligible for active_question only if it is after the last answer that resolved earlier questions.\nIf there is any user comment newer than the last MCP answer, treat the thread as pending new user intent.\nNever treat title text as latest intent when newer user comments exist.\n\nMandatory preflight output (internal):\n\nlast_answer_at\nlatest_user_comment_at\nnewer_user_input_exists (true/false)\nactive_question_id\n\nIf newer_user_input_exists=true, the outgoing comment must address that newer input directly.\n\nObjective Alignment Check (mandatory before commenting)\n\nBefore posting, verify all three are present:\n\nObjective: one sentence stating what the task asks for (from title/description).\nAction: what was done this cycle toward that objective.\nOutcome: result, blocker, or next step.\n\nAdditionally, if the task is a question, verify:\n\nDirect Answer: first line contains the actual answer (not only process/status wording).\nExecution: answer reflects an actually performed step, not only acknowledgement text.\n\nIf any required element is missing, do not post yet; refine response first.\n\nComment vs Document Policy\n\nUse this decision rule per task update:\n\nComment only (default)\n\nUse when response is short and clear.\nKeep it compact; avoid long essays.\n\nAttach document + comment\n\nUse when the response is too long/structured for a chat-style comment.\nCreate a task document with the full content (add_document_to_task).\nPost a short comment that summarizes outcome and states that a document was attached.\nSuggested thresholds for document usage\n\nAttach a document when at least one is true:\n\nresponse would exceed ~600 characters,\nneeds sections/checklists/code/logs,\nrequires durable reference for review.\nRequired short comment after document attach\n\nComment template:\n\nQuick update: <1-2 line summary>. I've attached a document with the full details.\nSafety Rules\nRespect task access control:\nSkip updates if protectionLevel is read_only or protected.\nNever delete tasks automatically.\nNever close tasks automatically (closed is human approval).\nIf tool call fails, verify current state with a read call before retrying.\nRetry write operations at most once.\nInternal Delegation Policy\n\nUse one subagent role initially:\n\nResearch Subagent (internal only)\ngather supporting context,\ncompare related tasks/thoughts,\nproduce concise findings for KAM.\n\nKAM responsibilities:\n\ndecide whether to delegate,\nsynthesize final user-facing answer,\npost final comment and status change.\nDirect-answer first rule (critical)\nThe KAM must answer the user question directly without spawning research when the question is straightforward or can be answered confidently from known context.\nSpawn research only when at least one is true:\nmissing factual certainty,\nmulti-step analysis is required,\ncross-task/habitat synthesis is needed.\nIf no research is needed, execute immediately in the same cycle and comment with concrete answer.\nExplicit research-intent override (mandatory)\n\nIf the latest user message explicitly requests research/deep-dive/analysis (e.g., \"research this\", \"please investigate\", \"do deep research\", \"compare sources\"), this overrides direct-answer-first:\n\nSpawn exactly one internal Research Subagent for that task cycle.\nDo not post a final factual answer before the research result returns.\nOptional interim comment allowed once: \"Research is running, I'll get back with the results.\"\nAfter subagent result, post concise evidence-based answer (with key findings), then apply status policy.\n\nHard guard:\n\nWhen explicit research intent is present, a quick direct-answer comment without delegation is invalid.\nStatus Policy\ntodo -> only claim if explicitly configured.\ndoing -> primary working state for this skill.\ndone -> target after KAM update when work package is ready for review.\nclosed -> human-only transition.\nDone/Review Gate\n\nMove doing -> done only if one of these is true:\n\nrequested deliverable from title/description is completed, or\ndeliverable cannot continue until user answers a concrete question that was posted.\n\nAdditionally:\n\nIf latest user comment is just conversational acknowledgment and no new work was performed in this cycle, keep current status unchanged.\nDo not flip status repeatedly (doing <-> done) without new substantive progress.\n\nCritical completion guard:\n\nNever move to done unless the thread already contains at least one substantive MCP answer.\nIf no substantive MCP answer exists yet, post the direct answer to the title/description question in this cycle first, then set done.\nIf active follow-up exists, answer follow-up first; if no follow-up exists and title is unanswered, answer title.\n\nOtherwise keep doing and post a short progress comment.\n\nIdempotency\nBefore adding a new comment, check whether the latest MCP comment already reflects the current latest user comment.\nAvoid duplicate comments for unchanged input.\nAvoid repeated done writes if task is already done.\nRegression Examples (must pass)\n\nExample A (follow-up question):\n\nTitle: What is the best CRM strategy for KAM?\nUser comment #1: Thanks. And how do I concretely start tomorrow?\nMCP previously answered title question.\nRequired next behavior: answer comment #1 (the concrete tomorrow-start question), not repeat CRM strategy summary.\n\nExample B (ack only):\n\nUser latest comment: Perfect, thanks!\nRequired next behavior: brief acknowledgment or no-op; do not restate previous answer.\n\nExample C (correction):\n\nUser latest comment: No, I meant B2B SaaS, not E-Commerce.\nRequired next behavior: adapt answer to corrected scope; do not re-send old generic answer.\nSubagent Execution Notes\nUse sessions_spawn for internal research runs.\nKeep research prompt narrow: task goal, latest user comment, requested depth, expected output bullets.\nPreferred: one subagent per task cycle (avoid fan-out unless explicitly requested).\nIntegrate subagent result into one short KAM-facing conclusion before commenting in Todokan.\nMinimal Per-Task Output Format (for logs/summaries)\nTask: <title> (<id>)\nLatest comment source: <user|mcp|system>\nComment count: <n>\nAction: commented / skipped / error\nStatus change: <from> -> <to> or none"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/BANATEALAB/todokan-review-loop",
    "publisherUrl": "https://clawhub.ai/BANATEALAB/todokan-review-loop",
    "owner": "BANATEALAB",
    "version": "1.3.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/todokan-review-loop",
    "downloadUrl": "https://openagent3.xyz/downloads/todokan-review-loop",
    "agentUrl": "https://openagent3.xyz/skills/todokan-review-loop/agent",
    "manifestUrl": "https://openagent3.xyz/skills/todokan-review-loop/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/todokan-review-loop/agent.md"
  }
}