Skip to main content
Glama

BranchLift

AIエージェントのバックエンド状態のためのGit。

CI npm Homebrew License

Git worktreeはコードを分離します。BranchLiftは、並行して動作する各コーディングエージェントの背後にあるPostgreSQL、MySQL、MongoDB、Redis、Kafka、Docker Composeの状態を分離し、バージョン管理します。

各エージェントは、他のエージェントと衝突することなく変更できる実際のバックエンドを取得します。その状態は、不変の子スナップショットとしてコミットし、差分を確認し、リセットし、または既に管理しているマシンに移動できます。

BranchLiftは、1つの不変バックエンドスナップショットを、3つの並行コーディングエージェント用の分離された状態に変換し、その後、変更をゴールデン状態にリセットします

main snapshot
├── agent/fix-auth      → isolated worktree + PostgreSQL + Redis + ports
├── agent/billing       → isolated worktree + PostgreSQL + Redis + ports
└── agent/migration     → isolated worktree + PostgreSQL + Redis + ports

BranchLiftは、ローカルファースト、エージェント非依存、セルフホスト型であり、BranchLiftアカウント、ホスト型サービス、有料依存関係は不要です。

5分で分離を実証

組み込みデモは、実際のPostgreSQL 16とRedis 7コンテナを使用します。以下のコマンドは、同じゴールデンスナップショットから2つの環境を作成し、1つのデータベースのみを変更し、その変更を子スナップショットとして保持し、状態の差分を表示し、環境をリセットします。

branchlift demo
cd branchlift-demo

# A second agent starts from the same immutable dev snapshot.
branchlift spawn agent/review --snapshot dev

# Mutate only agent/demo's PostgreSQL state.
branchlift exec agent/demo -- docker compose exec -T postgres \
  psql -U branchlift -d app -c "CREATE TABLE agent_demo (id integer PRIMARY KEY);"

# This prints an empty line: agent/review never sees agent/demo's table.
branchlift exec agent/review -- docker compose exec -T postgres \
  psql -U branchlift -d app -tAc "SELECT to_regclass('public.agent_demo');"

# Version the changed backend, inspect it, then restore golden state.
branchlift snapshot commit demo-mutated --from agent/demo
branchlift snapshot diff dev demo-mutated
branchlift reset agent/demo

これが中核となる契約です: 分離 → 変更 → コミット → 差分 → リセット。同じライフサイクルは、固定されたDocmost、n8n、Langfuseスタックに対して公開Linux CIで実行されます。エビデンス契約を参照してください。

Related MCP server: local-mcp-toolbox

ローカルコントロールプレーン

オプションのループバック専用UIは、環境、不変の状態系統、セキュリティ態勢、リモート、監査イベント、および制限付きエージェントタスクレビューを1か所にまとめます。

Codex、Claude、Cursor用の5つのプロンプトから差分へのカンバンレーンを示すBranchLiftのローカルmacOSスタイルワークスペース

BranchLiftの位置付け

2026年の並行エージェントエコシステムには、優れたセッションオーケストレーター(Conductor、Vibe Kanban、Claude Squad、Nimbalyst)があり、worktree上でエージェントを起動し、差分を視覚化します。Coastsなどのランタイムオーケストレーターは、分離されたコンテナ、シードされたボリューム、エージェントシェル、シークレット、リモート開発を備えてさらに進んでいます。Codespaces、DevPod、E2Bなどのクラウドプラットフォームは、マシン全体を分離します。

BranchLiftは、バージョン管理されたバックエンド状態レイヤーに最も深く踏み込みます。worktreeやエージェントセッションを作成するものが何であれ、BranchLiftは、変更、コンテンツアドレス指定された子スナップショットとしてのコミット、セマンティック差分、リセットが可能な実際のCompose状態を提供します。また、最小権限のDockerサンドボックスを提供し、既に管理しているマシンを厳格なホストキーSSHを介してワーカーに変えます。

