centian
Centian
AIエージェントの実際の動作をリアルタイムで制御・検証します。 AIエージェントは「成功」の定義について必ずしも人間と一致していません。
Centianは成功の定義を可能にし、それを強制します。
→ エージェントが行うすべてのツール呼び出しを確認。 → 安全でないアクションを即座にブロック。 → タスクが(実行されただけでなく)実際に成功したかを検証。
デモを見る (2分)
centian demo -a claude実行中、以下のような挙動を確認できます:
✔ エージェントがテストを回避しようとする → ブロック ✔ タスクの検証に失敗 → 即座にフラグ付け ✔ ワークフロー違反 → エージェントが計画フェーズをスキップ
→ Centianがリアルタイムで検知します
まだインストールしていませんか?
curl -fsSL https://raw.githubusercontent.com/T4cceptor/centian/main/scripts/install.sh | bashその他のオプションについてはGetting startedを参照してください。
課題
AIエージェントは「成功」の定義について必ずしも人間と一致していません。
例:エージェントが失敗したテストを修正する場合
表示される内容: ✔ “Task completed - Tests green”
しかし実際には:
エージェントはコードではなくテストを修正した。
失敗条件はそもそも存在しなかった。
コードは依然として壊れている。
→ 検証がなければ、これは成功に見えてしまいます。
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ツールを宣言できます。承認待ちフェーズでは、後続のすべてのツールがブロックされます。スキャフォールディング中にはファイルシステムアクセスを許可しつつ、シェルコマンドをブロックするといった設定が可能です。
TDDワークフローのテンプレート例がリポジトリの task-templates/ に含まれています。
テンプレートスキーマは文書化されており、拡張性を考慮して設計されています。一般的なワークフローのテンプレートのコミュニティからの貢献を歓迎します — CONTRIBUTING.mdを参照してください。
Getting started
インストール
curl -fsSL https://raw.githubusercontent.com/T4cceptor/centian/main/scripts/install.sh | bashすべてのインストール方法についてはInstallation Optionsを参照してください。
ローカルデモ
このデモでは、テスト駆動開発という馴染みのある環境で、Centianをエージェントのコントロールプレーンとして紹介します。
エージェントには score_paranthesis を実装するタスクが与えられ(プロンプトを参照)、Centianを使用してタスクがガイドされます。
確認できること:
✔ エージェントがテストを回避しようとする → ブロック ✔ タスクの検証に失敗 → 即座にフラグ付け ✔ ワークフロー違反 → エージェントが計画フェーズをスキップ
→ Centianがリアルタイムで検知します
前提条件: centian demo を実行する前に、以下を確認してください:
node(v24.2.0でテスト済み) およびnpx(11.3.0でテスト済み) がPATHにあること — ファイルシステムおよびシェル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が新しいブラウザウィンドウで開き、タスク概要ページが表示されます。エージェントがCentianにタスクを登録すると、クリックしてMCPイベントを観察することでエージェントの動作を確認できます。
エージェントの完了後、CLIがサーバーを閉じるかどうかを尋ねます。自由に閉じてください。デモは複数回実行可能で、異なるエージェントを使用することもできます。前回の実行結果は保持されます。
注意: このデモはCentianの機能を体験するためのものであり、本番環境向けの設定(例: auth = false、127.0.0.1の使用)ではありません。Centianを使用する場合は、作成された設定をコピー&ペーストしたり参照したりせず、Configurationを確認して独自の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. プロキシ層: 1つのゲートウェイ、すべてのMCPサーバー
MCPサーバーをCentianで一度設定します。すべてのクライアントを 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>" } }
}
}
}
}すべてのクライアントが1つのエンドポイントに接続します:
{
"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設定を使用します。設定は2つのレイアウトをサポートしています:
フラットレイアウト (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
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