mcpField
S
slb

slb

github.com/dicklesworthstone安全7352 次安装7 周前更新
代码仓库

关于 slb

SLB 是一个 Go 命令行工具,为编码 Agent 发起的潜在破坏性命令实施双人审批规则。命令经风险分类并获得所需审查后,才会在本地 shell 中执行。

主要功能

  1. 01按风险等级分类命令
  2. 02根据风险要求审批
  3. 03执行前验证审批状态和命令完整性
  4. 04支持试运行和回滚状态捕获
  5. 05提供会话、审查和审计命令
  6. 06集成 Claude Code hooks

适用场景

  1. 01拦截编码 Agent 发起的破坏性命令
  2. 02协调多个 Agent 会话之间的同伴审批
  3. 03在 TUI 中审查待处理命令请求
  4. 04审计命令结果和执行历史

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dicklesworthstone/agent_flywheel_clawdbot_skills_and_integrations --skill slb

安装后在 Claude Code 中输入/slb确认已加载。

详细介绍

SLB — 同步启动按钮

一个 Go CLI,用于在 AI 编码 Agent 执行可能具有破坏性的命令时实施双人规则。当 Agent 想要执行有风险的操作(例如 rm -rf、git push --force、kubectl delete、DROP TABLE)时,SLB 会要求经过同伴审核并明确批准后才能执行。

为什么需要它

编码 Agent 可能会只顾眼前、产生幻觉,或误解上下文。第二位审核者(最好使用不同的模型或工具)可以在错误造成不可逆后果之前将其发现。

SLB 专为多 Agent 工作流而构建,其中许多 Agent 终端并行运行,一条错误命令就可能破坏工作成果、数据或基础设施。

关键设计:客户端执行

命令在你自己的 shell 环境中运行,而非在服务上运行。守护进程是公证者(NOTARY),负责验证批准,而不是执行命令。这意味着命令会继承以下内容:

  • AWS_PROFILE、AWS_ACCESS_KEY_ID
  • KUBECONFIG
  • 已激活的虚拟环境
  • SSH_AUTH_SOCK
  • 数据库连接字符串

风险等级

等级批准数自动批准示例
CRITICAL(严重)2+从不rm -rf /、DROP DATABASE、terraform destroy、git push --force
DANGEROUS(危险)1从不rm -rf ./build、git reset --hard、kubectl delete、DROP TABLE
CAUTION(谨慎)030 秒后rm file.txt、git branch -d、npm uninstall
SAFE(安全)0立即rm *.log、git stash、kubectl delete pod

快速开始

安装
# One-liner
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/slb/main/scripts/install.sh | bash

# Or with go install
go install github.com/Dicklesworthstone/slb/cmd/slb@latest
初始化项目
cd /path/to/project
slb init

创建 .slb/ 目录,其中包含:

  • state.db - SQLite 数据库(事实来源)
  • config.toml - 项目配置
  • pending/ - 待处理请求的 JSON 文件
  • logs/ - 执行日志
基本工作流
# 1. Start a session (as an AI agent)
slb session start --agent "GreenLake" --program "claude-code" --model "opus"
# Returns: session_id and session_key

# 2. Run a dangerous command (blocks until approved)
slb run "rm -rf ./build" --reason "Clean build artifacts" --session-id <id>

# 3. Another agent reviews and approves
slb pending                    # See what's waiting
slb review <request-id>        # View full details
slb approve <request-id> --session-id <reviewer-id> --comment "Looks safe"

# 4. Original command executes automatically after approval

命令参考

会话管理
slb session start --agent <name> --program <prog> --model <model>
slb session end --session-id <id>
slb session resume --agent <name> --create-if-missing  # Resume after crash
slb session list                               # Show active sessions
slb session heartbeat --session-id <id>        # Keep session alive
slb session gc --threshold 2h                  # Clean stale sessions
请求与运行
# Primary command (atomic: check, request, wait, execute)
slb run "<command>" --reason "..." --session-id <id>