機能

セッションオーケストレーター

Coasts

クラウド開発VM

BranchLift

エージェント/worktreeワークスペースUX

✅ コア

✅ コア

部分

✅ プロンプトカンバン + 制限付きGit差分レビュー + hooks/MCP

シードされた分離バックエンド状態

通常は共有

✅ シードされたボリューム

全体VMイメージ

✅ 検出された任意のComposeボリューム

コミット → 親系統 → セマンティック差分 → リセット

❌

文書化されていない

イメージ/スナップショットレベル

✅ コアデータプレーン契約

エージェント実行境界

通常はホスト

コンテナ / DinDモデル

✅ VMサイズ

✅ ホストソケットなし、ポリシーでゲート

既に所有しているリモートマシン

まれ

✅ リモートサービス

プロバイダ依存

✅ プレーンSSH、パブリックデーモンなし

永続的なリモートビルドとキャッシュ

まれ

ランタイム指向

プロバイダ依存

✅ リポジトリスコープのBuildKit

ローカルライフサイクル/セキュリティ/監査UI

部分

✅ ワークスペースUI

プロバイダUI

✅ トークン保護された状態コントロールプレーン

より広範なオールインワンエージェントワークスペースとDinDスタイルのランタイムオーケストレーションが必要な場合は、Coastsを使用してください。データベース/キュー/キャッシュの変更が再現可能、レビュー可能、リセット可能であり、ローカルおよびSSHホスト間で移植可能である必要がある場合は、BranchLiftを使用してください。これらは構成することもできます: BranchLiftは、どのセッションレイヤーが勝つかに関係なく、その下で意図的に有用です。

詳細な2026年8月のランドスケープレビューについては、docs/COMPARISON.mdを参照してください。

問題

Codex、Claude、Cursor、または別のコーディングエージェントを別々のworktreeで実行しても、コードのみが分離されます。ステートフルなバックエンドは依然として衝突します:

  • マイグレーションが同じデータベースを変更する;

  • ワーカーが別のエージェントのジョブを消費する;

  • テストが共有Redisインスタンスをフラッシュする;

  • Composeスタックが固定ポートとコンテナ名をめぐって競合する;

  • すべての新しいスタックが空で始まり、遅いマイグレーションとシードを繰り返す。

BranchLiftは、1つの停止した不変のゴールデンスナップショットを準備し、各ブランチの状態をクローンします。APFS、Btrfs、およびreflink対応XFSでは、クローンは最初はスナップショットとディスクブロックを共有し、変更されたブロックのみが新しいスペースを消費します。

現在のステータス

現在のmainブランチは、実際のコンテナライフサイクル契約を通じて、PostgreSQL 16、MySQL 8.4 LTS、MongoDB 8、Kafka 3.9、Redis 7をカバーしています。MongoDB/Kafka契約は、シード、分離された変更、子スナップショットコミット、リセット、再スポーンされた状態を検証します。macOSはWiredTigerをランタイムネイティブボリュームに自動的にハイドレートし、スナップショットを移植可能に保ちます。BranchLiftはまた、既存の停止整合性のあるCompose状態をインポートし、古いランタイムを安全にガベージコレクトし、固定されたDocmost、n8n、Langfuseスタックに対して公開Linuxライフサイクルエビデンスを実行します。

