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 分