centian
Centian
实时控制并验证您的 AI 智能体实际执行的操作。 AI 智能体对于“成功”的定义往往不一致。
Centian 让您可以定义成功,并强制执行它。
→ 查看智能体发出的每一个工具调用。 → 立即拦截不安全的操作。 → 验证任务是否真正成功(而不仅仅是执行完成)。
查看演示(2 分钟演示)
centian demo -a claude在执行过程中,您可能会观察到:
✔ 智能体试图绕过测试 → 被拦截 ✔ 任务验证失败 → 立即被标记 ✔ 工作流违规 → 智能体跳过了规划阶段
→ Centian 实时捕获这些行为
尚未安装?
curl -fsSL https://raw.githubusercontent.com/T4cceptor/centian/main/scripts/install.sh | bash或者查看 入门指南 获取更多选项。
问题所在
AI 智能体对于“成功”的定义往往不一致。
示例:您的智能体修复了一个失败的测试。
您看到的是:✔ “任务已完成 - 测试通过”
但实际上:
智能体修改的是测试代码,而不是业务代码。
失败条件从未真正消除。
代码仍然是坏的。
→ 如果没有验证,这看起来就像是成功了。
什么是 Centian?
它位于您的智能体与其使用的工具之间:
Agent (Claude / Codex / Gemini) -- the brain
↓
Centian -- the control layer
↓
MCP Tools (filesystem, APIs, DB) -- the actions所有工具调用都通过 Centian 的代理流转 — 为您提供:
对智能体行为的完全控制
对每一个动作的可见性
对任务是否真正成功的验证
智能体流程验证 — 预先定义成功
Centian 验证智能体是否完成了它们承诺要做的事情。
在执行之前,您定义什么是成功,Centian 会逐步强制执行。