現在サポートされているもの:

  • Docker Compose 2.24.4+ または明示的に選択されたPodman Composeプロバイダ;

  • Git worktree;

  • 名前付きボリュームの検出と分離;

  • macOS Docker DesktopおよびLinux上のPostgreSQL;

  • macOS Docker DesktopおよびLinux上のMySQL 8.4 LTS;

  • MongoDB 8、Kafka 3.9、Redis 7、および一般的な名前付きボリューム;

  • macOSおよびLinuxネイティブ、さらにLinuxファイルシステムにリポジトリを保持するWSL2を介したWindows;

  • APFS clonefileおよびLinux reflink、再帰コピーフォールバック付き;

  • すべてのLinuxケーパビリティをドロップし、no-new-privileges、読み取り専用ルート、ホストDockerソケットなし、none、バックエンドのみ、またはアウトバウンドネットワーキングを備えたリソース制限付きDockerサンドボックス実行;

  • 明示的なプロジェクトポリシーのオプトイン後のみのホストエージェントコマンド;

  • シークレットをworktreeに書き込まずに、スコープ付きenvおよび読み取り専用/run/secrets/...ファイル注入;

  • レガシーcompose.file互換性を備えた複数のマージされたComposeファイル;

  • 不変スナップショットの一覧表示と依存関係保護された削除;

  • doctor --fixによるランタイム監査と保守的な孤立クリーンアップ;

  • 古い所有者診断を備えたプロセス間スナップショットおよびインスタンスロック;

  • branchlift execによるコンテキスト認識ホストコマンド;

  • 放棄されたスナップショットビルドとインスタンス作成のクラッシュリカバリ;

  • Codex、Claude、IDE、またはユーザーによって既に作成されたworktreeへのアタッチ;

  • Codex、Claude Code、Cursor用の冪等なセッション開始フック;

  • アタッチ、ランタイムヘルス/ログ、セキュリティ態勢、スナップショット/差分、監査イベント、サニタイズされたリモートインベントリを公開するローカルMCPサーバー;

  • previewとターゲットを絞ったComposeログによるライブサービス/ヘルス検査。

  • 既存のComposeプロジェクトからのクラッシュ整合性スナップショットインポート;

  • 停止および失敗したランタイムの年齢フィルタリング、ロック再チェック付きガベージコレクション;

  • Langfuse、n8n Hosting、Docmost、Twenty、Immich用の固定互換性契約;

  • Docmost、n8n Hosting、および6サービスLangfuseスタックの公開Linuxライフサイクルエビデンス;

  • 並列マルチボリュームクローンとポート検出;

  • 生サンプルを含む記録された512 MiB Btrfs reflinkベンチマーク。

  • コンテンツアドレス指定されたスナップショットマニフェスト、親系統、クラッシュ整合性のあるインスタンスコミット、セマンティックスナップショット差分;

  • ライフサイクル、状態、セキュリティ、監査、リモート操作のためのループバック専用、トークン保護されたコントロールプレーンUI;

  • 許可リストされたプロトコルとユーザースコープ、sudo不要のワーカーセットアップを備えた厳格なホストキーSSHワーカー。

  • 競合検出付きライブワーキングツリー同期と自動ループバックSSHポートトンネルを備えたワンコマンドリモート開発;

  • ホストシェルやDockerソケットアクセスなしのサンドボックス強制リモートエージェントシェル;

  • リモートビルドと正確な確認キャッシュ管理を備えた永続的なリポジトリスコープBuildKitビルダー。

  • プライベートプロンプト、ドラッグアンドドロップ状態、プロンプトコピー、制限付き読み取り専用Git差分レビューを備えた5レーンエージェントタスクワークスペース;

  • リポジトリスコープのビューアー/オペレーター/管理者UIトークン。生の値は一度だけ表示され、永続化されません;

  • ホスト型調整サービスを望まないチーム向けのシークレットフリーの共有ファイルシステムノードレジストリ;

  • Docker/Podman CLI選択と明示的なWSL2診断。ネイティブWindows所有権セマンティクスが安全であるふりはしません。

Podmanサポートは、BRANCHLIFT_CONTAINER_CLI=podmanを介してローカルCompose、ボリューム、サンドボックス、プレビュー、doctorライフサイクルをカバーします。リモート永続BuildKitは依然として意図的にDocker Buildxを必要とします。ネイティブWindowsはサポートされていません—WSL2を使用してください。

インストール

