Skip to content

About

一键搭建本机任务看板 + 邮件双向桥(WorkBuddy / Windows)· 不搬运上游源码,按固定 tag 拉取 · One-command Taskboard + IMAP/SMTP mail bridge for WorkBuddy on Windows

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

Repository files navigation

workbuddy-taskboard-starter

One-command setup for a local-first task board (kanban + CLI) inside WorkBuddy on Windows, with optional phone access over Tailscale and an optional two-way email bridge that lets you tick off tasks by replying to an email.

给你的 WorkBuddy 装一套本地任务面板:看板 + 命令行 + 开机自启,可选手机访问与「回邮件即完成任务」。

本仓库不包含看板本体的源码。安装时它会从上游按固定版本拉取 chuspeeism/dashi-taskboard(Apache-2.0), 再叠加上一套可配置的 Windows 外壳脚本、自检工具与邮件桥。详见 NOTICE。


30 秒看懂

手机浏览器 ──(Tailscale HTTPS)──┐
本机浏览器 ─────────────────────┼──> 127.0.0.1:47823 (Node) ──> SQLite
taskctl CLI / 邮件桥 ───────────┘

三条设计要点:

要点 说明
local-first 数据全在本机 SQLite,无账号、无云端、无遥测
只绑回环 服务只监听 127.0.0.1,从不绑 0.0.0.0;要给手机看就走 Tailscale 反代
零 pip 依赖 所有 Python 脚本只用标准库,不需要 pip install 任何东西

前置要求

项 要求 备注
系统 Windows 10 / 11 只支持 Windows(自启依赖注册表 Run 键、外壳用 .cmd)。macOS / Linux 会明确拒绝安装
Node.js ≥ 22.5 用于跑看板服务与构建前端
Python 3.10+ 用于安装器、自检与启动器
Tailscale 可选 只有想用手机访问才需要
QQ 邮箱 可选 只有想用邮件桥才需要(要一个 16 位授权码)

安装

方式 A:让 WorkBuddy 自己装(推荐)

  1. 把本仓库地址贴给 WorkBuddy,说一句:

    把这个 starter 装到本机

  2. WorkBuddy 会先把本仓库作为 skill 装进 ~/.workbuddy/skills/workbuddy-taskboard-starter/, 然后读取其中的 SKILL.md,按里面的步骤调用自带的安装器。
  3. 安装完成后按提示双击 start-taskboard.cmd 即可看到界面。

方式 B:手动跑安装器

python workbuddy-taskboard-starter\references\setup\install.py

先 git clone 本仓库,或把仓库作为 skill 装好后到 %USERPROFILE%\.workbuddy\skills\workbuddy-taskboard-starter\references\setup\ 下执行。

常用参数:

