generate-standup
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseGenerate Daily Standup
生成每日站会内容
Produces a daily standup post from live GitHub activity and optionally posts it
to the Check-ins discussion.
mitodl/hqRequires: (authenticated) and .
ghjq基于实时GitHub活动生成每日站会帖子,并可选择发布至的Check-ins讨论区。
mitodl/hq**依赖:**已认证的和。
ghjqStep 1 — Fetch GitHub context
步骤1 — 获取GitHub上下文
Run the bundled context script before asking any questions:
bash
bash skills/process/generate-standup/scripts/get-standup-context.sh [-t YYYY-MM-DD] [-o org1,org2]| Flag | Description | Default |
|---|---|---|
| "Today" date ( | today (UTC) |
| Comma-separated orgs to search | |
The script outputs a JSON object:
json
{
"meta": { "username", "today", "yesterday", "tomorrow", "since" },
"checkin_discussion": { "id", "number", "title", "url", "createdAt" },
"prs_authored": [...],
"prs_reviewed": [...],
"issues": [...],
"rfc_discussions": [...]
}- is the previous weekday (Friday if today is Monday).
meta.yesterday - is the next weekday (Monday if today is Friday).
meta.tomorrow - is midnight UTC on
meta.since— the fetch window start.meta.yesterday - is the most recent Check-ins discussion in
checkin_discussion. Keep itsmitodl/hq(GraphQL node ID) andidfor Steps 4–5.url - Do not infer or fabricate activity beyond what the script returns.
在询问任何问题之前,先运行内置的上下文脚本:
bash
bash skills/process/generate-standup/scripts/get-standup-context.sh [-t YYYY-MM-DD] [-o org1,org2]| 参数 | 描述 | 默认值 |
|---|---|---|
| "今日"日期(格式 | 今日(UTC时间) |
| 逗号分隔的要搜索的组织 | |
脚本会输出一个JSON对象:
json
{
"meta": { "username", "today", "yesterday", "tomorrow", "since" },
"checkin_discussion": { "id", "number", "title", "url", "createdAt" },
"prs_authored": [...],
"prs_reviewed": [...],
"issues": [...],
"rfc_discussions": [...]
}- 为前一个工作日(若今日为周一,则为上周五)。
meta.yesterday - 为下一个工作日(若今日为周五,则为下周一)。
meta.tomorrow - 为
meta.since的UTC午夜时间——即数据获取窗口的起始时间。meta.yesterday - 是
checkin_discussion中最新的Check-ins讨论区。请保留其mitodl/hq(GraphQL节点ID)和id用于步骤4-5。url - 请勿推断或编造脚本返回内容之外的活动信息。
Step 1b — Query agent session history
步骤1b — 查询Agent会话历史
Using the tool (), fetch agent sessions
active since :
sqldatabase: "session_store"meta.sincesql
SELECT
s.id,
s.repository,
s.branch,
s.summary,
s.created_at,
s.updated_at,
c.title AS checkpoint_title,
c.overview AS checkpoint_overview,
c.work_done AS checkpoint_work_done
FROM sessions s
LEFT JOIN checkpoints c ON c.session_id = s.id
WHERE s.updated_at >= '<meta.since>'
ORDER BY s.updated_at DESCFor sessions with no checkpoints, fetch the first user turn as a fallback:
sql
SELECT s.id, s.repository, s.branch, t.user_message
FROM sessions s
JOIN turns t ON t.session_id = s.id AND t.turn_index = 0
WHERE s.updated_at >= '<meta.since>'
AND NOT EXISTS (SELECT 1 FROM checkpoints c WHERE c.session_id = s.id)
ORDER BY s.updated_at DESCSummarization rules:
| Evidence available | Action |
|---|---|
Checkpoint with | Use as session summary |
| No checkpoint; has repo + branch + concrete first turn | Derive brief summary from repo/branch + turn intent |
| No checkpoint; NULL repo or trivial/meta prompt | Skip |
| Session is for generating this standup | Skip |
Store the resulting list of session summaries; use in Steps 3–4 to enrich
GitHub-derived bullets and fill in non-GitHub work.
使用工具()获取自以来活跃的Agent会话:
sqldatabase: "session_store"meta.sincesql
SELECT
s.id,
s.repository,
s.branch,
s.summary,
s.created_at,
s.updated_at,
c.title AS checkpoint_title,
c.overview AS checkpoint_overview,
c.work_done AS checkpoint_work_done
FROM sessions s
LEFT JOIN checkpoints c ON c.session_id = s.id
WHERE s.updated_at >= '<meta.since>'
ORDER BY s.updated_at DESC对于无检查点的会话,获取用户的第一条消息作为备选:
sql
SELECT s.id, s.repository, s.branch, t.user_message
FROM sessions s
JOIN turns t ON t.session_id = s.id AND t.turn_index = 0
WHERE s.updated_at >= '<meta.since>'
AND NOT EXISTS (SELECT 1 FROM checkpoints c WHERE c.session_id = s.id)
ORDER BY s.updated_at DESC总结规则:
| 可用证据 | 操作 |
|---|---|
包含 | 用作会话总结 |
| 无检查点;包含仓库+分支+明确的第一条消息 | 从仓库/分支和消息意图生成简短总结 |
| 无检查点;仓库为NULL或提示无实际内容 | 跳过 |
| 会话用于生成本次站会内容 | 跳过 |
保存生成的会话总结列表;在步骤3-4中用于丰富GitHub衍生的项目符号,并补充GitHub外的工作内容。
Step 2 — Ask clarifying questions
步骤2 — 询问澄清问题
Use a single call with all fields at once.
ask_userFirst, identify session-only work from Step 1b (sessions with or whose repository doesn't appear in ). Format them as a
short suggestion list for the field description.
repository: nullprs_authoredoff_githubThe most important field is — it controls the section headers and
which date's activity is treated as "done" work:
timingjson
{
"timing": {
"type": "string",
"title": "When are you posting?",
"enum": ["EOD — reporting today's work (today/tomorrow headers)",
"BOD — reporting yesterday's work (yesterday/today headers)"],
"description": "EOD: post at end of your work day; yesterday section covers today's date (meta.today). BOD: post at start of your work day; yesterday section covers meta.yesterday."
},
"blockers": {
"type": "string",
"title": "Blockers",
"description": "Are you blocked on anything? Include a link and the @handle of whoever needs to unblock you. Leave blank if none."
},
"announcements": {
"type": "string",
"title": "Announcements",
"description": "Anything to announce not in GitHub? (OOO, special review requests, schedule changes, etc.) Leave blank if none."
},
"off_github": {
"type": "string",
"title": "Off-GitHub work",
"description": "Meetings, planning, research, design, or other work that won't appear in GitHub. Leave blank if none.\n\nPossible session-only work detected:\n<bullet list of session-only summaries, or 'none detected'>"
}
}使用单次调用,一次性获取所有字段信息。
ask_user首先,从步骤1b中识别仅会话中的工作(为NULL或仓库未出现在中的会话)。将其格式化为字段描述的简短建议列表。
repositoryprs_authoredoff_github最重要的字段是——它控制章节标题以及将哪一天的活动视为“已完成”工作:
timingjson
{
"timing": {
"type": "string",
"title": "你将在何时发布?",
"enum": ["EOD — 汇报今日工作(今日/明日标题)",
"BOD — 汇报昨日工作(昨日/今日标题)"],
"description": "EOD:在工作日结束时发布;昨日章节对应今日日期(meta.today)。BOD:在工作日开始时发布;昨日章节对应meta.yesterday。"
},
"blockers": {
"type": "string",
"title": "阻塞事项",
"description": "你是否遇到任何阻塞?请包含链接和需要协助解除阻塞的人员@用户名。若无则留空。"
},
"announcements": {
"type": "string",
"title": "公告",
"description": "是否有未在GitHub上体现的公告?(休假、特殊评审请求、日程变更等)若无则留空。"
},
"off_github": {
"type": "string",
"title": "GitHub外的工作",
"description": "会议、规划、研究、设计或其他未在GitHub上体现的工作。若无则留空。\n\n检测到的可能仅会话工作:\n<仅会话总结的项目符号列表,或'未检测到'>"
}
}Step 3 — Classify activity
步骤3 — 分类活动
From the user's answer, determine:
timing| Timing | | | Past header | Future header |
|---|---|---|---|---|
| EOD | | | | |
| BOD | | | | |
Bucketing rules:
- Done (past section): Any PR or issue with or
updatedAtonmergedAt. Include both merged and still-open items that were actively worked on that day.report_date - Planned (future section): Open PRs and issues the user is continuing,
plus anything explicitly stated in user answers. Omit items with no
since
updatedAt(stale).meta.since - Announcements: PRs authored by the user that are still open and need human review (exclude bots: Copilot, Gemini, Renovate, Dependabot, Sentry). Also include RFC discussions created today, blockers, and OOO info.
- Deduplication: A PR in both and
prs_authored→ list once under the most relevant bucket.prs_reviewed
Incorporating agent sessions:
- If a session maps to a PR/issue already in the GitHub data, enrich that bullet with context from the session summary — do not create a duplicate.
- If a session represents work with no GitHub artifact, add it as its own
bullet under done or planned based on vs
updated_at.report_date
根据用户的回答,确定:
timing| 时间选择 | | | 过去章节标题 | 未来章节标题 |
|---|---|---|---|---|
| EOD | | | | |
| BOD | | | | |
分类规则:
- **已完成(过去章节):**任何在有
report_date或updatedAt记录的PR或Issue。包含已合并和仍在进行中且当日有活跃操作的项目。mergedAt - **计划中(未来章节):**用户将继续推进的开放PR和Issue,加上用户回答中明确提及的事项。排除自以来无
meta.since记录的陈旧项目。updatedAt - **公告:**用户发起的仍开放且需要人工评审的PR(排除机器人:Copilot、Gemini、Renovate、Dependabot、Sentry)。还包括今日创建的RFC讨论、阻塞事项和休假信息。
- **去重:**同时出现在和
prs_authored中的PR → 归入最相关的分类一次。prs_reviewed
整合Agent会话:
- 如果会话对应GitHub数据中已有的PR/Issue,用会话总结的上下文丰富该项目符号——不要创建重复项。
- 如果会话代表无GitHub工件的工作,根据与
updated_at的关系,将其作为单独的项目符号添加到已完成或计划中章节。report_date
Step 4 — Render the standup
步骤4 — 渲染站会内容
Use (the GitHub login) as the name.
meta.usernamemarkdown
<Display Name>
> Standup announcements
- <item>
> <past header>
- <item>
> <future header>
- <item>Formatting rules:
- Empty sections: write , never omit the section header.
- None - Blockers go in announcements as a bullet; tag with and link.
@handle - Links: raw GitHub URLs are fine; markdown formatting is also fine — match what feels natural for the content. Don't force one style.
[text](url) - Level of detail: match what the data supports. If a PR/issue title is self-explanatory, a bare link is sufficient. Add a brief description only when context genuinely helps (e.g., the PR title doesn't convey purpose, or the work involved investigation/discussion not captured in a link).
- Do not impose narrative style: some people post links; some post prose; both are correct. Let the available data guide the output.
- Do not group PRs across repos into parent bullets unless the user explicitly works across many repos on the same thing and grouping is clearly cleaner — default to separate bullets.
- Planned section should reflect what's actually next, not a mechanical list of every open PR. Omit items the user is clearly done with.
使用(GitHub登录名)作为显示名称。
meta.usernamemarkdown
<显示名称>
> 站会公告
- <项目>
> <过去章节标题>
- <项目>
> <未来章节标题>
- <项目>格式规则:
- **空章节:**填写,切勿省略章节标题。
- None - 阻塞事项作为项目符号放在公告中;标记并添加链接。
@用户名 - **链接:**原始GitHub URL即可;也可使用Markdown的格式——根据内容选择自然的样式,无需强制统一。
[文本](链接) - **详细程度:**匹配数据支持的内容。如果PR/Issue标题已清晰说明,仅需链接即可。仅当上下文确实有帮助时(例如PR标题无法传达目的,或工作涉及未在链接中体现的调查/讨论)才添加简短描述。
- **不要强加叙事风格:**有些人只发链接,有些人发段落文字;两种方式都合理。根据可用数据决定输出形式。
- 不要跨仓库分组PR到父项目符号下,除非用户明确跨多个仓库处理同一事务且分组明显更清晰——默认使用单独的项目符号。
- 计划章节应反映实际后续工作,而非机械列出所有开放PR。排除用户显然已完成的项目。
Step 5 — Confirm and post
步骤5 — 确认并发布
Display the rendered standup, then use to confirm:
ask_userjson
{
"action": {
"type": "string",
"title": "Post this standup?",
"enum": ["Post it", "Edit first", "Cancel"],
"description": "Post as a comment on <title> (<checkin_discussion.url>), make edits, or cancel."
}
}Do not post unless the user selects "Post it".
On confirmation, post using the bundled script:
bash
echo "<rendered standup>" \
| bash skills/process/generate-standup/scripts/post-standup-comment.sh \
-d "<checkin_discussion.id>"The script prints the comment URL on success.
显示渲染后的站会内容,然后使用获取确认:
ask_userjson
{
"action": {
"type": "string",
"title": "发布此站会内容?",
"enum": ["发布", "先编辑", "取消"],
"description": "发布为<title>的评论(<checkin_discussion.url>),进行编辑,或取消操作。"
}
}仅当用户选择“发布”时才可发布。
确认后,使用内置脚本发布:
bash
echo "<渲染后的站会内容>" \
| bash skills/process/generate-standup/scripts/post-standup-comment.sh \
-d "<checkin_discussion.id>"脚本成功执行后会打印评论链接。
Example output (EOD, link-primary style)
示例输出(EOD,以链接为主风格)
markdown
Anna G
> Standup announcements
- https://github.com/mitodl/mitxonline/pull/3600 needs review
> What did I work on today?
- worked on https://github.com/mitodl/mitxonline/pull/3600
- updated UI and fixed tests https://github.com/mitodl/mit-learn/pull/3346, received review
> What am I working on tomorrow?
- address feedback https://github.com/mitodl/mit-learn/pull/3346
- resolve https://github.com/mitodl/hq/issues/11440markdown
Anna G
> 站会公告
- https://github.com/mitodl/mitxonline/pull/3600 需要评审
> 我今日完成了哪些工作?
- 处理了 https://github.com/mitodl/mitxonline/pull/3600
- 更新UI并修复测试 https://github.com/mitodl/mit-learn/pull/3346,已收到评审意见
> 我明日将开展哪些工作?
- 处理 https://github.com/mitodl/mit-learn/pull/3346 的反馈
- 解决 https://github.com/mitodl/hq/issues/11440Example output (BOD, narrative style)
示例输出(BOD,叙事风格)
markdown
Tobias Macey
> Standup announcements
- PRs needing review:
- [ol-infrastructure #4659: add Archive/Deep Archive access tier support to OLBucket](https://github.com/mitodl/ol-infrastructure/pull/4659)
- [ol-data-platform #2238: automate Iceberg table maintenance across the lakehouse](https://github.com/mitodl/ol-data-platform/pull/2238)
> What did I work on yesterday?
- Worked on addressing the hanging open issue for Dagster assets using Polars to read Iceberg tables
- Opened https://github.com/mitodl/ol-infrastructure/pull/4659 for S3 cost optimization
> What am I working on today?
- Finish fixing the Polars/Iceberg hang in Dagster
- Test the Concourse release workflow end to end
- Wrap up self assessmentmarkdown
Tobias Macey
> 站会公告
- 需要评审的PR:
- [ol-infrastructure #4659: 为OLBucket添加归档/深度归档访问层级支持](https://github.com/mitodl/ol-infrastructure/pull/4659)
- [ol-data-platform #2238: 自动化湖仓中Iceberg表的维护](https://github.com/mitodl/ol-data-platform/pull/2238)
> 我昨日完成了哪些工作?
- 处理使用Polars读取Iceberg表的Dagster资产悬而未决的问题
- 为S3成本优化提交了 https://github.com/mitodl/ol-infrastructure/pull/4659
> 我今日将开展哪些工作?
- 完成Dagster中Polars/Iceberg挂起问题的修复
- 端到端测试Concourse发布流程
- 完成自我评估Example output (ambiguous timing, hybrid style)
示例输出(时间模糊,混合风格)
markdown
Sar
> Standup announcements
- None
> What did I work on yesterday/today?
- Wrote and deployed https://github.com/mitodl/ol-infrastructure/pull/4658
- Continued investigating SCIM sync failures — updates are reaching Keycloak
logs but not propagating to Learn/MITx Online; restarting Keycloak temporarily
restores sync, root cause still unknown
> What am I working on today/tomorrow?
- Continue digging into the SCIM update issueSee context script for the GitHub
data-fetching implementation and post script
for the comment posting implementation.
markdown
Sar
> 站会公告
- None
> 我昨日/今日完成了哪些工作?
- 编写并部署了 https://github.com/mitodl/ol-infrastructure/pull/4658
- 继续调查SCIM同步失败问题——更新已到达Keycloak日志,但未同步到Learn/MITx Online;重启Keycloak可临时恢复同步,根本原因仍未知
> 我今日/明日将开展哪些工作?
- 继续深入排查SCIM更新问题查看上下文脚本了解GitHub数据获取实现,查看发布脚本了解评论发布实现。