# Plumbing commands
slb request "<command>" --reason "..."         # Create request only
slb status <request-id> --wait                 # Check/wait for status
slb pending --all-projects                     # List pending requests
slb cancel <request-id>                        # Cancel own request
审核与批准
slb review <request-id>                        # Show full details
slb approve <request-id> --session-id <id> --comment "..."
slb reject <request-id> --session-id <id> --reason "..."
执行
slb execute <request-id>                       # Execute approved request
slb emergency-execute "<cmd>" --reason "..."   # Human override (logged)
slb rollback <request-id>                      # Rollback if captured
模式管理
slb patterns list --tier critical              # List patterns by tier
slb patterns test "<command>"                  # Check what tier a command gets
slb patterns add --tier dangerous "<pattern>"  # Add runtime pattern
守护进程与 TUI
slb daemon start --foreground                  # Start background daemon
slb daemon stop                                # Stop daemon
slb daemon status                              # Check daemon status
slb tui                                        # Launch interactive TUI
slb watch --session-id <id> --json             # Stream events (NDJSON)
Claude Code 钩子
slb hook install                               # Install PreToolUse hook
slb hook status                                # Check installation
slb hook test "<command>"                      # Test classification
slb hook uninstall                             # Remove hook
历史记录与审计
slb history --tier critical --status executed  # Filter history
slb history -q "rm -rf"                        # Full-text search
slb show <request-id> --with-reviews           # Detailed view
slb outcome record <request-id> --problems     # Record feedback
slb outcome stats                              # Execution statistics

模式匹配引擎

分类算法
  1. 规范化:使用支持 shell 语法的分词方式解析命令

    • 去除包装前缀:sudo、doas、env、time、nohup
    • 从 bash -c 'command' 中提取内部命令
    • 解析路径:./foo → /absolute/path/foo
  2. 复合命令处理:包含 ;、&&、||、| 的命令会被拆分,并分别对每个片段进行分类。以风险最高的片段为准:

    echo "done" && rm -rf /etc    →  CRITICAL (rm -rf /etc wins)
    ls && git status              →  SAFE (no dangerous patterns)
    
  3. 支持 Shell 语法的拆分:引号内的分隔符会保留:

    psql -c "DELETE FROM users; DROP TABLE x;"  →  Single segment (SQL)
    echo "foo" && rm -rf /tmp                   →  Two segments
    
  4. 模式优先级:SAFE → CRITICAL → DANGEROUS → CAUTION(第一个匹配项优先)

  5. 解析失败时的安全措施:如果解析失败,风险等级会上调一级:

    • SAFE → CAUTION
    • CAUTION → DANGEROUS
    • DANGEROUS → CRITICAL
默认模式

CRITICAL(需要 2 次以上批准): rm -rf /...、DROP DATABASE/SCHEMA、TRUNCATE TABLE、terraform destroy、kubectl delete node/namespace/pv/pvc、git push --force、aws terminate-instances、dd ... of=/dev/

DANGEROUS(需要 1 次批准): rm -rf、git reset --hard、git clean -fd、kubectl delete、terraform destroy -target、DROP TABLE、chmod -R、chown -R

CAUTION(30 秒后自动批准): rm <file>、git stash drop、git branch -d、npm/pip uninstall

SAFE(跳过审核): rm *.log、rm *.tmp、git stash、kubectl delete pod、npm cache clean

请求生命周期

状态机
                    ┌─────────────┐
                    │   PENDING   │
                    └──────┬──────┘
           ┌───────────────┼───────────────┐───────────────┐
           ▼               ▼               ▼               ▼
     ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
     │ APPROVED │    │ REJECTED │    │ CANCELLED│    │ TIMEOUT  │
     └────┬─────┘    └──────────┘    └──────────┘    └────┬─────┘
          │              (terminal)      (terminal)       │
          ▼                                               ▼
     ┌──────────┐                                   ┌──────────┐
     │EXECUTING │                                   │ESCALATED │
     └────┬─────┘                                   └──────────┘
          │
   ┌──────┴──────┬──────────┐
   ▼             ▼          ▼
┌────────┐  ┌─────────┐  ┌────────┐
│EXECUTED│  │EXEC_FAIL│  │TIMED_OUT│
└────────┘  └─────────┘  └────────┘
(terminal)   (terminal)   (terminal)
批准有效期
  • 标准请求:30 分钟(可配置)
  • CRITICAL 请求:10 分钟(限制更严格)

如果批准在执行前过期,则需要重新批准。

执行验证(5 道安全关卡)

在执行任何命令之前,必须通过以下 5 道关卡:

