Bulwark

io.github.bpolania由 GitHub 帳號 bpolania 發布v0.2.0更新於 Oct 24, 2026

AI agent governance: content scanning, audit logs, policy evaluation, session management.

概覽

AI 產生的概覽

Bulwark 是本地執行的治理閘道,位於 AI 代理與上游 MCP 或 HTTP 工具之間,負責執行政策、注入憑證、檢查內容並記錄稽核日誌。

可以做什麼
依規則、作用域與優先順序允許或拒絕工具呼叫,支援熱重載,並可依稽核歷史回放測試政策變更。
適用情境
當你把 Claude Code、Codex 或其他 MCP/HTTP 用戶端連接到外部工具,並希望集中落實政策管控、憑證隔離、內容掃描、限流與稽核追蹤時使用。適合需要證明代理行為並阻擋破壞性操作的團隊。
執行需求
以本機程序執行(Docker 映像、Homebrew 或以 Cargo 從原始碼建置)。需要 bulwark.yaml 設定檔,透過 BULWARK_CONFIG 指定。操作員驗證使用 BULWARK_SESSION_TOKEN 中的工作階段權杖,由 session 指令建立。上游伺服器可能需要各自的權杖,GitHub 範例需要 Node.js/npm。
安裝前請注意
它會處理真實憑證:上游密鑰加密儲存並注入工具呼叫,BULWARK_SESSION_TOKEN 中的工作階段權杖用於操作員驗證。它會把稽核資料寫入本機 SQLite 資料庫,並可阻擋或遮蔽內容。HTTP 代理模式使用自帶 CA 憑證進行 TLS 攔截,需在用戶端信任該憑證。政策設定錯誤可能放行或拒絕錯誤的操作,應先驗證並測試政策。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Bulwark,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Bulwark

Open-source governance layer for AI agents.

Bulwark sits between AI agents and external tools, enforcing policies, managing credentials, inspecting content, and maintaining a complete audit trail. One policy governs all your agents — Claude Code, OpenClaw, Codex, or any MCP/HTTP client.

Why Bulwark?

AI agents are powerful but ungoverned. They can access any tool, leak any credential, and leave no audit trail. Bulwark fixes this:

  • Policy enforcement — YAML-based rules control which tools agents can use, with glob patterns, scope-based precedence, and hot-reload
  • Credential management — Agents never see real secrets. Bulwark injects credentials at the last mile, encrypted at rest with age
  • Content inspection — Scan requests and responses for secrets, PII, and prompt injection. Block or redact automatically
  • Audit logging — Every action recorded in a tamper-evident SQLite database with blake3 hash chains
  • Rate limiting — Token-bucket rate limits per session, operator, tool, or globally. Cost tracking with budget enforcement
  • MCP-native — Works as an MCP gateway or HTTP forward proxy. Governance metadata on every tool call response

Install

bash
# Homebrew (macOS / Linux)brew install bpolania/tap/bulwark
# Dockerdocker pull ghcr.io/bpolania/bulwark
# From sourcegit clone https://github.com/bpolania/bulwark.gitcd bulwark && cargo build --release

Quick Start: Govern Claude Code with GitHub

This walkthrough connects Claude Code to GitHub through Bulwark. Every tool call is policy-evaluated, audited, and credential-injected — in about 5 minutes.

Prerequisites: Claude Code installed, a GitHub personal access token, and Node.js/npm (for the GitHub MCP server).

1. Initialize and verify

bash
bulwark init my-project && cd my-projectbulwark doctor

doctor runs 9 diagnostic checks. All should pass.

2. Store your GitHub token

bash
bulwark cred add github-token --type bearer_token# Prompts for the token — hidden input, encrypted with age at rest

Configure the credential-to-tool binding in your bindings file so Bulwark knows to inject this token for GitHub tool calls.

3. Configure the upstream GitHub server

Edit bulwark.yaml:

yaml
mcp_gateway:  upstream_servers:    - name: github      command: "npx"      args: ["-y", "@modelcontextprotocol/server-github"]      env:        GITHUB_PERSONAL_ACCESS_TOKEN: "${GITHUB_TOKEN}"
policy:  policies_dir: "./policies"  hot_reload: true
audit:  enabled: true
inspect:  enabled: true  inspect_requests: true  inspect_responses: true

Make sure GITHUB_TOKEN is set in your shell (export GITHUB_TOKEN=ghp_...).

4. Write a policy

bash
cat > policies/base.yaml << 'EOF'metadata:  name: quickstart-policy  scope: global
rules:  - name: allow-reads    description: "Allow all read operations"    match:      actions: ["read_*", "get_*", "list_*", "search_*"]    verdict: allow    priority: 10
  - name: allow-github-writes    description: "Allow creating issues, comments, PRs"    match:      tools: ["github__*"]      actions: ["create_*", "update_*"]    verdict: allow    priority: 10
  - name: block-destructive    description: "Block all delete and force-push operations"    match:      actions: ["delete_*", "force_push_*"]    verdict: deny    priority: 20    message: "Destructive operations are blocked by policy"
  - name: default-deny    match: {}    verdict: deny    priority: -100    message: "No policy explicitly allows this action"EOF
