mit einem Klick
mit einem Klick
Create or update a Bub plugin in any local path. Use when the task is to scaffold a Python package that exposes a [project.entry-points.bub] entry, implement Bub hooks or tools, and make the plugin take effect by installing it or adding it as a dependency in the Bub runtime project. When working inside bub-contrib, also follow its package and workspace conventions.
Export, filter, scan, and review shareable tape datasets produced by `tape-dataset-opendal`. Use when Codex needs to prepare Bub-generated tape data for public sharing, Hugging Face upload, external research handoff, or any review-sensitive export that must run CEL filtering, TruffleHog secret scanning on the staged artifact, and a final conservative LLM audit.
WeCom channel skill. Return normal replies directly. For proactive sends such as scheduled jobs, use the packaged wecom_send.py script.
QQ C2C channel skill. Use when Bub is handling a QQ conversation. Return your normal text reply directly and let the QQ channel deliver it through standard Bub outbound routing.
DingTalk channel skill. When $dingtalk appears in message context, return your response as text and the framework will deliver it. For programmatic sends (e.g. progress updates), use dingtalk_send.
| name | feishu |
| description | Use this skill to respond to messages from feishu channel. |
Agent-facing execution guide for outbound communication in Feishu/Lark.
Assumption: BUB_FEISHU_APP_ID and BUB_FEISHU_APP_SECRET are already available.
Collect these fields before execution whenever possible:
chat_id: required for sending a new message or card; obtain it from the current channel/session context, not from the inbound JSON payloadmessage / text / content: required for sending or editing contentmessage_id: required for reply, edit, and reaction actionsreply_to_message.message_id: optional source reference from inbound metadata; use it only for context, not as a replacement for the current message idmessage_id is known, prefer reply semantics instead of sending an unrelated new message.sender_is_bot=true), do not assume reply mode is appropriate; prefer a normal message unless there is a clear user-authored message to reply to.feishu_send.py --format textfeishu_send.py --format cardlark-cli im +messages-send or lark-cli im +messages-reply with --imagefeishu_edit.pysender_is_bot=true, prefer a normal message unless a reply target is explicitly required and known to be correct.message_id is missing, do not perform reply, edit, or reaction actions; if chat_id is missing, do not perform send actions.feishu_send.py only supports text and card messages; when an outbound message must include an image, switch to lark-cli../image.png, use lark-cli ... --image ./image.png.feishu_send.py --format text so the message still reaches the user.The current Feishu channel message JSON includes:
message: normalized text contentmessage_id: current user message IDtype: normalized message typesender_idsender_namesender_is_botdatemediareply_to_messageTypical mappings:
chat_id from the current channel/session contextmessage_id as the reply targetmessage_idmessage_idPaths are relative to this skill directory.
# Send text message
uv run ${SKILL_DIR}/scripts/feishu_send.py \
--chat-id <CHAT_ID> \
--content "<TEXT>" \
--format text
# Send multi-line text message (heredoc)
uv run ${SKILL_DIR}/scripts/feishu_send.py \
--chat-id <CHAT_ID> \
--content "$(cat <<'EOF'
Build finished successfully.
Summary:
- 12 tests passed
- 0 failures
EOF
)" \
--format text
# Reply to a specific message
uv run ${SKILL_DIR}/scripts/feishu_send.py \
--chat-id <CHAT_ID> \
--content "<TEXT>" \
--format text \
--reply-to <MESSAGE_ID>
# Send card update
uv run ${SKILL_DIR}/scripts/feishu_send.py \
--chat-id <CHAT_ID> \
--content "<MARKDOWN_CONTENT>" \
--format card \
--title "<TITLE>"
# Edit an existing bot message
uv run ${SKILL_DIR}/scripts/feishu_edit.py \
--message-id <MESSAGE_ID> \
--text "<TEXT>"
lark-cliUse lark-cli only when the message must contain an image. The packaged feishu_send.py script does not upload media.
Prerequisites:
lark-cli is installed, typically via npm install -g @larksuite/clilark-cli config initlark-cli auth login has already granted the required user scopesRules:
lark-cli im +messages-send --chat-id <CHAT_ID> --image <PATH_OR_IMAGE_KEY>lark-cli im +messages-reply --message-id <MESSAGE_ID> --image <PATH_OR_IMAGE_KEY>--image accepts either a local file path like ./photo.png or an existing image_key like img_v3_...--image is a local file path, lark-cli uploads it automatically before sending--dry-runExamples:
# Send a new image message to the current chat as bot
lark-cli im +messages-send \
--chat-id <CHAT_ID> \
--image ./photo.png \
--as bot
# Reply to the current message with a local image
lark-cli im +messages-reply \
--message-id <MESSAGE_ID> \
--image ./photo.png \
--as bot
# Send an already uploaded image by image_key
lark-cli im +messages-send \
--chat-id <CHAT_ID> \
--image img_v3_abc123 \
--as bot
# Preview the request without executing it
lark-cli im +messages-send \
--chat-id <CHAT_ID> \
--image ./photo.png \
--as bot \
--dry-run
Identity notes:
--as bot for image sends in this skill because the rest of this skill already assumes app credentials and bot-style outbound actions--as user is supported by lark-cli, but local media upload is still performed with bot identity first, and the final send uses user identity--as user is required, make sure the user identity already has im:message.send_as_user and im:messageFor actions not covered by the packaged scripts, such as reactions, call the Feishu OpenAPI directly.
feishu_send.py--chat-id, -c: required--content, -m: required--format: optional, text or card, defaults to text--title, -t: used only with --format card--reply-to, -r: valid only with --format text--app-id: optional--app-secret: optionalfeishu_edit.py--message-id, -m: required--text, -t: required--app-id: optional--app-secret: optionalhttps://open.feishu.cn/document/https://open.larksuite.com/document/IM / Message documentationPOST /open-apis/im/v1/messagesPOST /open-apis/im/v1/messages/{message_id}/replyPATCH /open-apis/im/v1/messages/{message_id}POST /open-apis/im/v1/messages/{message_id}/reactionschat_id, message format, application permissions, and credentials.feishu_send.py --format text.chat_id.message_id is missing, do not perform reply, edit, or reaction actions.chat_id is missing, do not perform send actions.