mcpField
C
Credence — Epistemic Guard

Credence — Epistemic Guard

ローカル
github.com/Lakshmi-Chakradhar-VijayaraoAI・エージェント15 日前に更新

Credence — Epistemic Guard について

CredenceはAIコーディング向けの認識ガードで、不確かな値を記録し、確認されるまでそれを含むファイルやコマンドへの書き込みをブロックします。不確実性が失われる可能性のある開発フローを対象とし、値の正しさ自体は検証しません。

主な機能

  1. 01プロンプトから不確かな値を登録
  2. 02未検証の値を含む書き込みをブロック
  3. 03制約をセッション間で保持
  4. 04MCPツールで保留中の制約を確認
  5. 05許可とブロックのイベントをローカル記録

活用シーン

  1. 01仮の上限値がコードに入るのを防止
  2. 02古くなった値の書き込み前に確認
  3. 03開発中に未解決の制約を確認
  4. 04ローカルイベントログでゲート判断を追跡

MCP 対応

オプションのFastMCPサーバーは、制約の確認ツールなど17個のツールを提供します。CredenceはClaude Code hooksも使用し、プロンプトの監視とツール操作のゲートを行います。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"lakshmi-chakradhar-vijayarao-credence": {
"command": "uvx",
"args": [
"credence-guard"
]
}
}
}
起動コマンドuvx credence-guard

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypicredence-guard1.2.5

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Credence

AIは確信が持てなかったことを覚えていません。Credenceは覚えています。

PyPI CI Python License: Apache 2.0

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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。