参数 默认 说明
--ref v1.1.22 上游版本(tag / 分支 / commit sha)
--prefix %USERPROFILE%\.workbuddy 安装根目录。改它即可把整套东西装到隔离位置
--port 47823 服务端口
--origin 自动探测 Tailscale 的 HTTPS origin(形如 https://<机器名>.<tailnet>.ts.net)。留空则不启用远程访问。裸域名也能给,会自动补 https://
--mail-bridge 关 一并安装邮件桥
--no-autostart — 不写开机自启项
--no-smoke — 跳过「起一次服务验证配置」这一步
--dry-run — 只打印计划,不落盘

安装器是幂等的:重复执行只会修复缺失文件,不会覆盖你手改过的 start-taskboard.cmd,也从不删除数据目录。

装完会当场起一次服务(阶段 3b),把 /health 打通再关掉。这一步是为了让「配置写错导致根本起不来」 在安装当场就暴露,而不是等你下次登录才发现 502。它失败时安装器不会写自启项,退出码 13。 冒烟日志在 <prefix>\tmp\smoke.log,与 logs\autostart.log 严格分开 —— 后者是判断 「登录触发器是否执行过」的证据,不能被污染。

安装器退出码

码 含义
0 成功
2 参数不对(含 --origin 格式非法)
3 非 Windows
4 没找到 node
5 node 版本低于 22.5
6 / 7 下载 / 解包上游失败
8 / 9 npm ci / 构建前端失败
10 自检报出配置或文件问题(安装器写出来的不一致状态)
11 写自启项失败
12 端口已被占用(安装器不会去杀那个进程)
13 服务起不来 —— 见上面阶段 3b 的冒烟

安装后都落在哪

内容 路径
看板本体(上游代码) ~\.workbuddy\apps\dashi-taskboard\
数据(SQLite) ~\.workbuddy\taskboard-data\
CLI skill ~\.workbuddy\skills\manage-taskboard\
邮件桥(可选) ~\.workbuddy\apps\mail-bridge\
自启项 注册表 HKCU\...\CurrentVersion\Run 的值 Taskboard

日常使用

📖 完整使用说明(建议先读):workbuddy-taskboard-starter/references/usage-guide.md —— 讲的是怎么用它提高科研效率:优点与边界、任务粒度、每日节奏、邮件指令、 以及怎么让 agent 替你管任务。

三个入口,按需选:

想干什么 去哪儿
直接看(推荐) 🌐 在线版:https://picture-one.github.io/workbuddy-taskboard-starter/
存一份 / 打印 PDF / 离线看 📄 单文件 HTML:https://picture-one.github.io/workbuddy-taskboard-starter/usage-guide.html
在 GitHub 上读、引用行号 📝 Markdown 源:usage-guide.md

⚠️ 别指望 GitHub 渲染 .html —— 这是平台固定策略,不是链接坏了: blob 页只显示源码,raw 链接恒返回 text/plain + nosniff,浏览器永远不会把它当网页。 所以单文件 HTML 的入口指向 Pages(上面的第二个链接),不要用仓库内 blob 链接去打开它。

下面只是命令层面的速查。

看板目录(~\.workbuddy\apps\dashi-taskboard\)下四个命令:

命令 作用
start-taskboard.cmd 启动服务(前台,Ctrl+C 停止)。它同时是配置的单一真源
status-taskboard.cmd 查看服务是否在线
stop-taskboard.cmd 停止服务
selfcheck-taskboard.cmd 一键自检(只读,十多项检查)——出问题先跑它

自检退出码怎么读

码 含义 该怎么办
0 通过 一切正常
1 执行过,但服务不健康 看自检报出的失败项
2 本次登录未执行自启 首次安装后属正常(需登录一次),否则查自启项
3 无法判定 时间戳对不上,自检会说明原因
10 配置或文件有问题 看自检报出的失败项

可选:让手机也能打开

用 Tailscale 组一个私有网络,不暴露公网。三个后台开关缺一不可(Serve、MagicDNS、HTTPS Certificates),配置与实测坑位见 references/remote-access.md。

tailscale serve --bg --https=443 http://127.0.0.1:47823

⚠️ 关键:服务端的来源校验只信任本机与私有网段,不含 *.ts.net,所以必须把 https://<机器名>.<tailnet>.ts.net 显式加进白名单,否则手机拿到 403。 注意:这个值必须同时写进 start-taskboard.cmd 与 mail-bridge\common.py,逐字符一致。 自检会自动比对这一项。


可选:回邮件完成任务

配好之后,每天定时给你发一封当日清单邮件,你在邮件里回复「把 1、2 项标记为已完成」, 下次轮询就会把结果写回看板。

需要:一个 QQ 邮箱 + 16 位授权码。完整配置、指令语法与踩坑见 references/mail-bridge.md。

提醒:授权码等同于邮箱密码,只填在本机的 config.json 里。本仓库的 .gitignore 已把 config.json 排除,只提交 config.example.json。


常见问题

症状 先查
打不开页面 / 502 服务没起来。跑 status-taskboard.cmd,再跑 selfcheck-taskboard.cmd
手机 403,本机正常 白名单漂移 —— start-taskboard.cmd 与 mail-bridge\common.py 的 origin 不一致
开机后没自动起 跑 selfcheck-taskboard.cmd,看结论与退出码;自启项是否被系统禁用
端口被占 换个端口:start-taskboard.cmd 里的 CODEX_TASKBOARD_PORT
其它 references/troubleshooting.md

卸载

  1. 删掉自启项:
    reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v Taskboard /f
  2. 删掉这些目录(想保留任务数据就别删第二个):
    %USERPROFILE%\.workbuddy\apps\dashi-taskboard
    %USERPROFILE%\.workbuddy\taskboard-data
    %USERPROFILE%\.workbuddy\apps\mail-bridge
    %USERPROFILE%\.workbuddy\skills\workbuddy-taskboard-starter
    %USERPROFILE%\.workbuddy\skills\manage-taskboard
    

不涉及系统服务、不写 Program Files、不改系统 PATH。


仓库结构

workbuddy-taskboard-starter/
├── README.md                 ← 你正在看的
├── LICENSE                   ← MIT(仅覆盖本仓库自有代码)
├── NOTICE                    ← 上游致谢与「不重分发」声明
├── .github/
│   ├── workflows/
│   │   ├── check-docs.yml    ← 文档体检(每次推送 / PR 都跑)
│   │   └── pages.yml         ← 把使用说明发到 Pages(**部署前先体检**)
│   └── scripts/
│       ├── check-docs.py     ← 文档体检器:判据与白名单都在这一个文件里
│       ├── check-setup.py    ← 安装器体检器:模板渲染 / 快照回归 / 语法 / 脱敏
│       └── build-usage-guide.py ← 从 .md 构建单文件 .html(自动注入溯源指纹)
└── workbuddy-taskboard-starter/
    ├── SKILL.md              ← WorkBuddy 读取的入口
    └── references/
        ├── usage-guide.md    ← ★ 使用说明的**源**(手写;改内容改这里)
        ├── usage-guide.html  ← ★ 构建产物(**别手改**;改完 .md 必须重建)
        ├── setup/            ← 安装器(install.py / render.py / scan-secrets.py + 模板)
        ├── remote-access.md  ← 手机 / 外网访问
        ├── autostart.md      ← 开机自启与判定方法
        ├── mail-bridge.md    ← 邮件双向桥
        ├── local-layout.md   ← 路径 / 端口 / 命令总表
        └── troubleshooting.md

改文档的规矩(重要)

使用说明有两个形态:手写的 usage-guide.md(源)

  • 构建出的 usage-guide.html(产物,也提交进仓库)。 产物入库是为了能发布到 Pages,代价是会出现漂移:改了 .md 忘了重建,线上就是旧内容 —— 而且不会报任何错。所以规矩是固定的两条:
pip install markdown
python .github\scripts\build-usage-guide.py     :: 1. 改完 .md 就重建 HTML
python .github\scripts\check-docs.py            :: 2. 体检,退出码 0 才提交
硬约束 为什么(这条是踩过坑的)
跨文档引用必须写成真链接 [显示名](相对路径) 用反引号包住文件名(形如把 某文档.md 包进反引号)在 GitHub 上点了没反应,而且不产生 404、不报错、CI 也不红 —— 视觉上和真链接几乎没差别,只能靠人反馈或扫描发现
改完 usage-guide.md 必须重建 usage-guide.html 生成的 HTML 里内嵌了源文件的 sha256。对不上,体检的「构建溯源」项就会失败
生成的 HTML 里不许出现外部资源 装 skill 的机器常是断网的,外链必断。CSS / 图一律内联

check-docs.py 一共查六项:伪链接 / 断链 / 大小写 / 锚点 / 构建溯源 / 自包含。 其中「大小写」只在 CI 上才抓得准 —— Windows 本地不区分大小写、GitHub 跑在 Linux 上区分, 所以「本地全对、线上全 404」是常态。

改安装器(references/setup/)的规矩

安装器也是「模板 → 产物」的关系,而且是别人装到机器上的东西,改错了代价更大:

python .github\scripts\check-setup.py                  :: 改完先体检,退出码 0 才提交
python .github\scripts\check-setup.py --update-snapshots  :: 模板确实改了:刷 expected/ 基线

expected/*.rendered.txt 是 24 份渲染基线。改了模板或 render.py 却没刷基线,体检会报「有漂移」 —— 因为陌生人装出来的东西,就不再是这份被测过的版本了。

硬约束 为什么
模板占位符只能用 {{UPPER_SNAKE}} 且必须是已知键 render() 的正则只认大写蛇形;写成 {{ port }} 会原样留在产物里,服务起不来
空的 origin 配置必须仍有 set 语句 少一行 set 会让变量继承父进程 —— 真机上会变成 403 或静默失效
.cmd 模板必须纯 ASCII 中文注释在非中文代码页下是乱码,批处理会直接跑飞
模板改了必须刷快照 否则基线失效,回归检测形同虚设(等于关掉了这道关)

check-setup.py 一共九组判据,含模板占位符键白名单与快照孤儿(删了模板忘删基线)。

三道关都在 CI 上

.github/workflows/check-docs.yml 每次推送与 PR 都跑两个体检器(文档 + 安装器); pages.yml 在部署前再跑一遍文档体检 —— 坏文档上不了线。

文档直达:SKILL.md · usage-guide.md · usage-guide.html 在线阅读 · remote-access.md · autostart.md · mail-bridge.md · local-layout.md · troubleshooting.md

上面目录树里的文件名是纯文本(代码块内不能放链接),要跳转请用这一行。


Credits & License

  • 看板本体:chuspeeism/dashi-taskboard(Apache-2.0), 安装时下载、不打包分发,详见 NOTICE。
  • 本仓库自有代码(外壳脚本、自检、邮件桥、skill):MIT,见 LICENSE。

与上游作者无隶属或背书关系。

About

一键搭建本机任务看板 + 邮件双向桥(WorkBuddy / Windows)· 不搬运上游源码,按固定 tag 拉取 · One-command Taskboard + IMAP/SMTP mail bridge for WorkBuddy on Windows

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages