Credence — Epistemic Guard について
CredenceはAIコーディング向けの認識ガードで、不確かな値を記録し、確認されるまでそれを含むファイルやコマンドへの書き込みをブロックします。不確実性が失われる可能性のある開発フローを対象とし、値の正しさ自体は検証しません。
主な機能
- 01プロンプトから不確かな値を登録
- 02未検証の値を含む書き込みをブロック
- 03制約をセッション間で保持
- 04MCPツールで保留中の制約を確認
- 05許可とブロックのイベントをローカル記録
活用シーン
- 01仮の上限値がコードに入るのを防止
- 02古くなった値の書き込み前に確認
- 03開発中に未解決の制約を確認
- 04ローカルイベントログでゲート判断を追跡
MCP 対応
オプションのFastMCPサーバーは、制約の確認ツールなど17個のツールを提供します。CredenceはClaude Code hooksも使用し、プロンプトの監視とツール操作のゲートを行います。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Credence
AIは確信が持てなかったことを覚えていません。Credenceは覚えています。
pip install credence-guard
credence demo # 30-second smoke test, no API key required
[mcp] を追加すると、Claude Code 用の FastMCP サーバーが追加されます。コアパッケージに必須の依存関係はありません。
問題点
あなたはこう言います。「レート制限はおそらく50くらいです。まだ確認していません。」
15ターン後、Claudeはこう書きます。
RATE_LIMIT = 50 # no warning. no flag. shipped.
午前2時、APIはすべてのリクエストを拒否します。実際の上限は10でした。Claudeは、あなたが確信を持てていなかったことを忘れてしまいました。
これはハルシネーションではありません。モデルは読んだ内容をそのまま再現しました。読んだ内容から留保表現が取り除かれていたのです。15ターン前のコンテキスト圧縮によって。
Credenceの機能
不確かな値をあなたが述べた瞬間に追跡します。それらの値を含む書き込みを、確認されるまでブロックします。
you say "rate limit is probably 50"
→ observer registers it (before Claude responds)
→ Claude writes: RATE_LIMIT = 50 # ⚠ CREDENCE[unverified]
→ write blocked until you confirm
他のツールはすべて警告します。Credenceは強制します。
動作イメージ
# Claude generates this. Credence intercepts before it ships.
class StripeClient:
API_VERSION = "2023-10-16" # ⚠⚠ CREDENCE[stale]: API date versions change on release — verify before shipping
RATE_LIMIT = 100 # ⚠ CREDENCE[unverified]: I think Stripe rate limit is around 100 req/min
TOKEN_EXPIRY = 3600 # ⚠⚠ CREDENCE[stale]: Token/session lifetime values are set by the vendor — verify
MAX_RETRIES = 3
TIMEOUT_MS = 5000
credence: blocked Edit — 2 unverified value(s)
→ I think Stripe rate limit is around 100 req/min | TOKEN_EXPIRY = 3600
Verify first, then retry. Use credence_constraints to see all pending.
確認後:"Confirmed — rate limit is 100 req/min per stripe.com/docs" → ゲートが解除されます。

セットアップ
1. .mcp.json に追加します:
{ "mcpServers": { "credence": { "command": "credence-server" } } }
2. .claude/settings.json に追加します:
{
"hooks": {
"UserPromptSubmit": [
{ "hooks": [{ "type": "command", "command": "python3 -m credence.observer" }] }
],
"PreToolUse": [
{
"matcher": "Write|Edit|Bash|NotebookEdit",
"hooks": [{ "type": "command", "command": "python3 -m credence.hooks" }]
}
]
}
}
これで完了です。APIキーは不要です。
レジストリ: Credenceは作業ディレクトリに
epistemic_registry.dbを作成します。*.dbを.gitignoreに追加するか、CREDENCE_DB=~/.credence/registry.dbを設定して、グローバルに保持してください。セッション追跡:
CREDENCE_SESSION_ID=my-projectを設定すると、ディレクトリの変更やターミナルの再起動をまたいで制約を維持できます。イベントログ: ゲートはブロック/許可イベントを
~/.credence/events.jsonlに書き込みます(ローカルのみで、外部には送信されません)。無効にするにはCREDENCE_NO_LOG=1を設定します。制約の上限: レジストリでは、セッションごとにデフォルトで最大500件の制約を設定できます。
CREDENCE_MAX_CONSTRAINTS=<n>で変更できます。
仕組み
2つのレイヤーがあり、どちらもモデルの協力を必要としません。
| レイヤー | フック | 役割 |
|---|---|---|
| オブザーバー | UserPromptSubmit | パッシブリスナー — Claudeが何かを生成する前に、不確かな値を登録します |
| ゲート | PreToolUse | 未検証の値を含む書き込みをブロックします |
オブザーバーは、モデルがあなたのメッセージを処理する前に動作します。「レート制限は50だと思います」と言えば、Claudeがトークンを1つ生成する前に、その項目がレジストリに登録されます。
ブロック対象
credence: blocked Edit — 2 unverified value(s)
→ rate limit is probably 50 req/min | token expires in 3600s
Verify first, then retry. Use credence_constraints to see all pending.
検証されると、ゲートは解除されます。
Credenceが行わないこと
- 事実を検証しません — 値が正しいかどうかは判断できません
- 述べられなかった不確かさは検出できません
- モデルが文章で誤った値を 述べる ことは防ぎません — ファイルやコマンドへの 書き込み のみをブロックします
測定結果
コンテキスト圧縮中に、Claude Haikuによって不確実性を示す留保表現の46%が削除されます。Credenceはそうした書き込みを100%ブロックします(n=50、ブートストラップCI:[0%–0%])。
5つの組織による7つのオープンウェイトモデル(Qwen、Mistral、Llama、Phi、Gemma)で検証済みです。同じ失敗パターン、同じブロック率でした。
credence demo # smoke test, no API key
credence stats # false-positive rate from real gate usage
credence feedback 1|2|3 # tag last gate block: correct / noise / skip
python3 -m pytest tests/ -q # 829 tests
python3 -m evals.latency_report # P50/P95/P99
詳細な方法論:docs/TECHNICAL_REPORT.md
プロジェクト構成
credence/ pip-installable package
observer.py passive UserPromptSubmit hook
hooks.py PreToolUse enforcement gate
mcp_server.py 17-tool MCP server
registry.py SQLite constraint store
memory.py cross-session persistence
tests/ 829 tests
evals/ validation studies + multi-model benchmarks
docs/ technical report, architecture, ETP spec
credence_gate/ Rust gate (alternative to Python hooks.py)
experimental/ Phase 2 work — not yet shipped
paper/ Research paper draft + figures
研究
Credenceの科学的根拠は paper/ に記載されています(EQL / EQLR / FCR)。
補足となる幾何学の論文 — 作話の検出と、検出軸が因果制御軸から分離可能である理由について — は、別のリポジトリにあります。 → 制御なしの検出
Built by
Lakshmi Chakradhar Vijayarao — GitHub · LinkedIn · X
Apache 2.0 License
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。