{
  "schemaVersion": "1.0",
  "item": {
    "slug": "letsclarify",
    "name": "Let's Clarify",
    "source": "tencent",
    "type": "skill",
    "category": "其他",
    "sourceUrl": "https://clawhub.ai/heisee/letsclarify",
    "canonicalUrl": "https://clawhub.ai/heisee/letsclarify",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/letsclarify",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=letsclarify",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "REFERENCE.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. 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",
      "slug": "letsclarify",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-29T07:25:48.299Z",
      "expiresAt": "2026-05-06T07:25:48.299Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=letsclarify",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=letsclarify",
        "contentDisposition": "attachment; filename=\"letsclarify-1.0.7.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "letsclarify"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/letsclarify"
    },
    "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/letsclarify",
    "agentPageUrl": "https://openagent3.xyz/skills/letsclarify/agent",
    "manifestUrl": "https://openagent3.xyz/skills/letsclarify/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/letsclarify/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": "Let's Clarify Skill",
        "body": "Human-in-the-Loop infrastructure. Use when your workflow needs structured human input — approvals, decisions, data collection — before proceeding.\n\nBase URL: https://letsclarify.ai\nAuth: Authorization: Bearer lc_... on all API calls.\n\nFor full curl examples, detailed response payloads, MCP tool descriptions, all polling strategies, embed widget details, and advanced prefill rules, see REFERENCE.md."
      },
      {
        "title": "MCP Server (Preferred)",
        "body": "MCP-compatible agents should use the remote MCP endpoint instead of raw REST calls.\n\nEndpoint: https://letsclarify.ai/mcp\n\nConfig: { \"mcpServers\": { \"letsclarify\": { \"url\": \"https://letsclarify.ai/mcp\", \"headers\": { \"Authorization\": \"Bearer lc_...\" } } } }\n\nTools: register (no auth), create_form, add_recipients, get_summary, get_results, delete_form (all require auth)."
      },
      {
        "title": "Register / Delete API Key",
        "body": "POST /api/v1/register with {\"name\": \"...\", \"email\": \"...\"} → {\"api_key\": \"lc_...\", \"key_prefix\": \"lc_xxxxx\"}. Store securely, shown only once.\n\nDELETE /api/v1/register with auth header → {\"deleted\": true}."
      },
      {
        "title": "Create Form",
        "body": "POST /api/v1/forms (auth required)\n\n{\n  \"title\": \"Approve Budget Increase\",\n  \"context_markdown\": \"## Q3 Budget\\nPlease review the proposed 15% increase.\",\n  \"recipient_count\": 3,\n  \"retention_days\": 7,\n  \"webhook_url\": \"https://example.com/webhook\",\n  \"schema\": [\n    {\"id\": \"decision\", \"type\": \"radio\", \"label\": \"Your decision\", \"required\": true,\n     \"options\": [{\"value\": \"approve\", \"label\": \"Approve\"}, {\"value\": \"reject\", \"label\": \"Reject\"}]},\n    {\"id\": \"notes\", \"type\": \"textarea\", \"label\": \"Additional notes\", \"required\": false}\n  ]\n}\n\nOptional params: theme_color (hex, e.g. #1a2b3c). recipient_count accepts 1–1,000.\n\nResponse: form_token, delete_token, recipients (array of UUIDs), base_url_template, poll_url, summary_url, delete_url.\n\nRecipient URLs: https://letsclarify.ai/f/{form_token}/{recipient_uuid} — distribute via email, Slack, WhatsApp, etc.\n\nClient-provided UUIDs/prefill: Instead of recipient_count, pass \"recipients\": [{\"uuid\": \"...\", \"prefill\": {\"field_id\": \"value\"}}, {}]. UUIDs must be valid v4, prefill max 10KB. Both recipients array and recipient_count can be combined (count >= array length)."
      },
      {
        "title": "Add Recipients",
        "body": "POST /api/v1/forms/{form_token}/recipients with {\"count\": 5} or {\"recipients\": [...]}. Max 1,000/request, 10,000/form. Same UUID/prefill rules as creation."
      },
      {
        "title": "Poll Summary",
        "body": "GET /api/v1/forms/{form_token}/summary → {expired, known_total, submitted_total, pending_total, updated_at_max}."
      },
      {
        "title": "Poll Results",
        "body": "GET /api/v1/forms/{form_token}/results\n\nQuery params: limit, status (submitted/pending), cursor (pagination), include_files=1 (base64), updated_since (ISO 8601).\n\nResponse: {expired, next_cursor, server_time, results: [{recipient_uuid, status, submitted_at, updated_at, response_json, files}]}.\n\nEfficient polling: First paginate with cursor until next_cursor is null, store server_time. Then poll with updated_since={server_time}."
      },
      {
        "title": "Delete Form",
        "body": "DELETE /api/v1/forms/{form_token} with X-Delete-Token: {delete_token} → {\"deleted\": true}. Permanently removes form, submissions, and files."
      },
      {
        "title": "Webhooks",
        "body": "If webhook_url (HTTPS) is set, a POST is sent per submission with {form_token, recipient_uuid, submitted_at, response_json}. Retries 3× with backoff on 5xx/network errors. Non-blocking."
      },
      {
        "title": "Waiting for Results",
        "body": "After creating a form and sending URLs, set up async polling. Do NOT assume immediate responses.\n\nRecommended: Cron polling\n\nopenclaw cron add --name \"poll-lc-{form_token}\" --every 10m \\\n  --message \"Check Let's Clarify form {form_token}: get_summary to see if submitted_total == known_total. If all responded, get_results and summarize, then remove this cron. If expired, fetch what exists and clean up.\"\n\nOne-shot: openclaw cron add --name \"check-lc-{form_token}\" --at +1h --delete-after-run --message \"Check form {form_token} results and report status.\"\n\nWorkflow: Create form → send URLs → cron polls summary → all responded or expired → fetch results → delete cron → optionally delete form."
      },
      {
        "title": "Embed Widget",
        "body": "Embed forms directly in any page instead of linking to the hosted URL:\n\n<script src=\"https://letsclarify.ai/embed.js\"></script>\n<div data-letsclarify-form=\"{form_token}\" data-letsclarify-recipient=\"{recipient_uuid}\"></div>\n\nAuto-renders all field types, handles validation/submission, injects its own CSS."
      },
      {
        "title": "Schema Field Types",
        "body": "TypeDescriptionoptions requiredtextSingle-line inputNotextareaMulti-line inputNocheckboxSingle booleanNocheckbox_groupMultiple checkboxesYesradioRadio buttonsYesselectDropdownYesfileFile uploadNo\n\nValidation (optional): min_length/max_length, pattern (regex) for text/textarea. min_items/max_items for checkbox_group.\nFile config (optional): accept (MIME/extensions), max_size_mb (1-10), max_files (1-10)."
      },
      {
        "title": "Rate Limits",
        "body": "EndpointLimitRegister5/hourCreate form10/minAll API / MCP60/minEmbed GET/POST30/20 per min\n\nOn 429: read Retry-After header, exponential backoff (Retry-After × 2^attempt), max 5 retries."
      },
      {
        "title": "Data Retention",
        "body": "Default 30 days, max 365 days. Expired forms return expired: true. Use delete endpoint for immediate cleanup."
      }
    ],
    "body": "Let's Clarify Skill\n\nHuman-in-the-Loop infrastructure. Use when your workflow needs structured human input — approvals, decisions, data collection — before proceeding.\n\nBase URL: https://letsclarify.ai Auth: Authorization: Bearer lc_... on all API calls.\n\nFor full curl examples, detailed response payloads, MCP tool descriptions, all polling strategies, embed widget details, and advanced prefill rules, see REFERENCE.md.\n\nMCP Server (Preferred)\n\nMCP-compatible agents should use the remote MCP endpoint instead of raw REST calls.\n\nEndpoint: https://letsclarify.ai/mcp\n\nConfig: { \"mcpServers\": { \"letsclarify\": { \"url\": \"https://letsclarify.ai/mcp\", \"headers\": { \"Authorization\": \"Bearer lc_...\" } } } }\n\nTools: register (no auth), create_form, add_recipients, get_summary, get_results, delete_form (all require auth).\n\nREST API Reference\nRegister / Delete API Key\n\nPOST /api/v1/register with {\"name\": \"...\", \"email\": \"...\"} → {\"api_key\": \"lc_...\", \"key_prefix\": \"lc_xxxxx\"}. Store securely, shown only once.\n\nDELETE /api/v1/register with auth header → {\"deleted\": true}.\n\nCreate Form\n\nPOST /api/v1/forms (auth required)\n\n{\n  \"title\": \"Approve Budget Increase\",\n  \"context_markdown\": \"## Q3 Budget\\nPlease review the proposed 15% increase.\",\n  \"recipient_count\": 3,\n  \"retention_days\": 7,\n  \"webhook_url\": \"https://example.com/webhook\",\n  \"schema\": [\n    {\"id\": \"decision\", \"type\": \"radio\", \"label\": \"Your decision\", \"required\": true,\n     \"options\": [{\"value\": \"approve\", \"label\": \"Approve\"}, {\"value\": \"reject\", \"label\": \"Reject\"}]},\n    {\"id\": \"notes\", \"type\": \"textarea\", \"label\": \"Additional notes\", \"required\": false}\n  ]\n}\n\n\nOptional params: theme_color (hex, e.g. #1a2b3c). recipient_count accepts 1–1,000.\n\nResponse: form_token, delete_token, recipients (array of UUIDs), base_url_template, poll_url, summary_url, delete_url.\n\nRecipient URLs: https://letsclarify.ai/f/{form_token}/{recipient_uuid} — distribute via email, Slack, WhatsApp, etc.\n\nClient-provided UUIDs/prefill: Instead of recipient_count, pass \"recipients\": [{\"uuid\": \"...\", \"prefill\": {\"field_id\": \"value\"}}, {}]. UUIDs must be valid v4, prefill max 10KB. Both recipients array and recipient_count can be combined (count >= array length).\n\nAdd Recipients\n\nPOST /api/v1/forms/{form_token}/recipients with {\"count\": 5} or {\"recipients\": [...]}. Max 1,000/request, 10,000/form. Same UUID/prefill rules as creation.\n\nPoll Summary\n\nGET /api/v1/forms/{form_token}/summary → {expired, known_total, submitted_total, pending_total, updated_at_max}.\n\nPoll Results\n\nGET /api/v1/forms/{form_token}/results\n\nQuery params: limit, status (submitted/pending), cursor (pagination), include_files=1 (base64), updated_since (ISO 8601).\n\nResponse: {expired, next_cursor, server_time, results: [{recipient_uuid, status, submitted_at, updated_at, response_json, files}]}.\n\nEfficient polling: First paginate with cursor until next_cursor is null, store server_time. Then poll with updated_since={server_time}.\n\nDelete Form\n\nDELETE /api/v1/forms/{form_token} with X-Delete-Token: {delete_token} → {\"deleted\": true}. Permanently removes form, submissions, and files.\n\nWebhooks\n\nIf webhook_url (HTTPS) is set, a POST is sent per submission with {form_token, recipient_uuid, submitted_at, response_json}. Retries 3× with backoff on 5xx/network errors. Non-blocking.\n\nWaiting for Results\n\nAfter creating a form and sending URLs, set up async polling. Do NOT assume immediate responses.\n\nRecommended: Cron polling\n\nopenclaw cron add --name \"poll-lc-{form_token}\" --every 10m \\\n  --message \"Check Let's Clarify form {form_token}: get_summary to see if submitted_total == known_total. If all responded, get_results and summarize, then remove this cron. If expired, fetch what exists and clean up.\"\n\n\nOne-shot: openclaw cron add --name \"check-lc-{form_token}\" --at +1h --delete-after-run --message \"Check form {form_token} results and report status.\"\n\nWorkflow: Create form → send URLs → cron polls summary → all responded or expired → fetch results → delete cron → optionally delete form.\n\nEmbed Widget\n\nEmbed forms directly in any page instead of linking to the hosted URL:\n\n<script src=\"https://letsclarify.ai/embed.js\"></script>\n<div data-letsclarify-form=\"{form_token}\" data-letsclarify-recipient=\"{recipient_uuid}\"></div>\n\n\nAuto-renders all field types, handles validation/submission, injects its own CSS.\n\nSchema Field Types\nType\tDescription\toptions required\ntext\tSingle-line input\tNo\ntextarea\tMulti-line input\tNo\ncheckbox\tSingle boolean\tNo\ncheckbox_group\tMultiple checkboxes\tYes\nradio\tRadio buttons\tYes\nselect\tDropdown\tYes\nfile\tFile upload\tNo\n\nValidation (optional): min_length/max_length, pattern (regex) for text/textarea. min_items/max_items for checkbox_group. File config (optional): accept (MIME/extensions), max_size_mb (1-10), max_files (1-10).\n\nRate Limits\nEndpoint\tLimit\nRegister\t5/hour\nCreate form\t10/min\nAll API / MCP\t60/min\nEmbed GET/POST\t30/20 per min\n\nOn 429: read Retry-After header, exponential backoff (Retry-After × 2^attempt), max 5 retries.\n\nData Retention\n\nDefault 30 days, max 365 days. Expired forms return expired: true. Use delete endpoint for immediate cleanup."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/heisee/letsclarify",
    "publisherUrl": "https://clawhub.ai/heisee/letsclarify",
    "owner": "heisee",
    "version": "1.0.7",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/letsclarify",
    "downloadUrl": "https://openagent3.xyz/downloads/letsclarify",
    "agentUrl": "https://openagent3.xyz/skills/letsclarify/agent",
    "manifestUrl": "https://openagent3.xyz/skills/letsclarify/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/letsclarify/agent.md"
  }
}