1. 项目概述一个为AI时代开发者量身定制的智能工单追踪器如果你和我一样日常开发工作已经离不开Cursor、Claude这类AI编程助手甚至开始尝试协调多个AI智能体并行处理任务那你肯定体会过一种割裂感我们的编码效率因为AI的介入而指数级提升但项目管理的方式却还停留在“前AI时代”。在Jira或Linear里手动创建工单、填写描述、估算工时、更新状态、记录时间……这些繁琐的操作在AI几分钟就能生成一个功能模块的背景下显得格外笨重和低效。更关键的是当你的“团队”里既有你自己又有多个AI助手在同时工作时传统的工具根本无法回答一个核心问题“这个功能到底花了‘我们’多少时间其中有多少是我的决策和调试又有多少是AI的执行”这就是YAITrackerYour Automated Intelligence Tracker要解决的根本问题。它不是一个简单的、支持API的Jira替代品而是一个从设计之初就将AI智能体视为“一等公民”的、自托管的工单追踪与分析平台。它的核心在于通过深度集成模型上下文协议Model Context Protocol, MCP让你的AI助手能够像团队成员一样直接与项目管理工具交互自动创建工单、启动/停止计时器、更新状态、添加总结。而你作为人类的“指挥官”则可以清晰地看到整体产出、时间构成人工 vs. 代理并获得基于历史数据的预测与分析从而真正理解并优化你在AI加持下的工作流。简单来说YAITracker试图成为连接“人类智慧”与“AI执行力”之间的那个缺失的项目管理桥梁。它适合那些已经深度使用AI编码工具的个人开发者、小型技术团队或者任何希望量化并提升其与AI协作效率的人。目前它虽处于Alpha阶段但架构清晰单二进制文件部署使用SQLite开箱即用非常适合作为个人生产力实验场。2. 核心设计理念为什么传统项目管理在AI时代失灵了要理解YAITracker的价值我们得先拆解传统项目管理工具的三个基本假设以及AI如何颠覆了它们。2.1 被颠覆的假设一工单创建与维护是“人工成本”在过去创建一个描述清晰、优先级明确、估算合理的工单需要开发者或产品经理投入相当的时间与思考。更新状态、添加评论、记录工时更是持续的“管理开销”。因此工具的设计倾向于减少这些操作的频率和复杂度比如提供批量操作、模板等。但在AI工作流中这个假设不成立了。当你在Cursor的聊天窗口里对Claude说“帮我在‘用户认证模块’项目里创建一个高优先级的‘Bug’类型工单内容是‘登录API在收到畸形JSON时返回500错误’并估算2小时。”——这个指令的发出成本几乎为零。AI助手完全有能力也应该自动执行这一系列操作。YAITracker内置的MCP服务器正是为此而生它将项目管理的能力暴露为一套标准的工具Tools和资源Resources让AI助手能无缝调用从而将“管理开销”降至近乎为零同时保证了工单信息的及时性和丰富性。2.2 被颠覆的假设二工时估算与追踪基于“人类开发者”的匀速输出传统敏捷估算如故事点基于一个相对稳定的人类开发者生产力模型。一个“5故事点”的任务其完成时间在一个团队内是可预期的。时间追踪则用于验证估算、计算投入产出比。然而当AI智能体介入后生产力变得非线性且高度可变。同一个开发者使用不同的提示词Prompt、调用不同的模型如Claude-3.5-Sonnet vs. GPT-4o、或者是否采用了有效的“智能体编排”策略其单位时间内的产出可能相差数倍。单纯记录“人工耗时”变得没有意义因为你不知道这段时间里是你在苦苦调试还是AI在高效生成。YAITracker的“人/代理时间双轨追踪”机制要求或允许你为AI助手的工作单独计时。这样你最终看到的不是“我花了4小时”而是“我决策和调试了1.5小时AI执行了2.5小时”。这种颗粒度的数据是理解你与AI协作模式、优化工作流程的黄金指标。2.3 被颠覆的假设三项目进度与健康度主要依赖“人工报告”与“会议同步”看板Kanban和燃尽图Burndown Chart是同步团队状态的经典可视化手段但它们的数据依赖于人工更新。在快节奏的AI开发中这种滞后可能导致误判。YAITracker通过MCP实现了状态的实时、自动同步。AI助手在完成一段代码后可以自动将对应工单移动到“待评审”或“已完成”列并附上总结。这意味着你的项目看板始终反映着最新的、真实的进展无需等待每日站会。更进一步其“预测分析”功能可以基于历史项目中类似技术栈通过标签标记如go:gin,react:typescript的实际完成数据对新项目的里程碑进行数据驱动的预测而不是依赖猜测或过时的经验。我的实操心得使用YAITracker几周后我最大的感触是“过程可视化”。以前AI助手像是一个黑箱我只关心最终代码对不对。现在通过时间拆分我能清晰地看到哪些任务适合交给AI独立完成代理时间占比高哪些任务需要我深度介入人工时间占比高。这直接指导我调整任务拆分方式和提示词工程从而整体上让我从“写代码”更多地转向“设计任务和监督AI”。3. 核心功能深度解析与部署实践YAITracker的功能集可以看作一个分层蛋糕底层是经典的项目管理功能中层是AI原生集成层顶层是数据分析层。3.1 基础功能层一个够用的现代工单系统即使剥离AI特性YAITracker本身也是一个设计简洁但功能完整的自托管工单系统。工单与看板支持工单类型Bug、功能、任务等、优先级、标签、史诗与子任务层级。看板支持拖拽状态可自定义满足基本的敏捷或看板流程需求。时间追踪这是其特色基础功能。除了传统的“开始/停止”计时器它还引入了“工作时段”Clock-in/out的概念模拟上下班打卡便于从宏观上记录一天在项目上的投入。REST API完整的JSON API覆盖了所有前端操作为未来开发移动端或与其他系统如CI/CD集成提供了可能。技术栈后端使用Go语言编写前端采用HTMX和Alpine.js。这是一个非常务实的选择HTMX允许在服务器端渲染HTML片段实现类似单页应用SPA的交互体验但避免了大型前端框架的复杂性保持了应用的轻量和简单。最终所有资源被嵌入单个二进制文件部署极其简单。3.2 AI集成层MCP服务器的原理与配置这是YAITracker的灵魂。MCP是一个新兴的开放协议旨在为AI助手提供一种标准化方式来调用工具、访问资源。你可以把它理解为AI世界的“驱动程序”或“插件系统”。YAITracker实现了一个功能完整的MCP服务器。当你在Cursor或Claude Desktop中配置好这个服务器后你的AI助手就“获得”了管理YAITracker项目的权限。配置方式主要推荐Sidecar代理模式获取访问令牌首先你需要从YAITracker的API获取一个OAuth2访问令牌。curl -X POST http://localhost:8080/api/v1/auth/token \ -H Content-Type: application/json \ -d {email: adminexample.com, password: your-strong-password}响应中会包含access_token。配置Cursor将项目中的.cursor/mcp.json.example复制为.cursor/mcp.json该文件已被Git忽略安全。修改其内容{ mcpServers: { yaitracker: { command: /绝对路径/到/你的/yaitracker二进制文件, args: [sidecar], env: { YAITRACKER_URL: http://localhost:8080, YAITRACKER_OAUTH_ACCESS_TOKEN: 上一步获取的token } } } }Sidecar模式的优势在于它为每次对话创建一个独立的“执行者”Actor实现了对话间的隔离更安全且符合上下文逻辑。验证连接重启Cursor后你的AI助手如Claude应该就能识别YAITracker的工具了。你可以尝试让它“列出所有项目”或“创建一个新工单”。注意事项环境变量YAITRACKER_STRICT_AGENT_WORKFLOW默认为true控制着AI代理的工作流严谨性。当它为true时AI助手必须先在某个工单上启动一个计时器start_timer然后才能调用complete_work来提交工作摘要并完成工单。这强制形成了“开始工作-记录-结束”的完整闭环确保了时间追踪的准确性。在测试初期你可以将其设为false来降低操作门槛但正式使用后建议保持开启。3.3 数据分析层从数据到洞察YAITracker收集了精细的时间数据和项目元数据通过标签从而能提供有价值的分析速率分析基于完成的工单计算迭代速率帮助你预测团队人AI的交付能力。估算准确度对比工单的原始估算时间与实际耗时包括人工和代理时间帮助你持续改进估算技巧。跨项目对比这是其独特功能。你可以为项目打上技术标签如language:go,framework:gin,frontend:react。系统可以对比不同技术栈下的平均工时、完成效率等指标。例如你可以回答“在我过往的项目中用Go开发API比用PHP平均快多少”“React前端页面的Bug修复耗时分布是怎样的”新项目预测基于历史项目数据为新项目预估总体时间线为计划提供数据参考。4. 实战部署与日常使用工作流让我们从一个干净的Linux服务器开始完成从部署到日常使用的全流程。4.1 生产环境部署Docker Compose Caddy对于个人或小团队使用我推荐使用Docker Compose配合Caddy进行部署Caddy能自动处理HTTPS证书省去很多麻烦。准备目录与文件mkdir ~/yaitracker cd ~/yaitracker # 创建关键文件 touch docker-compose.yml Caddyfile .env配置docker-compose.ymlversion: 3.8 services: yaitracker: image: ghcr.io/loweryaustin/yaitracker:latest # 请检查仓库是否有官方镜像或自行构建 # 若需自构建可使用build: https://github.com/loweryaustin/YAITracker.git container_name: yaitracker restart: unless-stopped environment: - YAITRACKER_SECRET${YAITRACKER_SECRET} - YAITRACKER_ADDR:8080 - YAITRACKER_DB/data/yaitracker.db volumes: - yaitracker_data:/data # 仅在Caddy容器内暴露端口 expose: - 8080 # 初始化命令例如创建管理员用户需根据项目实际支持情况调整 # command: sh -c ./yaitracker migrate ./yaitracker serve networks: - yaitracker_network caddy: image: caddy:2-alpine container_name: caddy restart: unless-stopped ports: - 80:80 - 443:443 volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy_data:/data - caddy_config:/config networks: - yaitracker_network volumes: yaitracker_data: caddy_data: caddy_config: networks: yaitracker_network: driver: bridge配置Caddyfile# 替换为你的域名 yaitracker.yourdomain.com { # 反向代理到yaitracker容器 reverse_proxy yaitracker:8080 # 可选压缩响应 encode gzip }配置.env文件# 生成一个强密钥例如openssl rand -base64 32 YAITRACKER_SECRET你的超长强密钥至少32字符启动服务docker compose up -d访问https://yaitracker.yourdomain.com你应该能看到登录界面。首次使用需要注册管理员账户如果YAITracker提供了初始化脚本或通过首次访问自动创建。4.2 典型AI协作工作流示例假设我正在开发一个名为“AI-Notes”的笔记应用技术栈是Go (backend)和Svelte (frontend)。项目与标签设置在YAITracker Web界面创建项目AIN。为项目添加标签language:go,framework:echo,frontend:svelte。AI辅助任务拆解与创建我在Cursor中打开项目对Claude说“基于我们刚才讨论的‘AI-Notes’需求帮我拆分成5个核心工单创建到YAITracker的‘AIN’项目里类型是‘功能’优先级从高到低排列。”Claude通过MCP调用list_projects找到AIN然后连续调用create_issue创建了AIN-1: [高] 用户认证API (Go/Echo)AIN-2: [高] 笔记CRUD API (Go/Echo)AIN-3: [中] 主页与笔记列表UI (Svelte)AIN-4: [中] 笔记编辑与渲染UI (Svelte)AIN-5: [低] 集成Markdown导出功能开始一项开发任务我决定先做AIN-2。我在Cursor里对Claude说“开始处理工单AIN-2我们需要实现笔记的创建、读取、更新、删除接口。”Claude调用begin_work或先start_timer在AIN-2上启动计时器并将工单状态自动移至“进行中”。在接下来的开发中Claude生成代码片段我进行审查和调试。这个过程中人工时间我的思考、调试和代理时间Claude生成代码是并行但需要区分的。理想情况下Claude在每次执行一个代码生成任务前应该调用start_timer完成后调用stop_timer。但目前这需要较复杂的提示词设计或未来工具的进一步自动化。完成任务与总结功能完成后我让Claude“完成工单AIN-2并总结一下我们实现了哪些端点使用了哪些库以及遇到的唯一性约束问题是如何解决的。”Claude调用complete_work工具会停止该工单上的所有计时器将状态移至“已完成”并自动将我刚才那句话作为总结添加到工单评论中。数据分析与复盘一周后我可以在YAITracker的“分析”面板查看AIN项目的速率。我可以通过“跨标签对比”功能查看language:go和frontend:svelte相关工单的平均耗时、时间构成了解我在哪个技术栈上效率更高AI的辅助程度如何。当我启动下一个Go项目时我可以使用“新项目预测”功能输入预估的工单数量和复杂度系统会基于我历史上所有language:go标签的项目数据给出一个时间范围预测。5. 常见问题、排查与进阶技巧5.1 安装与部署问题Q1: 从源码构建失败提示go mod错误A1: 确保你的Go版本符合项目要求查看go.mod。使用go version检查。建议使用最新稳定的Go版本。清理缓存并重新拉取依赖go clean -modcache go mod download make build # 或 go build -o yaitracker .Q2: Docker启动后无法访问Web界面A2: 按顺序排查检查容器状态docker compose ps确保状态为Up。查看YAITracker容器日志docker compose logs yaitracker看是否有启动错误如密钥长度不足、数据库权限问题。检查Caddy容器日志docker compose logs caddy看域名解析和代理是否正常。检查服务器防火墙是否开放80/443端口。确保你的域名DNS已正确解析到服务器IP。Q3: 如何初始化第一个管理员用户A3: 目前项目文档未明确说明初始化流程。通常这类自托管工具有几种方式首次访问注册页面自动创建第一个用户为管理员。通过命令行工具初始化如./yaitracker admin create。需要手动向数据库插入用户不推荐。 最可能的是第一种。如果访问/register或/setup没有自动跳转请查阅项目的GitHub Issue或源码中的cmd/目录寻找线索。5.2 MCP集成与使用问题Q4: 在Cursor里配置了MCP但AI助手说找不到YAITracker工具A4:确认配置路径确保.cursor/mcp.json文件在正确的项目根目录或用户主目录下根据Cursor文档。command路径必须是绝对路径。检查环境变量YAITRACKER_OAUTH_ACCESS_TOKEN必须有效。令牌可能过期需要刷新或重新生成。重启Cursor更改MCP配置后通常需要完全重启Cursor客户端才能生效。查看MCP日志在Cursor的设置中有时可以开启MCP调试日志查看连接和握手错误。Q5: AI助手可以列出项目但创建工单失败A5: 检查AI助手使用的“执行者”Actor权限。在Sidecar模式下每次对话会创建临时Actor。确保该Actor有对应项目的创建权限通常与生成令牌的用户权限一致。也可以在Web界面检查是否有相关错误日志。5.3 数据与安全Q6: 数据如何备份A6: YAITracker使用SQLite备份非常简单。只需定期复制数据库文件即可。在Docker部署中数据库文件位于挂载的卷中如yaitracker_data。一个简单的每日备份脚本#!/bin/bash BACKUP_DIR/path/to/backups docker compose exec -T yaitracker sqlite3 /data/yaitracker.db .backup /tmp/yaitracker.db.backup docker cp yaitracker:/tmp/yaitracker.db.backup $BACKUP_DIR/yaitracker_$(date %Y%m%d).db记得测试恢复流程将备份文件复制到数据卷位置重启容器。Q7: 如何保证自托管服务的安全A7: YAITracker设计上考虑了安全但部署者仍需负责强密码与密钥管理员账户使用强密码YAITRACKER_SECRET必须足够长且随机。HTTPS务必使用Caddy等工具启用HTTPS避免令牌等敏感信息明文传输。防火墙服务器防火墙只开放80/443端口。定期更新关注项目更新及时拉取新镜像或重新构建修复安全漏洞。访问控制如果多人使用妥善管理用户账号和项目权限。5.4 进阶使用技巧技巧一利用标签进行精细化分析不要只打上宽泛的go标签。尝试更细粒度的标签如go:1.21,database:postgres,task:refactor,task:bugfix。未来在进行跨项目对比时你可以分析出“在Go 1.21上重构数据库访问层”这类具体活动的效率模式。技巧二设计AI代理的标准化工作摘要模板在让AI调用complete_work时通过提示词引导它生成结构化的总结。例如“请按以下格式总结1. 实现的功能点2. 涉及的主要文件3. 解决的关键技术问题4. 遗留的待办事项。” 这样积累下来的工单历史将成为极有价值的项目知识库。技巧三结合CI/CD利用YAITracker的REST API你可以在CI/CD流水线中自动更新工单状态。例如当GitHub Actions成功部署后自动将相关工单移动到“已部署”列。这需要你编写简单的脚本调用PATCH /api/v1/projects/{key}/issues/{number}接口。技巧四区分“深度工作”与“AI辅助工作”你可以建立两个“工作时段”模式一种是纯人工调试复杂问题手动计时另一种是让AI主导编码使用严格的代理计时。通过对比这两种模式下工单的完成质量和速度你可以更科学地决定任务的分配策略。目前YAITracker仍处于Alpha阶段这意味着你可能遇到功能缺失或Bug。但正是这种早期阶段给了我们这些一线开发者一个绝佳的机会去亲手塑造一个真正贴合AI时代工作方式的工具。它的核心理念——将AI作为协作主体进行管理——无疑是超前的。我个人的使用体验是它确实带来了一些管理上的开销尤其是严格计时但它所提供的洞察力是任何传统工具都无法给予的。如果你也厌倦了在旧世界的工具里管理新世界的工作流不妨克隆它的代码部署起来开始你的“人机协同”项目管理实验。