关卡检查项
1. 状态请求必须处于 APPROVED 状态
2. 过期时间批准的 TTL 必须尚未过期
3. 哈希命令的 SHA-256 哈希必须匹配(篡改检测)
4. 风险等级风险等级必须仍然匹配(模式可能已更改)
5. 首个执行者原子声明可防止竞态条件

试运行与回滚

试运行预检

对于受支持的命令,SLB 可以先运行试运行变体:

命令试运行变体
terraform applyterraform plan
kubectl applykubectl diff
git pushgit diff(显示将发生的更改)
[general]
enable_dry_run = true
回滚状态捕获

执行之前,SLB 可以捕获状态:

[general]
enable_rollback_capture = true
max_rollback_size_mb = 100

捕获的状态包括:

  • 文件系统:受影响路径的 Tar 归档
  • Git:HEAD 提交、分支、脏状态、未跟踪文件
  • Kubernetes:受影响资源的 YAML 清单
slb rollback <request-id>           # Restore captured state
slb rollback <request-id> --force   # Force overwrite

配置

配置采用分层结构(优先级从低到高):

  1. 内置默认值
  2. 用户配置(~/.slb/config.toml)
  3. 项目配置(.slb/config.toml)
  4. 环境变量(SLB_*)
  5. 命令行标志
配置示例
[general]
min_approvals = 2
request_timeout = 1800              # 30 minutes
approval_ttl_minutes = 30
timeout_action = "escalate"         # or "auto_reject", "auto_approve_warn"
require_different_model = true      # Reviewer must use different AI model

[rate_limits]
max_pending_per_session = 5
max_requests_per_minute = 10

[notifications]
desktop_enabled = true
webhook_url = "https://slack.com/webhook/..."

[daemon]
tcp_addr = ""                       # For Docker/remote agents
tcp_require_auth = true

[agents]
trusted_self_approve = ["senior-agent"]
trusted_self_approve_delay_seconds = 300

高级配置

跨项目审查
[general]
cross_project_reviews = true
review_pool = ["agent-a", "agent-b", "human-reviewer"]
冲突解决
[general]
conflict_resolution = "any_rejection_blocks"  # Default
# Options: any_rejection_blocks | first_wins | human_breaks_tie
动态法定人数
[patterns.critical]
dynamic_quorum = true
dynamic_quorum_floor = 2    # Minimum approvals even with few reviewers

守护进程架构

IPC 通信

Unix 域套接字(项目专属):

/tmp/slb-<hash>.sock
JSON-RPC 协议

所有守护进程通信都使用 JSON-RPC 2.0:

{"jsonrpc": "2.0", "method": "hook_query", "params": {"command": "rm -rf /"}, "id": 1}

可用方法:hook_query、hook_health、verify_execution、subscribe

TCP 模式(Docker/远程)
[daemon]
tcp_addr = "0.0.0.0:9876"
tcp_require_auth = true
tcp_allowed_ips = ["192.168.1.0/24"]
超时处理
操作行为
escalate转为 ESCALATED 状态,并通知人工审核者(默认)
auto_reject自动拒绝请求
auto_approve_warn自动批准 CAUTION 风险等级的请求,并发出警告

Agent 事件流

slb watch 提供实时 NDJSON 事件流:

slb watch --session-id <id>
{"type":"request_pending","request_id":"abc123","tier":"dangerous","command":"rm -rf ./build","ts":"..."}
{"type":"request_approved","request_id":"abc123","reviewer":"BlueLake","ts":"..."}
{"type":"request_executed","request_id":"abc123","exit_code":0,"ts":"..."}

事件类型:request_pending、request_approved、request_rejected、request_executed、request_timeout、request_cancelled

自动批准模式(适用于审查 Agent)
slb watch --session-id <id> --auto-approve-caution

请求附件

为审查者提供上下文:

# Attach file
slb request "DROP TABLE users" --reason "..." --attach ./schema.sql

# Attach screenshot
slb request "kubectl delete deployment" --reason "..." --attach ./dashboard.png

# Attach command output
slb request "terraform destroy" --reason "..." --attach-cmd "terraform plan -destroy"

紧急覆盖

在真正的紧急情况下,人工可以绕过限制,但会进行详尽的日志记录:

