mcpField
O
ops-go

ops-go

github.com/davepoon生产力3.7k70 次安装今天更新
代码仓库

关于 ops-go

ops-go 是一个 Claude skill,将基础设施、代码库、PR、CI、消息、日历和项目路线图信息汇总为优先级晨间简报,适合需要集中掌握运营情况并跟进事项的团队。

主要功能

  1. 01按优先级生成晨间简报
  2. 02检查基础设施与 CI 状态
  3. 03汇总未读消息和日历
  4. 04跟踪项目路线图与 PR
  5. 05创建跟进任务和定期简报

适用场景

  1. 01在一天开始时检查运营问题
  2. 02找出待处理的 PR 和 CI 故障
  3. 03根据消息、日历和路线图安排工作

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/davepoon/buildwithclaude --skill ops-go

安装后在 Claude Code 中输入/ops-go确认已加载。

详细介绍

OPS ► 晨间简报

运行时上下文

执行前,加载可用上下文:

  1. 偏好设置:读取 ${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json

    • owner — 用于问候语标题(“早上好,[owner]”)
    • timezone — 所有时间戳均显示为此时区
    • default_channels — 在未读摘要中包含哪些频道
  2. 守护进程健康状况:读取 ${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json

    • 如果 action_needed 不为 null → 在简报前显示该内容
    • 纳入 WhatsApp 未读数之前,检查 wacli-sync 状态
    • 同时检查 ~/.wacli/.health 中的实时身份验证状态
  3. WhatsApp 预检查:只有当 ~/.wacli/.health 显示 status=connected 时,才纳入 WhatsApp 数据。

CLI/API 参考

wacli(WhatsApp)

健康状态文件 — 执行任何 wacli 命令之前,先检查 ~/.wacli/.health:

  • status=connected → 继续
  • status=needs_auth 或 status=needs_reauth → 提示用户扫描 QR 码
命令用法输出
wacli doctor --json检查身份验证/连接/锁/FTS{data: {authenticated, connected, lock_held, fts_enabled}}
wacli chats list --json所有聊天{data: [{JID, Name, Kind, LastMessageTS}]}
gog CLI(Gmail/Calendar)
命令用法输出
gog calendar events primary --today --json今天的日历事件日历事件
gog gmail search -j --results-only --no-input --max 30 "in:inbox"搜索收件箱JSON 数组,包含邮件会话

Agent Teams 支持

如果设置了 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1,并行收集简报数据时使用 Agent Teams。这样可以:

  • Agent 共享上下文,并能在执行过程中协调
  • 你可以实时调整优先级
  • Agent 完成后会报告进度

团队设置(仅在启用标志时):

TeamCreate("go-team")
Agent(team_name="go-team", name="infra-scanner", prompt="Check ECS health, Vercel status, and CI failures across all clusters")
Agent(team_name="go-team", name="inbox-scanner", prompt="Scan unread messages across WhatsApp, Email, Slack, Telegram, Notion")
Agent(team_name="go-team", name="pr-scanner", prompt="Find open PRs needing action — reviews, CI fixes, merge-ready")
Agent(team_name="go-team", name="sprint-scanner", prompt="Check Linear sprint progress and GSD phase state across projects")

如果未设置该标志,则使用标准的即发即弃子 Agent。

预先收集的数据

以下所有数据均由 shell 脚本在 10 秒内收集:

基础设施
${CLAUDE_PLUGIN_ROOT}/bin/ops-infra 2>/dev/null || echo '{"clusters":[],"error":"infra check failed"}'
Git 状态(所有项目)
${CLAUDE_PLUGIN_ROOT}/bin/ops-git 2>/dev/null || echo '[]'
未合并的 PR
${CLAUDE_PLUGIN_ROOT}/bin/ops-prs 2>/dev/null || echo '[]'
CI 失败(过去 24 小时)
${CLAUDE_PLUGIN_ROOT}/bin/ops-ci 2>/dev/null || echo '[]'
未读消息
${CLAUDE_PLUGIN_ROOT}/bin/ops-unread 2>/dev/null || echo '{}'
GSD 状态(活跃路线图)
for d in $(jq -r '.projects[] | select(.gsd == true) | .paths[]' "${CLAUDE_PLUGIN_ROOT}/scripts/registry.json" 2>/dev/null); do
  expanded="${d/#\~/$HOME}"
  if [ -f "$expanded/.planning/STATE.md" ]; then
    alias=$(basename "$expanded")
    phase=$(grep -m1 'current_phase' "$expanded/.planning/STATE.md" 2>/dev/null | head -1 || echo "unknown")
    progress=$(grep -m1 'progress' "$expanded/.planning/STATE.md" 2>/dev/null | head -1 || echo "unknown")
    echo "$alias: $phase | $progress"
  fi
done
外部项目(非仓库)
${CLAUDE_PLUGIN_ROOT}/bin/ops-external 2>/dev/null || echo '[]'
日历(今天)
gog calendar events primary --today --json 2>/dev/null | head -20 || echo "calendar unavailable"

您的任务

分析上述所有预先收集的数据,并将其整理成晨间简报。请遵循运维简报的输出风格。

格式:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 OPS ► MORNING BRIEFING — [DATE]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

FIRES (fix now)
[table of production issues, CI failures, broken deploys]

PRs NEEDING ACTION
[table: repo, PR#, title, status, action needed]

PORTFOLIO DASHBOARD
[table: project, phase, branch, uncommitted, CI, next action]

EXTERNAL PROJECTS
[table: alias, source, status, details — from ops-external data]

MARKETING
 Health: [N]/100 ([Healthy/Warning/Critical])  |  Blended ROAS: [X]x  |  Top channel: [channel]
 Meta: $[X] spent (7d) [X]x ROAS  |  Google: $[X] spent (7d) [X]x ROAS  |  Email: [N] subs
[If health < 70: "⚠ Run /ops:marketing optimize for recommendations"]
[If no marketing configured: "(marketing not configured — /ops:marketing setup)"]

UNREAD
[WhatsApp: N, Email: N, Slack: check MCP, Notion: N items, Calendar: N events today]

TODAY'S PRIORITIES (ranked by revenue impact + urgency)
1. [action] — [project] — [why]
2. ...
3. ...

──────────────────────────────────────────────────────

营销部分的数据源:从预先收集的数据部分中的 ops-marketing-dash 输出读取。如果仪表盘输出中有营销数据,请在行内计算健康评分(参见 ops-marketing SKILL.md 中的健康评分公式)。如果未配置 ops-marketing-dash,或返回的营销数据为空,请显示 (marketing not configured — /ops:marketing setup)。

优先级排序:火情 > 基础设施降级 > CI 失败 > 未读通信 > 可合并的 PR > 可创收的 GSD 工作 > 停滞项目。

如果 $ARGUMENTS 中包含项目别名,则仅针对该项目整理简报。

简报结束后,使用批量 AskUserQuestion 调用(每次最多 4 个选项)显示“接下来做什么?”提示。首次调用显示优先级最高的 3 项操作 + [More...],然后在第二次调用中显示剩余操作 + [/ops-yolo — let me run your business today]。将操作路由到相应的运维技能或项目。

对于 Slack 计数:如果预先收集的数据中 "count": -1,请使用查询 in:channel(而非 is:unread — 扫描完整的近期动态)调用 mcp__claude_ai_Slack__slack_search_public_and_private 获取实际消息计数。分析其他数据时,将此操作作为并行工具调用执行。

对于 Notion 计数:如果 NOTION_MCP_ENABLED=true 且预先收集的数据表明 Notion 可用,请使用 query: "" 调用 mcp__claude_ai_Notion__notion-search,按 last_edited_time 降序排序,以找出近期活跃的页面。然后对排名靠前的结果调用 mcp__claude_ai_Notion__notion-get-comments,查找需要回复的评论。注意:Notion 搜索不支持日期范围筛选,因此请按最近编辑时间排序,并将结果限制在前 10–20 项。


原生工具用法

任务 — 简报操作跟踪

呈现简报后,为每项建议的优先操作创建一个 TaskCreate。用户逐项处理(或通过技能路由委派)时,使用 TaskUpdate 更新任务。这样可在整个会话中保持连贯。

Cron — 定时简报

首次简报后,通过 AskUserQuestion 提供设置定期简报的选项:

  [Schedule daily at 9am]  [Schedule weekday mornings]  [No schedule]

使用 CronCreate 设置计划。使用 CronList 显示现有计划。

WebFetch — 日历信息补充

当 gog calendar 失败时,将 WebFetch 与 Google Calendar API 搭配使用,作为备用方案:

WebFetch(url: "https://www.googleapis.com/calendar/v3/calendars/primary/events?timeMin=<today>T00:00:00Z&timeMax=<today>T23:59:59Z")

评论

支持 Markdown