关于 t3-watch
t3-watch 是持续监控 CI、云账户、API 密钥、网址和定时任务的服务,面向希望在出现变化时才介入的团队与个人。它以定时运行的代码执行检查,并可让 Agent 调查故障、编写检查和发送提醒。
主要功能
- 01监控 CI、云账户与 API
- 02按计划运行代码检查
- 03扫描项目并建议检查
- 04故障调查与检查编写
- 05网页查看状态及历史
- 06Slack 与线程提醒
适用场景
- 01发现 CI 工作流失败
- 02监测 API 服务可用性
- 03确认定时任务是否运行
- 04故障变化时通知 Slack 或线程
MCP 相关
提供 MCP 服务,供 MCP 客户端中的 Agent 查询监控状态、调查失败并编写检查。安装命令可将服务配置到 Codex 和 Claude Code。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
t3-watch
为无人值守之事随时待命的 Agent。检查可免费运行;只有发生变化时,你的 Agent 才会唤醒。
Watch 会留意你运行的系统:CI、云账号、API 密钥、URL 和定时任务。它会根据你机器上已有的项目和登录信息完成设置,并按自己的时钟以纯代码运行检查,因此不会消耗模型令牌。
- 页面用于了解情况并做出决策:哪些出了问题、哪些事情在等你处理,以及一键启用、暂停和添加密钥。密钥只在这里粘贴,绝不放进聊天中。Details 可以编辑检查的名称、运行频率和设置,也可以删除检查;删除的检查会保留历史记录,并且可以恢复。
- 聊天用于理解情况和编写检查。在 T3 Code 中的“Watch”对话线程(或任何 MCP 客户端)可以调查故障、编写新检查,并在聊天中内嵌显示页面。
60 秒演示,使用示例数据,通过 npx @lfg-labs/t3-watch demo 录制。点击查看更清晰的 MP4,GitHub 会将其作为下载文件提供。
先试用
npx @lfg-labs/t3-watch demo
使用 Node 24 或更高版本,演示会在这台机器上运行带有示例检查的 Watch,并打印用于打开页面的登录链接。其中的每项检查和警报都会得到预设答复;演示既不会扫描,也不会获取密钥,因此不会访问你的任何账号,也不会向机器外发送任何内容。登录演示不会使你自己的 Watch 登录。按 Ctrl-C 可停止并移除演示。这里的视频和截图均由演示生成。
| 各产品及其检查 | 在 Details 中编辑检查 |
|---|---|
![]() | ![]() |
安装
Watch 需要运行在持续开机的机器上,并使用 Node 24 或更高版本。
npm install -g @lfg-labs/t3-watch
t3-watch install
install 会让 Watch 在登录时于后台运行(Linux 上使用 systemd,macOS 上使用 launchd),将其 MCP 服务添加到 Codex 和 Claude Code,并打印用于打开页面的登录链接。登录链接只能使用一次,且 10 分钟后失效,因此用过后,留在终端、日志或聊天中的链接副本就无法再用。对于其他浏览器,运行 t3-watch url 可生成新链接,也可以向 Watch 对话线程索取页面链接。每个浏览器都有自己的会话,不会获得 Agent 使用的访问令牌;运行 t3-watch signout 会让所有浏览器退出登录,但 Agent 仍可继续工作。
T3 Code 可以为同一个提供商运行多个账号,每个账号都有独立的主目录。t3-watch install --all 还会将 Watch 的 MCP 服务添加到 T3 设置中所有已启用的 Claude Code 和 Codex 主目录,因此任何账号中的 Watch 对话线程都能使用它;t3-watch uninstall --all 则会将其从这些主目录中移除。
如需从检出目录运行,请先克隆此仓库,再运行 pnpm install && pnpm build,然后运行 node bin/t3-watch.js install。
在 Linux 上,运行 loginctl enable-linger $USER 可让它在你注销后继续运行。
如果机器上运行着 Tailscale,install 会通过 tailscale serve 在 tailnet 上使用 HTTPS 提供页面服务,不会使用 funnel,端口为 8461 或下一个空闲端口,登录链接也会指向该地址。该页面只会在你自己的设备上打开,其他地方无法访问。Tailscale 只允许其操作员执行此操作:如果 install 提示需要设置,请运行一次 sudo tailscale set --operator=$USER,然后重新安装。--no-tailscale 会让页面仅在本机提供服务;你在 ~/.t3-watch/config.json 中设置的 publicUrl 会保持不变;uninstall 会停止安装时创建的路由。如果其中的 host 是 tailnet 地址,Watch 也会监听 127.0.0.1,以便 tailscale serve 将流量转发至此。
首次运行
打开页面。页面首先会显示 Watch 可能读取的内容:它会查看的文件夹——~/Projects
以及存在的 ~/code、~/src 和 ~/dev,并显示每个文件夹包含的 Git 仓库数量;还有三种登录信息:GitHub CLI、AWS CLI 配置文件,以及 .env 文件中的供应商密钥。
取消勾选你不想让 Watch 读取的项目,也可以添加文件夹,然后按 扫描这些项目。Watch
只会读取勾选的项目:它会查找你的代码使用了哪些供应商,测试你允许使用的登录信息,并
运行每项建议的检查一次。取消勾选不需要的检查,然后按 监控这些项目。
添加服务会在之后每次扫描前显示相同的选项,Agent 也可以通过
watch_sources 读取这些选项。
Watch 只会读取。它找到的密钥会加密存储在 ~/.t3-watch 中,其值绝不会显示在页面、日志或 Agent 中。
Watch 线程
install 会在 T3 Code 中添加一个名为 Watch 的项目,放在独立文件夹中且不含代码,因此在其中启动的线程不会加载任何仓库的钩子、技能或记忆。在其中启动一个线程,并说“Show
me Watch”。Agent 会调用 watch_home。在 Codex 线程中,页面会内嵌显示,且其中的按钮可以使用;在其他提供商中,你会看到相同状态的文本形式。install --no-project 会跳过该项目,而 uninstall 会保留该项目及其线程。
可以这样询问:
- “哪里出问题了?”或“为什么 api 的 CI 失败了?”
- “暂停 Stripe 检查,直到周一。”
- “确认夜间导入任务已运行。”Agent 会起草一项检查,运行一次,然后留给你启用。
- “也监控 Missive。”Agent 会编写供应商说明,并使用你的密钥进行测试。
- “将 shop.example 归到 Storefront 下。”主页会按产品对检查分组,产品名称根据名称推测;如果网站的仓库名称不同,Agent 会为产品命名,仓库则会随之归类。
- “设置告警。”页面 详情中的告警设置会引导你完成三个步骤。按 生成签名密钥,页面只会显示一次。然后在此处说“设置告警”:Agent 会创建一个绑定到该线程的 T3 webhook 任务,用于验证 Watch 的签名;它会让你将密钥粘贴到一张私密 T3 卡片中,为 Watch 提供任务地址,并发送测试告警。只有持有 Watch 密钥时,该任务才会接受告警。你可以按页面上的 发送测试告警,或在终端运行
t3-watch alerts test,随时再发送一条告警进行检查;t3-watch alerts会说明最近一次告警的结果。密钥绝不会经过聊天传递,Watch 会拒绝通过 MCP 发送的密钥,页面上也只会显示 webhook 的主机名。从此以后,如果某项检查开始失败、恢复正常或无法运行,就会唤醒该线程,Agent 会在你打开线程前调查问题。持续通过的检查不会发送任何内容。如果原本通过的检查连续两次未通过,才会被视为失败;Watch 会在第一次检查后的一分钟内再次运行,因此单次请求丢失不会唤醒任何人。恢复则会立即生效。
Slack 提醒
在 Details 的 Alerts 中,将你自己的 Slack incoming webhook URL 粘贴到密码字段,然后点击 Save Slack webhook。Watch 使用与供应商密钥相同的安装密钥对其加密,不会再次显示该 URL,也绝不会将它交给 Agent。Send Slack test 会检查频道是否接受消息。你可以在那里替换 URL,或点击 Disconnect Slack 停止发送。演示不会使用真实的 Slack URL。
在 Slack 应用中创建 incoming webhook,并选择对应频道。支持 Slack 和 GovSlack。Slack 无需 T3 Code 账户,T3 线程提醒也会继续正常工作。每个目标都有自己的发送队列。新建或替换目标后,只会发送之后发生的变更,不会发送旧事件。
Watch 每次发送一条 Slack 变更通知,发送间隔至少为 1 秒。发送失败时会按服务的分钟计时器重试;遇到 HTTP 429 时会遵循 Slack 的 Retry-After,并在尝试 20 次后停止。Details 会显示最新的测试和发送结果。Slack 通知会报告变更;自动调查仍需要 T3 线程 webhook。
Watch 自身连接断开时
当需要联网的检查未通过时,Watch 会先检查自身是否能连接互联网。如果 https://www.gstatic.com/generate_204 和
https://one.one.one.one/cdn-cgi/trace 都未在 5 秒内响应,Watch 就会暂缓处理该结果:本次运行会在该检查的历史记录中标记为已暂缓,检查保留上次结果,也不会发送提醒。Home 和 Watch 线程的状态会显示 Watch 何时失去连接。本机上的心跳和检查不会暂缓;如果连续运行中检查失败,最多会暂缓一小时,以防被屏蔽的是探测地址。
网络较慢时也会采取同样的处理方式。当 Web 或供应商检查连接公共网站时发生超时、断开或无法完成名称查询,Watch 会测量探测耗时。如果耗时达到或超过 1 秒,或者在 2 分钟内有 2 个或更多网站以这种方式新近发生故障,说明 Watch 自身的网络连接较慢,这类失败会像离线情况一样暂缓处理。连接被拒绝、证书错误、HTTP 响应、GitHub 和 AWS 检查,以及通过地址或 nas、fritz.box 之类的名称访问你自己网络的检查,仍会计入结果。某项检查在暂缓后再次运行时,会等待 45 秒获取响应,而不是 15 秒。Home 和 Watch 线程的状态会显示连接何时变慢;当探测或请求在 400 ms 内得到响应,或者探测不再显示连接较慢时,这段较慢状态就会结束。
如果你的网络屏蔽了这两个地址,请在 ~/.t3-watch/config.json 中将网络允许访问的地址列入 probeUrls,然后重启 Watch。将列表设为空会关闭暂缓处理。Watch 会自动检测地址列表是否被屏蔽:如果检查刚刚成功连接互联网后,这些地址在一小时内连续两次失败,Watch 就会停止暂缓处理,并在 Home 上说明原因,直到其中一个地址响应或 Watch 重启。如果某个 Web 请求刚好比探测等待时间更长,则属于例外情况:此时是网络连接较慢,而不是地址列表被屏蔽。
供应商
每个供应商对应 catalog/ 中的一个 JSON 文件:如何在项目中识别它、哪个变量保存其密钥、如何发送密钥、哪个只读调用可以验证密钥是否有效,以及提供哪些检查。添加供应商只需添加一个文件,无需发布新版本。Watch 只会向描述中指定的 API 源发送 GET 请求。
已支持:Stripe、Pipedrive、Missive、Asana、Airtable、Jotform、Calendly、Vimeo、Sentry、OpenAI、Anthropic、Vercel、Cloudflare、Neon、Supabase、Render、SendGrid、Resend、GitLab.com 和 DigitalOcean。这些新增的描述只能验证 API 访问权限,不能验证部署状态或邮件是否送达。端点、所需权限和限制说明应使用哪个密钥,其中包括 Resend 对完整访问权限的要求,以及 Twilio 和 Linear 目前尚不受支持的原因。系统可以识别 Xero,但目前尚不支持登录类供应商。
无需供应商文件的检查类型:http、github(通过 gh;对于定时工作流,请在 workflow 中指定其名称并添加 maxAgeSeconds,这样 GitHub 跳过或禁用了定时任务时,检查会失败,而不是一直显示正常)、
aws_metric(通过 AWS CLI)和 heartbeat(任务会 ping 一个 URL;失败时添加 ?status=fail)。
对于已有运行记录的仓库,GitHub 的运行记录 API 有时会在一段时间内返回空列表。如果某项 GitHub 检查曾列出其仓库、分支和工作流的运行记录,那么当 GitHub 处于离线状态时,Watch 会像保留失败状态一样保留这个空列表:从 GitHub 返回结果起,最多保留一小时的运行记录,且不会进行探测。如果空列表持续超过该时限,检查会说明情况,例如“GitHub 列出 main 在 owner/repo 中没有运行记录,但此前曾有记录”;如果检查的是任意分支上的某个工作流,则会显示“GitHub 列出 owner/repo 上的 refresh.yml 没有运行记录”。如果列表中没有已完成的运行记录,则仍会显示“No finished runs yet”。编辑其他分支或工作流会重置该检查记忆的状态。
开发
pnpm dev # the service from source, on 127.0.0.1:8460
pnpm test # unit and integration tests
pnpm typecheck
pnpm build # server, page and the inline view
node scripts/record-demo.ts # the README's demo video again, with Chrome and ffmpeg
设计和需求位于 openspec/。
许可证
根据 MIT license 授权,免费且开源。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。