如果没有验证,智能体看起来可能是正确的,但实际上是错误的。 Centian 让您可以定义成功,并强制执行它。
流程验证允许您在 YAML 中定义声明式工作流模板。每个模板描述了一个结构化的生命周期(入职、规划、脚手架、执行),包含前置条件、后置条件、不变量以及各阶段的工具权限。
当智能体从模板注册任务时:
入职 — 智能体收集项目背景和约束
规划 — 智能体提出方案,该方案被冻结为执行契约
执行 — 智能体按定义的步骤工作,Centian 在每个关卡验证正确性
完成 — 后置条件确认任务已正确完成
冻结的执行契约是关键:一旦规划完成,智能体将从不可变的契约中读取信息,而不是从可变的提示词上下文中读取。您可以证明智能体承诺要做什么,并验证它是否真的做到了。
分阶段工具治理: 每个工作流节点都可以声明允许智能体调用哪些 MCP 工具。在审批等待阶段,所有下游工具都会被拦截。在脚手架阶段,您可能允许文件系统访问,但禁止 shell 命令。
仓库的 task-templates/ 目录下包含了 TDD 工作流的示例模板。
模板架构已记录在案,并为可扩展性而设计。欢迎社区贡献常见工作流的模板 — 请参阅 CONTRIBUTING.md。
入门指南
安装
curl -fsSL https://raw.githubusercontent.com/T4cceptor/centian/main/scripts/install.sh | bash有关所有安装方法,请参阅 安装选项。
本地演示
该演示展示了 Centian 作为熟悉场景(测试驱动开发)中的智能体控制平面。
智能体被赋予实现 score_paranthesis 的任务 - 请参阅 提示词 - 然后在 Centian 的引导下完成任务。
您将看到:
✔ 智能体试图绕过测试 → 被拦截 ✔ 任务验证失败 → 立即被标记 ✔ 工作流违规 → 智能体跳过了规划阶段
→ Centian 实时捕获这些行为
先决条件:在运行 centian demo 之前,请确保您拥有:
node(已在v24.2.0测试) 和npx(已在11.3.0测试) 可在您的PATH中使用 - 这是启动文件系统和 shell MCP 服务器以及运行测试所必需的。已安装并验证 Claude Code、Gemini CLI 或 OpenAI Codex - Centian 通过其本地 CLI 以无头模式启动选定的智能体,因此如果该智能体二进制文件缺失或未登录,演示将失败。
Claude Code (sonnet)
centian demo -a claudeGemini CLI (gemini-2.5-flash)
centian demo -a geminiCodex: (使用默认选项)
centian demo -a codex注意:对于 codex 演示,centian 将复制(并在稍后清理)现有的 OpenAI API 认证材料。
演示内容
设置环境:创建本地文件夹
.centian/demo,将所需的工件复制到该处(见 此处),并调整配置。在可用端口(自动选择)本地启动 Centian 服务器。
使用 提示词 以无头模式启动选定的编码智能体。
Centian UI 将在新的浏览器窗口中打开,显示任务概览页面 UI - 一旦智能体在 Centian 注册任务,您就可以通过点击它并观察 MCP 事件来检查智能体正在做什么。
智能体完成后,CLI 将提示您是否要关闭服务器。请随意操作,您可以多次运行演示,也可以使用不同的智能体 - 之前的运行记录将被保留。
注意: 该演示旨在展示 Centian 的功能并提供初步印象,它不是生产级设置(例如 auth = false,使用 127.0.0.1)。如果您想使用 Centian,请勿复制粘贴或引用创建的配置,请查看 配置 以了解如何设置您自己的 Centian 代理。
使用 init 进行基本代理设置(无任务验证)
# 1. Install
curl -fsSL https://raw.githubusercontent.com/T4cceptor/centian/main/scripts/install.sh | bash
# 2. Initialize with a starter MCP server
centian init -q
# Optional: check created config at ~/.centian/config.json
# 3. Add your own MCP servers
centian server add --name "filesystem" --command "npx" --args "-y,@modelcontextprotocol/server-filesystem,/path/to/project"
centian server add --name "deepwiki" --url "https://mcp.deepwiki.com/mcp"
# 4. Start the proxy
centian start
# 5. Point your MCP client at Centian (use the config shown during init)带有任务验证
在 ~/.centian/config.json 中添加功能。在扁平布局中,功能位于 proxy 下;在基于项目的布局中,它们位于每个项目上:
{
"proxy": {
"capabilities": {
"taskVerification": {
"enabled": true,
"templatesPath": "/path/to/task-templates"
},
"eventStorage": {
"enabled": true,
"driver": "sqlite"
},
"ui": {
"enabled": true
}
}
}
}注意:默认情况下,task-templates/integrated 会自动集成到 centian 中,但会被使用相同 task.id 的模板覆盖。
启动 Centian 并打开 UI:
centian start
# UI available at http://localhost:9666/ui/tasksCentian 如何实现这一点
1. 代理层:一个网关,连接所有 MCP 服务器
在 Centian 中配置一次您的 MCP 服务器。将每个客户端指向 localhost:9666。工具命名空间 (<server>_<tool>) 会自动消除冲突。
{
"gateways": {
"default": {
"mcpServers": {
"filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"] },
"github": { "url": "https://api.github.com/mcp", "headers": { "Authorization": "Bearer <token>" } }
}
}
}
}每个客户端连接到一个端点:
{
"mcpServers": {
"centian": {
"url": "http://127.0.0.1:9666/mcp/default",
"headers": { "X-Centian-Auth": "<your-api-key>" }
}
}
}2. 治理层:工具调用的可编程中间件
处理器在执行前后拦截每一个工具调用。它们接收完整的请求/响应上下文,可以修改负载,并可以中止链条。
用例:
将每个工具调用审计记录到数据库
对超过阈值的调用进行速率限制
从工具参数中剥离密钥或环境变量
从响应中脱敏 PII
强制执行智能体可调用工具的白名单
脚手架一个新的处理器:
centian processor new3. 执行可见性
每一个 MCP 工具调用都带有时间戳、会话 ID、请求/响应负载,并且在启用任务验证时,还带有产生该调用的工作流上下文。
如果没有任务验证,Centian 通过结构化 JSONL 和可查询的 SQLite 事件存储来记录事件。启用任务验证后,Centian 提供一个嵌入式 UI,在智能体应该执行的操作的上下文中显示智能体活动:
按工作流阶段分组的时间轴
与任务步骤关联的工具调用
带有详细失败元数据的后置条件检查失败
完整的请求/响应检查
# CLI log access
centian logs
# Embedded UI (when task verification + UI are enabled)
# http://localhost:9666/ui/tasks文档
深入文档位于 docs/。
配置
Centian 使用 ~/.centian/config.json 中的单个 JSON 配置。该配置支持两种布局:
扁平布局(centian init 的默认值)— 网关、认证和功能位于顶层:
{
"name": "Centian Server",
"version": "1.0.0",
"auth": true,
"authHeader": "X-Centian-Auth",
"proxy": {
"host": "127.0.0.1",
"port": "9666",
"timeout": 30,
"logLevel": "info",
"capabilities": {
"taskVerification": { "enabled": false },
"eventStorage": { "enabled": true, "driver": "sqlite" },
"ui": { "enabled": false }
}
},
"gateways": {
"default": {
"mcpServers": {
"my-server": {
"url": "https://example.com/mcp",
"headers": { "Authorization": "Bearer <token>" },
"enabled": true
}
}
}
},
"processors": []
}基于项目的布局 — 用于隔离具有不同数据库、功能标志和路由前缀的多个工作负载:
{
"name": "Centian Server",
"version": "1.0.0",
"proxy": {
"host": "127.0.0.1",
"port": "9666",
"timeout": 30
},
"projects": {
"team-alpha": {
"auth": true,
"capabilities": {
"taskVerification": { "enabled": true },
"eventStorage": { "enabled": true },
"ui": { "enabled": true }
},
"gateways": {
"workbench": {
"mcpServers": {
"filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"] }
}
}
}
}
}
}每个项目都有自己的 SQLite 数据库 (~/.centian/projects/<slug>/events.sqlite) 和自己的路由前缀。扁平布局在运行时会自动迁移到“default”项目,因此现有配置可以继续使用,无需更改。
端点
聚合网关:
http://127.0.0.1:9666/mcp/<gateway>单个服务器:
http://127.0.0.1:9666/mcp/<gateway>/<server>项目范围网关:
http://127.0.0.1:9666/<project>/<mcp>/<gateway>项目范围 UI:
http://127.0.0.1:9666/<project>/ui
在聚合模式下,工具被命名空间化以避免冲突。“default”项目使用无前缀路由以实现向后兼容。
安全性
仅当在每个项目中明确配置了 auth 时,才允许绑定到 0.0.0.0。这可以防止意外暴露。
命令
命令 | 描述 |
| 初始化配置(使用 |
| 启动代理 |
| 生成新的 API 密钥 |
| 添加 MCP 服务器 |
| 管理 MCP 服务器 |
| 管理配置 |
| 脚手架一个新的处理器 |
| 查看最近的 MCP 日志 |
安装选项
方法 | 平台 | 完整 UI | 命令 |
Shell 脚本 | Linux, macOS | ✓ |
|
发布二进制文件 | Linux, macOS, Windows | ✓ | 从 releases 下载 |
| 任意 | ✗ |
|
Docker | Linux, macOS, Windows | ✓ |
|
Homebrew | — | — | 计划中 |
Shell 脚本(推荐)
curl -fsSL https://raw.githubusercontent.com/T4cceptor/centian/main/scripts/install.sh | bash支持 --version 和 --install-dir 标志。默认安装到 ~/.local/bin。
发布二进制文件
从 最新版本 下载适当的压缩包,解压并将 centian 放入您的 PATH 中。
go install
go install github.com/T4cceptor/centian@latest需要 Go 1.25+。构建时不包含嵌入式 Web UI — 请使用发布二进制文件或 Docker 以获取完整 UI。
Docker
# Full image (Linux, macOS, Windows)
docker run --rm -p 9666:9666 t4ce/centian:latest
# Alpine image
docker run --rm -p 9666:9666 t4ce/centian:latest-alpineHomebrew
计划支持 Homebrew。
当前状态
Centian 可用且正在积极开发中,但它处于 1.0 之前版本,存在一些刻意的缺失。我们对哪些功能可用、哪些尚不可用保持透明。
目前可用:
具有网关聚合和工具命名空间的 MCP 代理
基于项目的隔离:每个项目的数据库、路由前缀、功能和认证(多租户准备)
可编程处理器链(CLI 和 webhook)
带有基于模板的工作流、冻结执行契约和分阶段工具治理的任务验证
带有任务/动作关联的 SQLite 事件持久化
用于任务运行检查的嵌入式只读 UI
结构化 JSONL 请求日志记录
现有 MCP 配置的自动发现 (
centian init -p <path>)具有网关和项目范围作用域的 API 密钥认证
已知限制:
任务运行状态仅在内存中(重启后无法恢复)
治理是工具级别的,而不是语义级别的(工具内没有读写区分)
SQLite 是唯一的存储后端(计划支持 Postgres)
OAuth 支持或下游 MCP 服务器有限,并非所有流程都已支持
UI 是只读的(UI 尚无任务控制操作)
审批等待阶段会拦截工具,但尚无专门的批准/恢复机制
API 和数据结构在 v1.0 之前可能会发生变化,特别是处理器接口和事件模式。
开发
make build # Build to build/centian
make install # Install to ~/.local/bin/centian
make test-all # Run unit + integration tests
make test-coverage # Test coverage report
make lint # Run linting
make dev # Clean, fmt, vet, test, build为什么叫“控制平面”?
MCP 代理路由流量。Centian 治理它。
代理是机制 — 它是 Centian 查看和控制每一个工具调用的方式。但重点不在于路由。重点在于了解您的智能体在做什么,限制它被允许做什么,并验证它是否完成了您要求的事情。
如果您在流程至关重要的环境中使用 AI 智能体 — 受监管行业、关键任务工作流,或任何您需要回答“智能体做了什么以及为什么?”的地方 — 这就是 Centian 的用途。
许可证
Apache-2.0
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/T4cceptor/centian'
If you have feedback or need assistance with the MCP directory API, please join our Discord server