要件: Node.js 22+、Git、Docker Compose 2.24.4+ または動作するComposeプロバイダを備えたPodman。

npm install -g branchlift

# or
brew tap MuratKomurcu1/tap
brew trust --formula MuratKomurcu1/tap/branchlift
brew install branchlift

Homebrew 6では、公式でないタップ式には明示的な信頼ステップが必要です。 バージョン管理されたGitHub Release tarballは、npmレジストリに依存しないフォールバックとして引き続き利用できます。

要件、ソースインストール、パッケージ検証については、docs/INSTALL.mdを参照してください。

クイックスタート

使い捨てのPostgreSQL + Redisプロジェクトで完全な製品を試してください:

branchlift demo

または、既存のComposeリポジトリを初期化、承認、スナップショット化、起動するには、次の1つのコマンドを使用します:

branchlift quickstart agent/fix-auth --trust-policy

--trust-policyは、クイックスタートがレビュー済みのComposeヘルスチェックとシードコマンドを実行する可能性があるため、明示的です。これがない場合、BranchLiftは構成分析後に停止し、ポリシーダイジェストを出力します。

compose.yamlまたはdocker-compose.ymlを含む既存のGitリポジトリ内でこれを実行します:

branchlift init --dry-run
branchlift init
branchlift inspect
branchlift security trust

initはbranchlift.yamlを作成します。そのファイルをコミットしてから、ゴールデンバックエンドを一度ビルドします:

標準のcompose.override.yaml/docker-compose.override.ymlコンパニオンを自動的に含み、実際に存在する.env/.env.localファイルのみをコピーします。非標準のマージスタックには、繰り返し--composeオプションを使用します。

branchlift snapshot dev

プロジェクトの通常のComposeスタックに必要な状態が既に含まれている場合は、再ビルドして再シードする代わりにインポートします:

branchlift snapshot import dev

# Supply the same project name used by `docker compose -p` when needed
branchlift snapshot import dev --project my-existing-stack

インポートは、現在実行中のサービスを記録し、クラッシュ整合性のあるファイルシステムコピーのためにそれらのサービスのみを停止し、戻る前にそれらを復元します。結果のスナップショットは不変です。BranchLiftは実行中のデータベースをクローンすることはありません。

分離されたブランチをスポーンし、デフォルトのDockerセキュリティ境界内でレビュー済みコマンドを実行します:

branchlift spawn agent/fix-auth
branchlift sandbox run agent/fix-auth --read-only-worktree -- npm test
branchlift list

ツールが既にworktreeを作成してチェックアウトしている場合は、代わりにそのworktreeからこれを実行します:

branchlift attach

アタッチされたworktreeは外部所有として記録されます。BranchLiftはそのバックエンド状態を管理しますが、worktree自体は削除しません。

サンドボックスイメージはローカルに既に存在している必要があります。BranchLiftは、未レビューのイメージを暗黙的にプルして実行することはありません。Codex、Claude Code、または他のツールを含むイメージをビルドし、security.sandbox.imageを設定してから、branchlift sandbox runを介してエージェントを実行します。レガシーspawn -- AGENTホスト実行は、security.allowHostAgentCommandsが明示的に有効になっている場合にのみ引き続き利用できます。

既存のエージェント設定を置き換えずに、自動セッション開始アタッチとプロジェクトスコープのMCPサーバーをインストールします:

branchlift agents install all
git add .codex .claude .cursor .mcp.json

all の代わりに codex、claude、または cursor を使用して、1つのクライアントのみを設定します。Codexは、初回実行前に新しいプロジェクトフックのレビューと信頼を求めます。

正確なポートとライブのComposeサービスヘルスを検査し、1つのサービスのログを読みます:

branchlift preview
branchlift logs agent/fix-auth --service postgres --tail 100

既存インスタンスのワークツリーと環境内で、テスト、マイグレーション、または別のツールを実行します:

branchlift exec agent/fix-auth -- npm test

