> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# Skate：让编码智能体访问看板
- URL: https://www.hubwiz.com/blog/skate-connect-coding-agents-to-boards/
- Published: 2026-04-24T00:32:27.000Z
- Updated: 2026-10-13T16:11:34.000Z
- Description: 当你让AI代理运行你的冲刺看板时会发生什么。
- Author: admin
- Tags: AGENT, KANBAN, #Import 2026-10-14 14:41

当你和AI结对编程太长时间后，会有这样一种情况。你全身心投入其中——Claude在疯狂输出代码，你在审查、批准、纠正方向——几个小时后你突然意识到：没有人记录下刚才发生了什么。

没有工单被更新。没有计时器在运行。聊天记录长到看不到头，但一旦你关闭会话，它就会消失。如果你的队友问"今天完成了什么？"——祝你好运，靠记忆重建吧。

这一直困扰着我。我完成了和Claude或Codex的马拉松式编码会话后，总有一种模糊的感觉——发生了很多事情，但没有留下任何记录。看板上那些明显已经完成的任务仍然显示"未开始"。时间追踪？别想了。我*实际工作*的方式和项目*看起来*的方式之间的脱节越来越荒谬。

## 1、改变一切的那次午睡

有一天，我埋头苦干了大概五个小时。构建功能、修复bug，在终端、IDE和任务所在的Mattermost看板之间来回切换。我筋疲力尽。

所以我打了个盹。

当我醒来时，半梦半醒地盯着天花板，突然灵光一现：为什么我要当中间人？为什么必须由我来打开看板、找到任务、更新状态、启动计时器，然后回到终端告诉代理接下来要做什么？为什么代理不能自己……*做这些事？*

所有条件都已经具备了。Mattermost Boards有完整的REST API。像Claude Code这样的AI代理支持MCP工具。我只需要一个东西把它们连接起来。

那天晚上我开始构建Skate。

## 2、Skate是什么？

