[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openclaw-openclaw-extensions-feishu-skills-feishu-drive":3},{"error":4,"detail":5,"metadata":23,"markdownContent":24,"rawMarkdown":20},false,{"repo_full_name":6,"owner":7,"repo_name":7,"repo_forks":8,"skill_path":9,"repo_stars":10,"name":11,"category_id":12,"description":13,"file_tree":14,"skill_md_content":20,"skill_id":21,"skill_key":22},"openclaw/openclaw","openclaw",62342,"extensions/feishu/skills/feishu-drive",323486,"feishu-drive",1,"Feishu cloud storage file management. Activate when user mentions cloud space, folders, drive.",[15],{"name":16,"path":17,"size":18,"type":19},"SKILL.md","extensions/feishu/skills/feishu-drive/SKILL.md",2350,"file","---\nname: feishu-drive\ndescription: |\n  Feishu cloud storage file management. Activate when user mentions cloud space, folders, drive.\n---\n\n# Feishu Drive Tool\n\nSingle tool `feishu_drive` for cloud storage operations.\n\n## Token Extraction\n\nFrom URL `https://xxx.feishu.cn/drive/folder/ABC123` → `folder_token` = `ABC123`\n\n## Actions\n\n### List Folder Contents\n\n```json\n{ \"action\": \"list\" }\n```\n\nRoot directory (no folder_token).\n\n```json\n{ \"action\": \"list\", \"folder_token\": \"fldcnXXX\" }\n```\n\nReturns: files with token, name, type, url, timestamps.\n\n### Get File Info\n\n```json\n{ \"action\": \"info\", \"file_token\": \"ABC123\", \"type\": \"docx\" }\n```\n\nSearches for the file in the root directory. Note: file must be in root or use `list` to browse folders first.\n\n`type`: `doc`, `docx`, `sheet`, `bitable`, `folder`, `file`, `mindnote`, `shortcut`\n\n### Create Folder\n\n```json\n{ \"action\": \"create_folder\", \"name\": \"New Folder\" }\n```\n\nIn parent folder:\n\n```json\n{ \"action\": \"create_folder\", \"name\": \"New Folder\", \"folder_token\": \"fldcnXXX\" }\n```\n\n### Move File\n\n```json\n{ \"action\": \"move\", \"file_token\": \"ABC123\", \"type\": \"docx\", \"folder_token\": \"fldcnXXX\" }\n```\n\n### Delete File\n\n```json\n{ \"action\": \"delete\", \"file_token\": \"ABC123\", \"type\": \"docx\" }\n```\n\n## File Types\n\n| Type       | Description             |\n| ---------- | ----------------------- |\n| `doc`      | Old format document     |\n| `docx`     | New format document     |\n| `sheet`    | Spreadsheet             |\n| `bitable`  | Multi-dimensional table |\n| `folder`   | Folder                  |\n| `file`     | Uploaded file           |\n| `mindnote` | Mind map                |\n| `shortcut` | Shortcut                |\n\n## Configuration\n\n```yaml\nchannels:\n  feishu:\n    tools:\n      drive: true # default: true\n```\n\n## Permissions\n\n- `drive:drive` - Full access (create, move, delete)\n- `drive:drive:readonly` - Read only (list, info)\n\n## Known Limitations\n\n- **Bots have no root folder**: Feishu bots use `tenant_access_token` and don't have their own \"My Space\". The root folder concept only exists for user accounts. This means:\n  - `create_folder` without `folder_token` will fail (400 error)\n  - Bot can only access files/folders that have been **shared with it**\n  - **Workaround**: User must first create a folder manually and share it with the bot, then bot can create subfolders inside it\n","c9ac1245-4dc6-5a3e-92e9-d021a16ecbca","openclaw-openclaw-extensions-feishu-skills-feishu-drive",{"name":11,"description":13},"\u003Ch1>Feishu Drive Tool\u003C/h1>\n\u003Cp>Single tool \u003Ccode>feishu_drive\u003C/code> for cloud storage operations.\u003C/p>\n\u003Ch2>Token Extraction\u003C/h2>\n\u003Cp>From URL \u003Ccode>https://xxx.feishu.cn/drive/folder/ABC123\u003C/code> → \u003Ccode>folder_token\u003C/code> = \u003Ccode>ABC123\u003C/code>\u003C/p>\n\u003Ch2>Actions\u003C/h2>\n\u003Ch3>List Folder Contents\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;list&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Root directory (no folder_token).\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;list&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;folder_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;fldcnXXX&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Returns: files with token, name, type, url, timestamps.\u003C/p>\n\u003Ch3>Get File Info\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;info&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;file_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;type&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;docx&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Searches for the file in the root directory. Note: file must be in root or use \u003Ccode>list\u003C/code> to browse folders first.\u003C/p>\n\u003Cp>\u003Ccode>type\u003C/code>: \u003Ccode>doc\u003C/code>, \u003Ccode>docx\u003C/code>, \u003Ccode>sheet\u003C/code>, \u003Ccode>bitable\u003C/code>, \u003Ccode>folder\u003C/code>, \u003Ccode>file\u003C/code>, \u003Ccode>mindnote\u003C/code>, \u003Ccode>shortcut\u003C/code>\u003C/p>\n\u003Ch3>Create Folder\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;create_folder&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;name&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;New Folder&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>In parent folder:\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;create_folder&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;name&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;New Folder&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;folder_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;fldcnXXX&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Move File\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;move&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;file_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;type&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;docx&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;folder_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;fldcnXXX&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Delete File\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;delete&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;file_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;type&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;docx&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch2>File Types\u003C/h2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Type\u003C/th>\n\u003Cth>Description\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>doc\u003C/code>\u003C/td>\n\u003Ctd>Old format document\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>docx\u003C/code>\u003C/td>\n\u003Ctd>New format document\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>sheet\u003C/code>\u003C/td>\n\u003Ctd>Spreadsheet\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>bitable\u003C/code>\u003C/td>\n\u003Ctd>Multi-dimensional table\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>folder\u003C/code>\u003C/td>\n\u003Ctd>Folder\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>file\u003C/code>\u003C/td>\n\u003Ctd>Uploaded file\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>mindnote\u003C/code>\u003C/td>\n\u003Ctd>Mind map\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>shortcut\u003C/code>\u003C/td>\n\u003Ctd>Shortcut\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\n\u003Ch2>Configuration\u003C/h2>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">yaml\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-yaml\">\u003Cspan class=\"hljs-attr\">channels:\u003C/span>\n  \u003Cspan class=\"hljs-attr\">feishu:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">tools:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">drive:\u003C/span> \u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-comment\"># default: true\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch2>Permissions\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Ccode>drive:drive\u003C/code> - Full access (create, move, delete)\u003C/li>\n\u003Cli>\u003Ccode>drive:drive:readonly\u003C/code> - Read only (list, info)\u003C/li>\n\u003C/ul>\n\u003Ch2>Known Limitations\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Bots have no root folder\u003C/strong>: Feishu bots use \u003Ccode>tenant_access_token\u003C/code> and don&#39;t have their own &quot;My Space&quot;. The root folder concept only exists for user accounts. This means:\u003Cul>\n\u003Cli>\u003Ccode>create_folder\u003C/code> without \u003Ccode>folder_token\u003C/code> will fail (400 error)\u003C/li>\n\u003Cli>Bot can only access files/folders that have been \u003Cstrong>shared with it\u003C/strong>\u003C/li>\n\u003Cli>\u003Cstrong>Workaround\u003C/strong>: User must first create a folder manually and share it with the bot, then bot can create subfolders inside it\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003C/ul>\n"]