bulwark policy validate

5. Create a session and connect Claude Code

bash
# Create a session (--ttl is in seconds: 28800 = 8 hours)bulwark session create --operator $(whoami) --agent-type claude-code --ttl 28800# → Token: bwk_sess_7f3a...
export BULWARK_SESSION="bwk_sess_7f3a..."   # paste your actual token
# Register Bulwark as an MCP server in Claude Codeclaude mcp add --transport stdio bulwark \  --env BULWARK_SESSION=$BULWARK_SESSION \  -- bulwark mcp start

6. Use Claude Code — now governed

Start Claude Code. GitHub tools appear namespaced as github__list_issues, github__create_issue, etc.

Try it:

"List the open issues in my repo"

Open a second terminal:

bash
bulwark audit tail
22:01:03  github__list_issues   ✓ allow   3ms  (allow-reads)

Every call is logged with the verdict, matched rule, and timing. Now try something destructive:

"Delete issue #1"

22:02:01  github__delete_issue  ✗ deny    <1ms (block-destructive)

Blocked. Sub-millisecond — policy evaluation happens in memory. The agent gets a structured error explaining which rule denied it.

What just happened

Claude Code connected to Bulwark (not directly to GitHub). For every tool call, Bulwark validated the session, scanned for secrets/PII, evaluated the policy, injected the real GitHub token, scanned the response, and recorded a tamper-evident audit event. Same agent experience — full governance underneath.

Going Deeper

Content inspection — 13 built-in patterns scan for AWS keys, GitHub tokens, private keys, PII, and prompt injection. Redaction happens before content reaches the agent.

bash
bulwark inspect rulesbulwark inspect scan --text "my key is AKIAIOSFODNN7EXAMPLE"

Policy replay — Preview the impact of policy changes against real audit history before deploying:

bash
bulwark policy test --dir ./new-policies/ --since 1h

Audit forensics — Reconstruct a session timeline and verify the hash chain:

bash
bulwark session inspect <session-id>bulwark audit verifybulwark audit export --since 24h --format json

HTTP proxy mode — For non-MCP agents, Bulwark runs as a forward proxy with TLS interception:

bash
bulwark proxy startbulwark ca export   # trust the CA in your HTTP client

Architecture

┌─────────────┐     ┌──────────────────────────────────────────────┐     ┌──────────────┐│             │     │                  Bulwark                      │     │              ││  AI Agent   │────>│  Session > Inspect > Policy > Inject > Proxy │────>│  Upstream    ││  (Claude,   │<────│  <── Audit <── Inspect <── Response <─────── │<────│  Tool/API    ││   Codex,    │     │                                              │     │              ││   custom)   │     └──────────────────────────────────────────────┘     └──────────────┘└─────────────┘

Integration Modes

ModeTransportBest For
MCP Gateway (stdio)stdio/JSON-RPCClaude Code, OpenClaw, any MCP client
MCP Gateway (HTTP)Streamable HTTPRemote agents, MCP registry, multi-agent
HTTP ProxyHTTP/HTTPSCodex, curl, any HTTP client

Example Policy

yaml
# policies/base.yamlmetadata:  name: my-policy  scope: global
rules:  - name: allow-reads    verdict: allow    priority: 10    match:      actions: ["read*", "get*", "list*"]
  - name: block-destructive-in-prod    verdict: deny    priority: 100    match:      actions: ["delete*", "drop*"]    conditions:      environments: ["production"]
  - name: default-deny    verdict: deny    match: {}

See examples/policies/ for complete policy sets (startup, enterprise, development, multi-agent).

CLI

bulwark init <path>              # Scaffold a new projectbulwark proxy start              # Start HTTP/HTTPS proxybulwark mcp start                # Start MCP gateway (stdio)bulwark mcp serve                # Start MCP gateway (HTTP)bulwark doctor                   # Diagnose setup issues (9 checks)bulwark status                   # Health dashboardbulwark policy validate          # Validate policy filesbulwark policy test --dir <path> # Test policies against audit logbulwark session create|list|revoke|inspectbulwark cred add|list|remove|testbulwark audit search|tail|stats|export|verifybulwark inspect scan|rules       # Content inspectionbulwark ca export|path           # CA certificate managementbulwark completions <shell>      # Shell completions (bash/zsh/fish)

Documentation

Development

bash
git clone https://github.com/bpolania/bulwark.gitcd bulwarkcargo build --workspacecargo test --workspace          # 487 testscargo clippy --workspace --all-targets -- -D warnings

Project Structure

crates/  cli/        # CLI binary and commands  proxy/      # HTTP/HTTPS forward proxy with TLS MITM  mcp/        # MCP governance gateway  config/     # Configuration loading and types  policy/     # YAML policy engine with hot-reload  vault/      # Credential storage and session management  audit/      # Tamper-evident audit logging  inspect/    # Content inspection (secrets, PII, injection)  ratelimit/  # Token-bucket rate limiter and cost tracker  common/     # Shared types and error definitions

License

Apache 2.0. See LICENSE.

來源:README.md,提交 7563549

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.2.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分