Skip to content

Latest commit

 

History

32 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TaskToAgent · 本地任务看板

简体中文 | English

零依赖 零构建 数据不出本机 Node License: MIT

人和 agent 写在同一块本地看板上:任务分七列流转,谁认领、做到哪一步、卡在哪里,一眼看清。

界面截图


它是什么

一个本地优先的任务看板,用 t2a 命令行快速增删改查,配合网页看板可视化操作,两端读写同一份 SQLite 数据库。零外部依赖,不联网、不登录,数据全在你自己机器上。设计目标是让 AI agent 也能用同一套机制接任务:认领、续租、写日志、交付产出,全部有结构化的接口。

特性

  • 零外部依赖 —— 只用 Node 内置模块,无需 npm install 即可启动,构建产物已随仓库提交。
  • 本地存储 —— 数据落在本地 SQLite 文件(默认 ~/.t2a/t2a.db),不联网、不依赖任何云服务。
  • 中英双语界面 —— 设置菜单里一键切换,偏好记在浏览器本地;首次打开按浏览器语言自动选择。
  • 双端互通 —— 命令行与网页看板读写同一份数据库,任一边改动,另一边立即可见。
  • 七列看板 —— 灵感区 → 待办 → 进行中 → 阻塞 → 待验收 → 已完成 → 存档,面板内可直接添加、拖动。
  • 原子认领 —— task next 用单条 UPDATE ... WHERE 完成认领,多个 agent 同时抢也不会拿到同一条任务。
  • 租约心跳 —— 认领默认带 30 分钟租约,长任务定期 heartbeat 续租;到期自动回收回待办并留下系统日志。
  • 依赖编排 —— 支持任务依赖 DAG(等 A 完成才能做 B),加边时自动检测环,ready 只列出可开工任务。
  • 结构化输出 —— 所有命令支持 --json,统一返回 {"ok":true,"data":...};语义化退出码让 agent 不解析文本即可分支。
  • MCP server —— t2a mcp 以 stdio JSON-RPC 暴露 22 个工具,支持 MCP 的 agent 可直接调用,不用拼命令。
  • 审计与备份 —— 所有写操作记入 events 审计流水,t2a db backup 做自包含快照。

快速开始

环境要求

存储用 Node 内置的 node:sqlite,要求 Node.js >= 22.13(22.12 实测报 ERR_UNKNOWN_BUILTIN_MODULE)。跑不起来先自检:

node bin/t2a doctor

本地使用

# 网页看板(默认 http://127.0.0.1:3979)
npm run web

# 命令行
node bin/t2a help

界面说明

顶栏右侧一排图标,从左到右依次是搜索、新建任务、设置。设置菜单把偏好收在一处:

位置 选项 作用
设置菜单 主题 浅色 / 深色,跟随系统偏好
设置菜单 界面语言 简体中文 / English,切换后整页立即重绘
设置菜单 任务列表展现形式 竖版看板(状态列并排,适合宽屏)/ 横版分组(整行可点,手机更顺手)
设置菜单 数据同步 显示最近一次同步时间,说明刷新策略
侧栏 看板列表 点名称切换看板,箭头就地展开该看板的任务
任务卡片 整卡 展开任务详情:产出、执行日志、认领人与租约

界面语言的选择存在浏览器本地(t2a-lang),只影响这一台设备;命令行输出仍是中文。

命令行速查

看板与任务

命令 说明
t2a project list 列出所有看板(含任务数)
t2a project add <名称> [--desc <描述>] 新建看板
t2a task add <标题> --project <名称> [--content] [--status] [--priority] 加一条任务
t2a task add --project <名称> --batch 从 stdin 批量加多条(agent 最常用)
t2a task list [--project] [--status] 列出任务
t2a task search <关键词> 模糊搜索(编号 / 标题 / 内容 / 项目名,多关键词按 AND)
t2a task update <id> [--title] [--content] [--status] 修改
t2a task remove <id> --yes 删除(--yes 必填,无 TTY 时不阻塞)
t2a report [--project P] [--out <文件>] 把任务 + 日志 + 产出导成 Markdown

agent 联动

命令 说明
t2a task next [--project P] [--lease 30m] 取下一个可开工任务并原子认领
t2a task start <id> 「开始做这条」= 认领 + 置为进行中
t2a task claim <id> [--agent A] 认领指定任务;被他人持有返回 CONFLICT(退出码 3)
t2a task heartbeat <id> [--lease 30m] 续租;未认领时等价于 claim
t2a task release <id> 放弃任务,回到待办
t2a task done <id> --result "产出" 标记完成并留存产出
t2a task fail <id> --error "原因" [--max 3] 失败计数;未达上限回待办重试,超限转 blocked
t2a task dep add <id> --on <依赖id> 设置依赖(自动防环)
t2a task ready [--project P] 列出可开工任务(只观察,不认领)

审计与维护

命令 说明
t2a doctor 环境自检:Node 版本 / 数据库 / 网页服务 / 前端产物
t2a events [--kind] [--task] [--actor] [--limit 50] 审计流水(新的在前)
t2a db backup [--out <目录>] 数据库快照
t2a agent [--json] 打印内置上手指南(--json 出机读版)
t2a mcp 以 MCP server 模式运行(stdio JSON-RPC)

