Feishu Topic Spawn
Create a new Feishu topic in a dedicated topic-group, then optionally post the first thread reply inside it.
Keep this skill lightweight. Use it for topic creation and first-reply bootstrapping, not for session routing magic.
Validated behavior
This workflow has been verified:
- 1.
feishu_im_user_message.send to a topic-group chat_id creates a new top-level topic. - INLINECODE2 with
reply_in_thread=true posts inside that topic. - A reply can
@ a user by placing Feishu text markup directly in the content:
CODEBLOCK0
This is the current working path. Prefer it over assumptions about implicit reply routing.
Preconditions
Require all of the following:
- - The destination is a real Feishu topic-group.
- The user has explicitly asked to send the message.
- The user has permission to post in that group.
- User-auth Feishu messaging is available for
feishu_im_user_message.
If user auth is unavailable or expired, stop and ask the user to re-authorize.
If the target group is not a topic-group, explain that the result will only be a normal group message, not a topic.
Default target group
Default to the fixed topic-group configured in TOOLS.md, if one exists.
Do not hardcode a personal/local group name into a public skill.
Use feishu_chat with action=search to resolve the group.
If the user explicitly names a target group, use that group.
If the user does not name a group and no local default is configured:
- - Stop.
- Ask which Feishu topic-group to use.
If no matching group is found:
- - Stop.
- Tell the user the topic-group does not exist yet.
- Ask them to create it manually first.
Workflow
1. Resolve target group
- - If the user explicitly names a group, use that name.
- Otherwise use the local default topic-group from
TOOLS.md, if configured. - If no local default exists, ask the user which topic-group to use.
- Resolve the
chat_id with feishu_chat.search.
2. Parse requested action
Support four shapes:
A. Open topic only
Example:
CODEBLOCK1
Send one top-level text message only.
B. Open topic + first thread reply
Example:
CODEBLOCK2
Interpret as:
- - title = INLINECODE12
- first thread reply = INLINECODE13
C. Open topic + first thread reply + @mention
Example:
CODEBLOCK3
Interpret as:
- - top-level topic title/text
- then a thread reply
- optionally prepend a Feishu
<at user_id="...">...</at> mention
D. Open topic + carry over prior context + ask a new question
Example:
CODEBLOCK4
Interpret as:
- - create a clean new topic
- carry over only the minimum relevant context
- put both context and the new question into the same top-level topic-opening message
- make the new question impossible to miss
- avoid a second seed message unless the user explicitly wants an extra in-thread reply
3. Create the topic
Use feishu_im_user_message.send:
- - INLINECODE16
- INLINECODE17
- INLINECODE18
- INLINECODE19
- INLINECODE20
The returned message_id is the topic root.
4. Optionally add the first thread reply
If the user asked for an initial reply, use feishu_im_user_message.reply:
- - INLINECODE23
- INLINECODE24
- INLINECODE25
- INLINECODE26
- INLINECODE27
If an @mention is requested, format it directly in the text:
CODEBLOCK5
Use the current user open_id when the user says @我.
5. When carrying context into a new topic, keep it simple
For context carry-over + new question, prefer one single top-level message.
Do not add a second seed reply unless the user explicitly wants one, because two user messages may trigger two assistant replies.
Use a simple structure:
CODEBLOCK6
Or, when a short summary reads better:
CODEBLOCK7
Rules:
- - Put the real question first.
- Keep the summary short.
- Do not add extra instruction-y wording unless absolutely needed.
- The goal is not to outsmart the model; the goal is to make the follow-up obvious.
Example:
CODEBLOCK8
Parsing guidance
Treat all of the following as likely triggers:
- - INLINECODE29
- INLINECODE30
- INLINECODE31
- INLINECODE32
- INLINECODE33
- INLINECODE34
- INLINECODE35
Useful parsing rules:
- - Split on the first
: / : to isolate the command from the payload. - Treat
| / | as a likely separator between title and first reply. - Phrases like
然后回复一条, 回一条, 在话题里回复, 并且 at 我, @我 indicate an in-thread follow-up. - Phrases like
把前面几条带过去, 把刚才聊的内容带过去, 新开一个话题聊这个, 继续追问, 新的追问 indicate a context-carrying seed reply rather than a plain freeform reply. - If only one segment exists, treat it as topic text only.
Do not overfit parsing. If the message is ambiguous, ask one short clarification question.
Tool preference
Prefer the validated user-message path for this skill:
- - INLINECODE52
- INLINECODE53
Reason: this path has been validated end-to-end for:
- - topic creation
- in-thread reply
- @mention markup
Do not rely on ordinary assistant reply routing to create a fresh topic.
Report back
After success, tell the user briefly:
- - target group
- topic text/title used
- whether a thread reply was added
- whether an @mention was included
Keep it short.
Boundaries
- - This skill only works as intended in a Feishu topic-group.
- This skill does not create Feishu groups.
- This skill should not silently send as the user unless the user explicitly asked.
- This skill is for topic bootstrapping: create the topic, optionally seed the first thread reply, then let later conversation continue inside that topic.
- If the user wants a normal group message instead of a topic, do not force this skill.
Minimal examples
Example 1: topic only
User:
CODEBLOCK9
Action:
- - resolve the configured default topic-group (or ask the user which group to use)
- send top-level INLINECODE54
Example 2: topic + thread reply
User:
CODEBLOCK10
Action:
- - create top-level INLINECODE55
- reply in thread with INLINECODE56
Example 3: topic + thread reply + @me
User:
CODEBLOCK11
Action:
- - create top-level INLINECODE57
- reply in thread with:
CODEBLOCK12
Example 4: carry context + ask one new question cleanly
User:
CODEBLOCK13
Action:
- - create a fresh topic title focused on the new question
- send one top-level topic-opening message
- put
问题:... first - then add a short INLINECODE59
- do not add a second seed reply unless the user explicitly asks for one
Feishu Topic Spawn
在专用的 话题群组 中创建一个新的飞书话题,然后可以选择在其中发布 第一条线程回复。
保持此技能的轻量化。仅用于创建话题和引导第一条回复,不用于会话路由等复杂功能。
已验证的行为
以下工作流程已得到验证:
- 1. feishuimusermessage.send 发送到话题群组的 chatid 会创建一个 新的顶级话题。
- feishuimusermessage.reply 配合 replyin_thread=true 会在 该话题内部 发布回复。
- 回复可以通过直接在内容中放置飞书文本标记来 @ 用户:
text
id=ouxxx>Name 你好
这是当前可行的路径。优先使用此方法,而非假设隐式回复路由。
前置条件
需要满足以下所有条件:
- - 目标是一个真正的 飞书话题群组。
- 用户已明确要求发送消息。
- 用户拥有在该群组中发帖的权限。
- feishuimuser_message 的用户认证飞书消息功能可用。
如果用户认证不可用或已过期,请停止操作并请用户重新授权。
如果目标群组不是话题群组,请说明结果将只是普通群消息,而非话题。
默认目标群组
如果 TOOLS.md 中配置了固定的话题群组,则默认使用该群组。
不要 将个人/本地群组名称硬编码到公共技能中。
使用 feishu_chat 配合 action=search 来解析群组。
如果用户明确指定了目标群组,则使用该群组。
如果用户未指定群组且未配置本地默认群组:
如果未找到匹配的群组:
- - 停止操作。
- 告知用户该话题群组尚不存在。
- 请用户先手动创建。
工作流程
1. 解析目标群组
- - 如果用户明确指定了群组,则使用该名称。
- 否则,如果已配置,则使用 TOOLS.md 中的本地默认话题群组。
- 如果不存在本地默认群组,则询问用户要使用哪个话题群组。
- 使用 feishuchat.search 解析 chatid。
2. 解析请求的操作
支持四种形式:
A. 仅开启话题
示例:
text
开话题:OpenClaw 多线程 SOP
仅发送一条顶级文本消息。
B. 开启话题 + 第一条线程回复
示例:
text
开话题:OpenClaw 多线程 SOP|先写一个 5 点大纲
解释为:
- - 标题 = OpenClaw 多线程 SOP
- 第一条线程回复 = 先写一个 5 点大纲
C. 开启话题 + 第一条线程回复 + @提及
示例:
text
开话题:测试 1|回一条:@我 测试
解释为:
- - 顶级话题标题/文本
- 然后一条线程回复
- 可选地在开头添加飞书 ... 提及
D. 开启话题 + 携带前文上下文 + 提出新问题
示例:
text
开个新话题聊这个,把前面几条带过去,然后追问:自由现金流有几个指数?有什么区别?
解释为:
- - 创建一个全新的干净话题
- 仅携带最少的相关上下文
- 将 上下文和新问题 放入同一条顶级话题开启消息中
- 确保新问题不会被忽略
- 除非用户明确要求额外的线程内回复,否则避免发送第二条种子消息
3. 创建话题
使用 feishuimuser_message.send:
- - action=send
- receiveidtype=chatid
- receiveid=id>
- msgtype=text
- content={text:<顶级文本>}
返回的 message_id 即为话题根节点。
4. 可选地添加第一条线程回复
如果用户要求初始回复,使用 feishuimuser_message.reply:
- - action=reply
- messageid=<话题根节点 messageid>
- replyinthread=true
- msg_type=text
- content={text:<回复文本>}
如果要求 @提及,直接在文本中格式化:
text
id=ouxxx>Name 回复内容
当用户说 @我 时,使用当前用户的 open_id。
5. 将上下文带入新话题时,保持简洁
对于 上下文携带 + 新问题,优先使用 一条顶级消息。
除非用户明确要求,否则不要添加第二条种子回复,因为两条用户消息可能触发两条助手回复。
使用简单的结构:
text
<标题>
问题:...
前情提要:...
或者,当简短摘要读起来更好时:
text
<标题>
问题:...
前情提要:
规则:
- - 将真正的问题放在前面。
- 保持摘要简短。
- 除非绝对必要,否则不要添加额外的指令性措辞。
- 目标不是比模型更聪明;目标是让后续问题显而易见。
示例:
text
HALO:自由现金流指数有什么区别
问题:
A股里自由现金流目前有几个主流指数?它们分别有什么区别?
前情提要:
- - 刚讨论过 HALO 在 A 股的映射,涉及资源、能源、公用事业、电网、交运、央企红利、现金流。
- 这次只是在这个基础上继续追问自由现金流指数。
解析指南
将以下所有内容视为可能的触发词:
- - 开话题:标题
- 开个话题:标题
- 开个新话题:标题
- /topic 标题
- /topic 标题|正文
- 新开一个话题,然后在话题里回复一条
- 开话题: 标题, 然后在话题里回复 1 条测试并且 at 我
有用的解析规则:
- - 在第一个 : / : 处分割,将命令与内容分开。
- 将 | / | 视为 标题 和 第一条回复 之间可能的分隔符。
- 像 然后回复一条、回一条、在话题里回复、并且 at 我、@我 这样的短语表示线程内后续操作。
- 像 把前面几条带过去、把刚才聊的内容带过去、新开一个话题聊这个、继续追问、新的追问 这样的短语表示 携带上下文的种子回复,而非普通的自由格式回复。
- 如果只有一个片段,则仅将其视为话题文本。
不要过度拟合解析。如果消息有歧义,请提出一个简短的澄清问题。
工具偏好
对于此技能,优先使用已验证的用户消息路径:
- - feishuimusermessage.send
- feishuimusermessage.reply
原因:此路径已针对以下功能进行了端到端验证:
不要依赖普通的助手回复路由来创建新话题。
反馈报告
成功后,简要告知用户:
- - 目标群组
- 使用的话题文本/标题
- 是否添加了线程回复
- 是否包含 @提及
保持简短。
边界
- - 此技能仅在 飞书话题群组 中按预期工作。
- 此技能 不 创建飞书群组。
- 除非用户明确要求,否则此技能不应以用户身份静默发送消息。
- 此技能用于 话题引导:创建话题,可选地播种第一条线程回复,然后让后续对话在该话题内继续。
- 如果用户想要普通群消息而不是话题,请不要强制使用此技能。
最小化示例
示例 1:仅话题
用户:
text
开话题:测试 4
操作:
- - 解析配置的默认话题群组(或询问用户使用哪个群组)
- 发送顶级 测试 4
示例 2:话题 + 线程回复
用户:
text
开话题:测试 3|不 @ 的线程回复测试
操作:
- - 创建顶级 测试 3
- 在线程中回复 不 @ 的线程回复测试
示例 3:话题 + 线程回复 + @我
用户:
text
开话题:测试 2|@我 再测一次
操作:
text
id=ouxxx>Name 再测一次
示例 4:携带上下文 + 干净地提出一个新问题
用户:
text
开个新话题聊这个,把前面几条带过去,然后追问:自由现金流有几个指数?有什么区别?
操作:
- - 创建一个专注于新问题的全新话题标题
- 发送 一条顶级