環境をイミュータブルなスナップショットにリセットします:

branchlift reset agent/fix-auth

Gitワークツリーとブランチを保持したまま、ランタイム状態をクリーンアップします:

branchlift destroy agent/fix-auth

停止済み/失敗した環境を一括でプレビューまたは削除します:

branchlift gc --older-than 7d --dry-run
branchlift gc --older-than 7d

ガベージコレクションは、実行中/作成中のインスタンスを決して選択せず、ライフサイクルロック下で候補を再チェックし、BranchLiftが所有するワークツリーのみを削除します。外部ワークツリーは保持されます。

ワークツリーも削除しますが、クリーンな場合に限ります:

branchlift destroy agent/fix-auth --worktree

BranchLiftはGitブランチを決して削除しません。

設定

branchlift init は最小限のファイルを生成します:

version: 1
compose:
  files:
    - compose.yaml
  statefulServices:
    - postgres
    - redis
snapshot:
  default: dev
  healthTimeoutSeconds: 120
  seed: []
worktree:
  copyFiles:
    - .env

スナップショットシードコマンドは、すでに正常なComposeサービス内で実行されます:

snapshot:
  default: dev
  healthTimeoutSeconds: 120
  seed:
    - service: api
      command: ["npm", "run", "db:migrate"]
    - service: api
      command: ["npm", "run", "db:seed"]

スナップショットスタックは、そのファイルシステム状態がクローンに利用可能になる前に、クリーンにシャットダウンされます。

通常オーバーライドを使用するプロジェクトは、Composeマージ順でファイルをリストできます:

compose:
  files:
    - compose.yaml
    - compose.dev.yaml

古い compose.file: compose.yaml 形式も読み取り可能のままです。

プロジェクト実行ポリシーはコミットされますが、マシンローカルの承認とシークレット値はコミットされません:

security:
  sandbox:
    backend: docker
    image: my-reviewed-agent:local
    network: backend
    readOnlyRoot: true
    memory: 4g
    cpus: 2
    pidsLimit: 512
  allowHostAgentCommands: false
  allowSecretCommands: false
secrets:
  apiToken:
    source: { env: MY_API_TOKEN }
    target: { env: API_TOKEN }
    scopes: [sandbox]
    required: true
  credentials:
    source: { file: ~/.config/my-app/credentials.json }
    target: { file: /run/secrets/credentials.json }
    scopes: [sandbox]
    required: true
ui: { host: 127.0.0.1, port: 7788 }

ファイルターゲットは /run/secrets/... とサンドボックススコープに制限されます。コマンドシークレットソースとホストエージェントコマンドはデフォルトでブロックされます。docs/SECURITY-AND-SECRETS.md を参照してください。

branchlift.yaml をレビューした後、branchlift security trust を実行します。BranchLiftはワークツリー外にダイジェストのみを保存します。設定変更は承認を無効化し、新しいダイジェストがレビューされ信頼されるまで、Composeライフサイクル/スナップショット操作、サンドボックス実行、シークレット解決、ホストエージェント実行をブロックします。

有用なミューテーション済みインスタンスを子スナップショットとしてコミットし、データベースを起動せずに比較します:

branchlift snapshot commit migrated --from agent/fix-auth
branchlift snapshot diff dev migrated

ローカルコントロールプレーンを開くか、SSH経由で制御するマシンを登録します:

branchlift ui
branchlift remote add lab 192.0.2.10 --user developer --repo /srv/my-project
branchlift remote sync lab --snapshot dev
branchlift remote launch lab agent/fix-auth --snapshot dev
branchlift remote dev lab agent/fix-auth --snapshot dev

Workspaceセクションは、登録済みインスタンスワークツリー用の5レーンプロンプトかんばんと読み取り専用Gitレビューを追加します。チームアクセスはオプトインです:

branchlift task add "Fix auth race" --prompt "Reproduce, fix, test, and summarize" --branch agent/fix-auth --agent codex
branchlift team token create reviewer --role viewer
branchlift ui --team-access