状态与退出码

看板七个列对应一个 status 值:

status 看板列 含义
idea 灵感区 还没想清楚,先记下来
todo 待办 排上了,未开始
doing 进行中 有人认领正在做
blocked 阻塞 卡住,等人工或外部条件
review 待验收 做完了,等人确认
done 已完成 验收通过
archive 存档 收起来,不在视野里

退出码是给 agent 用的,不必解析文本即可分支:

退出码 含义 建议动作
0 成功 继续
1 业务错误 读 error.code 决定
2 暂无任务 正常结束本轮
3 认领冲突 换一条任务
4 用法错误 修正命令
5 缺少 --yes 补上确认标志

常见 code:NO_TASK CONFLICT DEP_NOT_READY NOT_FOUND USAGE CONFIRM_REQUIRED INVALID_DEP EXISTS。

环境变量

变量 作用 默认
T2A_DB 指定数据库文件路径 ~/.t2a/t2a.db
T2A_PROJECT 默认看板(省去 --project) 无 / 首个项目
T2A_AGENT 默认 agent 身份 agent
T2A_PORT 网页服务端口 3979
T2A_HOST 网页服务监听地址 127.0.0.1(仅本机)

TASKCLI_* 是历史名称(项目原名 taskcli),仍被识别但优先级低于 T2A_*,老脚本无需修改。

agent 接入

支持 MCP 的客户端直接配 server,不用拼 shell:

node bin/t2a mcp --print-config

协议 2024-11-05,stdio JSON-RPC,暴露 22 个工具:project_list/add、task_list/show/search/add/update、task_next/claim/heartbeat/release/done/fail、task_log/logs、task_deps/dep_add/dep_rm、task_ready、task_assign、task_report、events。完整约定见 AGENT.md。

不支持 MCP 也可以用 CLI,一次标准循环:

export T2A_AGENT=codebuddy
t2a task next --json            # 取任务(自动认领 + 置为进行中)
t2a task log 12 "定位到问题在 src/db.js:88"
t2a task heartbeat 12 --lease 30m
t2a task done 12 --result "已修复并补测试"

agent 身份由服务端配置决定,不采信 agent 自报的名字;填错了会自动纠正:

t2a config set agent workbuddy
t2a config alias codebuddy workbuddy

数据与隐私

数据只存在本机,不上传任何地方,页面也没有第三方统计。存储位置与作用:

位置 内容 说明
~/.t2a/t2a.db 看板、任务、日志、审计事件 默认位置,可用 T2A_DB 改
~/.t2a/config.json 默认 agent 身份与别名 权限 600

.db 文件已列入 .gitignore,不会被误提交。给每个 agent 单独开一个库即可隔离:T2A_DB=/path/to/agent.db t2a task list。

网页服务默认只监听 127.0.0.1。确需局域网访问时用 T2A_HOST=0.0.0.0 npm run web,注意没有任何鉴权,仅在可信网络里这么做。

目录结构

TaskToAgent/
├── bin/t2a            # CLI 入口(可执行)
├── src/
│   ├── brand.js       # 品牌与路径解析(T2A_* 优先、TASKCLI_* 兼容)
│   ├── config.js      # 默认 agent 身份 + 错误名自动纠正
│   ├── db.js          # 建表 + 认领/租约/依赖等协作原语(node:sqlite)
│   ├── report.js      # 任务与项目报告、产物汇总
│   ├── agent-guide.js # 内置 agent 上手指南
│   ├── sqlite-guard.js# Node 版本前置检查(给友好报错而非模块堆栈)
│   ├── cli.js         # CLI 全部命令逻辑
│   └── mcp.js         # MCP server(stdio JSON-RPC,零依赖)
├── AGENT.md           # agent 接入约定(MCP 配置 / 标准循环 / 规矩)
├── web/
│   ├── server.js      # 零依赖 http 服务:REST API + 托管前端
│   ├── dist/          # 前端构建产物(已提交,开箱即用)
│   └── ui/            # 前端源码(Vite + React + Arco Design)
│       └── src/i18n.jsx  # 中英双语文案字典与语言切换
├── docs/              # README 配图
└── package.json

开发说明

改后端直接改 src/ 下对应文件,无需构建。改前端需要重新构建并提交产物:

cd web/ui && npm install && npm run build

前端产物落在 web/dist,已提交到仓库,所以别人 clone 下来直接 npm run web 就能用,不必装前端依赖。

浏览器支持

网页看板是构建后的现代浏览器应用,需要支持 fetch 与 CSS Grid 的版本(Chrome / Edge / Firefox / Safari 近两年版本均可)。命令行与 MCP 不依赖浏览器。界面是响应式布局,窄屏下七列可横向滚动。

许可

MIT © 2026 isnotry

About

Local-first task board: a dispatch hub shared by humans and AI agents. CLI, web UI and MCP over one SQLite file, zero external dependencies.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages