Loading...
Loading...
Compare original and translation side by side
jira:
cloudId: "4a4bd20b-0645-4d11-9c98-8d0285630fd4"
userId: "712020:30e7c6ae-4ea0-498a-b65d-c6107cba7e08"
baseUrl: "https://hgdata.atlassian.net/browse/"
projects:
- key: RGI
board: 1236
- key: MITB
board: 1036
label: Engineering-Applications
slack:
supportChannel: "C09E1666N78" # eng-applications-support
userId: "U09ATNQ9UV7" # Benjamin Gelis
priorityUsers:
- Claire Renaud
- Matthieu Courtin
github:
username: "BenjaminG"
orgs:
- MadKudu
- HGData
persistence:
directory: "~/.claude/standups"
format: "YYYY-MM-DD.md"jira:
cloudId: "4a4bd20b-0645-4d11-9c98-8d0285630fd4"
userId: "712020:30e7c6ae-4ea0-498a-b65d-c6107cba7e08"
baseUrl: "https://hgdata.atlassian.net/browse/"
projects:
- key: RGI
board: 1236
- key: MITB
board: 1036
label: Engineering-Applications
slack:
supportChannel: "C09E1666N78" # eng-applications-support
userId: "U09ATNQ9UV7" # Benjamin Gelis
priorityUsers:
- Claire Renaud
- Matthieu Courtin
github:
username: "BenjaminG"
orgs:
- MadKudu
- HGData
persistence:
directory: "~/.claude/standups"
format: "YYYY-MM-DD.md"mcp__slack__conversations_history channel_id: "C09E1666N78" limit: "15"mcp__slack__conversations_history channel_id: "C09E1666N78" limit: "15"acli jira workitem search --jql 'project = RGI AND assignee = "712020:30e7c6ae-4ea0-498a-b65d-c6107cba7e08" AND status not in (Done)' --fields "key,summary,status,priority" --csvacli jira workitem search --jql 'project = MITB AND assignee = "712020:30e7c6ae-4ea0-498a-b65d-c6107cba7e08" AND status not in (Done) AND labels = "Engineering-Applications"' --fields "key,summary,status,priority" --csvmkdir -p /tmp/standup-attachments
for key in KEY1 KEY2 KEY3; do
echo "=== $key ==="
acli jira workitem view $key --json 2>&1 | jq '{key: .key, status: .fields.status.name, priority: .fields.priority.name, assignee: .fields.assignee.displayName, summary: .fields.summary}'
echo "--- comments ---"
acli jira workitem comment list --key $key --json 2>&1
echo "--- attachments ---"
acli jira workitem attachment list --key $key --json 2>&1
echo
doneundefinedacli jira workitem search --jql 'project = RGI AND assignee = "712020:30e7c6ae-4ea0-498a-b65d-c6107cba7e08" AND status not in (Done)' --fields "key,summary,status,priority" --csvacli jira workitem search --jql 'project = MITB AND assignee = "712020:30e7c6ae-4ea0-498a-b65d-c6107cba7e08" AND status not in (Done) AND labels = "Engineering-Applications"' --fields "key,summary,status,priority" --csvmkdir -p /tmp/standup-attachments
for key in KEY1 KEY2 KEY3; do
echo "=== $key ==="
acli jira workitem view $key --json 2>&1 | jq '{key: .key, status: .fields.status.name, priority: .fields.priority.name, assignee: .fields.assignee.displayName, summary: .fields.summary}'
echo "--- comments ---"
acli jira workitem comment list --key $key --json 2>&1
echo "--- attachments ---"
acli jira workitem attachment list --key $key --json 2>&1
echo
doneundefined
Then use the **Read tool** to view each downloaded image (Claude is multimodal and can read images). Screenshots often contain the actual QA feedback, bug reproductions, or UI states that explain what needs to happen next.
**Env vars required for attachment download:** `JIRA_EMAIL`, `JIRA_API_TOKEN`, `JIRA_BASE_URL`. If not set, skip attachment download and note it in the output.
From the full comments, attachments, and details, extract for each issue:
- **Full comment thread context:** Read ALL comments (not just the latest), understand the conversation arc — who raised what, what was discussed, what was decided
- **Visual context from screenshots:** If images are attached, view them and describe what they show (e.g., "Screenshot shows missing chart legend in conversion volume view")
- **Next action:** What Benjamin specifically needs to do next (review, fix, respond, deploy, etc.)
- **Whether actionable now** or waiting on someone else
**Cleanup:** After generating the standup report, remove temp files:
```bash
rm -rf /tmp/standup-attachments
然后使用**读取工具**查看每个下载的图片(Claude支持多模态,可读取图片内容)。截图通常包含实际的QA反馈、Bug复现步骤或UI状态,能解释下一步需要执行的操作。
**附件下载所需环境变量:** `JIRA_EMAIL`、`JIRA_API_TOKEN`、`JIRA_BASE_URL`。如果未设置这些变量,请跳过附件下载,并在输出中注明。
从完整的评论、附件和详情中,为每个工单提取以下信息:
- **完整评论线程上下文:** 阅读**所有**评论(不仅是最新的),理解对话脉络——谁提出了什么问题、讨论了什么内容、做出了什么决定
- **截图中的视觉上下文:** 如果有附件图片,查看并描述其内容(例如:"截图显示转化量视图中缺少图表图例")
- **下一步操作:** Benjamin具体需要执行什么操作(评审、修复、回复、部署等)
- **是否可立即执行**,还是需要等待其他人的操作
**清理:** 生成站会报告后,删除临时文件:
```bash
rm -rf /tmp/standup-attachmentsacli jira workitem search \
--jql 'watcher = currentUser() AND updated >= -3d ORDER BY updated DESC' \
--fields "key,summary,status,assignee" --csvacli jira workitem comment list --key <KEY> --json 2>&1 | jq -r '.comments[-3:] | .[] | "[\(.author.displayName)] \(.body)"'acli jira workitem search \
--jql 'watcher = currentUser() AND updated >= -3d ORDER BY updated DESC' \
--fields "key,summary,status,assignee" --csvacli jira workitem comment list --key <KEY> --json 2>&1 | jq -r '.comments[-3:] | .[] | "[\(.author.displayName)] \(.body)"'gh search prs --author=@me --state=open --limit 20 --json title,number,repository,url,isDraft,updatedAt,createdAtgh search prs --review-requested=@me --state=open --limit 10 --json title,number,repository,url,authorfor pr in $(echo "$PRS_JSON" | jq -r '.[] | select(.isDraft == false) | "\(.repository.nameWithOwner):\(.number)"'); do
repo="${pr%%:*}"
num="${pr##*:}"
echo "=== $repo#$num ==="
gh pr view "$num" --repo "$repo" --json reviewDecision,reviews --jq '{reviewDecision, reviewCount: (.reviews | length)}'
donereviewDecisionCHANGES_REQUESTEDAPPROVEDREVIEW_REQUIREDcreatedAtCHANGES_REQUESTEDREVIEW_REQUIREDAPPROVEDgh search prs --author=@me --state=open --limit 20 --json title,number,repository,url,isDraft,updatedAt,createdAtgh search prs --review-requested=@me --state=open --limit 10 --json title,number,repository,url,authorfor pr in $(echo "$PRS_JSON" | jq -r '.[] | select(.isDraft == false) | "\(.repository.nameWithOwner):\(.number)"'); do
repo="${pr%%:*}"
num="${pr##*:}"
echo "=== $repo#$num ==="
gh pr view "$num" --repo "$repo" --json reviewDecision,reviews --jq '{reviewDecision, reviewCount: (.reviews | length)}'
donereviewDecisionCHANGES_REQUESTEDAPPROVEDREVIEW_REQUIREDcreatedAtCHANGES_REQUESTEDREVIEW_REQUIREDAPPROVEDacli jira workitem view <ISSUE-KEY> --json
acli jira workitem comment list --key <ISSUE-KEY> --json
acli jira workitem attachment list --key <ISSUE-KEY> --jsonacli jira workitem view <ISSUE-KEY> --json
acli jira workitem comment list --key <ISSUE-KEY> --json
acli jira workitem attachment list --key <ISSUE-KEY> --json~/.claude/standups/ls -1 ~/.claude/standups/*.md 2>/dev/null | sort -r | head -1ls -1 ~/.claude/standups/*.md 2>/dev/null | sort -r | head -3~/.claude/standups/ls -1 ~/.claude/standups/*.md 2>/dev/null | sort -r | head -1ls -1 ~/.claude/standups/*.md 2>/dev/null | sort -r | head -3⌥ PR #N| Tier | Emoji | Criteria |
|---|---|---|
| ⚡ DO NOW | 💬 🔴 | Unresponded Slack @mentions; items reopened/escalated by priority users (Claire, Matthieu); Blocker/Urgent priority; items explicitly requested same-day |
| 🔄 UNBLOCK OTHERS | 🟡 | Own PRs with |
| 🔨 IN PROGRESS | 🟠 | Items in active statuses (In Progress, In QA, In Review) waiting on external action (not currently blocked on Benjamin); own PRs awaiting review ( |
| 📋 UP NEXT | 🔴 ⬜ | Ready for Development, On Deck items. Use 🔴 for High priority, ⬜ for normal |
| ⏳ WAITING | ⏸ | Tasks with |
⌥ PR #N| 层级 | 表情符号 | 判定标准 |
|---|---|---|
| ⚡ 立即处理 | 💬 🔴 | 未回复的Slack@提及;优先级用户(Claire、Matthieu)重新打开/升级的项;阻塞/紧急优先级;明确要求当日完成的项 |
| 🔄 解除他人阻塞 | 🟡 | 自己的PR被标记为 |
| 🔨 进行中 | 🟠 | 处于活动状态(进行中、QA中、评审中)且等待外部操作(当前未被Benjamin阻塞)的项;自己的PR等待评审( |
| 📋 下一步 | 🔴 ⬜ | 准备开发、待处理的项。高优先级用🔴,普通优先级用⬜ |
| ⏳ 等待中 | ⏸ | 今日或昨日任务文件中状态为 |
[KEY](https://hgdata.atlassian.net/browse/KEY)┌─────────────────────────────────────────────────────────────┐
│ 🌅 STANDUP — {date} │
│ Last sync: {previous_date} · {N} active · {N} new · {N} standby · {N} msg│
└─────────────────────────────────────────────────────────────┘
⚡ DO NOW
1. 💬 [Brief description] — [who] [what]
└─ #channel · date · What to respond
2. 🔴 [KEY](url) — Summary
└─ Context from comments/attachments → next action
🔄 UNBLOCK OTHERS
3. 🟡 [KEY](url) — Summary ⌥ [PR #N](gh-url)
└─ Feedback details / what to address
4. 🟡 [repo#N](gh-url) — PR title — by [author]
└─ Brief description of PR purpose
🔨 IN PROGRESS
5. 🟠 [KEY](url) — Summary ⌥ [PR #N](gh-url)
└─ ⏸ Awaiting review · N days old
📋 UP NEXT
6. 🔴 [KEY](url) — Summary High
└─ Why it matters
7. ⬜ [KEY](url) — Summary
└─ Brief context
⏳ WAITING
8. ⏸ [KEY](url) — Summary
└─ Waiting on: {waiting_on} · standby Xh ago
9. ⏸ [KEY](url) — Summary
└─ Waiting on: {waiting_on} · standby 1d ago
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
🔔 Overnight: 🆕 KEY reason · ➡️ KEY old → new · ✅ KEY done · ⏸ KEY reason · ▶️ KEY
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
🔍 Analysis: KEY (brief) · KEY (brief)
📦 Backlog: KEY (brief) · KEY (brief)
🧹 Stale PRs: #N(Nd) #N(Nd) ...Last sync: {date}{N} standby└─└─⌥ [PR #N](gh-url)CHANGES_REQUESTEDREVIEW_REQUIREDAPPROVED╌·standby⏸ KEY reasonstandby▶️ KEYemoji Label: KEY (brief) · KEY (brief)#N(Nd)[编号](https://hgdata.atlassian.net/browse/编号)┌─────────────────────────────────────────────────────────────┐
│ 🌅 站会 — {日期} │
│ 上次同步:{上次日期} · {N} 个活动项 · {N} 个新增项 · {N} 个待处理项 · {N} 条消息│
└─────────────────────────────────────────────────────────────┘
⚡ 立即处理
1. 💬 [简要描述] — [谁] [什么]
└─ #频道 · 日期 · 需要回复的内容
2. 🔴 [编号](链接) — 摘要
└─ 评论/附件中的上下文 → 下一步操作
🔄 解除他人阻塞
3. 🟡 [编号](链接) — 摘要 ⌥ [PR #N](GitHub链接)
└─ 反馈详情 / 需要处理的内容
4. 🟡 [仓库#N](GitHub链接) — PR标题 — 作者:[作者]
└─ PR用途的简要描述
🔨 进行中
5. 🟠 [编号](链接) — 摘要 ⌥ [PR #N](GitHub链接)
└─ ⏸ 等待评审 · 已存在N天
📋 下一步
6. 🔴 [编号](链接) — 摘要 高优先级
└─ 重要性说明
7. ⬜ [编号](链接) — 摘要
└─ 简要上下文
⏳ 等待中
8. ⏸ [编号](链接) — 摘要
└─ 等待对象:{等待对象} · 待处理X小时
9. ⏸ [编号](链接) — 摘要
└─ 等待对象:{等待对象} · 待处理1天
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
🔔 夜间变更:🆕 编号 原因 · ➡️ 编号 旧状态→新状态 · ✅ 编号 已完成 · ⏸ 编号 原因 · ▶️ 编号
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
🔍 分析:编号(简要) · 编号(简要)
📦 待办库:编号(简要) · 编号(简要)
🧹 过时PR:#N(N天) #N(N天) ...上次同步:{日期}{N} 个待处理项└─└─⌥ [PR #N](GitHub链接)CHANGES_REQUESTEDREVIEW_REQUIREDAPPROVED╌·standby⏸ 编号 原因standby▶️ 编号表情符号 标签:编号(简要) · 编号(简要)#N(N天)mkdir -p ~/.claude/standups~/.claude/standups/YYYY-MM-DD.mdmkdir -p ~/.claude/standups~/.claude/standups/YYYY-MM-DD.md~/.claude/daily-tasks/YYYY-MM-DD.jsonmkdir -p ~/.claude/daily-tasksidtier⚡ DO NOW"do_now"🔄 UNBLOCK OTHERS"unblock_others"🔨 IN PROGRESS"in_progress"📋 UP NEXT"up_next"[KEY](url)jira_keyjira_urlsummary└─context⌥ [PR #N](url)pr_urljira_key"jira""slack""github"jira_key: null{
"date": "YYYY-MM-DD",
"standup_file": "~/.claude/standups/YYYY-MM-DD.md",
"updated_at": "ISO-TIMESTAMP",
"tasks": [
{
"id": 1,
"tier": "do_now",
"status": "pending",
"jira_key": "RGI-265",
"jira_url": "https://hgdata.atlassian.net/browse/RGI-265",
"summary": "Migrate Evr Insights pages",
"context": "In QA; Claire feedback on missing chart names",
"pr_url": null,
"source": "jira",
"started_at": null,
"completed_at": null,
"carried_from": null,
"waiting_on": null,
"paused_at": null
}
]
}~/.claude/daily-tasks/YYYY-MM-DD.jsonjira_key → {status, started_at, completed_at, waiting_on, paused_at}jira_keystatusstarted_atcompleted_atwaiting_onpaused_atstatus === "standby"⏳ WAITINGcat ~/.claude/daily-tasks/$(date -v-1d +%Y-%m-%d).json 2>/dev/nulljira_keycarried_fromstatus === "standby"standbywaiting_onpaused_at~/.claude/daily-tasks/YYYY-MM-DD.json<!-- task-file: ~/.claude/daily-tasks/YYYY-MM-DD.json -->~/.claude/daily-tasks/YYYY-MM-DD.jsonmkdir -p ~/.claude/daily-tasksidtier⚡ 立即处理"do_now"🔄 解除他人阻塞"unblock_others"🔨 进行中"in_progress"📋 下一步"up_next"[编号](链接)jira_keyjira_urlsummary└─context⌥ [PR #N](链接)pr_urljira_key"jira""slack""github"jira_key: null{
"date": "YYYY-MM-DD",
"standup_file": "~/.claude/standups/YYYY-MM-DD.md",
"updated_at": "ISO-TIMESTAMP",
"tasks": [
{
"id": 1,
"tier": "do_now",
"status": "pending",
"jira_key": "RGI-265",
"jira_url": "https://hgdata.atlassian.net/browse/RGI-265",
"summary": "迁移Evr Insights页面",
"context": "QA中;Claire反馈缺少图表名称",
"pr_url": null,
"source": "jira",
"started_at": null,
"completed_at": null,
"carried_from": null,
"waiting_on": null,
"paused_at": null
}
]
}~/.claude/daily-tasks/YYYY-MM-DD.jsonjira_key → {status, started_at, completed_at, waiting_on, paused_at}jira_keystatusstarted_atcompleted_atwaiting_onpaused_atstandbycat ~/.claude/daily-tasks/$(date -v-1d +%Y-%m-%d).json 2>/dev/nulljira_keycarried_fromstandbystandbywaiting_onpaused_at~/.claude/daily-tasks/YYYY-MM-DD.json<!-- task-file: ~/.claude/daily-tasks/YYYY-MM-DD.json -->No pending tasks - check backlog or ask PM for priorities."tasks": []无待处理任务 - 请查看待办库或向PM询问优先级。"tasks": []