# Interactive (prompts for confirmation)
slb emergency-execute "rm -rf /tmp/broken" --reason "System emergency: disk full"

# Non-interactive (requires hash acknowledgment)
HASH=$(echo -n "rm -rf /tmp/broken" | sha256sum | cut -d' ' -f1)
slb emergency-execute "rm -rf /tmp/broken" --reason "Emergency" --yes --ack $HASH

保障措施:必须说明原因、确认哈希、详尽记录日志、可选择捕获回滚状态。

结果跟踪

记录执行反馈,以改进模式分类:

slb outcome record <request-id>                          # Success
slb outcome record <request-id> --problems --description "Deleted wrong files"
slb outcome stats                                        # Statistics

TUI 仪表板

slb tui
┌─────────────────────────────────────────────────────────────────────┐
│  SLB Dashboard                                                       │
├─────────────────┬───────────────────────────────────────────────────┤
│  AGENTS         │  PENDING REQUESTS                                  │
│  ───────        │  ────────────────                                  │
│▸ GreenLake      │▸ abc123 CRITICAL rm -rf /etc      BlueLake 2m     │
│  BlueLake       │  def456 DANGEROUS git reset --hard GreenLake 5m   │
├─────────────────┴───────────────────────────────────────────────────┤
│  ACTIVITY                                                            │
│  10:30:15 GreenLake approved abc123                                  │
│  10:28:42 BlueLake requested def456 (DANGEROUS)                      │
└─────────────────────────────────────────────────────────────────────┘

按键:Tab(切换面板)、↑/↓(导航)、Enter(查看)、a(批准)、r(拒绝)、q(退出)

Claude Code Hook 集成

# Install hook
slb hook install

# Hook actions returned to Claude Code:
# - allow: Command proceeds
# - ask: User prompted (CAUTION tier)
# - block: Blocked with message to use `slb request`

生成 IDE 集成:

slb integrations claude-hooks > ~/.claude/hooks.json
slb integrations cursor-rules > .cursorrules

安全设计原则

纵深防御(6 层)
  1. 基于模式的分类
  2. 同行审查要求
  3. 命令哈希绑定(SHA-256)
  4. 批准 TTL
  5. 执行验证关卡
  6. 审计日志记录
加密保证
  • 命令绑定:执行时验证 SHA-256 哈希
  • 审查签名:使用会话密钥进行 HMAC
  • 会话密钥:按会话生成,绝不以明文形式存储
默认拒绝行为
  • 守护进程不可达 → 阻止危险命令(Hook)
  • 解析错误 → 将风险等级提升一级
  • 批准已过期 → 要求重新批准
  • 哈希不匹配 → 拒绝执行

退出码

代码含义
0成功
1一般错误
2参数无效
3未找到请求
4权限被拒绝
5超时
6请求频率受限

环境变量

变量描述
SLB_MIN_APPROVALS最低批准数
SLB_REQUEST_TIMEOUT请求超时时间(秒)
SLB_TIMEOUT_ACTION超时时的处理方式
SLB_DESKTOP_NOTIFICATIONS启用桌面通知
SLB_WEBHOOK_URLWebhook 通知 URL
SLB_DAEMON_TCP_ADDRTCP 监听地址
SLB_TRUSTED_SELF_APPROVE以逗号分隔的可信 Agent

故障排除

“守护进程未运行”警告

SLB 无需守护进程也能运行(基于文件轮询)。启动守护进程以启用实时功能:

slb daemon start
“活动会话已存在”
slb session resume --agent "YourAgent" --create-if-missing
批准已过期

重新请求:

slb run "<command>" --reason "..."
命令哈希不匹配

批准后命令已被修改。请针对修改后的命令重新请求批准。

安全提示

SLB 为危险操作增加了阻力和同行评审。它不能取代:

  • 最小权限凭据
  • 环境防护措施
  • 适当的访问控制
  • 备份策略

请将 SLB 用作纵深防御,而不要将其作为唯一的保护措施。

与 Flywheel 集成

工具集成方式
Agent Mail通过收件箱通知审核者;跟踪审计记录
BV将 SLB 请求作为 beads 跟踪
CASS搜索各会话中过往的 SLB 决策
DCGDCG 自动拦截;SLB 增加同行评审层
NTM协调不同 Agent 终端之间的审核

评论

支持 Markdown