# Publish prompt-free node inventory to a shared NFS/SMB/SSHFS directory
branchlift team registry publish --directory /shared/branchlift-registry

UIはループバックのみのままです。チームメイトは認証済みSSHトンネルを通じて接続し、自分のリポジトリトークンを使用します。Viewerは検査でき、operatorはタスクの作成/移動と環境の操作ができ、adminはリセット、破棄、削除、プルーニング、失効ができます。共有レジストリレコードは、意図的にプロンプト、トークン、シークレット値、ワークツリーパスを除外します。docs/TEAM.md を参照してください。

remote sync は、ユーザースコープのワーカーを自動的にインストール/検証し、コミットされた正確なGit HEAD を転送し、リモートがまだ持っていないスナップショットブロブのみを送信します。remote launch は、正確なコミットのワークツリーと分離されたバックエンドを追加します。remote dev はその後、追跡済みおよび追跡外・非無視の作業ファイルをミラーリングし、検出されたTCPサービスのループバックSSHフォワードを開き、停止するまで調整を続けます。ライブ同期は一方向であり、リモートの編集を上書きするのではなく拒否します。クラウドアカウント、サブスクリプション、公開コントロールデーモン、Docker-in-Dockerデーモンは不要です。docs/REMOTE.md を参照してください。

コマンド

branchlift demo [--directory PATH] [--no-run] [--json]
branchlift quickstart [BRANCH] [--snapshot NAME] [--no-start] [--trust-policy]
branchlift platform [--json]
branchlift init [--compose FILE]... [--dry-run] [--json]
branchlift inspect [--json]
branchlift snapshot [create] [NAME]
branchlift snapshot import [NAME] [--project COMPOSE_PROJECT] [--json]
branchlift snapshot list [--json]
branchlift snapshot delete NAME
branchlift spawn BRANCH [--snapshot NAME] [--no-start] [-- AGENT ...]
branchlift attach [--snapshot NAME] [--no-start] [-- AGENT ...]
branchlift start BRANCH [-- AGENT ...]
branchlift stop BRANCH
branchlift exec BRANCH -- COMMAND ...
branchlift reset BRANCH [--no-start]
branchlift list [--json]
branchlift preview [BRANCH] [--json]
branchlift logs [BRANCH] [--service NAME] [--tail N] [--follow] [--timestamps]
branchlift destroy BRANCH [--worktree]
branchlift doctor [--fix] [--json]
branchlift gc [--older-than 7d] [--dry-run] [--json]
branchlift benchmark [SNAPSHOT] [--iterations N] [--json]
branchlift agents install [all|codex|claude|cursor] [--dry-run] [--json]
branchlift task list|add|move|remove
branchlift team token create|list|revoke
branchlift team registry publish|list --directory PATH
branchlift mcp
branchlift remote dev REMOTE BRANCH [--snapshot NAME] [--trust-policy] [--no-tunnel]
branchlift remote live-sync REMOTE BRANCH
branchlift remote watch REMOTE BRANCH [--interval MS]
branchlift remote tunnel start|status|stop|watch REMOTE BRANCH
branchlift remote shell REMOTE BRANCH [--network none|backend|outbound]
branchlift remote agent REMOTE BRANCH [--read-only-worktree] -- COMMAND ...
branchlift remote build REMOTE --tag IMAGE [--branch BRANCH] [--network default|none] [--cache-max 20gb]
branchlift remote cache inspect REMOTE
branchlift remote cache prune REMOTE --confirm prune

エージェントが起動されると、BranchLiftは以下を提供します:

BRANCHLIFT_INSTANCE
BRANCHLIFT_CONTEXT
BRANCHLIFT_WORKTREE
COMPOSE_PROJECT_NAME
BRANCHLIFT_<SERVICE>_<CONTAINER_PORT>_HOST
BRANCHLIFT_<SERVICE>_<CONTAINER_PORT>_PORT
BRANCHLIFT_<SERVICE>_<CONTAINER_PORT>_URL

