关于 slb
SLB 是一个 Go 命令行工具,为编码 Agent 发起的潜在破坏性命令实施双人审批规则。命令经风险分类并获得所需审查后,才会在本地 shell 中执行。
主要功能
- 01按风险等级分类命令
- 02根据风险要求审批
- 03执行前验证审批状态和命令完整性
- 04支持试运行和回滚状态捕获
- 05提供会话、审查和审计命令
- 06集成 Claude Code hooks
适用场景
- 01拦截编码 Agent 发起的破坏性命令
- 02协调多个 Agent 会话之间的同伴审批
- 03在 TUI 中审查待处理命令请求
- 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(谨慎) | 0 | 30 秒后 | 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
模式匹配引擎
分类算法
-
规范化:使用支持 shell 语法的分词方式解析命令
- 去除包装前缀:
sudo、doas、env、time、nohup - 从
bash -c 'command'中提取内部命令 - 解析路径:
./foo→/absolute/path/foo
- 去除包装前缀:
-
复合命令处理:包含
;、&&、||、|的命令会被拆分,并分别对每个片段进行分类。以风险最高的片段为准:echo "done" && rm -rf /etc → CRITICAL (rm -rf /etc wins) ls && git status → SAFE (no dangerous patterns) -
支持 Shell 语法的拆分:引号内的分隔符会保留:
psql -c "DELETE FROM users; DROP TABLE x;" → Single segment (SQL) echo "foo" && rm -rf /tmp → Two segments -
模式优先级:SAFE → CRITICAL → DANGEROUS → CAUTION(第一个匹配项优先)
-
解析失败时的安全措施:如果解析失败,风险等级会上调一级:
- 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 apply | terraform plan |
kubectl apply | kubectl diff |
git push | git 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
配置
配置采用分层结构(优先级从低到高):
- 内置默认值
- 用户配置(
~/.slb/config.toml) - 项目配置(
.slb/config.toml) - 环境变量(
SLB_*) - 命令行标志
配置示例
[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 层)
- 基于模式的分类
- 同行审查要求
- 命令哈希绑定(SHA-256)
- 批准 TTL
- 执行验证关卡
- 审计日志记录
加密保证
- 命令绑定:执行时验证 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_URL | Webhook 通知 URL |
SLB_DAEMON_TCP_ADDR | TCP 监听地址 |
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 决策 |
| DCG | DCG 自动拦截;SLB 增加同行评审层 |
| NTM | 协调不同 Agent 终端之间的审核 |