{
  "schemaVersion": "1.0",
  "item": {
    "slug": "feishu-doc-write",
    "name": "feishu-doc-write",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/sunnyyao2222-eng/feishu-doc-write",
    "canonicalUrl": "https://clawhub.ai/sunnyyao2222-eng/feishu-doc-write",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/feishu-doc-write",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=feishu-doc-write",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "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",
      "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/feishu-doc-write"
    },
    "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/feishu-doc-write",
    "agentPageUrl": "https://openagent3.xyz/skills/feishu-doc-write/agent",
    "manifestUrl": "https://openagent3.xyz/skills/feishu-doc-write/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/feishu-doc-write/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": "Feishu Document Writer",
        "body": "Reference spec for writing content to Feishu (Lark) cloud documents via the Docx API. Feishu docs use a Block tree model — raw Markdown is not accepted.\n\nDocument (block_type=1, Page)\n  +-- Heading1 Block (block_type=3)\n  +-- Text Block (block_type=2)\n  +-- Callout Block (block_type=19)\n  |     +-- Text Block\n  |     +-- Bullet Block\n  +-- Image Block (block_type=27)\n  +-- Divider Block (block_type=22)"
      },
      {
        "title": "Preferred Approach: Convert API",
        "body": "Feishu provides an official Markdown -> Blocks conversion endpoint:\n\nPOST /open-apis/docx/v1/documents/{document_id}/convert\n\n{\n  \"content\": \"# Title\\n\\nBody text\\n\\n- Item 1\\n- Item 2\\n\\n> Quote\",\n  \"content_type\": \"markdown\"\n}\n\nPros: No manual Block JSON construction. Handles most standard Markdown.\nLimitation: Does not support Feishu-specific blocks (Callout, etc.) — use manual Block creation for those."
      },
      {
        "title": "Block Type Reference",
        "body": "block_typeNameJSON KeyNotes1PagepageDocument root2TexttextParagraph3-11Heading1-9heading1-heading9Headings12BulletbulletUnordered list (each item = separate block)13OrderedorderedOrdered list14CodecodeCode block (with style.language enum)15QuotequoteBlockquote17TodotodoCheckbox item (with style.done)19CalloutcalloutHighlight box (Feishu-specific, container block)22DividerdividerHorizontal rule27ImageimageTwo-step: create placeholder, then upload31TabletableTable34QuoteContainerquote_containerQuote container"
      },
      {
        "title": "Create Blocks API",
        "body": "POST /open-apis/docx/v1/documents/{document_id}/blocks/{block_id}/children?document_revision_id=-1\n\nHeaders:\n  Content-Type: application/json\n  Authorization: Bearer <tenant_access_token>\n\nBody:\n{\n  \"children\": [ ...Block array... ],\n  \"index\": 0\n}\n\nblock_id: Parent block ID (usually document_id itself for root)\nindex: Insert position (0 = beginning, -1 or omit = end)"
      },
      {
        "title": "Text",
        "body": "{\n  \"block_type\": 2,\n  \"text\": {\n    \"elements\": [{\n      \"text_run\": {\n        \"content\": \"Paragraph text here\",\n        \"text_element_style\": { \"bold\": false, \"italic\": false }\n      }\n    }]\n  }\n}"
      },
      {
        "title": "Heading",
        "body": "{ \"block_type\": 3, \"heading1\": { \"elements\": [{ \"text_run\": { \"content\": \"H1 Title\" } }] } }\n{ \"block_type\": 4, \"heading2\": { \"elements\": [{ \"text_run\": { \"content\": \"H2 Title\" } }] } }"
      },
      {
        "title": "Bullet / Ordered List",
        "body": "{ \"block_type\": 12, \"bullet\": { \"elements\": [{ \"text_run\": { \"content\": \"List item\" } }] } }\n{ \"block_type\": 13, \"ordered\": { \"elements\": [{ \"text_run\": { \"content\": \"Numbered item\" } }] } }\n\nEach list item is a separate Block."
      },
      {
        "title": "Code Block",
        "body": "{\n  \"block_type\": 14,\n  \"code\": {\n    \"elements\": [{ \"text_run\": { \"content\": \"console.log('hello');\" } }],\n    \"style\": { \"language\": 23, \"wrap\": false }\n  }\n}\n\nCommon language enums: PlainText=1, JavaScript=23, Python=40, TypeScript=49, Go=20, Shell=46, SQL=47, Java=22, Rust=44, C=12, CSS=17, HTML=21, Docker=19."
      },
      {
        "title": "Callout (Feishu-specific highlight box)",
        "body": "Callout is a container block — create it first, then add child blocks inside.\n\n// Step 1: Create callout as document child\n{ \"block_type\": 19, \"callout\": { \"background_color\": 3, \"border_color\": 3, \"emoji_id\": \"star\" } }\n\n// Step 2: POST .../blocks/{callout_block_id}/children\n{ \"children\": [{ \"block_type\": 2, \"text\": { \"elements\": [{ \"text_run\": { \"content\": \"Highlight text\" } }] } }] }\n\nColor enums: Red=1, Orange=2, Yellow=3, Green=4, Blue=5, Purple=6, Grey=7."
      },
      {
        "title": "Divider",
        "body": "{ \"block_type\": 22, \"divider\": {} }"
      },
      {
        "title": "Image (two-step)",
        "body": "Step 1: Create placeholder block { \"block_type\": 27, \"image\": {} }\nStep 2: Upload via POST /open-apis/drive/v1/medias/upload_all\n  - multipart/form-data: file, file_name, parent_type=\"docx_image\", parent_node=<image_block_id>"
      },
      {
        "title": "Text Styling",
        "body": "Apply styles via text_element_style in text_run:\n\nPropertyTypeEffectboldboolBolditalicboolItalicstrikethroughboolStrikethroughunderlineboolUnderlineinline_codeboolInline codetext_colorintText color (same enum as callout colors)background_colorintBackground colorlink.urlstringHyperlink\n\nMultiple text_run elements in one block = mixed styles in one paragraph."
      },
      {
        "title": "Markdown to Block Mapping",
        "body": "Markdownblock_typeJSON Key# H13heading1## H24heading2### H35heading3Paragraph2text- item12bullet1. item13orderedCode fence14code> quote15quote- [ ] todo17todo---22divider![](url)27image (two-step)**bold**--text_element_style.bold: true*italic*--text_element_style.italic: true`code`--text_element_style.inline_code: true~~strike~~--text_element_style.strikethrough: true[text](url)--text_element_style.link.url(no MD equivalent)19callout (Feishu-specific)"
      },
      {
        "title": "Concurrency & Ordering (Critical)",
        "body": "Problem: Concurrent Block creation API calls produce random ordering."
      },
      {
        "title": "Solution A: Single Batch Request (Recommended)",
        "body": "Put all blocks in one children array, single API call:\n\n{\n  \"children\": [\n    { \"block_type\": 3, \"heading1\": { \"elements\": [{\"text_run\": {\"content\": \"Title\"}}] } },\n    { \"block_type\": 2, \"text\": { \"elements\": [{\"text_run\": {\"content\": \"Paragraph 1\"}}] } },\n    { \"block_type\": 22, \"divider\": {} },\n    { \"block_type\": 4, \"heading2\": { \"elements\": [{\"text_run\": {\"content\": \"Section 2\"}}] } }\n  ],\n  \"index\": 0\n}"
      },
      {
        "title": "Solution B: Serial Writes with Index",
        "body": "For long content requiring multiple requests, execute serially with explicit index:\n\nRequest 1: index=0, write block A\nRequest 2: index=1, write block B (wait for A to succeed)\nRequest 3: index=2, write block C (wait for B to succeed)"
      },
      {
        "title": "Solution C: Collect-Then-Write (Recommended)",
        "body": "LLM outputs complete Markdown -> Conversion layer -> Single API batch write\n\nNever let the LLM write one paragraph at a time with concurrent API calls."
      },
      {
        "title": "Complete Write Flow",
        "body": "Create document: POST /open-apis/docx/v1/documents with { \"folder_token\": \"<token>\", \"title\": \"Title\" } -> returns document_id\nBuild Block array: Convert full content to Block JSON\nBatch write: POST .../documents/{doc_id}/blocks/{doc_id}/children?document_revision_id=-1 with all blocks\nContainer blocks (optional): For Callout etc., get block_id from step 3 response, then add children"
      },
      {
        "title": "Custom Callout Syntax",
        "body": "Since Markdown has no Callout equivalent, use this custom markup:\n\n:::callout{color=yellow emoji=bulb}\nHighlight content here.\nSupports **bold**, *italic*, and lists.\n:::\n\nParamValuesDefaultPurposecolorred, orange, yellow, green, blue, purple, greyyellowBackground & borderemojiAny Feishu emoji_id (bulb, star, warning, fire)bulbLeft iconborderSame as color valuesSame as colorBorder color (override)\n\nCommon templates:\n\n:::callout{color=yellow emoji=bulb}\n**Key Insight**: The most important takeaway\n:::\n\n:::callout{color=red emoji=warning}\n**Warning**: Common misconception\n:::\n\n:::callout{color=green emoji=check}\n**Action Item**: What to do next\n:::"
      },
      {
        "title": "Rate Limits & Constraints",
        "body": "Max blocks per batch: ~50 recommended\nLong articles: Split by H2/H3 sections, 200-500ms between batches\nAlways use document_revision_id=-1 (latest version)\nToken validity: ~2 hours, cache and refresh before expiry"
      },
      {
        "title": "Authentication",
        "body": "curl -X POST 'https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal' \\\n  -H 'Content-Type: application/json' \\\n  -d '{ \"app_id\": \"<app_id>\", \"app_secret\": \"<app_secret>\" }'"
      },
      {
        "title": "Schema Pitfalls (Battle-tested)",
        "body": "No Markdown tables in write ops — use bullet lists instead (prevents schema errors)\nNo nested code blocks inside lists — Feishu schema validation is strict on nesting depth\nCallout is a container — always requires a two-step create (container first, then children)\nEach list item = separate Block — don't try to put multiple items in one block"
      },
      {
        "title": "References",
        "body": "Create Blocks API: https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/document-docx/docx-v1/document-block-children/create\nBlock Data Structure: https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/document-docx/docx-v1/data-structure/block\nConvert API: https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/document-docx/docx-v1/document/convert\nExtended API reference: See FEISHU_API_HANDBOOK.md in workspace root"
      }
    ],
    "body": "Feishu Document Writer\n\nReference spec for writing content to Feishu (Lark) cloud documents via the Docx API. Feishu docs use a Block tree model — raw Markdown is not accepted.\n\nDocument (block_type=1, Page)\n  +-- Heading1 Block (block_type=3)\n  +-- Text Block (block_type=2)\n  +-- Callout Block (block_type=19)\n  |     +-- Text Block\n  |     +-- Bullet Block\n  +-- Image Block (block_type=27)\n  +-- Divider Block (block_type=22)\n\nPreferred Approach: Convert API\n\nFeishu provides an official Markdown -> Blocks conversion endpoint:\n\nPOST /open-apis/docx/v1/documents/{document_id}/convert\n\n{\n  \"content\": \"# Title\\n\\nBody text\\n\\n- Item 1\\n- Item 2\\n\\n> Quote\",\n  \"content_type\": \"markdown\"\n}\n\n\nPros: No manual Block JSON construction. Handles most standard Markdown. Limitation: Does not support Feishu-specific blocks (Callout, etc.) — use manual Block creation for those.\n\nBlock Type Reference\nblock_type\tName\tJSON Key\tNotes\n1\tPage\tpage\tDocument root\n2\tText\ttext\tParagraph\n3-11\tHeading1-9\theading1-heading9\tHeadings\n12\tBullet\tbullet\tUnordered list (each item = separate block)\n13\tOrdered\tordered\tOrdered list\n14\tCode\tcode\tCode block (with style.language enum)\n15\tQuote\tquote\tBlockquote\n17\tTodo\ttodo\tCheckbox item (with style.done)\n19\tCallout\tcallout\tHighlight box (Feishu-specific, container block)\n22\tDivider\tdivider\tHorizontal rule\n27\tImage\timage\tTwo-step: create placeholder, then upload\n31\tTable\ttable\tTable\n34\tQuoteContainer\tquote_container\tQuote container\nCreate Blocks API\nPOST /open-apis/docx/v1/documents/{document_id}/blocks/{block_id}/children?document_revision_id=-1\n\nHeaders:\n  Content-Type: application/json\n  Authorization: Bearer <tenant_access_token>\n\nBody:\n{\n  \"children\": [ ...Block array... ],\n  \"index\": 0\n}\n\nblock_id: Parent block ID (usually document_id itself for root)\nindex: Insert position (0 = beginning, -1 or omit = end)\nBlock JSON Examples\nText\n{\n  \"block_type\": 2,\n  \"text\": {\n    \"elements\": [{\n      \"text_run\": {\n        \"content\": \"Paragraph text here\",\n        \"text_element_style\": { \"bold\": false, \"italic\": false }\n      }\n    }]\n  }\n}\n\nHeading\n{ \"block_type\": 3, \"heading1\": { \"elements\": [{ \"text_run\": { \"content\": \"H1 Title\" } }] } }\n{ \"block_type\": 4, \"heading2\": { \"elements\": [{ \"text_run\": { \"content\": \"H2 Title\" } }] } }\n\nBullet / Ordered List\n{ \"block_type\": 12, \"bullet\": { \"elements\": [{ \"text_run\": { \"content\": \"List item\" } }] } }\n{ \"block_type\": 13, \"ordered\": { \"elements\": [{ \"text_run\": { \"content\": \"Numbered item\" } }] } }\n\n\nEach list item is a separate Block.\n\nCode Block\n{\n  \"block_type\": 14,\n  \"code\": {\n    \"elements\": [{ \"text_run\": { \"content\": \"console.log('hello');\" } }],\n    \"style\": { \"language\": 23, \"wrap\": false }\n  }\n}\n\n\nCommon language enums: PlainText=1, JavaScript=23, Python=40, TypeScript=49, Go=20, Shell=46, SQL=47, Java=22, Rust=44, C=12, CSS=17, HTML=21, Docker=19.\n\nCallout (Feishu-specific highlight box)\n\nCallout is a container block — create it first, then add child blocks inside.\n\n// Step 1: Create callout as document child\n{ \"block_type\": 19, \"callout\": { \"background_color\": 3, \"border_color\": 3, \"emoji_id\": \"star\" } }\n\n// Step 2: POST .../blocks/{callout_block_id}/children\n{ \"children\": [{ \"block_type\": 2, \"text\": { \"elements\": [{ \"text_run\": { \"content\": \"Highlight text\" } }] } }] }\n\n\nColor enums: Red=1, Orange=2, Yellow=3, Green=4, Blue=5, Purple=6, Grey=7.\n\nDivider\n{ \"block_type\": 22, \"divider\": {} }\n\nImage (two-step)\nStep 1: Create placeholder block { \"block_type\": 27, \"image\": {} }\nStep 2: Upload via POST /open-apis/drive/v1/medias/upload_all\n  - multipart/form-data: file, file_name, parent_type=\"docx_image\", parent_node=<image_block_id>\n\nText Styling\n\nApply styles via text_element_style in text_run:\n\nProperty\tType\tEffect\nbold\tbool\tBold\nitalic\tbool\tItalic\nstrikethrough\tbool\tStrikethrough\nunderline\tbool\tUnderline\ninline_code\tbool\tInline code\ntext_color\tint\tText color (same enum as callout colors)\nbackground_color\tint\tBackground color\nlink.url\tstring\tHyperlink\n\nMultiple text_run elements in one block = mixed styles in one paragraph.\n\nMarkdown to Block Mapping\nMarkdown\tblock_type\tJSON Key\n# H1\t3\theading1\n## H2\t4\theading2\n### H3\t5\theading3\nParagraph\t2\ttext\n- item\t12\tbullet\n1. item\t13\tordered\nCode fence\t14\tcode\n> quote\t15\tquote\n- [ ] todo\t17\ttodo\n---\t22\tdivider\n![](url)\t27\timage (two-step)\n**bold**\t--\ttext_element_style.bold: true\n*italic*\t--\ttext_element_style.italic: true\n`code`\t--\ttext_element_style.inline_code: true\n~~strike~~\t--\ttext_element_style.strikethrough: true\n[text](url)\t--\ttext_element_style.link.url\n(no MD equivalent)\t19\tcallout (Feishu-specific)\nConcurrency & Ordering (Critical)\n\nProblem: Concurrent Block creation API calls produce random ordering.\n\nSolution A: Single Batch Request (Recommended)\n\nPut all blocks in one children array, single API call:\n\n{\n  \"children\": [\n    { \"block_type\": 3, \"heading1\": { \"elements\": [{\"text_run\": {\"content\": \"Title\"}}] } },\n    { \"block_type\": 2, \"text\": { \"elements\": [{\"text_run\": {\"content\": \"Paragraph 1\"}}] } },\n    { \"block_type\": 22, \"divider\": {} },\n    { \"block_type\": 4, \"heading2\": { \"elements\": [{\"text_run\": {\"content\": \"Section 2\"}}] } }\n  ],\n  \"index\": 0\n}\n\nSolution B: Serial Writes with Index\n\nFor long content requiring multiple requests, execute serially with explicit index:\n\nRequest 1: index=0, write block A\nRequest 2: index=1, write block B (wait for A to succeed)\nRequest 3: index=2, write block C (wait for B to succeed)\n\nSolution C: Collect-Then-Write (Recommended)\nLLM outputs complete Markdown -> Conversion layer -> Single API batch write\n\n\nNever let the LLM write one paragraph at a time with concurrent API calls.\n\nComplete Write Flow\nCreate document: POST /open-apis/docx/v1/documents with { \"folder_token\": \"<token>\", \"title\": \"Title\" } -> returns document_id\nBuild Block array: Convert full content to Block JSON\nBatch write: POST .../documents/{doc_id}/blocks/{doc_id}/children?document_revision_id=-1 with all blocks\nContainer blocks (optional): For Callout etc., get block_id from step 3 response, then add children\nCustom Callout Syntax\n\nSince Markdown has no Callout equivalent, use this custom markup:\n\n:::callout{color=yellow emoji=bulb}\nHighlight content here.\nSupports **bold**, *italic*, and lists.\n:::\n\nParam\tValues\tDefault\tPurpose\ncolor\tred, orange, yellow, green, blue, purple, grey\tyellow\tBackground & border\nemoji\tAny Feishu emoji_id (bulb, star, warning, fire)\tbulb\tLeft icon\nborder\tSame as color values\tSame as color\tBorder color (override)\n\nCommon templates:\n\n:::callout{color=yellow emoji=bulb}\n**Key Insight**: The most important takeaway\n:::\n\n:::callout{color=red emoji=warning}\n**Warning**: Common misconception\n:::\n\n:::callout{color=green emoji=check}\n**Action Item**: What to do next\n:::\n\nRate Limits & Constraints\nMax blocks per batch: ~50 recommended\nLong articles: Split by H2/H3 sections, 200-500ms between batches\nAlways use document_revision_id=-1 (latest version)\nToken validity: ~2 hours, cache and refresh before expiry\nAuthentication\ncurl -X POST 'https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal' \\\n  -H 'Content-Type: application/json' \\\n  -d '{ \"app_id\": \"<app_id>\", \"app_secret\": \"<app_secret>\" }'\n\nSchema Pitfalls (Battle-tested)\nNo Markdown tables in write ops — use bullet lists instead (prevents schema errors)\nNo nested code blocks inside lists — Feishu schema validation is strict on nesting depth\nCallout is a container — always requires a two-step create (container first, then children)\nEach list item = separate Block — don't try to put multiple items in one block\nReferences\nCreate Blocks API: https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/document-docx/docx-v1/document-block-children/create\nBlock Data Structure: https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/document-docx/docx-v1/data-structure/block\nConvert API: https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/document-docx/docx-v1/document/convert\nExtended API reference: See FEISHU_API_HANDBOOK.md in workspace root"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/sunnyyao2222-eng/feishu-doc-write",
    "publisherUrl": "https://clawhub.ai/sunnyyao2222-eng/feishu-doc-write",
    "owner": "sunnyyao2222-eng",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/feishu-doc-write",
    "downloadUrl": "https://openagent3.xyz/downloads/feishu-doc-write",
    "agentUrl": "https://openagent3.xyz/skills/feishu-doc-write/agent",
    "manifestUrl": "https://openagent3.xyz/skills/feishu-doc-write/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/feishu-doc-write/agent.md"
  }
}