BRANCHLIFT_CONTEXT は、割り当てられたホストポートとサービスエンドポイントを含むJSONを指します。たとえば、コンテナポート5432を公開するPostgreSQLサービスは、BRANCHLIFT_POSTGRES_5432_PORT を受け取ります。

snapshot delete は、任意のインスタンスがスナップショットを参照している間は削除を拒否します。doctor は、スナップショットの内容、メタデータ参照、ワークツリー、Composeファイル、ライフサイクルロック、ランタイムステータス、Dockerリソースをチェックします。doctor --fix は、検証済みの古いロックを削除し、放棄された操作を調整し、BranchLiftラベルが付いた正確な孤児リソースを削除します。回復されたスナップショットデータは、削除されるのではなく、.failed-recovered-* 診断状態に名前変更されます。Gitブランチ、ワークツリー、管理対象データベース状態ディレクトリは、黙って破棄されることはありません。

安全性モデル

BranchLiftは、ランタイム状態を変更する前にComposeを検査し、見かけ上のみ分離される設定を拒否します:

  • 固定された container_name 値;

  • network_mode: host;

  • 外部の名前付きボリューム;

  • 管理対象の名前付きボリュームのない、検出されたステートフルサービス。

共有の書き込み可能なバインドマウントは、警告として報告されるか、ステートフルサービスに属する場合はブロッカーとして報告されます。ランダム化されたインスタンスポートは、すべてのホストインターフェースに拡張されるのではなく、常にループバックで公開されます。.env は、ワークツリーに存在しない場合、所有者のみの権限でコピーされます。シンボリックリンクソースと宛先親のエスケープは拒否されます。

診断には、すべての分離ブロッカーに対する具体的な推奨事項が含まれます。補間された、または絶対的なバインドソースは、保守的に共有として扱われます。生成されたオーバーライドは、管理対象マウントターゲットを置き換えますが、ソースプロジェクトから無関係なバインド、tmpfs、シークレット、または設定マウントを削除しません。

変更コマンドは、所有者スタンプ付きファイルシステムロックを取得します。競合するコマンドは、データベースコピーやComposeティアダウンと競合する代わりに失敗します。エージェントと exec 子プロセスはライフサイクルロック外で実行されるため、長時間実行ツールが意図的なランタイム制御を妨げることはありません。

spawn によって作成されたインスタンスは、生成されたワークツリーを所有します。attach によって作成されたインスタンスは、現在のワークツリーを外部としてマークします。destroy --worktree は、何かを停止または削除する前に外部所有権を拒否します。通常の destroy は、BranchLiftランタイム状態のみを削除します。

branchlift exec と明示的に有効化されたホストエージェントコマンドは、セキュリティ境界ではありません。branchlift sandbox run は、コマンドの周囲に強化されたDocker境界を追加しますが、VM境界ではなく、選択されたワークツリーとスコープされたバックエンド/シークレットアクセスを意図的に許可します。Composeアプリケーションサービスは、独自のイメージとComposeセキュリティ設定を保持します。SECURITY.md と docs/SECURITY-AND-SECRETS.md を参照してください。

ストレージ動作

ランタイム状態はリポジトリ外に存在します:

~/.branchlift/
├── repos/<repo-id>/snapshots/<name>/volumes/
├── repos/<repo-id>/instances/<branch>/volumes[-<generation>]/
├── repos/<repo-id>/locks/
├── repos/<repo-id>/live-sync/
├── repos/<repo-id>/remote-tunnels/
├── repos/<repo-id>/events.jsonl
├── remotes.json
└── worktrees/<repo-id>/<branch>/

BRANCHLIFT_HOME でルートをオーバーライドします。

