内容
# 已解决 — Slack 决策层
[](https://github.com/GHGuide/settled/actions/workflows/test.yml)
Python · Slack Bolt · 模型上下文协议 · SQLite(哈希链审计)· MIT
**检索告诉你说了什么。已解决告诉你决定了什么 — 以及它是否仍然有效。**
团队现在在 Slack 中运行 AI 代理。代理根据它读取的内容采取行动 — 即使是团队已经撤销的决定。已解决维护一个**具有认知状态的决策账本**,并独特地通过 **MCP 服务器**公开它,以便任何代理都可以询问*“这仍然有效吗?”*在采取行动之前。
> Slack 代理构建者挑战 · 新的 Slack 代理赛道 · 合格技术:我们自己的`decisions://`MCP 服务器(无门槛)。
## 它做什么
- **监控频道**,在精确优先的置信门槛后检测决策(使用线程上下文,捕获每个消息的多个决策)。
- **人类 ✅ 批准** — 只有人类才能使决策具有约束力。错误的“已解决”> 静默。
- **认知生命周期:** 提议 → 有争议 → 已解决 → **被取代**,每个都锚定在 **逐字引用 + 永久链接**上。
- **查询:** `/settled <topic>`,助手(DM/@提及),或应用首页仪表盘。
- **MCP `decisions://`** — `is_binding(topic)`,`query_decisions(q)` + 资源,通过标准输入输出和 HTTP。
## 使它与众不同
很多工具记录决策供人以后阅读。已解决是代理在采取行动之前可以查询的工具 — 保护人类和代理都按照团队实际做出的决策行事。
| | 决策日志工具 | RAG / Slack 搜索 | **已解决** |
|---|---|---|---|
| 捕获决策 | ✅ | ➖ | ✅ |
| 知道哪些仍然**具有约束力** | ❌ | ❌ | ✅ (认知状态) |
| 逐字引用 + 永久链接锚点 | ➖ | ❌ | ✅ |
| 在“已解决”之前人类批准 | ➖ | ❌ | ✅ |
| **代理可以在采取行动前查询它** | ❌ | ❌ | ✅ **(MCP `decisions://`)** |
| 防篡改审计追踪 | ❌ | ❌ | ✅ (哈希链 + 验证) |
实时查看 — 编码代理在合并前重写自己的迁移:
```text
$ python -m demo.agent_coding_guardrail
│ ✍️ 编写 0007_create_datastore.postgres.sql (目标是 Postgres)
│ → mcp.call(decisions://, is_binding, {topic: "datastore"})
│ ← {"binding": true, "statement": "将主数据存储移至 Aurora", "permalink": …}
│ ⛔ 冲突 我的迁移目标是 Postgres — 但团队批准了 Aurora
│ ✅ 重写 → 0007_create_datastore.aurora.sql (目标是 Aurora)
│ - conn: pg-primary.internal + conn: …cluster.rds.amazonaws.com
```
另外:`python -m bench.benchmark`(天真代理在陈旧决策上行动的频率约为 60%,已解决为 0%)
和 `python -m demo.breadth`(一个 CI 门控、一个 IDE 助手和一个编码代理在一个账本上)。
## 在本地运行
```bash
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # 填写 Slack 代币 + OPENROUTER_API_KEY
python -m seed.seed_demo # 播种账本(虚构的演示数据)
python run.py # Slack 机器人(套接字模式)
python -m mcp_server.server # MCP 服务器(标准输入输出);SETTLED_MCP_TRANSPORT=http 用于 HTTP
```
从 [`slack_manifest.yaml`](slack_manifest.yaml) 创建 Slack 应用(声明应用首页、`/settled`、助手界面和包括 `reaction_removed` 在内的事件)。
**测试:** `pip install -r requirements-dev.txt && pytest -q` — 涵盖账本生命周期、取代/主题保护、哈希链审计日志(包括篡改检测)、分类器门控和 MCP `is_binding` / `verify_audit_log` 工具。
## 部署(始终在线以便评判)
参见 `DEPLOY.md` — Railway 或 Fly,相同的 `Dockerfile`。目前在 Railway 上实时运行。
## 布局
| 路径 | 角色 |
|---|---|
| `settled/` | 配置、数据库、账本、**LLM** (分类+答案)、提取、块、Slack 应用、代理 |
| `mcp_server/server.py` | `decisions://` MCP 服务器(标准输入输出 + 流式 HTTP):`is_binding`,`query_decisions`,`verify_audit_log` |
| `demo/agent_coding_guardrail.py` | 很酷的演示:编码代理在检查已解决后重写自己的迁移 |
| `demo/breadth.py` · `demo/agent_guardrail.py` | 3 个代理在一个账本上 · 最小保护措施 |
| `bench/benchmark.py` | 量化影响:陈旧行动率,天真 vs 已解决 |
| `tests/` | 29 个 pytest 测试(生命周期、审计链篡改检测、MCP、块) |
| `seed/` · `video/` | 演示账本种子 · Remotion 视频项目 + 架构 PNG |
## 技术栈
Python · Slack Bolt · SQLite(哈希链审计) · 模型上下文协议 · OpenRouter(DeepSeek)。
MIT 许可(参见 `LICENSE`);`NOTICE.md` 中的第三方组件。演示数据是虚构的。