关于 TaskHub
TaskHub 是 Windows 托盘应用,用于集中查看和控制本机后台任务,也可接收 AI Agent 启动的作业状态。它通过本地 API、MCP 工具和命令行接入任务,并提供进度面板、通知及任务自定义控制。
主要功能
- 01汇总任务进度、日志与图表
- 02提供暂停、恢复和终止等控制
- 03通过 Windows 通知报告状态
- 04支持 Telegram 任务通知与按钮
- 05提供 MCP 工具、CLI 和本地 API
- 06检测任务停滞或进程丢失
适用场景
- 01跟踪长时间运行的构建或备份
- 02查看训练任务进度并调整参数
- 03接收 AI Agent 作业完成或故障通知
- 04从面板控制后台任务
MCP 相关
TaskHub 提供本机 MCP 服务 `taskhub mcp`,并可为 Claude Code 和 Codex 配置工具。Agent 可报告任务状态、更新进度、发送通知,并查询任务或接收控制命令。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
TaskHub
集中查看和控制 Windows PC 上所有后台任务——训练任务、模拟、渲染、构建、备份,以及 AI Agent(Claude、Codex、ChatGPT)为你启动的脚本。
任何进程都可以通过一个轻量的本地 HTTP API 报告进度,并获得托盘图标、Windows 通知和弹出面板,其中包含实时图表、仪表盘和专属按钮(暂停、更改参数、保存快照、终止)。无需云服务或账户,仅限环回连接。
演示数据由脚本录制——一个渲染任务报告进度和图表,在通知和 Telegram 中询问“要上传到 NAS 吗?”,并在手机上点选答案后继续运行。
⬇ 下载最新的 setup.exe · 更新内容 · API 参考 · 隐私 · ❤ 赞助
正在阅读本文的 AI Agent? Claude Code / Codex:请使用 TaskHub 的 MCP 工具(
task_start、notify,……)。如果看不到这些工具,请勿使用curl——请让用户启用 TaskHub tools (MCP)(面板 → ⚙ 设置 → AI Agent),然后启动新会话。详情:API.md → AI Agent(请先阅读)。
为什么选择 TaskHub
- 启动一项需要 6 小时的任务后,你想知道它何时完成、失败或卡住,而不必一直盯着控制台。
- AI Agent 为你启动长时间运行的脚本;TaskHub 为它们提供一种有文档说明的方式来报告状态并接收你的指令(“降低学习率”“这个周期结束后停止”)。
- 多项任务并行运行时,你想一眼掌握它们的情况。
功能
- **托盘图标**带有进度环和活跃任务数量;颜色表示运行中/停滞/失败/已完成。
- **面板**(点击托盘图标):显示每个任务的进度、预计完成时间、状态、日志和组件 — 折线图/面积图/柱状图、仪表盘、带变化值的统计数据、LED 指示灯、键值列表、表格和文本。
- **任务自行声明控件**:按钮、数字/文本/选择输入框、确认操作、Shell 命令、打开文件/文件夹、优雅停止、暂停/恢复、强制终止。输入值通过长轮询返回进程。
- **任务链接**会在浏览器中打开;从 2.9 开始,文件/文件夹链接会在资源管理器中显示(绝不会运行),其地址会显示在链接提示中;Shell 命令会将输入值作为纯文本传递(不会从 `&`、`|` 等符号中执行额外命令)。
- **Windows 通知**:默认在任务完成/失败/停滞时通知;可按需发送开始、里程碑(纯文本)和日志通知;如果任务提出请求,通知中会显示任务的按钮和输入字段;提供实时进度通知;面板打开时保持安静。
- **一键使用 Claude Code 和 Codex**:为 Agent 提供 TaskHub 工具(MCP),并发送“已完成/需要你的许可”通知(钩子)——见[下文](#claude-code-and-codex-one-click)。
- **计划限额** *(从 3.1 开始,默认关闭)*:在面板中查看 Claude Code 和 Codex 对 5 小时限额和每周限额的使用情况;使用量达到 75% 和 90% 时发出警告——见[下文](#claude-code-and-codex-one-click)。
- **Telegram**:通过你自己的机器人在手机上接收相同的通知,并显示任务按钮;每个任务都有实时进度条,完成后显示图表;支持 `/tasks`、`/mute`(可设置为仅在你离开电脑时生效)——见 [Telegram](#telegram)。
- **GitHub Actions** *(从 2.9 开始)*:将仓库的工作流运行显示为任务 — 根据以往运行的常规时长估算进度和预计完成时间(没有历史运行时则按作业/步骤显示),显示失败步骤及其日志末尾,提供取消/重新运行按钮,以及制品和发布链接——见 [GitHub Actions](#github-actions)。
- **Runpod** *(从 2.9 开始)*:将 GPU Pod 显示为任务 — GPU、区域、镜像、$/h、已花费金额、运行时间、SSH 和 Jupyter 链接、负载图表;带有停止按钮的 *GPU 空闲*警告;余额和可用时长,以及余额不足警告;停止/启动/重启(只能在面板中删除,且需先输入 Pod 名称)——见 [Runpod](#runpod)。
- **Vast.ai** *(从 2.9 开始)*:将实例显示为任务 — 功能与 Runpod 相同(GPU、位置、镜像、$/h、已花费金额、运行时间、SSH、包含磁盘信息的负载图表、*GPU 空闲*、余额/额度和可用时长、停止/启动/重启;只能在面板中删除)——见 [Vast.ai](#vastai)。
- **AWS** *(从 3.1 开始;默认关闭;依据 AWS 文档构建,尚未在真实账户上验证)*:将 EC2 实例显示为任务,并提供 *遗忘提醒*;SageMaker 训练作业、AWS Batch 作业、本月费用和预测,以及 AWS Budgets,各自都有独立的开关。只读。[AWS](#aws)。
- **余额保护** *(从 2.9 开始,默认关闭)*:适用于 Runpod 和 Vast.ai — 达到你设定的余额阈值时发出警告(余额、$/h、剩余时间);达到停止阈值时,在发送包含 *立即停止*/*稍后提醒*选项的通知(Windows 和 Telegram)后,**停止**正在运行的机器(绝不删除)——见 [余额保护](#balance-guard)。
- **停滞检测**(心跳超时);进程退出时标记为 *丢失*。
- **便于 Agent 使用**:MCP 服务(`taskhub mcp`)、位于 PATH 中的原生 `taskhub` CLI、仅依赖 Python 标准库的客户端,以及供其他一切使用的纯 HTTP;`taskhub api` 会打印 Agent 所需的文档。
- **更新检查**:发布新版本时发送通知(每天一次;可在“设置”→“系统”中切换,并选择 *立即检查*;点击 *立即检查* 后会直接显示结果,即使你已安装最新版本也一样)。
- **类似 Windows 通知中心的面板**:停靠在屏幕右侧并占据全高,可滑入和滑出(关闭 Windows 动画时会立即切换);拖动左边缘调整宽度;可固定面板使其保持打开状态(*从 2.9.7 开始*,固定的面板会保持在屏幕边缘:最大化窗口会为其留出空间;如果在 ⚙ 中启用,其他窗口也会如此);带模糊效果的半透明背景和卡片(在 ⚙ 中设置 *面板透明度*;从 2.9 开始可设置 *卡片透明度*);明暗主题和强调色跟随 Windows(也可在 ⚙ 中设置)。*从 2.9.4 开始*,设置中会提示 Windows 何时未启用模糊效果(已开启节能模式,或在 Windows 设置中关闭了 *透明效果*),并提供指向该设置的链接。
- **设置** *(从 2.9 开始可在面板中访问;从 3.1 开始设置位于面板旁并以图标标签页显示)*:点击面板中的 ⚙(或托盘菜单中的 *设置*)即可在面板旁打开设置,每个区块都有一个图标标签页 — 外观、通知、Telegram、连接器、AI Agent、系统(开机自启、更新、数据文件夹、API 参考)、关于;Windows 11 风格的托盘菜单只保留快捷操作(打开面板、静音、设置、支持、退出)。面板固定时,只能通过设置自身的按钮将其关闭。
使用电池供电时(从 3.1 开始),面板和设置会立即显示和隐藏,不使用滑动动画。
- 支持 10 种 UI 语言(English、Українська、Español、Deutsch、Français、Italiano、Português、Polski、中文、日本語)。
- 按用户安装,无需管理员权限,也无需 .NET 运行时;开机自启可自动修复。
## 快速开始
1. 运行 `TaskHub--setup.exe` → **Install**(选择文件夹、是否开机自启、PATH 和 Claude Code / Codex 选项)。
从 2.9 版本开始,安装窗口会保持打开,显示进度,完成后显示 *Open TaskHub*;卸载方式相同
(可选择 *Also delete my data*)。
2. 报告一项任务:
taskhub notify "Render" "finished in 42 min"
taskhub run --name "Build" -- cmake --build build -j 16 # wraps any command, parses % from its output
taskhub run --name "Shot 12" -- blender -b shot12.blend -s 1 -e 240 -a # 2.9.2: frame, samples, overall %, s/frame
从 2.9.2 版本开始: taskhub run 可自动识别 Blender 的后台渲染输出(无需在 Blender 中安装插件):当前帧及其采样数、已知帧范围时的整体进度(通过 -s/-e 或 -f 指定)、每帧耗时图表、最后保存的文件以及渲染内存。即使渲染失败,Blender 也会以 0 退出,因此其中的 Error: 行会将任务标记为失败(taskhub run 以 1 退出;Blender 退出时打印的内存泄漏提示不算)。视频输出(FFmpeg)和保存为单独文件的立体视图会按帧计数(2.9.3)。在此帧后停止(面板 / 通知)会在当前帧保存并开始下一帧后结束 Blender;这样停止或发生崩溃后,任务会告知从何处继续,taskhub run 会打印相同命令,并将 -s 设为下一帧。--preset none 可关闭此功能。
from taskhub_client import Task, W, C # stdlib only; installed next to taskhub.exe
with Task("Train", total=100, unit="epochs", source="codex",
widgets=[W.chart("loss", "Loss", series=["train", "val"]), W.gauge("vram", "VRAM", max=24, unit="GB")],
controls=[C.signal("lr", "Set LR", input=C.number(default=1e-3))], pausable=True) as t:
t.on("lr", lambda v: set_lr(v))
for e in range(100):
t.wait_if_paused()
if t.stop_requested: break
t.progress(e + 1, status=f"epoch {e+1}", widgets={"loss": {"train": tl, "val": vl}, "vram": mem})
curl -s -X POST localhost:47800/api/notify -H "X-TaskHub: 1" -d '{"title":"Done","message":"backup ok"}'
使用 AI Agent——Claude Code 和 Codex:启用 TaskHub tools (MCP)(见下一节),无需其他操作。对于其他 Agent(ChatGPT、脚本或任何带有 shell 的工具),在 AGENTS.md / 自定义指令中添加一行:
对于任何超过一分钟的任务,请将其报告给 TaskHub(
taskhub api会打印文档;使用taskhub run --name ... -- <cmd>包装命令)。
Claude Code 和 Codex:一键设置
设置对话框(以及之后的“设置” → AI Agent)中,每个 Agent 都有独立选项。从 3.1 版本起,如果你的电脑上正在使用某个 Agent,且你尚未选择,面板就会显示一张卡片,直到你作出选择;同时会显示一条通知,并且在你点击 连接 之前不会写入任何内容:
| 选项 | 你将获得什么 | TaskHub 写入位置 |
|---|---|---|
| 通知(钩子) | Agent 完成回复或需要你授权时显示一条 toast 通知 | Claude Code:~/.claude/settings.json · Codex:~/.codex/hooks.json |
| 计划限额(从 3.1 版本起,默认关闭;需在“设置” → AI Agent 中为每个 Agent 开启) | 面板中显示 5 小时限额和每周限额的使用量;达到 75% 时变为黄色并显示警告,达到 90% 时变为红色并显示警告 | Claude Code:~/.claude/settings.json(statusLine)· Codex:不写入任何内容,TaskHub 会直接向它查询 |
| TaskHub 工具(MCP) | Agent 可使用 notify、task_start/update/finish、task_commands、task_wait(从 2.9.2 版本起)、task_list 工具,并会自动在面板中显示其长时间运行的任务 | Claude Code:~/.claude.json · Codex:~/.codex/config.toml |
TaskHub 只会添加自己的条目,卸载时也只会移除自己的条目(商店版:见下文),并保留其他所有内容(原始文件备份为:
*.taskhub.bak)。之后在 Agent 中需要执行的操作:
- Claude Code — 开始新的本地会话(桌面应用 → Code 选项卡 → 环境选择 Local,也可使用 CLI 或 VS Code)。
/mcp应显示taskhub已连接。云端会话运行在 Anthropic 的服务器上,无法访问你电脑上的 TaskHub。 - 计划限额 — 需要 Pro、Max 或 Ultra 计划;数字会在 Claude Code 的下一条回复后显示,并且只会在会话运行期间更新,因此旧读数会标明其时间。
你自己的状态栏会照常工作。如果你没有设置状态栏,Claude Code 会显示一个空状态栏,并隐藏
esc to interrupt等提示。详情请见:API.md。 - Codex 的计划限额 — Codex 运行期间,TaskHub 每 10 分钟向 Codex 查询一次数字,不会发起模型请求。此功能依赖 Codex 开发者称为实验性的部分,因此 Codex 更新可能会使其失效:届时数字只会变旧,其他功能仍可正常使用。如果没有可显示的数字,面板会说明原因(未在
PATH中找到、未登录或无法读取)。详情请见:API.md。 - Codex — 重启 Codex。钩子:Codex → Settings → Hooks → Trust all(Codex 会询问一次是否信任新钩子)。
MCP:
taskhub服务应出现在 Codex 的 MCP 服务列表中。
脚本设置:TaskHubHost.exe --integrations claude=on codex=on claude-mcp=on codex-mcp=off。手动设置:
API.md → Claude Code 钩子、Codex 钩子、MCP 服务。
Telegram
设置 → Telegram:使用 @BotFather(/newbot)创建机器人,粘贴其令牌,点击
Connect,用手机扫描二维码(或在此电脑上打开链接),然后点击 Start(需与机器人进行私聊:
无法关联群组,因为每位成员都能点击任务按钮)。所有设置都可直接在设置页面完成
(从 2.9.4 开始;此前在独立窗口中完成)。若要稍后关联另一个账户(例如手机上的账户),点击
New link;Disconnect 会从此电脑移除机器人令牌。之后,TaskHub 显示的每条通知也会发送到该聊天中(只有该聊天能与机器人对话);任务通知按钮会变成内联按钮——包括
选项和是/否;对于数字/文本输入:机器人会询问数值,你的回复会发送到任务——点击按钮后
会返回任务。有进度的任务会发送一条静默消息,其中包含进度条、预计剩余时间、状态和任务
按钮,并在原消息中更新(每次更新都不会发送新消息);任务完成后,图表会以一张图片的形式发送
(选项 Progress and charts,telegram_progress)。命令:/tasks、/mute、/unmute。选项:仅在你离开电脑时发送(5 分钟内没有键盘/鼠标操作,config.json 中的 telegram_away_minutes)。机器人令牌
保存在 Windows Credential Manager 中(2.9;此前保存在 config.json 中;如果 Credential Manager 不可用,则仍保存在
config.json 中,并会在设置中显示警告);消息会从你的电脑直接发送到 Telegram 的 Bot API。
从 2.9 开始,TaskHub 会遵循 Telegram 的发送节奏(大约每秒一条消息;遇到 Too many
requests 后,则按 Telegram 要求等待),而不是丢弃消息;长文本也会缩短,确保始终能够送达。
GitHub Actions
从 2.9 版本开始;默认关闭,需手动开启。 设置 → Connectors → GitHub Actions(从 2.9.6 开始,所有操作都可在设置页面完成):列出存储库(owner/repo)并授权访问——可以使用你自己的
细粒度令牌,将权限限制在这些存储库(Actions:读取和
写入,Contents:只读,Metadata:只读;保存在 Windows Credential Manager 中,绝不会写入 config.json),也可以使用
Git Credential Manager 已保存的令牌(权限较广:可访问你的所有存储库)。你的工作流保持不变。每次运行都会成为一个
任务,包含存储库、工作流、分支/标签、提交和操作者;失败时始终会发送通知(Windows 和 Telegram),成功时
则可按需通知。TaskHub 只与 api.github.com 通信;可选的日志尾部内容通过 GitHub 提供的
一次性链接从其日志存储中获取,不会使用令牌。令牌到期前一周会收到通知。等待
审批的运行(例如来自 fork 的运行)会显示 Waiting for approval on GitHub,并在获批后继续跟进;重命名后的存储库会继续跟进并报告(repository moved to …);达到 GitHub 的速率限制时会暂停轮询(2.9)。详情:
API.md → Connectors。
*从 2.9.4 版本开始:*拉取请求,仅只读(同一窗口中的两个开关,默认都关闭):等待你审核的拉取请求(令牌可查看的任何存储库;细粒度令牌只能查看自己的存储库和公开存储库),以及所列存储库中尚未关闭的 Dependabot 拉取请求(令牌还需要 Pull requests:
只读 权限)。每项都会成为一个任务,包含链接,并在出现时发送通知;当其不再出现在列表中时,任务会静默结束(Merged、Closed without merging、No longer
waiting for your review)。不会合并、批准或评论任何内容。
如何获取令牌:docs/keys/github.md(逐步说明、最低权限、撤销方式;українською)。
Runpod
从版本 2.9 开始;默认关闭,需手动开启。 Settings → Connectors → Runpod:粘贴从 Runpod 控制台获取的 API 密钥(Settings → API Keys;密钥保存在 Windows Credential Manager 中,不会存入 config.json;关闭连接器会保留密钥,点击 Remove 则会删除)。只读密钥就足以查看:TaskHub 会检查一次(之后每天检查一次)该密钥是否可执行操作,只有可以执行操作时才显示 Stop / Start / Restart / Delete 按钮。每个 Pod 都是一个任务(rp-<pod id>):运行或启动时为活动状态,停止时状态为已完成的 stopped,删除时状态为已完成的 terminated;还会显示 GPU(类型 × 数量)、区域、镜像、每小时价格、迄今花费(≈,来自 Runpod 的账单)、运行时间、SSH 命令,以及通过 Runpod 代理访问其 HTTP 端口的 https 链接(Jupyter 使用 8888 端口);GPU / VRAM 和 CPU / RAM 图表则来自 TaskHub 自行进行的轮询(每 30 秒一次)。当 Pod 的所有 GPU 连续 30 分钟低于 5 %(idle_minutes、idle_util)时,TaskHub 会发出 GPU idle 警告——在 Windows 和 Telegram 中均会显示,并附带 Stop 按钮。Settings 和 Pod 页面会显示余额和可用时长(余额 ÷ 当前每小时花费);低于 12 小时(low_runway_hours,或低于 low_balance $)时,TaskHub 会发出一次警告——余额降至 $0 时,Runpod 会停止 Pod,并终止没有网络卷的 Pod。停止、启动和重启操作都需要确认(也可以通过通知和 Telegram 停止和重启);删除只能在面板中进行,且必须输入 Pod 名称(绝不会通过 HTTP API 删除)。TaskHub 只与 api.runpod.io 通信:使用 REST v2 管理 Pod 和账单,并使用 GraphQL 查询余额(graphql_balance 默认开启;关闭后将跳过余额查询)。详情:API.md → Connectors。
如何获取密钥: docs/keys/runpod.md(分步说明、最低权限、撤销方法;українською)。
Vast.ai
从版本 2.9 开始;默认关闭,需手动开启。 Settings → Connectors → Vast.ai:粘贴从 Vast.ai 控制台获取的 API 密钥(其 API keys 页面;拥有 instance_read、user_read 和 billing_read 权限的密钥就足以查看,执行操作则需要 instance_write 权限)。密钥保存在 Windows Credential Manager 中,不会存入 config.json;关闭连接器会保留密钥,点击 Remove 则会删除。与 Runpod 一样,TaskHub 会检查一次(之后每天检查一次)该密钥是否可执行操作,只有可以执行操作时才显示 Stop / Start / Reboot / Delete 按钮。每个实例都是一个任务(va-<id>,以其标签命名):运行或启动时为活动状态,停止时状态为已完成的 stopped,销毁时状态为已完成的 terminated;还会显示 GPU(类型 × 数量)、位置、镜像、每小时价格、迄今花费(≈,来自 Vast.ai 过去 30 天的费用)、运行时间、SSH 命令、Vast.ai 控制台链接,以及 GPU / VRAM 和 CPU / RAM / 磁盘图表;图表数据来自 TaskHub 自行进行的轮询(Vast.ai 经常不报告负载,此时图表会保持空白)。GPU idle 和低余额警告的工作方式与 Runpod 相同。Vast.ai 会报告 balance 和 credit;TaskHub 会显示两者,并在计算可用时长时将 credit 计入余额——余额降至 $0 时,Vast.ai 会停止实例(已停止的实例仍需支付存储费用);如果没有付款方式,这些实例会被安排删除。若 GPU 已被主机另行出租,启动操作可能会处于 Scheduling 状态等待;TaskHub 会说明这一情况。TaskHub 只与 console.vast.ai 通信。详情:API.md → Connectors。
如何获取密钥: docs/keys/vastai.md(分步说明、最低权限、撤销方法;українською)。
AWS
从 3.1 版开始提供;默认关闭,需手动启用。基于 AWS 文档构建,并通过模拟器测试,尚未在真实账户中测试。 Settings → Connectors → AWS:粘贴具有只读策略的专用 IAM 用户的访问密钥 (获取方法)。TaskHub 不会在你的账户中启动、停止或更改任何内容。 EC2 实例会变成任务,并显示其状态和已运行时长:可涵盖账户中已启用的所有 Region,也可仅涵盖你列出的 Region。运行时间超过你所设上限的实例(默认为 72 小时,设为 0 即关闭)会收到 忘记了? 提醒,并附带一个按钮,供你确认哪些实例本就应该运行。 以下每项功能都有独立开关和权限:SageMaker 训练任务(阶段和时长;SageMaker 不会报告常规训练的百分比,因此 TaskHub 不会显示)、AWS Batch 任务(数组任务的实际进度)、本月费用和预测(来自 Cost Explorer;AWS 每次请求收费 $0.01,TaskHub 每 8 小时最多发起 2 次请求,每月约 $1.80,重启不会再次收费)以及 AWS Budgets(预算超出上限时发送一条通知)。 详情:API.md → Connectors。 如何获取密钥: docs/keys/aws.md(分步说明、最低权限、撤销方法;українською)。
余额保护
从 2.9 版本开始;默认关闭,需手动开启。“设置” → 连接器 → Runpod / Vast.ai → 余额过低时自动停止。 每个提供商都有两个以 $ 为单位的阈值:警告(默认 $10)和停止(默认 $2;警告阈值必须高于停止阈值)。
- 达到警告阈值时,TaskHub 会警告一次(Windows 通知;如果已连接 Telegram,也会通过 Telegram 通知):余额、当前每小时支出,以及距离达到停止阈值还有多久。余额回升后才会再次警告。
- 达到停止阈值时,TaskHub 会通知你即将停止正在运行的机器,并提供立即停止和延后 N 分钟按钮(显示在通知、Telegram 和面板的余额保护卡片中)。如果没有回复,等待回复的时间用完后就会停止机器(默认 10 分钟;但绝不会晚于按当前支出速度余额将降至 $0 的时刻;延后时间也受同样限制,并会显示截止时间)。充值使余额高于停止阈值后,待执行的停止操作将取消。
- **只停止机器——TaskHub 绝不会删除、终止或销毁机器。**同一设置中标记为永不自动停止的机器不会被停止。每次停止都会确认结果(Runpod:EXITED;Vast.ai:不再运行);无法停止的机器会报告为失败,绝不会报告为已停止。
- 如果无法读取余额(无网络、服务中断、密钥已撤销),TaskHub 会警告一次;到达截止时间时,不会停止任何机器(“自动停止已暂缓,请手动检查”),直到能够再次读取余额。只读密钥只能用于警告——设置中会注明。对于提供商不会在余额降至 $0 时停止机器的账户也是如此(Runpod 后付费账户;Vast.ai 中绑定了会自动扣款的银行卡的账户):余额保护仅会发出警告。
- 立即停止会先请求确认。停止失败的机器会在下次读取余额时重试。TaskHub 重启后,待执行的停止操作仍会保留。启用余额保护后,原有的余额过低警告仍会生效(不会在余额保护阈值处重复警告)。
- 从 2.9.3 版本开始:GPU 空闲时自动停止——同一设置中的GPU 空闲时停止,分钟数(0 = 关闭,默认值),即使余额保护关闭也可使用。机器运行期间,如果其所有 GPU 持续空闲达到设定时长,就会收到同样的停止通知,并可选择立即停止 / 延后;GPU 再次繁忙时,待执行的停止操作会取消;到达截止时间时,只有 GPU 仍处于空闲状态才会停止(必须有近期读数,且空闲时间至少达到当前设置;负载未知时不会停止)。标记为永不自动停止的机器不会被停止;如果余额保护和 GPU 空闲停止同时触发,则由余额保护停止操作优先。
- 停止后,TaskHub 会说明停止了什么,以及停止期间的存储费用——约数,以提供商价目表为准:Runpod——容器磁盘会被清除且不收费,卷磁盘在停止期间每月收费 $0.20 / GB,网络卷仍按每月 $0.07 / GB 收费(从 2.9.1 版本开始,其容量会从 Runpod 读取;Runpod 定价,存储类型);Vast.ai——实例存储价格 × 磁盘容量(因主机而异;Vast.ai 定价)。设置中会显示预测(“按当前支出速度,余额将在……达到停止阈值”)和最近的停止记录;每次停止的记录(时间、机器、原因、当前累计支出、结果、存储费用约数)都会保存在数据文件夹中的
guard_log.json内(GET /api/guard/log)。 - Runpod 会分批记账:余额不会持续变化,而是每隔几分钟扣减一次(测试中约每 10 分钟一次),因此可能会比达到停止阈值晚最多约 10 分钟;请留出一定余量来设置阈值(设置中会提示)。 详情:API.md → 余额保护。
安装详情
安装对话框默认安装到 %LOCALAPPDATA%\Programs\TaskHub(也可以选择其他文件夹),解压
taskhub CLI、taskhub_client.py 和 API.md,注册 taskhub:// 和一个 应用和功能 条目,并且(从 2.9 起)
将 TaskHub 添加到开始菜单。覆盖现有安装时,安装程序会显示已安装的版本和文件夹(版本从已安装的 exe 读取),并提供
更新、重新安装(相同版本)或安装较旧版本的选项,同时保留文件夹、自动启动和 PATH 设置。也可以选择 运行但不安装。
- 静默安装:
TaskHub-<version>-setup.exe --install [--dir PATH] [--no-autostart] [--no-path] [--claude|--no-claude] [--codex|--no-codex] [--claude-mcp|--no-claude-mcp] [--codex-mcp|--no-codex-mcp] --quiet(未指定的 Agent 选项保持不变) - 卸载:应用和功能 → TaskHub,或
TaskHubHost.exe --uninstall [--quiet] [--purge](--purge还会删除%APPDATA%\TaskHub中的数据,以及从 2.9 起,TaskHub 保存在 Windows 凭据管理器中的 Telegram 令牌和 GitHub、Runpod、Vast.ai 及 AWS 密钥;普通卸载会保留这些内容,以便重新安装)。还会删除 TaskHub 在 Claude Code / Codex 设置中的条目。 - 如果自动启动条目被删除或更改,自动启动会自行恢复,除非你在“设置” → 系统 中将其关闭。 从 2.9 起,在“任务管理器”/“设置” → 应用 → 启动 中将其关闭也会生效(此时 TaskHub 的开关会显示为关闭); 2.9 之前则会重新开启。
- 安装和卸载前,都会先请求正在运行的 TaskHub 退出(它会保存任务);只有当它在几秒钟内未退出时,才会将其结束 (2.9 起;此前会立即结束,包括结束它打开的所有内容)。
- 系统要求:Windows 10 1809+ / 11 x64(Microsoft Store 版:从 2.9 起要求 Windows 10 2004+)、WebView2 运行时(当前 Windows 已预装)。 从 2.9 起,如果缺少运行时,TaskHub 会提示这一点(并提供 Microsoft 的下载链接);如果 WebView2 崩溃,面板会自动恢复。如果 Windows 已关闭 TaskHub 的通知功能,“设置” → 通知 会显示警告,并提供打开 Windows 设置的按钮。
- 端口 47800,仅限
127.0.0.1,采用 CSRF 标头 + Host/Origin 检查;可选 bearer 令牌(config.json中的"token")。
更新:已安装的 hub 每天会在 GitHub 上查询最新版本(向 api.github.com 发送一次请求,不会下载或安装任何内容;从 2.9.5 起,打开设置页面时,如果上次检查距今超过 15 分钟,也会进行检查),并在有更新版本时显示通知;“设置” → 系统 中提供 立即检查 和 每日检查 开关(config.json 中的 "update_check": false)。运行新的 setup.exe 即可更新。
如果出现问题,数据文件夹中的 taskhub.log 会记录发生的情况。从 3.1 起,在 config.json 中设置 "log_level": "debug" 可记录更多信息,包括通知文本和任务名称;不会向任何地方发送内容,因此分享前请先检查日志。
通知显示时长:在 config.json 中设置 toast_seconds / toast_seconds_interactive(4 秒 / 8 秒);之后通知会留在通知中心。通知集中出现时(2.9 起):每分钟最多显示 toast_rate 条通知(10;0 = 不限),每个任务每隔 toast_task_gap 秒最多显示一条(2);其余通知会合并到最新的一条中(“+N 条更多通知”),弹出通知和 Telegram 通知均适用。
从源代码构建
build.cmd(需要 .NET 10 SDK)→ dist\TaskHub-<version>-setup.exe(单个独立文件;先构建 CLI 并将其嵌入),以及用于开发的 app\;build.cmd beta 使用相同版本,但会显示完整日志,绝不会用于发布。源代码:src\Host(Kestrel HTTP API、WinForms 托盘、WebView2 面板、WinRT 通知;连接器位于 src\Host\Connectors\<Name>\,请参阅其中的 README)、src\Cli、ui\(面板页面:index.html + CSS / JS 部件,由中心组合在一起)、i18n\(翻译,10 种语言)、clients\python。
Microsoft Store 版:运行 build.cmd 后,执行 packaging\build-msix.ps1 → dist\TaskHub-<version>.msix(未签名;由 Store 签名;-Name / -Publisher / -PublisherDisplay 的值来自 Partner Center)。代码相同:在安装包中,TaskHub 不会自行安装或检查更新;自动启动、taskhub:// 和 taskhub 命令由 packaging\AppxManifest.xml 提供。-Register 会将构建文件夹注册为安装包以供测试(开发人员模式)。
同一时间只能使用一个版本:Store 版会提示移除通过安装程序 exe 安装的版本(或者选择“Keep both”时,关闭自身的自动启动),安装程序 exe 则会提示替换 Store 版。两者使用相同的数据文件夹和 Agent 连接;安装包会写入实际的 %APPDATA% 和 HKCU(unvirtualizedResources)。
Windows 在卸载安装包时不会运行任何内容,因此 Store 版会将 Agent 指向 %LOCALAPPDATA%\TaskHub\bin 中的 taskhub.exe 副本(store.json 中记录了安装包名称):安装包卸载后,如果 Agent 启动该副本,它会从 Agent 的设置中移除 TaskHub 的条目(该副本会保留;安装程序 exe 版则会在启动时将其移除)。
测试:tests\run_tests.cmd 会启动一个隔离的中心(端口 47899、临时数据、无托盘、无通知),并运行 api_test.py(API 契约、Agent 钩子、CLI)、validation_test.py(输入验证:非有限数值、小组件属性、控件值、Shell 控件)、parallel_test.py(8 个并发工作线程 + 通知突发)、integration_test.py(Claude Code / Codex 设置编辑,在临时主目录中)、install_test.py(在临时文件夹中安装 / 卸载)、mcp_test.py(taskhub mcp)、telegram_test.py(通过模拟 Bot API 测试 Telegram 桥接)、github_test.py、runpod_test.py、vastai_test.py 和 guard_test.py(针对模拟 API 测试连接器和余额保护)、aws_sigv4_test.py 和 aws_test.py(使用 AWS 测试套件测试 AWS 签名器,使用模拟器测试连接器)、limits_test.py 和 codex_limits_test.py(计划限额)、payload_bounds_test.py(本地进程可提交的内容)、hooks_offer_test.py 和 hook_form_test.py(Agent 钩子)、log_test.py(日志级别、屏蔽、轮换)。
每次推送都会在 GitHub Actions(.github/workflows/ci.yml,Windows 运行器)上运行构建和这些测试;推送与 Settings.Version、build.cmd 和两个 .csproj 中的版本一致的 v<version> 标签,也会发布包含安装程序 exe 及其 SHA-256 的版本。
tests\demo_long.py 是一个针对主中心运行、约 20 分钟的交互式演示。tools\demo\record.py 会在隔离的中心上录制本页顶部的演示(MP4、GIF 和供 Store 使用的 1920×1080 静帧),使用模拟数据和模拟 Telegram 机器人:在运行 build.cmd 后执行 python tools\demo\record.py(需要 Microsoft Edge 和 ffmpeg)。
可以在不进行任何更改的情况下检查安装和卸载窗口:设置 TASKHUB_SETUP_DRYRUN=1,然后运行安装程序 exe(或 --uninstall)——只会显示每个步骤。
中心命令行:TaskHubHost.exe [--port N] [--data DIR] [--install|--uninstall [--quiet] [--purge] | --status | --panel [ID] | --integrations [claude|codex|claude-mcp|codex-mcp|claude-limits|codex-limits=on|off ...] | --no-tray]。exe 同目录下的 TaskHubHost.settings.json({"port": 47801, "data": "..."})会运行一个独立的第二实例。
支持
TaskHub 免费使用。如果它为你节省了时间,赞助有助于维护项目, 也能告诉我接下来哪些想法值得实现。Bug 报告和功能请求: Issues。
许可证
PolyForm Shield 1.0.0 — 源码可用:可出于任何目的免费使用、修改和分享,包括在工作中使用,但不得提供与 TaskHub 竞争的产品(例如重新打包或转售)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。