织布机
Loom是一个基于web的项目和任务管理应用程序,可以有效地帮助您管理项目、任务、问题、目标和结果。它提供了一个带有实时更新的现代web仪表板和用于编程访问的REST API,所有这些都由本地SQLite数据库支持。Loom还用作使用Streamable HTTP传输的MCP(模型上下文协议)服务器,使LLM应用程序能够通过标准化的MCP协议管理项目和任务。
特性
- 项目管理:通过web UI和REST API创建、列出、获取、更新和删除项目
- 任务管理:创建、列出、获取、更新和删除任务,包括状态、优先级、类型和注释
- 问题跟踪:捕捉与项目相关的问题,并可选择与特定任务相关的问题
- 目标追踪:使用可选的项目/任务链接和目标类型捕获目标
- 结果跟踪:跟踪与项目相关的结果,并可选择与任务相关的结果以随时间推移取得进展
- 语音通知:LLM工具的文本转语音功能,可向用户发送语音消息
- Web仪表板:现代、响应迅速的web界面,通过服务器发送事件(SSE)实时更新
- MCP服务器:用于LLM工具集成的带流式HTTP传输(2025-03-26规范)的完整MCP(模型上下文协议)服务器
- REST API:用于对所有功能进行编程访问的完整REST API
- 本地存储:存储在本地SQLite数据库中的所有数据(默认值:
~/.loom/loom.db)
安装
先决条件
- 转到1.23或更高版本
- Node.js和npm(可选,只需要安装echogarden进行语音通知)
从源代码构建
git clone https://github.com/jake-mok-nelson/loom.git
cd loom
go build -o loom安装
# Move the binary to your PATH
sudo mv loom /usr/local/bin/
# Install echogarden for voice notifications (optional)
npm install -g echogarden配置
默认情况下,Loom将其数据库存储在 ~/.loom/loom.db。您可以通过设置来自定义此位置 LOOM_DB_PATH 环境变量:
export LOOM_DB_PATH=/path/to/your/loom.db用法
启动服务器
Loom在不同的端口上运行API服务器(REST API、SSE和MCP)和网站(仪表板):
# Using the binary directly (API + MCP on :8080, Dashboard on :3000)
./loom
# Specify custom ports
./loom -addr :9090 -web-addr :4000
# Using make
make web然后打开浏览器http://localhost:3000(或您的自定义web端口)查看仪表板。 API、SSE和MCP可流式HTTP端点均可在http://localhost:8080(或您的自定义API端口)。
命令行选项
-addr:API和MCP服务器地址和端口(默认值::8080)-web-addr:网站服务器地址和端口(默认值::3000)
您还可以设置 LOOM_DB_PATH 使用自定义数据库位置的环境变量。
架构:REST API与MCP
Loom在同一端口上公开了两个互补的接口,每个接口服务于不同的受众:
REST API(/api/*) | MCP(/sse) | |
|---|---|---|
| 消费者 | Web仪表板、脚本、HTTP客户端 | LLM应用程序(Claude Desktop等) |
| 协议 | 标准REST(基于HTTP的JSON) | 基于流式HTTP的JSON-RPC 2.0 |
| 能力 | 只读 --查询项目、任务、问题、结果、目标 | 完整CRUD --创建、读取、更新、删除和链接/取消链接所有实体 |
| 实时 | GET /events 将SSE更新推送到仪表板 | GET /sse 将MCP通知流式传输到LLM客户端 |
| 用例 | 在浏览器仪表板中显示数据 | 让AI代理以编程方式管理项目 |
为什么两者都有?
- REST API为仪表板供电。 web UI需要简单、快速的GET端点来获取和显示数据,以及一个SSE流(
/events)当数据发生变化时自动刷新。它不需要写访问权限,因为用户通过他们的LLM工具进行交互,而不是直接通过仪表板。
- MCP为LLM工具集成提供动力。 人工智能代理(如克劳德)需要一个标准化的协议来发现可用的工具并执行它们。MCP通过JSON-RPC提供了跨所有实体类型的完整创建/读取/更新/删除功能。当MCP工具修改数据时,仪表板通过REST SSE流接收实时刷新事件。
这两个接口一起形成一个循环: LLM代理通过MCP写入数据→ 仪表板通过REST API读取并显示它→ 变化通过SSE实时显示。
Web仪表板
Loom提供了一个反应式web仪表板,用于可视化和管理您的项目和任务。仪表板通过服务器发送事件(SSE)和现代桌面优化界面提供实时更新。
仪表板功能
- 概述:显示所有数据类型的最近活动
- 项目:通过任务状态摘要按状态(活动、计划、待处理、已完成、已存档)查看和筛选所有项目
- 任务:按状态、优先级、类型和项目筛选
- 问题:通过状态过滤跟踪与项目和任务相关的问题
- 结果:通过状态筛选监控项目的进度跟踪
- 目标:查看短期、职业、价值观和需求目标
- 实时更新:数据更改时仪表板会自动刷新
- 搜索:对所有项目进行全局搜索
- 深色主题:现代、友好的深色界面,专为桌面使用而优化
REST API
Loom提供了一个REST API,用于对所有功能进行编程访问。所有端点都返回JSON响应。
API终点
GET /api/projects-列出所有项目GET /api/tasks?project_id=1&status=pending&task_type=feature-列出带有可选筛选器的任务GET /api/problems?project_id=1&task_id=2&status=open-列出可选筛选器的问题GET /api/outcomes?project_id=1&task_id=2&status=completed-使用可选筛选器列出结果GET /api/goals?project_id=1&task_id=2&goal_type=short_term-使用可选筛选器列出目标POST /api/voice-文本到语音端点(接受JSONtext字段,返回WAV音频)GET /events-用于实时更新的服务器发送事件(SSE)端点
所有API端点都包含用于交叉源访问的CORS头。
MCP服务器(流式HTTP)
织机实现 模型上下文协议(MCP) 使用 流式HTTP 运输(规范版本 2025-03-26).这取代了传统的HTTP+SSE传输,并在 /sse 它支持JSON和流式响应。
MCP端点
POST /sse-发送JSON-RPC 2.0请求(初始化、工具/列表、工具/调用等)GET /sse-打开服务器到客户端通知的流式连接DELETE /sse-终止会话
可用的MCP工具
所有项目管理操作均可作为MCP工具使用:
| 工具 | 说明 |
|---|---|
create_project | 创建新项目 |
list_projects | 列出所有项目 |
get_project | 获取项目详细信息 |
update_project | 更新项目 |
delete_project | 删除项目 |
create_task | 在项目中创建任务 |
list_tasks | 使用筛选器列出任务 |
get_task | 获取任务详细信息 |
update_task | 更新任务 |
delete_task | 删除任务 |
create_problem | 制造问题 |
list_problems | 列出过滤器的问题 |
get_problem | 获取问题详细信息 |
update_problem | 更新问题 |
delete_problem | 删除问题 |
link_problem_to_project | 将问题链接到项目 |
unlink_problem_from_project | 从项目中取消链接问题 |
get_problem_projects | 获取解决问题的项目 |
get_project_problems | 为项目解决问题 |
create_outcome | 创造一个结果 |
list_outcomes | 使用筛选器列出结果 |
get_outcome | 获取结果详细信息 |
update_outcome | 更新结果 |
delete_outcome | 删除结果 |
create_goal | 设定一个目标 |
list_goals | 用过滤器列出目标 |
get_goal | 获取目标详细信息 |
update_goal | 更新目标 |
delete_goal | 删除目标 |
link_goal_to_project | 将目标与项目联系起来 |
unlink_goal_from_project | 从项目中取消目标链接 |
get_goal_projects | 为目标获取项目 |
get_project_goals | 为项目设定目标 |
create_task_note | 为任务创建注释 |
list_task_notes | 列出任务的注释 |
get_task_note | 获取任务笔记 |
update_task_note | 更新任务说明 |
delete_task_note | 删除任务注释 |
MCP客户端配置
要将MCP客户端(例如Claude Desktop)连接到Loom,请使用Streamable HTTP传输配置:
{
"mcpServers": {
"loom": {
"type": "streamable-http",
"url": "http://localhost:8080/sse"
}
}
}语音通知
Loom在通过MCP创建任务、问题、目标和结果时,为语音公告提供文本转语音功能。仪表板导航栏中有一个扬声器图标(🔊/🔇) 这允许用户静音/取消静音语音通知。语音状态在会话中持续存在。
设置Kokoro TTS
织机用途 回声花园 随着 Kokoro公司 离线TTS引擎,用于高质量、自然声音的语音合成。
安装
- 安装回声花园 (需要Node.js 18+):
npm install -g echogarden- 下载Kokoro模型 (可选,首次使用时自动下载模型):
Kokoro模型将在首次致电时自动下载到 /api/voice。下载内容包括: - kokoro-82m-v1.0-fp32 (301MB)-主型号 - kokoro-82m-v1.0-voices (26MB)-语音预设
模型缓存在 ~/.cache/echogarden/ 供后续使用。
配置
织机已预先配置为使用Kokoro。不需要额外的设置。语音端点使用:
- 发动机:Kokoro(离线,不需要API密钥)
- 质量:24kHz采样率,声音自然
- 语音:自动为检测到的语言选择合适的语音
测试语音合成
手动测试语音端点:
curl -X POST http://localhost:8080/api/voice \
-H "Content-Type: application/json" \
-d '{"text":"Hello from Kokoro"}' \
-o output.wav && open output.wav用法
创建项目时,语音通知会通过SSE自动发送到仪表板:
- 当您通过MCP创建任务时:“任务{title}已创建”
- 当您通过MCP创建问题时:“创建了问题{title}”
- 当您通过MCP创建目标时:“目标{title}已创建”
- 当您通过MCP创建结果时:“创建了结果{title}”
用户可以使用扬声器图标切换语音通知(🔊/🔇) 在仪表板导航栏中。
发展
运行测试
go test ./...建筑
go build -o loom许可证
麻省理工学院
