lark-im

SkillCommunityTranslated from Chinese

This skill provides comprehensive tools for interacting with Lark instant messaging. It supports sending and receiving messages, managing group chats, handling file uploads and downloads, and organizing feed shortcuts and groups.

Install:
npx skills add open.feishu.cn/lark-im

im (v1)

CRITICAL, Before starting, you MUST use the Read tool to read ../lark-shared/SKILL.md, which contains information on authentication and permission handling.

Core Concepts

  • Message: A single message in a chat, identified by message_id (om_xxx). Supports types: text, post, image, file, audio, video, sticker, interactive (card), share_chat, share_user, merge_forward, etc.
  • Chat: A group chat or P2P conversation, identified by chat_id (oc_xxx).
  • Thread: A reply thread under a message, identified by thread_id (om_xxx or omt_xxx).
  • Reaction: An emoji reaction on a message.
  • Flag: A bookmark on a message or thread.
  • Feed Shortcut: A chat pinned to the current user's feed sidebar, identified by feed_card_id (an oc_xxx open_chat_id for CHAT type).
  • Feed Group: A tag that groups feed cards in the feed list, identified by feed_group_id (ofg_xxx). Members are feed cards, each identified by feed_id + feed_type. Two types: normal (members managed explicitly) and rule (members auto-derived from rules).

Resource Relationships

Chat (oc_xxx)
├── Message (om_xxx)
│   ├── Thread (reply thread)
│   ├── Reaction (emoji)
│   └── Resource (image / file / video / audio)
└── Member (user / bot)

Important Notes

Identity and Token Mapping

  • --as user means user identity and uses user_access_token. Calls run as the authorized end user, so permissions depend on both the app scopes and that user's own access to the target chat/message/resource.
  • --as bot means bot identity and uses tenant_access_token. Calls run as the app bot, so behavior depends on the bot's membership, app visibility, availability range, and bot-specific scopes.
  • If an IM API says it supports both user and bot, the token type changes who the operator is. The same API can succeed with one identity and fail with the other because owner/admin status, chat membership, tenant boundary, or app availability are checked against the current caller.

Sender Name Resolution with Bot Identity

When using bot identity (--as bot) to fetch messages (e.g. +chat-messages-list, +threads-messages-list, +messages-mget), sender names may not be resolved (shown as open_id instead of display name). This happens when the bot cannot access the user's contact info.

Root cause: The bot's app visibility settings do not include the message sender, so the contact API returns no name.

Solution: Check the app's visibility settings in the Lark Developer Console, ensure the app's visible range covers the users whose names need to be resolved. Alternatively, use --as user to fetch messages with user identity, which typically has broader contact access.

Default message enrichment (reactions / update_time)

The four message-pulling shortcuts (+messages-mget, +chat-messages-list, +messages-search, +threads-messages-list) automatically attach a reactions block and (for edited messages) update_time to each returned message, no separate im.reactions.batch_query call is needed. Pass --no-reactions to opt out. For the full contract (output shape, the im:message.reactions:read scope requirement, and the "missing field ≠ fetch failure" data rules), read references/lark-im-message-enrichment.md.

Card Messages (Interactive)

Card messages (interactive type) are not yet supported for compact conversion in event subscriptions. The raw event data will be returned instead, with a hint printed to stderr.

Flag Types

Flags support two layers:

  • Message-layer flag: (ItemTypeDefault, FlagTypeMessage), regular message bookmark
  • Feed-layer flag: (ItemTypeThread/ItemTypeMsgThread, FlagTypeFeed), thread as feed-layer bookmark

Item types for feed-layer flags:

  • ItemTypeThread (4) = thread in a topic-style chat
  • ItemTypeMsgThread (11) = thread in a regular chat

Feed Shortcut

Feed shortcuts add chats to the current user's feed sidebar. They are distinct from flags:

  • Flag = bookmark on a message/thread, scoped to the user's bookmark list.
  • Feed shortcut = entry in the user's feed sidebar (currently only chats).

Key limits:

  • Only CHAT-type (feed_card_id is oc_xxx) is exposed via OpenAPI; doc/app/subscription shortcuts exist internally but are not yet whitelisted.
  • All three operations (create/remove/list) are user-identity only, they sign with user_access_token.
  • Batch size is 10 per call for create/remove; list is a one-page wrapper with opaque page_token pagination.

