mcpField
S
slb

slb

github.com/dicklesworthstoneセキュリティ7352 回インストール8 週間前に更新
リポジトリ

slb について

SLB は、コーディングエージェントが開始する破壊的な可能性のあるコマンドに二者承認ルールを適用する Go コマンドラインツールです。リスク分類と必要なレビューを経た後、ローカルシェルでコマンドを実行します。

主な機能

  1. 01リスク段階ごとにコマンドを分類
  2. 02リスクに応じて承認を要求
  3. 03実行前に承認とコマンドの完全性を検証
  4. 04ドライランとロールバック用状態の保存に対応
  5. 05セッション、レビュー、監査のコマンドを提供
  6. 06Claude Code hooks と連携

活用シーン

  1. 01コーディングエージェントの破壊的コマンドを制御
  2. 02複数エージェントセッション間の相互承認を調整
  3. 03TUI で保留中のコマンド要求をレビュー
  4. 04コマンドの結果と実行履歴を監査

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/slbを入力して読み込まれたか確認します。

詳細

SLB — 同時起動ボタン

AI コーディングエージェントが破壊的な可能性のあるコマンドを実行する際に、二者承認ルールを適用する Go 製 CLI です。エージェントがリスクのある操作(例:rm -rf、git push --force、kubectl delete、DROP TABLE)を実行しようとすると、SLB は実行前にピアレビューと明示的な承認を要求します。

開発の背景

コーディングエージェントは視野が狭くなったり、幻覚を起こしたり、文脈を誤解したりすることがあります。2 人目のレビュアー(できれば異なるモデルやツールを使用するレビュアー)が、取り返しのつかない事態になる前に誤りを見つけます。

SLB は、複数のエージェントターミナルが並行して動作し、1 つの不適切なコマンドで作業、データ、インフラストラクチャが破壊される可能性があるマルチエージェントワークフロー向けに構築されています。

重要な設計:クライアント側での実行

コマンドはサーバー上ではなく、あなたのシェル環境で実行されます。 デーモンは実行者ではなく、承認を検証する NOTARY です。そのため、コマンドは次の環境を引き継ぎます。

  • AWS_PROFILE、AWS_ACCESS_KEY_ID
  • KUBECONFIG
  • 有効化された仮想環境
  • SSH_AUTH_SOCK
  • データベース接続文字列

リスクレベル

レベル承認数自動承認例
CRITICAL2 以上なしrm -rf /、DROP DATABASE、terraform destroy、git push --force
DANGEROUS1なしrm -rf ./build、git reset --hard、kubectl delete、DROP TABLE
CAUTION030 秒後rm file.txt、git branch -d、npm uninstall
SAFE0即時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. 正規化:シェルを考慮したトークン化によってコマンドを解析します

    • ラッパープレフィックスを除去します: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. シェルを考慮した分割:引用符内の区切り文字は保持されます。

    psql -c "DELETE FROM users; DROP TABLE x;"  →  Single segment (SQL)
    echo "foo" && rm -rf /tmp                   →  Two segments
    
  4. パターンの優先順位:SAFE → CRITICAL → DANGEROUS → CAUTION(最初に一致したものを適用)

  5. フェイルセーフな解析処理:解析に失敗した場合、レベルが1 段階引き上げられます。

    • 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"]
タイムアウト処理
アクション動作
escalateESCALATED に遷移し、人間に通知します(デフォルト)
auto_rejectリクエストを自動的に却下します
auto_approve_warnCAUTION ティアを警告付きで自動承認します

エージェントイベントのストリーミング

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

自動承認モード(レビュアーエージェント向け)
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 フックの統合

# 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
  • セッションキー:セッションごとに生成し、平文では保存しません
フェイルクローズ動作
  • デーモンに接続できない → 危険なコマンドをブロックします(フック)
  • 解析エラー → ティアを1段階引き上げます
  • 承認の期限切れ → 新たな承認を要求します
  • ハッシュの不一致 → 実行を却下します

終了コード

コード意味
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信頼するエージェント(カンマ区切り)

トラブルシューティング

「デーモンが実行されていません」という警告

SLB はデーモンなしでも動作します(ファイルベースのポーリング)。リアルタイムで使用するには起動します。

slb daemon start
「アクティブなセッションはすでに存在します」
slb session resume --agent "YourAgent" --create-if-missing
承認の期限切れ

再リクエストします。

slb run "<command>" --reason "..."
コマンドハッシュの不一致

承認後にコマンドが変更されました。変更後のコマンドを再リクエストしてください。

安全に関する注意

SLB は、危険な操作に対して慎重な対応と相互レビューを追加します。以下の代わりにはなりません。

  • 最小権限の認証情報
  • 環境の安全対策
  • 適切なアクセス制御
  • バックアップ戦略

SLB は唯一の保護策ではなく、多層防御として使用してください。

Flywheel との連携

ツール連携
Agent Mail受信トレイ経由でレビュアーに通知し、監査証跡を追跡します
BVSLB リクエストを beads として追跡します
CASSセッションを横断して過去の SLB の判断を検索します
DCGDCG が自動的にブロックし、SLB が相互レビューのレイヤーを追加します
NTMエージェントのターミナル間でレビューを調整します

コメント