关于 Wdttg Where Did The Time Go?
wdttg 是面向自由职业者的本地终端时间追踪器,提供 TUI 和 Markdown 存储。其 MCP 服务让 Agent 创建、查询并校验工时记录,包括检测时间重叠。
主要功能
- 01终端时间线界面
- 02按月存储 GFM Markdown
- 03客户、项目与活动层级
- 04检测冲突并生成报告
- 05导出 CSV 和 JSON
适用场景
- 01用自然语言记录工作时段
- 02按客户汇总可计费工时
- 03查找指定时段的空闲时间
MCP 相关
MCP 服务向客户端提供时间条目、客户与项目管理、重叠检查及报告工具。它会验证记录并执行排序和原子文件写入。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
wdttg - 时间都去哪儿了?
一款使用 Rust 构建、面向自由职业者的终端时间追踪工具。没有云服务、没有订阅,也不用排队等待应用商店审核。只有 Markdown 文件、TUI,以及一个 MCP 服务——毕竟人生苦短,没必要填写工时表单。
更多截图
为什么要做这个
我第一次想解决这个问题时,做了 where-did-the-time-go Obsidian 插件。它很好用,但我厌倦了被绑定到特定应用平台上。Obsidian 的插件审核要等很久,而且归根结底,数据格式本来就只是 Markdown 表格。
如今 Markdown 无处不在——每个 IDE 都能读取,每个 AI Agent 都能很好地使用它。因此,我没有继续折腾审核流程,而是把这个概念独立出来:一个用于可视化的轻量 TUI,以及一个 MCP 服务,让 AI Agent 承担繁重的工作。
核心理念非常简单:我在 A 到 B 之间做了 X。给它分类,这样我就能据此生成报告和开具账单。
这不是任务管理器。我的任务存在工单、临时日志条目、看板里——当时觉得合适的地方都行。这个工具只关心你做了什么以及什么时候做的。和客户开会、进行两小时的开发、一次超时的简短通话。记录下来、添加标签,然后继续。
它如何与 AI 配合使用
这里真正发挥作用的是 MCP 服务。我不用再逐个点击表单,只要告诉 Claude 我做了什么:
“今天早上 9 点到 10 点半,我和 Acme 开了一个冲刺规划会”
Claude 会调用 MCP 工具、验证条目、检查时间是否重叠,然后记录下来。如果我说得太含糊,它会询问缺失的信息。
为什么使用 MCP,而不是让 AI 直接编辑 Markdown?
没有 MCP 服务的话,AI 必须将原始 Markdown 读入上下文、解析表格、在脑中比较时间戳以检查是否重叠、正确格式化新行,再把整个文件写回去。这些步骤中的任何一步都可能出错——大模型可能算错时间、弄坏表格格式,或者错误地认为某个时间段空闲。每条记录还会消耗上下文令牌,只为读取并重写文件。
有了 MCP 服务,create_entry 会以程序化方式处理所有这些工作——解析、验证、重叠检测、按时间顺序排序,以及原子化写入文件。AI 只需说“创建这个条目”,就能收到明确的成功结果或结构化错误。无需猜测、不浪费令牌,也不会有损坏文件的风险。
TUI 和 MCP 服务共用相同的数据文件,因此 AI 创建的条目会在约 200 毫秒内显示在时间线上。
功能
- 无限垂直时间线——使用键盘和鼠标,无限向过去或未来滚动
- 支持 AI Agent 集成的 MCP 服务(Claude Code、Cursor 等)
- 使用 GFM Markdown 存储——每月一个文件,便于阅读和编辑
- 客户/项目/活动层级结构,支持计费费率
- 重叠检测和时间吸附
- 生成包含可计费金额的报告
- 监视文件,实现 TUI 与 MCP 之间的实时同步
安装
仅支持 macOS 和 Linux。 暂不支持 Windows。
从 GitHub Releases 安装(推荐)
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/plattnum/wdttg-tui/releases/latest/download/wdttg-tui-installer.sh | sh
从源代码构建
需要 Rust 1.85+(2024 edition)。
git clone https://github.com/plattnum/wdttg-tui.git
cd wdttg-tui
cargo install --path crates/wdttg-tui
开始使用
1. 初始化
wdttg init
交互式设置向导——询问时间格式(12 小时制/24 小时制)、一周的起始日、数据目录以及你的首个客户。每一步都可以按 Enter 接受默认值。
Welcome to wdttg! Let's set things up.
Time format [24h/12h] (24h):
Week start [monday/sunday] (monday):
Data directory (/Users/you/.local/share/wdttg/data):
Set up your first client:
Client name (Personal): Acme Corp
Hourly rate (0): 150
Currency (USD):
✓ Config saved to ~/.config/wdttg/config.toml
✓ Client data saved to ~/.local/share/wdttg/data/clients.toml
2. 启动 TUI
wdttg
3. 设置 AI 集成(可选)
MCP 服务由 AI 客户端自动启动——无需手动运行 wdttg serve。只需添加配置,AI 就能为你创建和查询时间记录。
请参阅下方的 MCP 服务设置。
导出报告
wdttg export --format csv --preset this-month # CSV to stdout
wdttg export --format json --preset last-week # JSON to stdout
wdttg export --format csv --start 2026-03-01 --end 2026-03-31 --client acme > report.csv
也可以在「Reports」选项卡中按 x,将当前视图导出为 CSV 文件到你的数据目录。
重新初始化
wdttg init --force # resets preferences and client data (keeps time entries)
升级
安装新版本后,请重启所有运行 MCP 服务的 AI 客户端(Claude Desktop、Claude Code、Cursor 等)。它们会缓存旧的二进制文件——只有重启 AI 客户端并重新启动 wdttg serve,MCP 服务才会加载更改。
cargo install --path crates/wdttg-tui # or download new release
# Then restart Claude Desktop / reload Claude Code
MCP 服务设置
Claude Code
将以下内容添加到项目的 .mcp.json(全局访问则添加到 ~/.claude/mcp.json):
{
"mcpServers": {
"wdttg": {
"command": "wdttg",
"args": ["serve"]
}
}
}
如果从源代码运行,而不是使用已安装的二进制文件:
{
"mcpServers": {
"wdttg": {
"command": "cargo",
"args": ["run", "-p", "wdttg-tui", "--", "serve"],
"cwd": "/path/to/wdttg-tui"
}
}
}
可用的 MCP 工具
| 工具 | 描述 |
|---|---|
| 时间记录 | |
list_entries | 按日期范围、预设和筛选条件列出时间记录 |
get_entry | 按 ID 或开始/结束时间戳获取单条记录 |
create_entry | 创建新的时间记录,并进行验证和重叠检查 |
update_entry | 更新记录(支持部分更新) |
delete_entry | 按 ID 或时间戳删除记录 |
check_overlaps | 检查拟定的时间范围是否与现有记录冲突 |
available_slots | 查找日期时间范围内的空闲时段 |
| 报告 | |
generate_report | 按客户/项目/活动汇总报告,并显示可计费金额 |
get_status | 今日/本周总计、记录数量和配置摘要 |
| 客户与项目 | |
list_clients | 列出客户及其项目和活动 |
create_client | 添加新客户 |
update_client | 更新客户字段 |
archive_client | 归档/取消归档客户(级联应用于项目和活动) |
create_project | 在客户下添加项目 |
update_project | 更新项目字段 |
archive_project | 归档/取消归档项目 |
create_activity | 在客户下添加活动 |
update_activity | 更新活动字段 |
archive_activity | 归档/取消归档活动 |
使用 MCP Inspector 测试
使用 MCP Inspector 交互式测试和调试服务:
# From source
npx -y @modelcontextprotocol/inspector cargo run -p wdttg-tui -- serve
# Or using the installed binary
npx -y @modelcontextprotocol/inspector wdttg serve
这会打开一个 Web UI(通常为 http://localhost:6274),你可以在其中浏览可用工具、使用自定义输入调用工具并检查结果。
配置
配置分为两个文件:
偏好设置 — ~/.config/wdttg/config.toml
仅限本机的设置。由 wdttg init 创建。
[preferences]
time_format = "24h"
week_start = "monday"
day_start_hour = 6
day_end_hour = 22
snap_minutes = 15
tag_style = "flat" # "flat" | "powerline" | "triangle"
# data_dir = "/custom/path" # optional, overrides default data location
tag_style 控制时间线记录中标签色块的分隔方式。flat 是默认样式,可在任何终端中使用。powerline 使用 Powerline 尖括号字形(U+E0B0)融合色块颜色——终端中需要 Powerline/Nerd Font。triangle 使用 U+25B6,可在任何 Unicode 终端中使用,但融合效果不如前者流畅。在 TUI 中按 T 可在运行时切换样式;所选样式会保存到此文件。
客户端数据 — <data_dir>/clients.toml
客户、项目、活动和计费信息。与时间记录保存在一起,因此整个数据目录都可移植和同步(git、Dropbox 等)。
[bill_from]
name = "Jane Freelancer"
email = "[email protected]"
[[clients]]
id = "acme"
name = "Acme Corp"
color = "#FF6B6B"
rate = 150.0
currency = "USD"
[[clients.projects]]
id = "webapp"
name = "Web App"
color = "#4ECDC4"
[[clients.activities]]
id = "dev"
name = "Development"
color = "#45B7D1"
数据格式
时间记录以 GFM 表格的形式存储在 ~/.local/share/wdttg/data/YYYY-MM.md 中:
# 2026-03
| Start | End | Description | Client | Project | Activity | Notes |
|-------|-----|-------------|--------|---------|----------|-------|
| 2026-03-15 09:00 | 2026-03-15 10:30 | Sprint planning | acme | webapp | meeting | |
| 2026-03-15 11:00 | 2026-03-15 13:00 | API auth refactor | acme | webapp | dev | ticket ACME-412 |
| 2026-03-15 14:00 | 2026-03-15 14:30 | Quick sync with design team | acme | webapp | meeting | |
| 2026-03-15 14:30 | 2026-03-15 17:00 | Frontend dashboard work | acme | webapp | dev | |
开发
cargo build # Build everything
cargo test # Run all tests
cargo test -p wdttg-core # Core library tests
cargo test -p wdttg-mcp # MCP integration tests
cargo run -p wdttg-tui # Run the TUI
cargo clippy --all-targets # Lint
cargo fmt --check # Check formatting
工作区
| Crate | 用途 |
|---|---|
wdttg-core | 库:解析、验证、存储、报告 |
wdttg-tui | 二进制程序:终端 UI(ratatui + crossterm) |
wdttg-mcp | 库:MCP 服务工具实现 |
配套工具:bulletd
wdttg 与 bulletd 搭配使用效果很好——它是一款基于相同原则构建的终端子弹笔记工具:本地优先、纯 Markdown、支持 MCP。两者结合,覆盖日常工作流:bulletd 记录你需要做什么,wdttg 记录花了多长时间。两者都以 MCP 服务的形式运行,因此你的 AI Agent 可以在同一段对话中管理任务日志和时间记录。
Jira、Linear、Asana 等组织级跟踪系统是为计划内的工作打造的,而不是为了应对日常中临时发生的情况。你不会为了“查看 Google Play Console 上的发布状态”或“帮忙调试预发布环境”而创建工单。而且,这些系统的 MCP 集成要么不存在,要么不被允许,要么慢得令人难以忍受。这些工具让你可以在本地记录实际发生的事情,并在需要时再与官方系统核对。
支持
如果你觉得这个工具有用,可以考虑请我喝杯咖啡。
许可证
MIT——随你怎么用。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。