Shortcuts (Recommended for priority use)

Shortcuts are high-level wrappers for common operations (lark-cli im +<verb> [flags]). Use shortcuts whenever available.

ShortcutDescription
+chat-createCreate a group chat or topic chat; user/bot; --chat-mode group
+chat-listList chats the current user/bot is a member of; defaults to groups; pass --types=p2p,group to include p2p single chats (user-only); user/bot; supports sorting, pagination, --exclude-muted (user-only)
+chat-messages-listList messages in a chat or P2P conversation; user/bot; accepts --chat-id or --user-id, resolves P2P chat_id, supports time range/sort/pagination
+chat-searchSearch visible group chats by --query keyword and/or --member-ids; user/bot; e.g. look up chat_id by group name; supports type filters, sorting, pagination, and --exclude-muted (user identity only)
+chat-updateUpdate group chat name or description; user/bot; updates a chat's name or description
+messages-mgetBatch get messages by IDs; user/bot; fetches up to 50 om_ message IDs, formats sender names, expands thread replies
+messages-replyReply to a message (supports thread replies); user/bot; supports text/markdown/post/media replies, reply-in-thread, idempotency key
+messages-resources-downloadDownload images/files from a message; user/bot; supports automatic chunked download for large files (8MB chunks), auto-detects file extension from Content-Type
+messages-searchSearch messages across chats (supports keyword, sender, time range filters) with user identity; user-only; filters by chat/sender/attachment/time, supports auto-pagination via --page-all / --page-limit, enriches results via batched mget and chats batch_query
+messages-sendSend a message to a chat or direct message; user/bot; sends to chat-id or user-id with text/markdown/post/media, supports idempotency key
+threads-messages-listList messages in a thread; user/bot; accepts om_/omt_ input, resolves message IDs to thread_id, supports sort/pagination
+flag-createCreate a bookmark on a message; user-only; defaults to message-layer flag; use --flag-type feed for feed-layer flag (item_type auto-detected from chat mode)
+flag-cancelCancel (remove) a bookmark. When no --flag-type is given, best-effort double-cancel: removes message layer and (when chat_type is determinable) feed layer
+flag-listList bookmarks; user-only; auto-enriches feed-type thread entries with message content; supports --page-all auto-pagination
+feed-shortcut-createAdd chats to the user's feed shortcuts; user-only; oc_xxx chat IDs only; batch up to 10 per call; --head/--tail controls insertion order; partial failures return an ok:false ledger
+feed-shortcut-removeRemove chats from the user's feed shortcuts; user-only; batch up to 10 per call; removing an absent shortcut is idempotent success; real per-item failures return an ok:false ledger
+feed-shortcut-listList one page of the user's feed shortcuts; user-only; omit --page-token for the first page; default output enriches CHAT entries under detail; pass --no-detail to skip the extra lookup and im:chat:read scope
+feed-group-listList the caller's feed groups (tags); user-only; supports --page-all auto-pagination
+feed-group-list-itemList feed cards in a feed group (tag); user-only; enriches each item with chat_name resolved from feed_id; supports --page-all auto-pagination
+feed-group-query-itemLook up specific feed cards in a feed group (tag) by ID; user-only; enriches each item with chat_name resolved from feed_id

API Resources

lark-cli schema im.<resource>.<method>   # Must view parameter structure before calling API
lark-cli im <resource> <method> [flags] # Call API

Important: When using native APIs, you must first run schema to view the --data / --params parameter structure. Do not guess field formats.

chats

  • create, Create a group. Identity: bot only (tenant_access_token).
  • get, Get group information. Identity: supports user and bot; the caller must be in the target chat to get full details, and must belong to the same tenant for internal chats.
  • link, Get group share link. Identity: supports user and bot; the caller must be in the target chat, must be an owner or admin when chat sharing is restricted to owners/admins, and must belong to the same tenant for internal chats.
  • update, Update group information. Identity: supports user and bot.