[Skate](https://github.com/mobydeck/skate?ref=hubwiz.com)是一个Go语言CLI工具和MCP服务器，它让AI编码代理能够直接访问你的Mattermost Boards。你的代理可以列出任务、按优先级选取任务、更新状态、启动计时器、处理任务、留下评论并标记完成——所有这些都不需要你切换到浏览器。

名字的由来？"skate"的一个含义是*在某事上快速轻松地取得进展*。而这正是发生的事情。过去需要我花几个小时的任务——翻阅代码、编写修复、更新文档、测试——当Claude有一个看板可以参考时，几分钟就能搞定。你只需要说"下一个任务"，然后看它行动。穿越你的积压任务。名副其实。

实际使用效果如下：

```
$ skate tasks
ID                           TITLE                        STATUS       PRIORITY   ASSIGNEE
c4cf6f4wzbjgxdm3hpa7iygtjdo  Task translation middleware  Not Started  2. Medium
cuppcm819atnixx71qg9i485jsr  listing tasks                In Progress  1. High 🔥

```

![Skate终端任务列表](https://www.hubwiz.com/blog/content/images/2026/04/1-chSWMblJ7dYGKJZCPN9IQg.png)

你告诉Claude：*"按优先级取下一个任务"*——它真的会执行。它运行`skate tasks`，选择优先级最高的项目，用`skate task <ID>`读取完整的任务描述，更新状态，启动计时器，完成工作，留下说明更改的评论，停止计时器，然后标记完成。

整个循环。全程无需干预。

## 3、我真正在解决的问题

如果你用过AI编码代理——Claude Code、Cursor、Codex，不管哪一个——你可能也碰到了同样的墙。这些工具在编写代码方面极其强大。但它们对你的项目管理设置一无所知。它们不知道你应该在做什么。它们不会更新工单。它们不会追踪时间。

至于上下文？我曾经对此很执着。我甚至专门构建了一个叫[Pantry](https://github.com/mobydeck/pantry?ref=hubwiz.com)的工具，为代理提供跨会话的持久记忆。笔记、决策、模式——存储在本地SQLite中，支持语义搜索。有一段时间效果很好。

但关键在于：Claude现在有1M token的上下文窗口。*代理的*记忆已经不再是瓶颈了。瓶颈是*人类的*记忆。当三个不同的代理跨多个会话在你的项目上工作时，你需要知道发生了什么。你需要时间戳、你需要评论、你需要一个反映现实的看板。

这就是Skate的用途。不是代理记忆——而是团队记忆。

## 4、它的实际工作原理

Skate是一个单一的静态Go二进制文件。没有数据库，没有守护进程，没有Docker容器。它使用个人访问令牌直接与Mattermost Boards API通信。

设置大约需要30秒：

```
skate init          # 输入你的Mattermost URL和token
skate local-init    # 选择该项目使用的看板
skate setup claude-code  # 注册MCP服务器

```

就这样。Claude Code现在可以调用九个工具：列看板、列任务、查看任务详情、更新状态、创建任务、添加评论、启动/停止计时器和记录手动时间。

![用Claude Code设置Skate](https://www.hubwiz.com/blog/content/images/2026/04/1-nszINfWp6RbkKwK7BZQBLg.png)

幕后原理极其简单。Skate使用Bearer令牌向你的Mattermost实例发送HTTP请求。看板插件处理权限——如果你在浏览器中能看到看板，Skate就能在终端中看到它。

输出格式也很灵活。默认是供人类阅读的整洁表格，但你也可以使用`--json`或`--yaml`进行脚本处理：

```
skate tasks --json | jq '.[] | select(.Priority | test("High"))'

```

## 5、翻译功能

这是一个我没有计划但结果出奇有用的功能。

我的团队中有些成员偶尔会用母语编写任务描述。在Mattermost中不是问题——直接读就好。但当AI代理从API解析任务内容时，它需要英文才能发挥最佳效果。

所以我添加了一个翻译中间件。它是可选的——你在配置中使用OpenAI兼容的API来启用（支持OpenAI、Ollama、OpenRouter等）。当Skate渲染任务时，它会运行一个快速启发式检查：这个文本主要是ASCII吗？如果是，跳过。如果不是，翻译它。代理看到的是干净的英文。原始文本在看板上保持不变。

```
# ~/.config/skate.yaml
translate:
  enabled: true
  provider: ollama
  model: gpt-oss:latest
  base_url: http://localhost:11434/v1

```

这是那种听起来微不足道，但当你的团队跨越多个国家时会产生真正影响的功能。

## 6、用AI构建这个项目我学到了什么

这是一个元层面的故事。我用Skate所启发的*工作流本身*来构建Skate。基本的CLI可以工作后，我开始用它来管理自己的开发。我在Mattermost看板上创建任务，让Skate指向它，然后告诉Claude："按优先级取下一个任务。"

它真的做到了。Claude会：

1. 运行`skate tasks`查看可用的任务
2. 选择优先级最高的项目
3. 用`skate task <ID>`读取完整描述
4. 将状态更新为"进行中"
5. 启动计时器
6. 完成实际工作（编写代码、修复bug、更新文档）
7. 留下总结所完成工作的评论
8. 停止计时器
9. 标记完成
10. 问："下一个任务？"

超过30个任务以这种方式完成。每个任务都有时间戳、评论和时间追踪。当我事后查看看板时，我可以清楚地看到发生了什么、以什么顺序、每件事花了多长时间。

![完整的AI编码会话后的Mattermost看板](https://www.hubwiz.com/blog/content/images/2026/04/1-Z4XTjzTPAAsVy15eEcFyrA.png)

![每个任务都被追踪、计时和评论](https://www.hubwiz.com/blog/content/images/2026/04/1-cFpbuEzHqEi-4UAuUv8rhw.png)

这就是全部意义所在。不仅仅是完成工作——而是*知道*完成了什么。

## 7、循环任务：拖拽，放下，再来一次

自然出现的一个模式是循环任务。更新README、运行测试、检查文档——这些不是一次性的。每次我添加功能或修复bug时，README可能需要调整，测试需要更新，文档可能过时了。

与其每次创建新任务，不如将旧任务从"已完成"拖回"未开始"。代理会选取它，看到描述和所有之前的评论，理解上下文，然后再次完成工作。它检查文件的当前状态，找出上次以来发生了什么变化，并相应地更新。

这出乎意料地强大。我有一个"更新README"的任务，在开发过程中可能被完成并重新打开了六次。每次代理都会读取自己之前的评论，看到上次添加了什么，然后补充新的内容。我完全不需要重复说明。只需移动卡片然后说"下一个任务"。

测试也是一样。"添加/更新测试"是一个不断回归的任务。代理检查当前的覆盖率，看到上次运行以来添加了什么新代码，编写缺失的测试，附上输出结果。我不需要解释发生了什么变化——它会通过查看代码自己搞清楚。

## 8、当代理成为团队成员

事情在这里变得有趣了。你正在和Claude结对编程，偶然发现了什么——一个bug、一个想法、一个需要但不紧急的重构。在旧的工作流中，你需要切换到浏览器、打开看板、创建卡片、写好描述、回到终端。上下文切换，心流被打断。

有了Skate，你只需说："为这个创建一个任务。"代理运行`skate create`，从刚才的对话中填写标题和描述，卡片就出现在看板上了。不需要浏览器，不需要上下文切换。发现直接从你的脑海转到看板上，只需几秒钟。

但它还不止于此。对于更大的任务，代理不会直接一头扎进去——它会先做计划。它研究代码库，思考方案，编写一个markdown文件形式的计划，并把它附加到任务卡片上。然后它将状态设为"阻塞"并等待。接下来是我没想到的部分：其他团队成员可以在看板上看到那个计划。他们可以阅读、留下评论、对决策提出异议、建议替代方案。代理接收反馈，修改计划，附上新版本，只有在方案被批准后才开始编码。

想想刚才发生了什么。一个AI代理提出了一个技术方案，一个人类队友在看板上异步审查了它，留下了反馈，而代理在写一行代码之前就整合了这些反馈。这不是"开发者在终端里和AI对话"。这是一个团队使用共享看板协作工作——其中一个团队成员恰好是一个AI。

这完全改变了动态关系。代理不再隐藏在某个人的IDE里。它的工作是可见的：计划已附上、状态被追踪、时间被记录、评论记录了每一个决策。团队中的任何人都可以看到代理在做什么、花了多长时间、为什么做出某些选择。当有人六个月后加入项目并问"为什么这样构建？"——答案就在卡片上。

## 9、技能文件：一个文档统领一切

所有这些——状态更新、计时器追踪、提及、计划、内容块——都由一个名为`SKILL.md`的单一markdown文件控制。它嵌入在Skate二进制文件中，在你运行`skate setup`时随MCP服务器一起安装。代理读取一次，并在整个会话中遵循它。

让我感到意外的是：代理比任何人类都更好地遵循这些指令。

我是认真的。想想那些在每个团队中都会被遗漏的、枯燥重复的事情。更新工单状态。启动计时器。带说明停止计时器。提及正确的人。附上测试输出。关闭前写总结评论。开始前检查相关任务。阅读重新打开的工单上的所有之前评论。每个开发者都知道自己*应该*做这些事。我们大多数人到周二就忘了一半。

代理从不忘记。它读取技能文件，然后严格按照它说的做。每一次都是如此。它在开始工作前更新状态。它启动计时器。它检查附加的文件。它提及最后的评论者。它写总结。它带说明停止计时器。它附上计划。不是因为它有动力或有纪律——而是因为它字面意义上遵循给它的指令，没有自尊、没有捷径、没有"我待会儿再做"。

技能文件要求的一件事是签名。每条评论和计时器笔记都以一行类似`-- claude-code (claude-opus-4-6)`或`-- codex (gpt-5-codex)`结尾。听起来是小事，直到你有多个代理在同一个看板上工作。我曾让Claude Code在一个项目上处理任务，同时Codex并行处理另一个看板。当我事后查看看板时，每条评论都有归属——我可以确切地看到哪个代理用哪个模型做了什么、以什么顺序。不用猜测，不用问"这是谁写的？"

这比你想象的更重要。当三个代理和两个人类为同一个项目做贡献时，看板就成了唯一的真相来源。不是某个人的聊天记录，不是被滚过的终端日志——而是看板。每一个决策、每一个计划、每一次状态变更都是可见的、有归属的。

技能文件大约130行markdown。没有代码，没有配置解析，没有API集成——只有清晰的自然语言指令。它把一个通用AI模型变成了一个可预测、可靠的团队成员，处理人类很不擅长处理的运营开销。

想让代理行为不同？编辑技能文件。想让它停止提及他人？在配置中添加`mentions: false`。想让它总是附上计划？已经包含在里面了。整个工作流是声明式的、版本控制的、透明的。

## 10、枯燥的技术细节（给关心的人）

- 语言：Go。单一二进制文件，无CGO，一条命令交叉编译到Linux/macOS/Windows。
- MCP传输：stdio。代理按需启动Skate，零空闲成本。
- 配置：YAML三层合并（全局 → 本地项目级 → 环境变量）。
- 依赖：Cobra用于CLI，官方OpenAI Go SDK用于翻译，MCP Go SDK用于代理集成。
- 缓存：用户ID解析为用户名并缓存在`~/.cache/skate/users.yaml`中。
- 版本：构建时通过ldflags设置，在CLI、HTTP User-Agent和MCP服务器之间共享。

整个项目大约2,000行Go代码。做好一件事。

## 11、关于Boards插件的说明

我应该提一下：我运行的Mattermost Boards实例不是原版Focalboard。我一直在维护Boards插件的一个定制分支，添加了一些原版从未发布的特性——最显著的是时间追踪。在卡片上启动/停止计时器和记录工时的能力，使得"代理追踪自己的时间"这个循环成为可能。还有一些其他的小调整，是我在团队工作方式上需要的，不值得向上游提交PR，但对日常工作产生了很大影响。

Skate是基于那个插件的API构建的。如果你运行的是原版Focalboard，一切仍然可以正常工作——任务列表、状态更新、评论、附件——只是没有时间追踪端点。Skate会优雅地处理这种情况：如果计时器API不存在，它会告诉你然后继续。不会崩溃，不会破坏工作流。

## 12、超越Mattermost：Jira、Linear及其他

我一直在想的是：这种方法没有任何东西是特定于Mattermost Boards的。

我不是唯一注意到AI代理和项目管理之间差距的人。像Vibe Kanban（Rust语言，13k+星标）和Kanban Code（Swift语言）这样的项目正在解决同样的问题。它们令人印象深刻——Vibe Kanban提供并行代理编排和隔离的git worktree、可视化代码审查等功能。Kanban Code自动将Claude会话链接到卡片，并在PR合并时在面板上流转它们。

但关键在于：它们都创建了一个*新的*看板。一个新的UI、一个新的工作流、一个团队中每个人都必须学习的新工具。如果你的团队已经在使用Jira、Mattermost或Linear——你现在有两个看板了。AI看板和真正的看板。祝你的项目经理会去查看AI看板。

Skate采取了相反的方法。它不取代你的看板——它连接你的看板。你的团队继续使用他们一直使用的同一个Mattermost看板，同样的列，同样的工作流，同样的移动应用。代理只是作为另一个参与者出现。没有迁移，没有培训，不需要"请大家切换到这个新工具"。看板留在原处。代理在团队已经工作的地方与他们会合。

这个模式是通用的。你有一个AI代理。你有一个带API的项目管理系统。你需要它们之间一个薄薄的无状态桥梁——一边说MCP，另一边说REST。这就是Skate。今天它与Mattermost Boards对话。但同样的架构——同样的命令集、同样的MCP工具接口、同样的技能文件模式——可以与任何东西对话。

Jira？当然。Linear？更容易，它们的API很棒。GitHub Projects？Shortcut？Notion数据库？它们都有相同的基本对象：任务、状态、评论、负责人。动词是相同的：列出、创建、更新、评论、追踪时间。

我认为我们正在走向一个每个项目管理工具都有MCP适配器的世界，AI代理只需将"更新工单"视为其工作流的正常部分。现在大多数团队都有这个奇怪的差距：代理完成了工作，但人类必须手动记录它发生了。这个差距不应该存在。

![模式：任何AI代理和任何项目管理工具之间的薄MCP-to-REST桥梁](https://www.hubwiz.com/blog/content/images/2026/04/1-XIW1-BKsqxNfAYA6NtZNGQ.png)

Skate是我关闭这个差距的概念验证。Mattermost Boards是起点，因为那是我使用的工具，但这个理念比任何一个工具都大。如果你在使用Jira，想让你的Cursor代理选取工单、更新状态并记录时间——蓝图就在这里。Fork它，替换API客户端，保留MCP工具。困难的部分不是HTTP调用，而是设计工作流，让代理知道*如何*成为一个好的团队成员。这就是技能文件处理的，而且那部分是完全可移植的。

## 13、这适合谁？

如果你使用Mattermost Boards（或独立的Focalboard）并与AI编码代理合作，Skate消除了项目看板和终端之间的差距。你的代理成为一等团队成员，更新自己的工单并追踪自己的时间。

如果你的团队做时间追踪，你会获得自动的计时器启动/停止，无需任何人记得点击按钮。

如果你是一个独立开发者，只想告诉Claude"处理下一个任务"并让它真正知道那意味着什么——Skate就是那座桥梁。

如果你使用的是完全不同的PM工具——阅读代码，借鉴模式。AI辅助开发的未来不仅仅是更智能的代理。而是代理参与人类使用的相同工作流，具有相同的问责制和相同的工作记录。

## 14、试试看

```
git clone https://github.com/mobydeck/skate
cd skate
make install
skate init

```

它是[开源](https://github.com/mobydeck/skate?ref=hubwiz.com)的，*用Go构建，*是单一的二进制文件，运行成本为零。

---

原文链接: [I Gave My AI Agent a Kanban Board and It Outperformed My Team at Project Management](https://freedium-mirror.cfd/https://medium.com/@arthurpro/i-gave-my-ai-agent-a-kanban-board-and-it-outperformed-my-team-at-project-management-286788dcdffe?ref=hubwiz.com)

汇智网翻译整理，转载请标明出处

> **这是「Agent / MCP」专题的一部分。**完整地图见：[Agent / MCP / 自动化完全指南](https://www.hubwiz.com/blog/agent-stack/)