ops-inbox
GitHub自动化处理多源通讯收件箱,并行读取并验证上下文,生成回复草稿并经审批后发送,实现收件箱清零。
Trigger Scenarios
Install
npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-inbox -g -y
SKILL.md
Frontmatter
{
"name": "ops-inbox",
"effort": "high",
"maxTurns": 60,
"description": "OPS on-demand: This skill should be used when the user asks to \"check inbox\", \"inbox zero\"…",
"allowed-tools": [
"Bash",
"Read",
"Grep",
"Glob",
"Skill",
"Agent",
"AskUserQuestion",
"TeamCreate",
"SendMessage",
"TaskCreate",
"TaskUpdate",
"TaskList",
"CronList",
"mcp__gog__gmail_search",
"mcp__gog__gmail_read_thread",
"mcp__gog__gmail_labels",
"mcp__claude_ai_Slack__slack_search_public_and_private",
"mcp__claude_ai_Slack__slack_read_channel",
"mcp__claude_ai_Slack__slack_list_channels",
"mcp__claude_ai_Slack__channels_list",
"mcp__claude_ai_Notion__notion-search",
"mcp__claude_ai_Notion__notion-fetch",
"mcp__claude_ai_Notion__notion-query-data-sources",
"mcp__claude_ai_Notion__notion-get-comments",
"mcp__claude_ai_Notion__notion-create-comment",
"mcp__claude_ai_Notion__notion-update-page",
"mcp__claude_ai_Notion__notion-create-pages",
"mcp__whatsapp__list_chats",
"mcp__whatsapp__list_messages",
"mcp__whatsapp__search_contacts",
"mcp__whatsapp__get_chat",
"mcp__whatsapp__get_message_context",
"mcp__whatsapp__archive_chat",
"mcp__whatsapp__resync_app_state",
"mcp__plugin_imessage_imessage__chat_messages"
],
"argument-hint": "[channel: whatsapp|imessage|email|slack|telegram|discord|notion|all]"
}
OPS ► INBOX
Load ops-rules before acting. Public repo: no personal data. Run in the parent
session: readers return evidence; the parent owns draft presentation and sends.
AUTO-START DRAFTING: validate per reply
Always report to the main agent by default. Never set context: fork for this
skill: the parent owns the visible queue. Do not wait for "continue drafting".
The invocation starts the selected channels (default: all configured channels).
No continuation menu, channel picker, or second "start drafting" prompt.
- Check existing ownership and reusable evidence before launching readers. Enumerate accounts/workspaces once; record each source's actual read status.
- Use an existing fresh report or the authorized read-only scan path. The bundled
scanner is a candidate pre-filter, not proof that a request is unanswered.
Do not run a second overlapping whole-inbox sweep. See
references/runtime.md. - Run independent read-only source/thread readers in parallel, within the executing machine's concurrency limit. Keep the quickest useful candidate in the parent; do not leave the parent waiting for an aggregate report.
- Validate full person/topic context per candidate, including sent history
on every configured account. See
references/details.md. A KEEP row alone is not a ready draft. Missing load-bearing context stays unknown. - Surface the first validated draft immediately. Do not wait for unrelated sources or the rest of the inbox. Recheck its live thread before showing it. Every later ready candidate joins the parent's queue as evidence arrives.
- One draft → one explicit approval → one send. Use the installed approved outbound gate; email, WhatsApp and Slack go only through the host's approved outbound gate. Populate its real session/thread/recipient metadata on the first call. Go is not approval. No self-created approval proof or alternate send route.
- After sent=false, show the gate-returned full draft and end that presentation turn. Only the next native user event can advance its decision and the next draft. A transport hold may retain separately approved records for later gate-only drain; never show another draft in the same wait turn. Different threads/intents stay separate; unsupported queue states are not ready.
- In the interactive authorized phase, complete answered/resolved items by verifying then archiving Gmail and every owned WhatsApp JID on its account. No extra menu for the expressly authorized completed set; protect open tasks, labels and unknown media. Mark-read is separate. Cron scans remain read-only.
Readers never send, archive, mark-read, modify integrations, or ask the owner
questions. They send evidence packets to the parent as soon as ready; an idle
worker without a report is not completion. See references/fan-out.md.
Coverage is not unread state
- Email: every mailbox, including sent history, All Mail and discovered action/follow-up labels. Inbox, read/unread, archived, categories and drafts are not evidence that an ask was handled.
- WhatsApp: every connected WhatsApp account, labelled separately. Connected but agent-disabled accounts stay explicit not-checked gaps; do not enable or access them. Derive coverage from complete discovery, not a fixed count. Prove phone/JID/LID identity before merging aliases; reconcile incoming and outgoing across authorized accounts. A generic MCP name does not prove coverage.
- Slack: every Slack workspace, scoped human DMs/group DMs (
im,mpim), allowedpublic_channelandprivate_channelhistory, mentions and replies. Read-state is not the filter; inspect thread replies, not just channel tails. - Other configured sources: allowlisted iMessage/SMS, user-auth Telegram, scoped Discord, Notion comments/tasks, contact memory and open commitments.
- Dates/availability: every configured calendar plus the show/travel source of truth for the candidate's relevant dates. Never infer timezone from a number.
Paginate and disclose the lookback and retention limits. Record not checked, partial, failed, or not configured explicitly; unknown is never a clean zero. Older known open asks stay in the queue even outside the scan window.
What the owner sees
One compact context block: who, the two-sentence thread arc, the actual latest ask, why this answer helps, and any source gap. Then the gate shows the exact recipient/account/thread, reply-all recipients, subject, full body and attachments. The gate's latest delivered full-draft proof binds approval to those bytes.
After a native, proven yes to that shown draft, send when the gate permits without a second approval menu. A typed yes followed by a refused/cancelled physical gate is not approval. On failure keep the intent and exact diagnostic owned. Continue independent read-only research, but advance another presentation only after the next native user event. Never claim "sent" from a preview or pending-proof record.
Finish honestly
Recheck source changes since each reader's cutoff before claiming complete. Account for queued, shown, approved, sent, skipped, unresolved and unknown items. Inbox zero is always the goal: all configured sources have completed dispositions, no unhandled obligations, and authorized resolved items are verified archived. Unknown coverage, pending proof or archive failure means NOT zero, regardless of unread count. A real approval wait is not completion; preserve the queue for the next user event. Status heartbeats follow the host's cadence, contain actual results, and stop at a final result or real wait.
References (load only the relevant one)
references/details.md— per-candidate context, preflight, approval and verificationreferences/runtime.md— ownership, account discovery, freshness and source gapsreferences/fan-out.md— progressive read-only workers and evidence packetreferences/cli.md— supported read paths and authorized archive verificationvip,relations— priority, verified contact identity and open commitments
Version History
-
6ac2237
Current 2026-10-18 17:53
整合本地维护、发布安全及收件箱修复;强化发布合同、合并审查缺口及渐进式上下文证明契约。
-
1b44d97
2026-09-27 12:06
将插件通用化,移除操作员名称、个人配置及客户端默认值,修复测试夹具主题,防止敏感信息泄露。
-
057e72d
2026-09-22 01:17
修复了在父会话中自动启动草稿起草的问题,移除了导致父会话空闲的fork机制;默认启用30秒心跳以维持会话连接。
-
7ea9622
2026-09-08 19:37
修复因归档标志不随新消息更新导致的漏报问题;引入每聊天水印机制,确保仅重新打开有新回复的已归档对话,提高扫描准确性。
-
9d2d383
2026-09-02 21:48
修正多账号场景下的服务器名称解析规则,明确区分普通账号与 CoS 别名;修复日程确认前需查询所有日历和邮箱的逻辑缺陷;新增关系管理与 VIP 技能配置支持。
-
6f1e3e0
2026-08-27 09:31
优化专家发现上下文加载性能,修复文件系统竞态条件及索引缺失时的错误处理,恢复市场发布标识并修正路由配置。
-
5751870
2026-08-19 11:48
优化运行流程:首次遍历即收集上下文,按紧急度生成草稿卡片;新增[代我处理]选项以委派子代理工作;修复WhatsApp多账号路由问题。
-
206d40d
2026-08-16 15:49
整合出站发送网关为共享守卫,解决多账户匹配及脚本绕过问题,增加计数审批支持。
- 64bad13 2026-08-12 09:00


