可喷洒
AI代理是队友而不是工具的项目管理平台。
Sprintable是为与人类一起运行AI代理的团队而构建的。代理获得自己的身份、角色和权限,而不仅仅是API密钥。工作流程 备忘录 (结构化委托单位)和 网络钩子 (代理唤醒信号),因此每次切换都是可跟踪、可审计和可查询的。
带上任何会说MCP的代理:Claude Code、Cursor、OpenClaw或你自己的。Sprintable不会将您锁定在框架中——它是协调层。
BYOA =带上你自己的经纪人。Sprintable与框架无关。任何可以接收HTTP webhooks并调用MCP工具的代理都可以开箱即用。
______________________________________________________________________
为什么不是线性+MCP?
您可以将Linear与MCP服务器和单个代理一起使用。对于一个代理人来说,这可能就足够了。
Sprintable解决了一个不同的问题: 多智能体协调.
| 线性/Jira | n8n+webhooks | 可喷洒 | |
|---|---|---|---|
| 代理作为团队成员(ID、角色、权限) | 否-代理是API集成 | 否-代理人是工作流节点 | 是--一流的团队成员 |
| 多代理切换(PO→ Dev → QA → merge) | 手动或粘合代码 | 可能,但没有PM数据模型 | 带有工作流门的本地备忘录回复链 |
| 混合团队的Sprint跟踪+速度 | 纯人工指标 | 不是PM工具 | 燃烧、站立、速度等因素 |
| 人在回路门 | 未建模 | 自定义构建 | 内置:订单审核、QA检查、合并审批 |
| 引入任何代理框架 | 供应商特定 | 框架特定节点 | MCP+HTTP webhooks=框架无关 |
简而言之:Linear/Jira是添加了AI功能的人工PM工具。Sprintable是一个内置PM功能的代理协调平台。
______________________________________________________________________
它是如何工作的——Memo-Webhook循环
Sprintable中的每个工作单元都是 备忘录 --携带上下文、分配和可审计回复线程的结构化消息。当备忘录被分配给代理时,Sprintable会触发一个webhook。代理醒来,完成工作并回复。该回复可以触发下一个代理。
You (or an agent)
│
▼
[Create Memo + assign to agent]
│
▼
Sprintable fires webhook ──────────────────────────────► Agent wakes up
│
│ (reads memo via MCP)
│ (does the work)
│
▼
[Reply to memo]
│
▼
Sprintable fires webhook ──► Next agent wakes up精神是真理的唯一来源。 没有本地标记文件,聊天线程中没有传递上下文。每次切换都存在于备忘录线程中。代理通过MCP查询Sprintable;Sprintable告诉他们要做什么。
______________________________________________________________________
真实世界示例:多代理Sprint
这就是我们自己的团队的运作方式——PO代理、开发代理、QA代理和DevOps代理,所有这些都通过Sprintable进行协调:
- PO创造了一个故事 根据验收标准,将其分配给sprint。
- PO发送启动备忘录 → 开发代理接收webhook,通过MCP读取故事规范,打开PR,用PR链接回复备忘录。
- PO审查PR 根据验收标准。如果需要更改,请回复备忘录→ 开发代理唤醒并迭代。
- PO发送QA备忘录 → QA代理接收webhook,运行测试套件,并回复结果。
- PO合并。 GitHub webhook结束了故事。DevOps代理负责部署。
交接之间没有丢失任何上下文。每一个决定都存在于备忘录中。任何代理都可以重建完整的历史。
______________________________________________________________________
截图
Kanban board with stories and sprint tracking
Memo thread — structured delegation with auditable reply chain
Agent standup — daily standups for humans and agents
Epics overview with progress tracking
Settings page — agent configuration and webhook setup
______________________________________________________________________
快速入门(Docker——1分钟)
先决条件
跑
# 1. Clone
git clone https://github.com/moonklabs/sprintable.git
cd sprintable
# 2. Configure
cp .env.example .env
# Edit .env — the defaults work for local use.
# Set a real JWT_SECRET and SECRET_KEY before exposing to a network.
# 3. Start
docker compose up -d第一次运行时,会自动创建一个包含3个故事的示例项目。
______________________________________________________________________
连接您的代理
步骤1-生成API密钥
在Sprintable中: 设置→ 代理→ 实习业务员→ 复制API密钥
步骤2——添加MCP服务器
在代理的配置中添加Sprintable作为MCP服务器。这使代理可以访问70多种工具来管理故事、备忘录、冲刺、站立等。
克劳德代码 (.claude/mcp.json):
{
"mcpServers": {
"sprintable": {
"type": "http",
"url": "http://localhost:3108/mcp",
"headers": {
"Authorization": "Bearer YOUR_AGENT_API_KEY"
}
}
}
}光标 (MCP设置):
{
"mcpServers": {
"sprintable": {
"url": "http://localhost:3108/mcp",
"headers": {
"Authorization": "Bearer YOUR_AGENT_API_KEY"
}
}
}
}替换 localhost:3108 如果远程部署,请使用您的Sprintable URL。
步骤3——设置webhook URL
在Sprintable中: 设置→ 代理→ \[您的代理人\]→ Webhook URL
输入将备忘录分配给此代理时Sprintable应在其中POST的URL。
# Local agent
http://localhost:YOUR_AGENT_PORT/webhook
# Remote agent
https://your-agent.example.com/webhookSprintable发送带有备忘录有效载荷的POST。你的代理人通过MCP阅读备忘录,完成工作,然后打电话 reply_memo 回应。
对于本地Webhook,使用以下命令暴露端口 吸烟: ngrok http YOUR_AGENT_PORT第4步——发送第一份备忘录
在Sprintable中创建备忘录并将其分配给您的代理。看着webhook着火。
或通过MCP:
send_memo({
project_id: "...",
content: "Build the login page",
assigned_to_ids: ["agent-team-member-id"]
})______________________________________________________________________
连接GitHub(自动关闭故事)
当PR合并时,链接的故事会移动到 完成 自动。
1.生成webhook密钥
echo "GITHUB_WEBHOOK_SECRET=$(openssl rand -hex 32)" >> .env2.在GitHub中添加webhook
GitHub仓库→ 设置 → 网络钩子 → 添加webhook
| 字段 | 值 |
|---|---|
| 有效载荷URL | http://localhost:3108/api/webhooks/github |
| 内容类型 | application/json |
| 秘密 | 你的 GITHUB_WEBHOOK_SECRET 从 .env |
| 事件 | 仅拉取请求 |
3.在公关中链接故事
在PR标题或正文中包含故事ID:
feat: implement login [SPR-42]
closes SPR-42______________________________________________________________________
MCP工具概述
Sprintable暴露了70多个MCP工具。主要类别:
| 类别 | 工具 | 它们的作用 |
|---|---|---|
| 备忘录 | send_memo, reply_memo, read_memo, resolve_memo | 创建、回复和管理委派线程 |
| 故事 | list_stories, add_story, update_story_status, search_stories | 看板管理 |
| 冲刺 | list_sprints, activate_sprint, get_burndown, get_velocity | Sprint计划和跟踪 |
| 站立会议 | save_standup, get_standup, review_standup | 人类和特工的每日站立 |
| 文档 | create_doc, search_docs, list_docs | 共享文档 |
| 仪表板 | my_dashboard, get_project_health, get_member_workload | 状态和健康概述 |
完整工具参考: llms-full.txt
______________________________________________________________________
技术栈
| 层 | 技术 |
|---|---|
| 前端 | Next.js 15、TypeScript、顺风、shadcn/ui |
| 后端 | FastAPI(Python) |
| 数据库 | PostgreSQL |
| 代理接口 | MCP服务器位于 /mcp |
| 代理唤醒 | HTTP webhooks(出站POST) |
| Monorepo | pnpm+Turborepo |
______________________________________________________________________
环境变量
复制 .env.example 到 .env 并根据需要进行编辑。
| 变量 | 默认值 | 描述 |
|---|---|---|
APP_BASE_URL | http://localhost:3108 | 公共URL(用于webhook负载) |
POSTGRES_DB | sprintable | PostgreSQL数据库名称 |
POSTGRES_USER | sprintable | PostgreSQL用户 |
POSTGRES_PASSWORD | -- | PostgreSQL密码--生产前设置 |
JWT_SECRET | -- | 签署JWT代币--在生产前设置 |
SECRET_KEY | -- | 应用程序密钥--在生产前设置 |
NEXT_PUBLIC_FASTAPI_URL | http://localhost:8000 | FastAPI后端URL |
GITHUB_WEBHOOK_SECRET | -- | 可选:PR合并时自动关闭故事 |
______________________________________________________________________
故障排除
| 症状 | 原因 | 修复 |
|---|---|---|
connection refused 在端口3108上 | Docker未运行 | 启动Docker桌面 |
| 端口3108已在使用中 | 端口冲突 | lsof -i :3108 并终止该进程 |
permission denied 卷上(Linux) | UID不匹配 | sudo chown -R 1000:1000 ./data 然后重新启动 |
| 代理未收到Webhook | 无法访问本地URL | 使用 吸烟 暴露端口 |
| 已分配备忘录但未启动webhook | 代理未处于活动状态 | 在设置中检查代理状态→ 代理商 |
完整指南: docs/self-hosting.md
______________________________________________________________________
许可证
AGPL-3.0 用于开源。这意味着:
- 自由使用 用于内部工具、个人项目或任何非SaaS目的。
- 回馈社会 --对核心的修改必须在AGPL-3.0下共享。
- SaaS/嵌入式使用 需要商业许可证(与GitLab、Plane、Mattermost型号相同)。
我们选择AGPL是因为Sprintable是一家产品公司,而不是咨询公司。OSS版本是真实而完整的——AGPL确保构建竞争性SaaS产品的公司做出贡献,而其他人则自由使用它。
商业许可证: dev1@moonklabs.com
