Skills lark-doc-reviser
Read unresolved comments in a Feishu (Lark) document and apply targeted edits block-by-block based on those comments. Use when the user shares a Feishu doc URL and asks to: (1) fetch/show document comments, (2) revise or edit the doc based on comments, (3) process feedback left in a Feishu doc. Requires lark-cli installed and authenticated.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/billzhuang6569/lark-doc-reviser" ~/.claude/skills/openclaw-skills-lark-doc-reviser && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/billzhuang6569/lark-doc-reviser" ~/.openclaw/skills/openclaw-skills-lark-doc-reviser && rm -rf "$T"
skills/billzhuang6569/lark-doc-reviser/SKILL.mdLark Doc Reviser
Workflow
Step 1 — Fetch doc state
python3 scripts/fetch_doc.py <doc_url_or_token> --out workspace/<token>_state.json
This saves full doc state to
workspace/<token>_state.json and prints a summary to stdout:
: blocks that have unresolved comments, each withcommented_blocks
,elements
, andfull_textcomments[]{comment_id, anchor_text, instruction}
: full block list (no elements, for structural reference)all_blocks
Always save to workspace. The editing process may span multiple sessions.
Step 2 — Present comments to user
Show each entry in
commented_blocks as:
[block_type] full_text → 【anchor_text】 instruction
Ask the user to confirm which comments to address, or proceed if the intent is clear.
Step 3 — Apply text edits
For each comment requiring a text change, construct a patches list and run:
python3 scripts/patch_blocks.py <doc_token> patches.json
patches.json format — elements completely replace the block's existing content:
[ { "block_id": "doxcnXXXX", "elements": [ {"text": "普通文字"}, {"text": "加粗", "bold": true}, {"text": "代码", "code": true}, {"text": "斜体", "italic": true} ] } ]
Supported element fields:
text (required), bold, italic, code, strikethrough, underline.
Note:
update_text_elements clears comment_ids from the elements. This is expected — always resolve addressed comments in Step 4.
Step 4 — Resolve addressed comments
python3 scripts/resolve_comments.py <doc_token> <comment_id> [comment_id ...] # or via stdin: echo '["id1","id2"]' | python3 scripts/resolve_comments.py <doc_token> -
Step 5 — Re-fetch and update state
Re-run Step 1 to refresh
workspace/<token>_state.json after edits.
Limitations
These operations are not handled by this skill's scripts and require additional API calls:
- Insert blank line / empty block: needs Create Block API
- Delete a block (e.g., remove a divider): needs Delete Block API
- Structural reordering: needs Move Block API
For such operations, use
lark-cli api directly or ask the user if they want to handle them manually.
Warning
Never use
lark-cli docs +update --mode replace_range --selection-by-title to rename a heading. It selects the entire section (heading + all content until next heading) and deletes it all. Use --selection-with-ellipsis "heading text" instead.