chat.members

  • bots, Get list of bots in the group. Identity: supports user and bot; the caller must be in the target chat and must belong to the same tenant for internal chats.
  • create, Add user or bot to group chat. Identity: supports user and bot; the caller must be in the target chat; for bot calls, added users must be within the app's availability; for internal chats the operator must belong to the same tenant; if only owners/admins can add members, the caller must be an owner/admin, or a chat-creator bot with im:chat:operate_as_owner.
  • delete, Remove user or bot from group chat. Identity: supports user and bot; only group owner, admin, or creator bot can remove others; max 50 users or 5 bots per request.
  • get, Get group member list. Identity: supports user and bot; the caller must be in the target chat and must belong to the same tenant for internal chats.

messages

  • delete, Revoke message. Identity: supports user and bot; for bot calls, the bot must be in the chat to revoke group messages; to revoke another user's group message, the bot must be the owner, an admin, or the creator; for user P2P recalls, the target user must be within the bot's availability.
  • forward, Forward message. Identity: supports user and bot.
  • merge_forward, Merge forward messages. Identity: bot only (tenant_access_token).
  • read_users, Query message read status. Identity: bot only (tenant_access_token); the bot must be in the chat, and can only query read status for messages it sent within the last 7 days.
  • urgent_app, Send in-app urgent notification. Identity: bot only (tenant_access_token); the bot must be the message sender and must be in the conversation that contains the message.
  • urgent_phone, Send phone urgent notification. Identity: bot only (tenant_access_token); the bot must be the message sender and must be in the conversation that contains the message.
  • urgent_sms, Send SMS urgent notification. Identity: bot only (tenant_access_token); the bot must be the message sender and must be in the conversation that contains the message.

reactions

  • batch_query, Batch get message reactions. Identity: supports user and bot.Must-read
  • create, Add message reaction. Identity: supports user and bot; the caller must be in the conversation that contains the message.Must-read
  • delete, Delete message reaction. Identity: supports user and bot; the caller must be in the conversation that contains the message, and can only delete reactions added by itself.Must-read
  • list, Get message reactions. Identity: supports user and bot; the caller must be in the conversation that contains the message.Must-read

threads

  • forward, Forward thread. Identity: supports user and bot.

images

  • create, Upload image. Identity: bot only (tenant_access_token).

pins

  • create, Pin message. Identity: supports user and bot.
  • delete, Remove pinned message. Identity: supports user and bot.
  • list, Get pinned messages in group. Identity: supports user and bot.

feed.groups

  • batch_add_item, Batch add feed cards to a feed group. Identity: user only (user_access_token).Must-read
  • batch_query, Batch query feed groups. Identity: user only (user_access_token).Must-read
  • batch_remove_item, Batch remove feed cards from a feed group. Identity: user only (user_access_token).Must-read
  • create, Create a feed group. Identity: user only (user_access_token).Must-read
  • delete, Delete a feed group. Identity: user only (user_access_token).Must-read
  • update, Update a feed group. Identity: user only (user_access_token).Must-read

Permission Table

MethodRequired scope
chats.createim:chat:create
chats.getim:chat:read
chats.linkim:chat:read
chats.updateim:chat:update
chat.members.botsim:chat.members:read
chat.members.createim:chat.members:write_only
chat.members.deleteim:chat.members:write_only
chat.members.getim:chat.members:read
messages.deleteim:message:recall
messages.forwardim:message
messages.merge_forwardim:message
messages.read_usersim:message:readonly
messages.urgent_appim:message.urgent
messages.urgent_phoneim:message.urgent:phone
messages.urgent_smsim:message.urgent:sms
reactions.batch_queryim:message.reactions:read
reactions.createim:message.reactions:write_only
reactions.deleteim:message.reactions:write_only
reactions.listim:message.reactions:read
threads.forwardim:message
images.createim:resource
pins.createim:message.pins:write_only
pins.deleteim:message.pins:write_only
pins.listim:message.pins:read
feed.groups.batch_add_itemim:feed_group_v1:write
feed.groups.batch_queryim:feed_group_v1:read
feed.groups.batch_remove_itemim:feed_group_v1:write
feed.groups.createim:feed_group_v1:write
feed.groups.deleteim:feed_group_v1:write
feed.groups.updateim:feed_group_v1:write
Share:
Details:
  • Installs


    201,767
  • First seen


    Jun 10, 2026
View Repository

Auto-fetched from GitHub .

Stats via skills.sh.

Skills similar to lark-im:

 

 
 
  • Installs


 

 
 
  • Installs


 

 
 
  • Installs