Feishu Sheet Links

Extract all hyperlinks from a public Feishu spreadsheet across all sheet tabs, and optionally batch-download the linked articles as Markdown files. Use when the user shares a Feishu URL (feishu.cn/wiki or feishu.cn/sheets) and wants to extract links, scrape article titles, collect URLs from a Feishu doc, download content from Feishu, or build a local copy of Feishu articles. Also use when the user says things like "帮我下载飞书的链接", "把飞书表格里的链接提取出来", or "下载飞书文章".

Audits

Pass

Install

openclaw skills install feishu-sheet-links

feishu-sheet-links

Extracts all hyperlinks from every sheet tab of a public Feishu spreadsheet, then optionally batch-downloads the linked articles as Markdown files.

Workflow

When invoked, follow these steps:

Step 1 — Get the URL

If the user has already provided a Feishu URL, use it. Otherwise ask:

"请提供飞书多维表格的链接(公开可访问的)"

Confirm the URL looks like https://*.feishu.cn/wiki/... or https://*.feishu.cn/sheets/....

Step 2 — Extract links

Resolve the skill directory:

SKILL_DIR="$(find ~/.claude/skills /workspace/.claude/skills -maxdepth 1 -name feishu-sheet-links -type d 2>/dev/null | head -1)"

Run the extraction script:

npx -y bun "${SKILL_DIR}/scripts/main.ts" "<spreadsheet-url>" -o feishu-links.json

Each sheet tab takes 8–15 seconds to load — let the user know it may take a moment.

Step 3 — Show a summary

After extraction, show the user a summary:

  • How many sheets were found
  • How many links per sheet (with sheet names)
  • Total link count

Example:

Found 4 sheets, 127 links total:
- 1月: 32 links
- 2月: 28 links
- 3月: 35 links
- 4月: 32 links

Saved to: feishu-links.json

Step 4 — Offer to download articles

Ask the user if they want to download the linked articles as Markdown:

"是否需要批量下载这些文章为 Markdown 文件?"

If yes, ask for an output directory (default: ./feishu-articles), then run:

npx -y bun "${SKILL_DIR}/scripts/download.ts" feishu-links.json \
  -o <output-dir> \
  -c 5 \
  --max-wait 20000

Download supports resume — if interrupted, re-running skips already-downloaded files.

Error Handling

SituationAction
Document is private / requires loginTell the user — this tool only works with public Feishu docs
Chrome not foundAsk user to install Chrome, or set FEISHU_CHROME_PATH
A sheet times outWarn and continue — other sheets will still be extracted
Zero links foundConfirm the URL is correct and the doc is publicly accessible

How It Works

  1. Reuses an existing Chrome instance if available (ports 64023, 9222, 9229), otherwise launches its own isolated instance
  2. Opens the spreadsheet to discover all sheet IDs from spreadApp.collaborativeSpread._spread.sheetIdToIndexMap
  3. For each sheet, opens a dedicated tab at ?sheet=<id>, calls setActiveSheetIndex() to trigger lazy loading, and waits for sheet._dataModel.contentModel to populate
  4. Extracts links from two Feishu storage formats:
    • url-typecontentModel.link.idToRef._map (whole-cell hyperlinks)
    • mention-typecontentModel.segmentModel.table (inline rich-text links)

Environment Variables

VariableDescription
FEISHU_CHROME_PATHCustom Chrome executable path
FEISHU_CHROME_PROFILECustom Chrome profile directory