コピー戦略の順序:

  1. macOS APFS clonefile (cp -c);

  2. Linux reflink (cp --reflink=always);

  3. 安全な再帰コピーのフォールバック。

各準備完了スナップショットのボリュームツリーは、ダイジェストマニフェストが書き込まれた後、ホスト読み取り専用にされます。プロビジョニングは、クローンされたランタイム状態への所有者のみの書き込みアクセスを復元しますが、ワールド書き込みアクセスは決して復元しません。各リセットは、まだマウントされたことのないボリューム世代にクローンし、クローンが検証された後にのみ生成されたComposeオーバーライドを切り替えます。前の世代は、置換スタックが正常になった後に削除されます。これにより、Docker Desktopのバインドキャッシュ競合を回避し、半分コピーされたリセットがアクティブパスとして公開されることはありません。

自分のマシンで、強制フルコピーベースラインに対するクローン遅延を測定します:

branchlift benchmark dev --iterations 10

データベースに依存しないフィクスチャには、npm run benchmark:synthetic -- --size-mib 256 --iterations 7 を使用します。固定されたDocmost比較には、npm run benchmark:docmost -- --dataset-mib 128 --iterations 3 を使用します。

記録されたDocmost結果は、意図的に勝利として提示されていません。実際のAPFS状態クローンはフルコピーより2.51倍高速でしたが、完全なHTTP準備完了パスは0.82倍でした。これは、Docker DesktopがバインドマウントされたPostgreSQL状態の起動が遅いためです。公開Linux Btrfs実行では、512 MiB合成クローンの中央値は31.25 msで、強制フルコピーの600.95 msに対して19.23倍の高速化でした。方法論、生の証拠、ネガティブコントロールは docs/BENCHMARKS.md にあります。

開発

npm install
npm run check
npm test

# Requires a running Docker daemon and pulls postgres:16-alpine, mysql:8.4, and redis:7-alpine
npm run test:e2e

# Fetches five pinned public Compose projects
npm run test:compat

# Typecheck, unit tests, audit, and package dry-run
npm run verify

正確なサポート契約と公開ライフサイクル証拠については、docs/COMPATIBILITY.md、docs/EVIDENCE.md、docs/ARCHITECTURE.md、docs/SECURITY-AND-SECRETS.md、docs/REMOTE.md、CONTRIBUTING.md を参照してください。

アーキテクチャは docs/ARCHITECTURE.md に文書化されています。

コミュニティ

  • バグ報告と機能提案: GitHub Issues

  • 質問とショーアンドテル: GitHub Discussions

  • 貢献: CONTRIBUTING.md — すべてのPRの前に npm run verify が成功する必要があります。

  • セキュリティ報告: SECURITY.md — 公開イシューではなく、プライベートセキュリティアドバイザリを使用してください。

BranchLiftが再シードサイクルを節約してくれたなら、リポジトリにスターを付けてください。これは、このカテゴリの独立系・非VCプロジェクトにとって主要な発見シグナルです。

ライセンスと由来

Apache-2.0。BranchLiftはオリジナルの実装です。ワークツリー環境ツールとデータベースブランチングシステムの公開動作と製品アイデアに基づいていますが、それらのソースをコピーしたり、それらの成果を自らのものとして主張したりするものではありません。

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Safety-first local MCP tool gate with control plane, runtime security, and observability for managing MCP backends.
    4
    -
  • A
    license
    A
    quality
    B
    maintenance
    A secure, local-first MCP server for read-only inspection and troubleshooting of development environments, exposing narrow, typed, auditable capabilities for repository inspection, log summarization, Docker review, and security scanning without granting unrestricted machine access.
    8
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables unified access to multiple MCP backend servers through one local daemon, with curated per-client tool profiles, allow/deny policies, audit logging, and drift protection.
    32 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agent clients to safely connect to tools and execution resources through MCP with authorization, approvals, audit, chat-context isolation, SSH/Docker access, and long-running command session tracking.
    MIT