Daily Questions
A daily routine that asks the user questions to continuously build understanding and improve agent behavior. Questions are presented one at a time with multiple choice buttons on Telegram for quick tapping.
Setup
Create a cron job with a prompt like:
CODEBLOCK0
Configurable parameters:
- - Schedule: Default 21:00 daily (adjust to user's preferred wind-down time)
- Channel: Telegram (buttons require Telegram inline keyboard support)
- Questions per round: Default 3 (keep it light)
Workflow
- 1. Read USER.md and SOUL.md fully
- Identify gaps — what topics, preferences, or behaviors aren't covered yet?
- Round 1 (User questions): Ask questions about the user, one at a time (see Question Flow below). After all questions answered, update USER.md — weave answers into existing sections or create new ones. Keep USER.md organized, not a raw Q&A dump.
- Round 2 (Agent questions): Ask questions about agent behavior/communication, same one-at-a-time flow. After all answered, update SOUL.md the same way.
Question Flow (One at a Time)
For each question:
- 1. Generate the question and 3 plausible multiple choice answers (A, B, C) tailored to the question. Make the options genuinely different and useful — not throwaway filler.
- Send the question as a message with 4 inline buttons via the
message tool:
- Button A: First option
- Button B: Second option
- Button C: Third option
- ✏️ Type my own: For custom/granular answers
- 3. Send using the message tool with buttons. Use unique callback IDs per question to avoid conflicts when users tap old buttons:
CODEBLOCK1
The format is dq_r{round}q{question}_{choice} — e.g., dq_r2q3_b = Round 2, Question 3, option B.
- 4. Wait for the response. The user will either:
- Tap a button → you receive
callback_data: dq_r1q1_a (or similar)
- Type a free-text answer directly (treat as custom)
- 5. If the callback doesn't match the current question (e.g., user tapped an old button), ignore it and keep waiting for the correct response.
- 6. If
dq_rXqX_custom: Reply asking them to type their answer, then wait for the next message.
- 6. Record the answer, then move to the next question.
- 7. After all questions in the round are answered, update the relevant file (USER.md or SOUL.md).
Question Quality Guidelines
- - Vary topics — rotate through categories (see
references/example-questions.md) - Go deeper — if USER.md says "likes cooking," ask what cuisine, skill level, favorite dish
- Stay casual — conversational tone, not an interview
- No repeats — never ask about something already well-documented
- Mix fun and practical — alternate between lighthearted and useful questions
- Good multiple choice options — make them realistic and distinct. Draw from common preferences, not absurd extremes. The options should feel like plausible answers a real person would give.
Important Notes
- - One question at a time — never batch questions into a single message
- Always use inline buttons on Telegram — this is the primary interaction method
- Include the question text AND options in the message body so the user can read everything before tapping
- Label rounds and progress (e.g., "Round 1 — Question 2/3") so the user knows where they are
- After sending buttons via the message tool, respond with
NO_REPLY to avoid sending a duplicate plain-text message
每日提问
一项日常流程,通过向用户提问来持续构建理解并改进智能体行为。问题在Telegram上逐一呈现,并附带多项选择按钮,方便快速点击。
设置
使用如下提示创建定时任务:
到了每日提问时间。请阅读 daily-questions SKILL.md,然后严格按照工作流程执行。完整阅读 USER.md 和 SOUL.md,找出信息缺口。先向用户提出 {N} 个问题,再向智能体提出 {N} 个问题,每次一个问题并附带多项选择按钮。每轮结束后更新文件。
可配置参数:
- - 时间安排:默认每天21:00(可根据用户偏好的放松时间调整)
- 渠道:Telegram(按钮需要Telegram内联键盘支持)
- 每轮问题数:默认3个(保持轻量)
工作流程
- 1. 完整阅读 USER.md 和 SOUL.md
- 找出信息缺口——哪些主题、偏好或行为尚未覆盖?
- 第一轮(用户问题):向用户提问,每次一个问题(参见下方提问流程)。所有问题回答完毕后,更新 USER.md——将答案融入现有章节或创建新章节。保持 USER.md 结构清晰,而非原始的问答堆砌。
- 第二轮(智能体问题):询问关于智能体行为/沟通的问题,同样采用逐一提问流程。所有问题回答完毕后,以相同方式更新 SOUL.md。
提问流程(逐一进行)
每个问题:
- 1. 生成问题和3个合理的多项选择答案(A、B、C),针对问题量身定制。确保选项真正不同且有用——而非敷衍了事的填充项。
- 通过 message 工具发送问题,附带4个内联按钮:
- 按钮A:第一个选项
- 按钮B:第二个选项
- 按钮C:第三个选项
- ✏️ 自行输入:用于自定义/详细回答
- 3. 使用消息工具发送,附带按钮。每个问题使用唯一的回调ID,避免用户点击旧按钮时产生冲突:
json
{
action: send,
channel: telegram,
to: <用户telegram_id>,
message: 第一轮 — 问题 1/3\n\n<问题文本>\n\nA) <选项A>\nB) <选项B>\nC) <选项C>\n\n点击按钮或自行输入答案:,
buttons: [
[
{ text: A, callbackdata: dqr1q1_a },
{ text: B, callbackdata: dqr1q1_b },
{ text: C, callbackdata: dqr1q1_c }
],
[
{ text: ✏️ 自行输入, callbackdata: dqr1q1_custom }
]
]
}
格式为 dqr{轮次}q{问题}{选项}——例如,dqr2q3b = 第二轮,第三个问题,选项B。
- 4. 等待回复。 用户将:
- 点击按钮 → 你收到 callback
data: dqr1q1_a(或类似内容)
- 直接输入自由文本答案(视为自定义)
- 5. 如果回调与当前问题不匹配(例如,用户点击了旧按钮),忽略它,继续等待正确回复。
- 6. 如果 dqrXqXcustom:回复要求用户输入答案,然后等待下一条消息。
- 6. 记录答案,然后进入下一个问题。
- 7. 一轮中所有问题回答完毕后,更新相关文件(USER.md 或 SOUL.md)。
问题质量指南
- - 变换主题——在不同类别间轮换(参见 references/example-questions.md)
- 深入挖掘——如果 USER.md 提到喜欢烹饪,询问菜系、技能水平、拿手菜
- 保持随意——对话式语气,而非面试
- 不重复——绝不询问已有充分记录的内容
- 趣味与实用结合——在轻松和实用问题之间交替
- 优质多项选择选项——使其真实且有区分度。从常见偏好中选取,而非荒谬的极端选项。选项应让人觉得是真实用户可能给出的合理答案。
重要说明
- - 每次一个问题——切勿将多个问题打包到一条消息中
- 始终使用Telegram内联按钮——这是主要的交互方式
- 在消息正文中包含问题文本和选项——让用户在点击前能完整阅读
- 标注轮次和进度(例如,第一轮 — 问题 2/3),让用户了解当前进度
- 通过消息工具发送按钮后,回复 NO_REPLY,避免发送重复的纯文本消息