diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 0000000..42e452e
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1 @@
+* @Spielewoy
diff --git a/.github/ISSUE_TEMPLATE/adapter.yml b/.github/ISSUE_TEMPLATE/adapter.yml
new file mode 100644
index 0000000..6b245e6
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/adapter.yml
@@ -0,0 +1,43 @@
+name: Adapter request
+description: Request support for another coding CLI or IDE
+title: "[Adapter]: "
+labels:
+ - "type: adapter"
+ - "status: needs triage"
+body:
+ - type: input
+ id: product
+ attributes:
+ label: Product
+ placeholder: Product name and official website
+ validations:
+ required: true
+ - type: input
+ id: docs
+ attributes:
+ label: Authentication documentation
+ description: Link to the vendor's current authentication or configuration documentation.
+ validations:
+ required: true
+ - type: textarea
+ id: boundary
+ attributes:
+ label: Known account boundary
+ description: Where does the product store credentials, sessions, and normal configuration?
+ validations:
+ required: true
+ - type: checkboxes
+ id: platforms
+ attributes:
+ label: Platforms
+ options:
+ - label: Windows
+ - label: macOS
+ - label: Linux
+ - type: textarea
+ id: use-case
+ attributes:
+ label: Concurrent use case
+ description: Explain why two or more accounts must run at the same time.
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
new file mode 100644
index 0000000..72c4a54
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -0,0 +1,79 @@
+name: Bug report
+description: Report reproducible Multi-CLI behavior
+title: "[Bug]: "
+labels:
+ - "type: bug"
+ - "status: needs triage"
+body:
+ - type: markdown
+ attributes:
+ value: Check existing issues and remove all credentials, account identifiers, and private paths before posting.
+ - type: input
+ id: version
+ attributes:
+ label: Multi-CLI version
+ placeholder: multi-cli version
+ validations:
+ required: true
+ - type: dropdown
+ id: operating-system
+ attributes:
+ label: Operating system
+ options:
+ - Windows
+ - macOS
+ - Linux
+ validations:
+ required: true
+ - type: input
+ id: shell
+ attributes:
+ label: Shell and version
+ placeholder: PowerShell 7.5, Bash 5.2, or Zsh 5.9
+ validations:
+ required: true
+ - type: input
+ id: adapter
+ attributes:
+ label: Tool or adapter
+ placeholder: codex, claude-cli, cursor, or not adapter-specific
+ validations:
+ required: true
+ - type: textarea
+ id: steps
+ attributes:
+ label: Reproduction
+ description: List the shortest commands that reproduce the problem.
+ placeholder: |
+ 1. Run ...
+ 2. Select ...
+ 3. Observe ...
+ validations:
+ required: true
+ - type: textarea
+ id: expected
+ attributes:
+ label: Expected behavior
+ validations:
+ required: true
+ - type: textarea
+ id: actual
+ attributes:
+ label: Actual behavior
+ validations:
+ required: true
+ - type: textarea
+ id: diagnostics
+ attributes:
+ label: Sanitized diagnostics
+ description: Paste relevant doctor output or logs after removing secrets and private data.
+ render: shell
+ - type: checkboxes
+ id: checks
+ attributes:
+ label: Safety check
+ options:
+ - label: I removed tokens, credentials, account identifiers, and private paths.
+ required: true
+ - label: I checked for an existing issue.
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..79e634a
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: false
+contact_links:
+ - name: Security report
+ url: https://github.com/Spielewoy/multi-cli/security/advisories/new
+ about: Report vulnerabilities privately. Do not open a public issue.
diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml
new file mode 100644
index 0000000..cb45de4
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature.yml
@@ -0,0 +1,37 @@
+name: Feature request
+description: Propose a focused improvement
+title: "[Feature]: "
+labels:
+ - "type: feature"
+ - "status: needs triage"
+body:
+ - type: textarea
+ id: problem
+ attributes:
+ label: Problem
+ description: What is difficult today, and who encounters it?
+ validations:
+ required: true
+ - type: textarea
+ id: proposal
+ attributes:
+ label: Proposed behavior
+ description: Describe the smallest useful outcome.
+ validations:
+ required: true
+ - type: textarea
+ id: alternatives
+ attributes:
+ label: Alternatives considered
+ - type: dropdown
+ id: platform
+ attributes:
+ label: Scope
+ options:
+ - Cross-platform
+ - Windows
+ - macOS
+ - Linux
+ - Documentation only
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml
new file mode 100644
index 0000000..3be0b67
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/question.yml
@@ -0,0 +1,34 @@
+name: Usage question
+description: Ask for help using Multi-CLI
+title: "[Question]: "
+labels:
+ - "type: question"
+ - "status: needs triage"
+body:
+ - type: input
+ id: goal
+ attributes:
+ label: What are you trying to do?
+ validations:
+ required: true
+ - type: textarea
+ id: tried
+ attributes:
+ label: What have you tried?
+ description: Include sanitized commands and output. Never post credentials.
+ validations:
+ required: true
+ - type: input
+ id: environment
+ attributes:
+ label: Version and environment
+ placeholder: Multi-CLI 1.0.0, Windows 11, PowerShell 7.5
+ validations:
+ required: true
+ - type: checkboxes
+ id: checks
+ attributes:
+ label: Safety check
+ options:
+ - label: I removed credentials and private account data.
+ required: true
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..7af103d
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,15 @@
+version: 2
+
+updates:
+ - package-ecosystem: github-actions
+ directory: /
+ schedule:
+ interval: monthly
+ groups:
+ github-actions:
+ patterns:
+ - "*"
+ labels:
+ - dependencies
+ - "area: ci"
+ open-pull-requests-limit: 2
diff --git a/.github/labels.yml b/.github/labels.yml
new file mode 100644
index 0000000..0d5cb6a
--- /dev/null
+++ b/.github/labels.yml
@@ -0,0 +1,144 @@
+- name: "type: bug"
+ color: "d73a4a"
+ description: Something is broken or behaves incorrectly
+- name: "type: feature"
+ color: "0e8a16"
+ description: New behavior or capability
+- name: "type: adapter"
+ color: "00a6a6"
+ description: New or changed coding tool support
+- name: "type: documentation"
+ color: "1d76db"
+ description: Documentation change
+- name: "type: question"
+ color: "d876e3"
+ description: Usage or support question
+- name: "type: security"
+ color: "b60205"
+ description: Security hardening without vulnerability details
+- name: "type: maintenance"
+ color: "cfd3d7"
+ description: Maintenance, cleanup, or dependency work
+- name: "status: needs triage"
+ color: "fbca04"
+ description: Needs an initial maintainer review
+- name: "status: blocked"
+ color: "bfd4f2"
+ description: Cannot proceed until a dependency is resolved
+- name: "status: confirmed"
+ color: "0e8a16"
+ description: Reproduced or accepted for implementation
+- name: "status: duplicate"
+ color: "cfd3d7"
+ description: Already tracked elsewhere
+- name: "status: wontfix"
+ color: "ffffff"
+ description: Not planned for implementation
+- name: "good first issue"
+ color: "7057ff"
+ description: Suitable for a first contribution
+- name: "help wanted"
+ color: "008672"
+ description: Community help is welcome
+- name: "priority: p0"
+ color: "7a0000"
+ description: Release blocker or active security impact
+- name: "priority: p1"
+ color: "d93f0b"
+ description: High impact and should be handled next
+- name: "priority: p2"
+ color: "fbca04"
+ description: Normal priority
+- name: "priority: p3"
+ color: "c5def5"
+ description: Low urgency improvement
+- name: "area: cli"
+ color: "0052cc"
+ description: Main command line behavior
+- name: "area: installer"
+ color: "5319e7"
+ description: Install, update, or uninstall behavior
+- name: "area: adapters"
+ color: "00a6a6"
+ description: Adapter contracts and integrations
+- name: "area: profiles"
+ color: "006b75"
+ description: Profile lifecycle and isolation
+- name: "area: sessions"
+ color: "0366d6"
+ description: Session continuation and transfer
+- name: "area: docs"
+ color: "1d76db"
+ description: Guides, examples, and translations
+- name: "area: ci"
+ color: "6f42c1"
+ description: Tests and GitHub Actions
+- name: "area: release"
+ color: "006b75"
+ description: Versioning and release assets
+- name: release
+ color: "006b75"
+ description: Included in an upcoming release
+- name: "platform: windows"
+ color: "0078d4"
+ description: Windows specific
+- name: "platform: macos"
+ color: "555555"
+ description: macOS specific
+- name: "platform: linux"
+ color: "f9d0c4"
+ description: Linux specific
+- name: dependencies
+ color: "0366d6"
+ description: Dependency update
+- name: claude-cli
+ color: "d4c5f9"
+ description: Claude Code CLI adapter
+- name: codex
+ color: "d4c5f9"
+ description: Codex CLI adapter
+- name: codex-gui
+ color: "d4c5f9"
+ description: Codex desktop adapter
+- name: gemini-cli
+ color: "d4c5f9"
+ description: Gemini CLI adapter
+- name: opencode
+ color: "d4c5f9"
+ description: OpenCode adapter
+- name: commandcode
+ color: "d4c5f9"
+ description: Command Code adapter
+- name: cursor
+ color: "d4c5f9"
+ description: Cursor desktop adapter
+- name: cursor-cli
+ color: "d4c5f9"
+ description: Cursor CLI adapter
+- name: copilot-cli
+ color: "d4c5f9"
+ description: GitHub Copilot CLI adapter
+- name: copilot-vscode
+ color: "d4c5f9"
+ description: GitHub Copilot in VS Code adapter
+- name: kimi-cli
+ color: "d4c5f9"
+ description: Kimi Code CLI adapter
+- name: grok-cli
+ color: "d4c5f9"
+ description: Grok Build CLI adapter
+- name: antigravity
+ color: "d4c5f9"
+ description: Antigravity IDE adapter
+- name: agy-cli
+ color: "d4c5f9"
+ description: Antigravity CLI adapter
+- name: kiro
+ color: "d4c5f9"
+ description: Kiro adapter
+- name: windsurf
+ color: "d4c5f9"
+ description: Windsurf adapter
+- name: zed
+ color: "d4c5f9"
+ description: Zed adapter
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 0000000..8188b72
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,15 @@
+## What changed
+
+
+
+## Verification
+
+
+
+## Checklist
+
+- [ ] Tests cover the changed behavior.
+- [ ] Adapter validation passes when an adapter changed.
+- [ ] Documentation matches the implementation.
+- [ ] No credentials, account identifiers, local paths, or test evidence are included.
+- [ ] The change works on every platform it claims to support.
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 03b98d4..2150f8a 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -9,23 +9,22 @@ on:
permissions:
contents: read
+concurrency:
+ group: ci-${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
jobs:
- # The important one: prove that a clean machine can install multi-cli from
- # scratch and immediately run its core commands. This is the check that would
- # have caught the install failure (missing jq / broken launcher).
install-smoke:
name: install + run (${{ matrix.os }})
runs-on: ${{ matrix.os }}
+ timeout-minutes: 20
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- # Force the installer's own jq-resolution path: both runner images ship
- # jq pre-installed, so we remove it first. The installer must put jq back
- # (apt-get on Linux, brew on macOS) or the whole CLI is dead on arrival.
- name: Remove pre-installed jq so the installer must provide it
run: |
if command -v apt-get >/dev/null 2>&1; then
@@ -48,7 +47,6 @@ jobs:
command -v jq
jq --version
- # The launcher lands in ~/.local/bin (see install.sh BIN_LINK default).
- name: doctor / tools / new must all exit 0
run: |
export PATH="$HOME/.local/bin:$PATH"
@@ -56,34 +54,25 @@ jobs:
multi-cli tools
multi-cli new codex/ciprofile
- # Shell correctness for every .sh and the main launcher. Run at error
- # severity: the current tree has only style-level warnings (SC2155 "declare
- # and assign separately" x24, SC2115 x1 in `multi-cli`) and zero errors, so
- # error severity keeps CI green while still failing on real bugs (parse
- # errors, undefined behavior, CRLF/SC1017, bad redirects, etc.).
shellcheck:
name: shellcheck
runs-on: ubuntu-latest
+ timeout-minutes: 10
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- name: Install shellcheck
run: sudo apt-get update -y && sudo apt-get install -y shellcheck
- name: Lint shell scripts
- run: shellcheck --severity=error multi-cli scripts/install.sh scripts/uninstall.sh
+ run: shellcheck --severity=error multi-cli scripts/install.sh scripts/uninstall.sh scripts/release-build.sh
- # PowerShell static analysis for the Windows scripts. Run at Error severity
- # and exclude the rules that flag accepted design choices, not bugs:
- # PSAvoidUsingConvertToSecureStringWithPlainText (Error-severity, fires on
- # multi-cli.ps1's credential handling) and PSUseShouldProcessForStateChanging-
- # Functions. Excluding these keeps CI green while still catching genuine
- # parse/syntax failures and other error-severity rules.
pwsh-lint:
name: PSScriptAnalyzer
runs-on: windows-latest
+ timeout-minutes: 15
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- name: Install PSScriptAnalyzer
shell: pwsh
@@ -97,6 +86,7 @@ jobs:
$targets = @(
'scripts/install.ps1',
'scripts/uninstall.ps1',
+ 'scripts/release-build.ps1',
'multi-cli.ps1'
)
$excludedRules = @(
@@ -112,28 +102,21 @@ jobs:
}
Write-Host "No error-severity findings."
- # The bash session-continuation suite (bats). Runs the REAL launcher against
- # real fixture trees on both Linux and macOS. bats-core and jq are fetched
- # fresh by the runner (never committed): jq via the system package manager,
- # bats-core via the system package manager when available, otherwise
- # tests/run-bats.sh clones the pinned v1.11.0 into tests/vendor on demand.
bats:
name: bats (${{ matrix.os }})
runs-on: ${{ matrix.os }}
+ timeout-minutes: 45
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- name: Install bats + jq
run: |
if command -v apt-get >/dev/null 2>&1; then
sudo apt-get update -y
- # libsecret-tools + gnome-keyring + dbus-x11: the auth/processSecret
- # tests exercise the real Linux Secret Service backend (secret-tool),
- # which needs both the CLI and a running keyring daemon.
sudo apt-get install -y bats jq libsecret-tools gnome-keyring dbus-x11 acl
elif command -v brew >/dev/null 2>&1; then
brew install bats-core jq
@@ -147,10 +130,6 @@ jobs:
- name: Validate adapter contracts
run: bash scripts/validate-adapters.sh
- # macOS: `security` against the default login keychain can block on a GUI
- # unlock/access prompt on a headless runner, hanging the whole suite.
- # Give the run a dedicated ephemeral keychain with a known password,
- # unlocked, partition-listed, and made default so no prompt can appear.
- name: Prepare an ephemeral CI keychain (macOS)
if: runner.os == 'macOS'
run: |
@@ -169,9 +148,6 @@ jobs:
- name: Run the bats suite
run: |
if [ "$(uname -s)" = "Linux" ]; then
- # Secret Service needs a session bus and an unlocked keyring.
- # Smoke-check the store first so a broken keyring setup fails here
- # with a clear error instead of obscure test failures.
dbus-run-session -- bash -c '
set -euo pipefail
printf "\n" | gnome-keyring-daemon --unlock --components=secrets >/dev/null
@@ -184,11 +160,6 @@ jobs:
env MULTICLI_MACOS_KEYCHAIN="$HOME/Library/Keychains/$MULTICLI_CI_KEYCHAIN-db" bash tests/run-bats.sh
fi
- - name: Run the real POSIX OS-user lifecycle
- if: runner.os == 'Windows'
- timeout-minutes: 10
- run: bash tests/e2e/posix-osuser.sh
-
- name: Remove the ephemeral CI keychain (macOS)
if: runner.os == 'macOS' && always()
run: |
@@ -202,8 +173,9 @@ jobs:
bash-coverage:
name: bash coverage (ubuntu-latest)
runs-on: ubuntu-latest
+ timeout-minutes: 30
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with:
fetch-depth: 2
- name: Install coverage dependencies
@@ -233,14 +205,12 @@ jobs:
exec env COVERAGE_BASELINE="$COVERAGE_BASELINE" bash tests/coverage/run-bash-coverage.sh
'
- # The PowerShell session-continuation suite (Pester). Uses the Pester 3.4
- # shipped with Windows PowerShell 5.1 (the suite is 3.4-compatible). The
- # PowerShell launcher parses JSON natively, so this suite needs no jq.
pester:
name: pester (windows-latest)
runs-on: windows-latest
+ timeout-minutes: 45
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with:
fetch-depth: 2
@@ -269,8 +239,9 @@ jobs:
windows-install-smoke:
name: install + run (windows-latest)
runs-on: windows-latest
+ timeout-minutes: 20
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- name: Install from working tree
shell: powershell
run: powershell -NoProfile -ExecutionPolicy Bypass -File scripts/install.ps1 -Local
@@ -279,3 +250,15 @@ jobs:
run: |
powershell -NoProfile -ExecutionPolicy Bypass -File multi-cli.ps1 doctor
powershell -NoProfile -ExecutionPolicy Bypass -File multi-cli.ps1 tools
+
+ release-metadata:
+ name: release metadata
+ runs-on: ubuntu-latest
+ timeout-minutes: 5
+ steps:
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
+ - name: Verify embedded versions
+ run: |
+ bash scripts/release-build.sh --check
+ pwsh -NoProfile -File scripts/release-build.ps1 -Check
+ python3 scripts/validate-docs.py
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..8f23746
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,101 @@
+name: Release
+
+on:
+ push:
+ tags:
+ - "v*.*.*"
+
+permissions: {}
+
+concurrency:
+ group: release-${{ github.ref }}
+ cancel-in-progress: false
+
+jobs:
+ build:
+ name: Build release assets
+ runs-on: ubuntu-latest
+ timeout-minutes: 15
+ permissions:
+ contents: read
+ steps:
+ - name: Check out tagged source
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
+
+ - name: Verify tag and embedded versions
+ shell: bash
+ run: |
+ version="$(tr -d '[:space:]' < release/VERSION)"
+ test "$GITHUB_REF_NAME" = "v$version"
+ bash scripts/release-build.sh --check --version "$version"
+ pwsh -NoProfile -File scripts/release-build.ps1 -Check -ExpectedVersion "$version"
+
+ - name: Validate adapters
+ shell: bash
+ run: |
+ bash scripts/validate-adapters.sh
+ pwsh -NoProfile -File scripts/Validate-Adapters.ps1
+
+ - name: Build archives
+ shell: bash
+ run: |
+ version="$(tr -d '[:space:]' < release/VERSION)"
+ bash scripts/release-build.sh --output dist --version "$version"
+ pwsh -NoProfile -File scripts/release-build.ps1 -OutputDirectory dist -ExpectedVersion "$version"
+ (cd dist && sha256sum *.tar.gz *.zip > SHA256SUMS)
+
+ - name: Inspect archives
+ shell: bash
+ run: |
+ version="$(tr -d '[:space:]' < release/VERSION)"
+ tar -tzf "dist/multi-cli-v$version-linux-macos.tar.gz" | grep -Fx "multi-cli-v$version/multi-cli"
+ tar -tzf "dist/multi-cli-v$version-linux-macos.tar.gz" | grep -Fx "multi-cli-v$version/assets/banner.svg"
+ unzip -Z1 "dist/multi-cli-v$version-windows.zip" | tr '\\' '/' | grep -Fx "multi-cli-v$version/multi-cli.ps1"
+ unzip -Z1 "dist/multi-cli-v$version-windows.zip" | tr '\\' '/' | grep -Fx "multi-cli-v$version/assets/banner.svg"
+ (cd dist && sha256sum --check SHA256SUMS)
+
+ - name: Upload release assets
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
+ with:
+ name: release-assets
+ path: dist/
+ if-no-files-found: error
+ retention-days: 7
+
+ publish:
+ name: Publish GitHub release
+ needs: build
+ runs-on: ubuntu-latest
+ timeout-minutes: 10
+ permissions:
+ attestations: write
+ contents: write
+ id-token: write
+ steps:
+ - name: Check out release notes
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
+
+ - name: Download release assets
+ uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
+ with:
+ name: release-assets
+ path: dist
+
+ - name: Record build provenance
+ uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6
+ with:
+ subject-path: |
+ dist/*.tar.gz
+ dist/*.zip
+ dist/SHA256SUMS
+
+ - name: Create release
+ env:
+ GH_TOKEN: ${{ github.token }}
+ shell: bash
+ run: |
+ version="$(tr -d '[:space:]' < release/VERSION)"
+ gh release create "$GITHUB_REF_NAME" dist/* \
+ --verify-tag \
+ --title "Multi-CLI v$version" \
+ --notes-file release/NOTES.md
diff --git a/.github/workflows/vendor-e2e.yml b/.github/workflows/vendor-e2e.yml
index d2bbb51..25c56b1 100644
--- a/.github/workflows/vendor-e2e.yml
+++ b/.github/workflows/vendor-e2e.yml
@@ -20,12 +20,16 @@ on:
permissions:
contents: read
+concurrency:
+ group: vendor-e2e-${{ inputs.tool }}
+ cancel-in-progress: false
+
jobs:
offline-real-binary:
runs-on: [self-hosted, windows, multi-cli-vendor-test]
timeout-minutes: 15
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- name: Run real binary offline smoke
shell: powershell
run: >-
@@ -34,7 +38,7 @@ jobs:
-Tool '${{ inputs.tool }}'
-EvidenceDirectory "$env:RUNNER_TEMP\multi-cli-evidence"
- name: Upload secret-scanned evidence
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: vendor-smoke-${{ inputs.tool }}
path: ${{ runner.temp }}\multi-cli-evidence\${{ inputs.tool }}-offline.json
diff --git a/README.ar.md b/README.ar.md
deleted file mode 100644
index 5718490..0000000
--- a/README.ar.md
+++ /dev/null
@@ -1,315 +0,0 @@
-[English](README.md) | [Español](README.es.md) | **العربية** | [中文](README.zh.md) | [Русский](README.ru.md) | [עברית](README.he.md)
-
-
-
-# multi-cli
-
-**شغّل عدة ملفات تعريف لحسابات أدوات البرمجة بالذكاء الاصطناعي في وقت واحد.**
-
-يعزل ملف schema-v2 بيانات اعتماد الحساب وحصته، ويشارك المحادثات والإعدادات والإضافات عندما يكون الحد آمنًا. إذا دمج المورّد المصادقة مع الجلسات، يستخدم multi-cli مستخدم نظام تشغيل مستقلًا أو ملف جذر كاملًا عبر `--isolated`. توضّح [مصفوفة الدعم](docs/support-matrix.md) الوضع والمتطلبات الدقيقة لكل منصة.
-
-تظل ملفات التعريف schema-v1 الحالية ملفات تعريف قديمة ذات جذر كامل حتى يتم ترحيلها — راجع [ملفات التعريف القديمة](#legacy-profiles).
-
-[](https://github.com/Spielewoy/multi-cli)
-[](https://github.com/Spielewoy)
-[](https://github.com/Spielewoy/multi-cli/stargazers)
-[](#install)
-[](#license)
-
----
-
-## الأدوات المدعومة
-
-يتضمن هذا المستودع 17 محوّلًا. تعني `supported` أن multi-cli يوفر وضع عزل عاملًا واحدًا على الأقل في ذلك النظام، وتعني `unsupported` أن المنتج أو وضع العزل غير متاح هناك. المصدر المعتمد هو [docs/support-matrix.md](docs/support-matrix.md).
-
-| الأداة | النوع | Windows | macOS | Linux |
-|------|------|---------|-------|-------|
-| [Claude Code](claude-cli/) | CLI | supported (file overlay) | supported for API-key profiles only; subscription OAuth is unsupported | supported (file overlay) |
-| [OpenAI Codex CLI](codex/) | CLI | supported (file overlay; file credential store mode) | supported | supported |
-| [Gemini CLI](gemini-cli/) | CLI | supported (file overlay) | supported | supported |
-| [OpenCode](opencode/) | CLI | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Command Code](commandcode/) | CLI | supported (file overlay; use `commandcode`, bare `cmd` collides with cmd.exe) | supported | supported |
-| [Cursor Desktop](cursor/) | IDE | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Cursor CLI](cursor-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Antigravity](antigravity/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [AGY CLI](agy-cli/) | CLI | supported (OS-user isolation; elevated terminal) | unsupported (owned-user Keychain isolation not proven) | unsupported (owned-user Secret Service session not implemented) |
-| [Kiro](kiro/) | IDE | supported (OS-user isolation) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Zed](zed/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [Devin Desktop / Windsurf](windsurf/) | IDE | supported (OS-user isolation; elevated terminal) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [GitHub Copilot CLI](copilot-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Copilot in VS Code](copilot-vscode/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [Kimi Code CLI](kimi-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Codex Desktop App](codex-gui/) | GUI | supported (owned Windows user and Store AppX activation) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (no desktop app) |
-| [Grok Build CLI](grok-cli/) | CLI/TUI | supported (process token via `multi-cli auth set`) | supported | supported |
-
-لكل أداة مجلد خاص بها في جذر المستودع يحتوي على ملف `adapter.json` يصف حد الحساب والحالة العادية المشتركة والأدلة المطلوبة للترقية إلى حالة موثَّقة.
-
----
-
-
-
-## التثبيت
-
-**macOS / Linux**
-
-```bash
-curl -fsSL https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/install.sh | bash
-```
-
-**Windows** — افتح PowerShell:
-
-```powershell
-irm https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/install.ps1 | iex
-```
-
-> بعد التثبيت، **أعد تشغيل الطرفية** لتسري التغييرات على PATH.
-
-### من المصدر
-
-```bash
-git clone https://github.com/Spielewoy/multi-cli.git
-cd multi-cli
-./scripts/install.sh --local # macOS/Linux
-.\scripts\install.ps1 -Local # Windows
-```
-
-> بعد التثبيت، **أعد تشغيل الطرفية** لتسري التغييرات على PATH.
-
-> يتم **تثبيت** [jq](https://jqlang.github.io/jq/) **تلقائيًا** بواسطة المثبِّت على جميع المنصات — لا حاجة لأي إعداد يدوي.
-
----
-
-## البدء السريع
-
-```bash
-# Create a profile
-multi-cli new claude-cli/work
-
-# Launch it
-multi-cli launch claude-cli/work
-
-# Or use the shorthand
-multi-cli claude-cli/work
-```
-
-يحصل كل ملف تعريف على اسم مستعار تلقائي في الصدفة:
-
-| المنصة | الموقع |
-|----------|----------|
-| macOS / Linux | `~/MultiCliProfiles/bin/` (أضِفه إلى `PATH`) |
-| Windows | تُنشأ اختصارات قائمة ابدأ تلقائيًا |
-
----
-
-## الأوامر
-
-### إدارة ملفات التعريف
-
-| الأمر | الوصف |
-|---------|-------------|
-| `multi-cli new
/` | إنشاء ملف تعريف حساب (بيانات اعتماد منفصلة وحالة عادية مشتركة) |
-| `multi-cli new / --isolated` | إنشاء ملف جذر كامل بلا حالة مشتركة |
-| `multi-cli new / --shared` | ملف مشترك قديم من schema-v1؛ تشارك ملفات schema-v2 الحالة العادية المعلنة افتراضيًا |
-| `multi-cli new / --from ` | الإنشاء من قالب محفوظ |
-| `multi-cli /` | تشغيل ملف تعريف (صيغة مختصرة) |
-| `multi-cli launch /` | تشغيل ملف تعريف |
-| `multi-cli list []` | عرض جميع ملفات التعريف |
-| `multi-cli status` | List profiles with their type and disk size |
-| `multi-cli clone / /` | نسخ ملف تعريف موجود |
-| `multi-cli rename / /` | إعادة تسمية ملف تعريف |
-| `multi-cli delete /` | حذف ملف تعريف وجميع بياناته |
-
-### مصادقة الحسابات والترحيل
-
-| الأمر | الوصف |
-|---------|-------------|
-| `multi-cli auth set /` | تخزين بيانات اعتماد السر التشغيلي لملف التعريف في مخزن بيانات الاعتماد الخاص بنظام التشغيل (يسأل تفاعليًا أو يقرأ سطرًا واحدًا من stdin) |
-| `multi-cli auth status /` | الإبلاغ عما إذا كانت بيانات الاعتماد مخزنة لملف التعريف |
-| `multi-cli auth clear /` | إزالة بيانات الاعتماد المخزنة |
-| `multi-cli migrate / [--dry-run] [--prefer-profile]` | ترحيل ملف تعريف قديم schema-v1 إلى schema-v2 |
-
-ينطبق `auth` فقط على المحوّلات التي تستخدم آلية `processSecret` (`cursor-cli` و`copilot-cli` و`kimi-cli` و`grok-cli`). يظل التشغيل معطَّلًا حتى يتم تخزين بيانات الاعتماد. راجع [ملفات التعريف القديمة](#legacy-profiles) للاطلاع على `migrate`.
-
-### القوالب
-
-| الأمر | الوصف |
-|---------|-------------|
-| `multi-cli template save / ` | حفظ ملف تعريف كقالب قابل لإعادة الاستخدام |
-| `multi-cli template list` | عرض القوالب المحفوظة |
-| `multi-cli template delete ` | إزالة قالب |
-
-### النسخ الاحتياطي والنقل
-
-| الأمر | الوصف |
-|---------|-------------|
-| `multi-cli export / [path]` | أرشفة ملف تعريف إلى `.tar.gz` (`.zip` على Windows) |
-| `multi-cli import /` | استعادة ملف تعريف من أرشيف |
-
-### الجلسات
-
-| الأمر | الوصف |
-|---------|-------------|
-| `multi-cli continue ` | نسخ حالة المحادثة (الجلسات/النصوص/السجل) من ملف تعريف إلى آخر — لا تُنسخ بيانات الاعتماد أبدًا |
-| `multi-cli continue --no-merge` | استبدال ملفات الوجهة بدلًا من الاحتفاظ بالأحدث |
-| `multi-cli continue --dry-run` | معاينة ما سيتم نسخه دون تغيير أي شيء |
-
-يعمل `base` كاسم ملف تعريف في أي من الطرفين ويعني مجلد المنزل الحقيقي للأداة (`~/.codex` و`~/.claude` و…). مدعوم لـ `codex` و`claude-cli` و`gemini-cli` و`commandcode`. راجع [متابعة محادثة عبر الحسابات](#continue-a-chat-across-accounts).
-
-### الأدوات المساعدة
-
-| الأمر | الوصف |
-|---------|-------------|
-| `multi-cli tools` | عرض جميع الأدوات المدعومة وحالة تثبيتها |
-| `multi-cli stats` | عرض استخدام القرص لكل ملف تعريف |
-| `multi-cli doctor` | تشخيص بيئتك |
-| `multi-cli completion {bash\|zsh\|powershell}` | إعداد الإكمال التلقائي للصدفة |
-| `multi-cli help` | عرض المساعدة |
-| `multi-cli version` | عرض الإصدار |
-
----
-
-## كيف يعمل العزل
-
-تعلن محوّلات schema-v2 عن آلية حساب منفصلة عن الحالة العادية:
-
-| الآلية | كيف تعمل |
-|-----------|--------------|
-| `fileOverlay` | تبقى بيانات الاعتماد داخل ملف التعريف؛ وترتبط الحالة العادية المعلنة بمنزل الأداة الأصلي المشترك. |
-| `processSecret` | تُحقن بيانات اعتماد خاصة بكل ملف تعريف وذات أولوية قصوى في العملية الفرعية فقط. يظل التشغيل معطَّلًا حتى يتم تكوين تخزين آمن للأسرار. |
-| `osUserCredentialStore` | تُفصل الهويات الثابتة في سلسلة المفاتيح بمستخدم نظام تشغيل مملوك لـ multi-cli. يظل هذا معطَّلًا حتى يتم التحقق من الملكية والتنظيف. |
-| `inseparable` | يدمج المورّد المصادقة والحالة العادية؛ يفشل التشغيل المتوافق بشكل مغلق وتُعرَض المحدودية. |
-
-تحتفظ ملفات تعريف الإصدار 1 بالسلوك السابق ذي الجذر الكامل (`env` و`userDataDir` و`redirectHome` و`appdata` و`sandboxUser`) للتوافق. يحدد كل `/adapter.json` قدرات المنتج/المنصة ومتطلبات الأدلة.
-
----
-
-
-
-## متابعة محادثة عبر الحسابات
-
-هل بلغت حد المعدل على الحساب A في منتصف محادثة؟ بدّل إلى ملف تعريف مسجَّل الدخول بالحساب B واستأنف المحادثة من حيث توقفت. ينسخ `multi-cli continue` حالة المحادثة القابلة للنقل — الجلسات والنصوص والسجل — بين ملفات التعريف. **لا تُنسخ بيانات الاعتماد أبدًا.**
-
-```bash
-# You were working in codex/work (account A) and got rate-limited.
-# codex/personal is logged into account B.
-multi-cli continue codex work personal # copy the conversation state
-multi-cli continue codex work personal --dry-run # preview first, if you like
-
-codex-personal # launch account B's profile
-codex resume # resume the same chat (codex ≥ 0.30)
-```
-
-شغّل `codex resume` دون وسيطة لفتح منتقي تفاعلي للجلسات السابقة، فلن تحتاج أبدًا إلى البحث عن معرّف. وإذا احتجته، فمعرّف الجلسة هو UUID الموجود في اسم ملف rollout ضمن `sessions/YYYY/MM/DD/`.
-
-`base` اسم ملف تعريف صالح في أي من الطرفين ويشير إلى مجلد المنزل الحقيقي للأداة (`~/.codex` و`~/.claude` و…)، لذا يمكنك المتابعة من تثبيتك الافتراضي أو إليه.
-
-افتراضيًا، يتم **دمج** الملفات — تُحتفظ بالملفات الأحدث في الوجهة. مرّر `--no-merge` لاستبدال الوجهة بدلًا من ذلك، أو `--dry-run` للمعاينة دون تغيير أي شيء.
-
-بعد النسخ، استأنف داخل ملف التعريف الوجهة باستخدام أمر الأداة نفسه:
-
-| الأداة | أمر الاستئناف |
-|------|----------------|
-| codex | `codex resume ` (≥ 0.30) |
-| claude-cli | `claude --resume ` (يُشغَّل من نفس مجلد المشروع) |
-| gemini-cli | `gemini --resume` (آخر جلسة محفوظة تلقائيًا) أو `/chat resume ` لنقاط التفتيش المحفوظة |
-| commandcode | التشغيل من نفس مجلد العمل |
-
-**غير مدعوم:** `opencode` (الجلسات وبيانات الاعتماد في قاعدة بيانات SQLite واحدة مشتركة) و`cursor` (تُخزَّن المحادثات في SQLite مفهرسة بمسار مساحة العمل).
-
-> تُبذَر ملفات تعريف schema-v1 القديمة من `base` افتراضيًا. تقرأ ملفات تعريف حساب schema-v2 المحادثات والإعدادات المعلنة من الجذر الأصلي المشترك، بينما تبدأ الملفات المعزولة فارغة. استخدم `multi-cli continue` لنسخ المحادثات المدعومة إلى ملف معزول أو منه.
-
----
-
-## أنواع ملفات التعريف
-
-| العلامة | المعنى |
-|------|---------|
-| *(لا شيء)* | **مشترك افتراضيًا** — بيانات الاعتماد منفصلة، وتُشارك المحادثات والإعدادات عندما يسمح المحوّل. |
-| `-i` أو `--isolate` أو `--isolated` | **معزول** — يعيش جذر الأداة كاملًا داخل ملف التعريف ولا يُشارك شيء. |
-| `--shared` | اسم قديم للوضع المشترك عندما يدعمه المحوّل. |
-| `--cli` | **CLI** — تشغيل من الطرفية فقط. |
-| `--from ` | الاستنساخ من قالب محفوظ. |
-
----
-
-## متغيرات البيئة
-
-| المتغير | الافتراضي | الغرض |
-|----------|---------|---------|
-| `MULTICLI_HOME` | `~/MultiCliProfiles` | مكان تخزين جميع ملفات التعريف |
-| `MULTICLI_OVERRIDE_BINARY` | *(غير معيَّن)* | فرض مسار ثنائي محدد للتشغيل التالي |
-| `MULTICLI_REPO` | *(غير معيَّن)* | رابط Git للتثبيت عن بُعد |
-| `MULTICLI_PLATFORM` | *(تلقائي)* | تجاوز كشف المنصة (`darwin` و`linux`) |
-
----
-
-
-
-## ملفات التعريف القديمة
-
-ملفات التعريف التي أُنشئت قبل schema-v2 هي ملفات تعريف قديمة ذات جذر كامل: تحتفظ بالسلوك السابق لـ `env` و`userDataDir` و`redirectHome` و`appdata` و`sandboxUser` للتوافق. يُعامَل مجلد ملف التعريف الذي لا يحتوي على ملف `.profile.json` كملف قديم.
-
-يحوّل `multi-cli migrate /` ملف التعريف القديم إلى schema-v2: تنتقل بيانات الاعتماد المعلنة إلى ملف التعريف، وترتبط الحالة العادية المعلنة بمنزل الأداة المشترك. استخدم `--dry-run` لمعاينة خطة النقل دون تغيير أي شيء، و`--prefer-profile` لاستبدال الملفات المشتركة المتعارضة بنسخة ملف التعريف — لا تُستبدَل أهداف بيانات الاعتماد أبدًا. يجب أن يكون تخزين ملفات التعريف وجذر الحالة المشتركة على نفس وحدة التخزين، لأن الترحيل يستخدم نقلًا ذريًا ضمن نفس وحدة التخزين.
-
----
-
-## التشخيص
-
-```bash
-multi-cli doctor
-```
-
-يتحقق من وجود تخزين ملفات التعريف، وأن مجلد الأسماء المستعارة موجود في PATH، وأن ثنائي كل أداة مكتشَف (أو يعرض تلميح تثبيت).
-
----
-
-## الإكمال التلقائي للصدفة
-
-```bash
-multi-cli completion bash # or zsh, powershell
-```
-
-اتبع التعليمات لإضافته إلى `.zshrc` أو `.bashrc` أو `$PROFILE` في PowerShell.
-
----
-
-## إلغاء التثبيت
-
-**macOS / Linux**
-
-```bash
-curl -fsSL https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/uninstall.sh | bash
-```
-
-**Windows**
-
-```powershell
-irm https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/uninstall.ps1 | iex
-```
-
-سُتسأل عمّا إذا كنت تريد إزالة بيانات ملفات التعريف — لا يُحذَف أي شيء دون تأكيد.
-
----
-
-## روابط
-
-- [مصفوفة الدعم](docs/support-matrix.md) — حالة العزل لكل منتج ونظام تشغيل وبوابة التحقق
-- [سياسة الأمان](SECURITY.md)
-- [الرخصة](LICENSE)
-- [مستودع GitHub](https://github.com/Spielewoy/multi-cli)
-
----
-
-## شكر وتقدير
-
-- **المؤلف** — [Spielewoy](https://github.com/Spielewoy)
-
----
-
-
-
-## الرخصة
-
-[MIT](LICENSE)
-
-
diff --git a/README.es.md b/README.es.md
deleted file mode 100644
index 12f367d..0000000
--- a/README.es.md
+++ /dev/null
@@ -1,305 +0,0 @@
-[English](README.md) | **Español** | [العربية](README.ar.md) | [中文](README.zh.md) | [Русский](README.ru.md) | [עברית](README.he.md)
-
-# multi-cli
-
-**Ejecuta varios perfiles de cuenta de herramientas de programación con IA de forma simultánea.**
-
-Un perfil schema-v2 aísla la credencial y la cuota de la cuenta mientras comparte las conversaciones, la configuración y las extensiones cuando existe un límite seguro. Si el proveedor combina autenticación y sesiones, usa un usuario del sistema operativo o `--isolated` para un perfil de raíz completa. La [matriz de compatibilidad](docs/support-matrix.md) indica el modo exacto y los requisitos de cada plataforma.
-
-Los perfiles schema-v1 existentes siguen siendo perfiles heredados de raíz completa hasta que se migren — consulta [Perfiles heredados](#perfiles-heredados).
-
-[](https://github.com/Spielewoy/multi-cli)
-[](https://github.com/Spielewoy)
-[](https://github.com/Spielewoy/multi-cli/stargazers)
-[](#instalación)
-[](#licencia)
-
----
-
-## Herramientas compatibles
-
-Este repositorio incluye 17 adaptadores. `supported` significa que multi-cli ofrece al menos un modo de aislamiento funcional en ese sistema; `unsupported` significa que el producto o el modo no está disponible allí. La fuente autorizada es [docs/support-matrix.md](docs/support-matrix.md).
-
-| Herramienta | Tipo | Windows | macOS | Linux |
-|------|------|---------|-------|-------|
-| [Claude Code](claude-cli/) | CLI | supported (file overlay) | supported for API-key profiles only; subscription OAuth is unsupported | supported (file overlay) |
-| [OpenAI Codex CLI](codex/) | CLI | supported (file overlay; file credential store mode) | supported | supported |
-| [Gemini CLI](gemini-cli/) | CLI | supported (file overlay) | supported | supported |
-| [OpenCode](opencode/) | CLI | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Command Code](commandcode/) | CLI | supported (file overlay; use `commandcode`, bare `cmd` collides with cmd.exe) | supported | supported |
-| [Cursor Desktop](cursor/) | IDE | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Cursor CLI](cursor-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Antigravity](antigravity/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [AGY CLI](agy-cli/) | CLI | supported (OS-user isolation; elevated terminal) | unsupported (owned-user Keychain isolation not proven) | unsupported (owned-user Secret Service session not implemented) |
-| [Kiro](kiro/) | IDE | supported (OS-user isolation) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Zed](zed/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [Devin Desktop / Windsurf](windsurf/) | IDE | supported (OS-user isolation; elevated terminal) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [GitHub Copilot CLI](copilot-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Copilot in VS Code](copilot-vscode/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [Kimi Code CLI](kimi-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Codex Desktop App](codex-gui/) | GUI | supported (owned Windows user and Store AppX activation) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (no desktop app) |
-| [Grok Build CLI](grok-cli/) | CLI/TUI | supported (process token via `multi-cli auth set`) | supported | supported |
-
-Cada herramienta tiene su propia carpeta en la raíz del repositorio con un `adapter.json` que describe el límite de la cuenta, el estado normal compartido y la evidencia necesaria para ser promovido a verificado.
-
----
-
-## Instalación
-
-**macOS / Linux**
-
-```bash
-curl -fsSL https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/install.sh | bash
-```
-
-**Windows** — abre PowerShell:
-
-```powershell
-irm https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/install.ps1 | iex
-```
-
-> Después de la instalación, **reinicia tu terminal** para que los cambios en el PATH surtan efecto.
-
-### Desde el código fuente
-
-```bash
-git clone https://github.com/Spielewoy/multi-cli.git
-cd multi-cli
-./scripts/install.sh --local # macOS/Linux
-.\scripts\install.ps1 -Local # Windows
-```
-
-> Después de la instalación, **reinicia tu terminal** para que los cambios en el PATH surtan efecto.
-
-> [jq](https://jqlang.github.io/jq/) se **instala automáticamente** con el instalador en todas las plataformas — no se requiere configuración manual.
-
----
-
-## Inicio rápido
-
-```bash
-# Create a profile
-multi-cli new claude-cli/work
-
-# Launch it
-multi-cli launch claude-cli/work
-
-# Or use the shorthand
-multi-cli claude-cli/work
-```
-
-Cada perfil obtiene un alias de shell automático:
-
-| Plataforma | Ubicación |
-|----------|----------|
-| macOS / Linux | `~/MultiCliProfiles/bin/` (añadir al `PATH`) |
-| Windows | Accesos directos del menú Inicio creados automáticamente |
-
----
-
-## Comandos
-
-### Gestión de perfiles
-
-| Comando | Descripción |
-|---------|-------------|
-| `multi-cli new /` | Crear un perfil de cuenta (credenciales separadas; estado normal compartido) |
-| `multi-cli new / --isolated` | Crear un perfil de raíz completa sin estado compartido |
-| `multi-cli new / --shared` | Perfil compartido heredado de schema-v1; los perfiles schema-v2 ya comparten por defecto el estado normal declarado |
-| `multi-cli new / --from ` | Crear a partir de una plantilla guardada |
-| `multi-cli /` | Lanzar un perfil (abreviatura) |
-| `multi-cli launch /` | Lanzar un perfil |
-| `multi-cli list []` | Listar todos los perfiles |
-| `multi-cli status` | List profiles with their type and disk size |
-| `multi-cli clone / /` | Copiar un perfil existente |
-| `multi-cli rename / /` | Renombrar un perfil |
-| `multi-cli delete /` | Eliminar un perfil y todos sus datos |
-
-### Autenticación de cuentas y migración
-
-| Comando | Descripción |
-|---------|-------------|
-| `multi-cli auth set /` | Guardar la credencial de secreto de proceso del perfil en el almacén de credenciales del sistema operativo (pregunta interactivamente o lee una línea desde stdin) |
-| `multi-cli auth status /` | Indicar si hay una credencial guardada para el perfil |
-| `multi-cli auth clear /` | Eliminar la credencial guardada |
-| `multi-cli migrate / [--dry-run] [--prefer-profile]` | Migrar un perfil heredado schema-v1 a schema-v2 |
-
-`auth` solo se aplica a los adaptadores que usan el mecanismo `processSecret` (`cursor-cli`, `copilot-cli`, `kimi-cli`, `grok-cli`). El lanzamiento permanece deshabilitado hasta que se guarde una credencial. Consulta [Perfiles heredados](#perfiles-heredados) para `migrate`.
-
-### Plantillas
-
-| Comando | Descripción |
-|---------|-------------|
-| `multi-cli template save / ` | Guardar un perfil como plantilla reutilizable |
-| `multi-cli template list` | Listar las plantillas guardadas |
-| `multi-cli template delete ` | Eliminar una plantilla |
-
-### Copia de seguridad y transferencia
-
-| Comando | Descripción |
-|---------|-------------|
-| `multi-cli export / [path]` | Archivar un perfil en `.tar.gz` (`.zip` en Windows) |
-| `multi-cli import /` | Restaurar un perfil desde un archivo |
-
-### Sesiones
-
-| Comando | Descripción |
-|---------|-------------|
-| `multi-cli continue ` | Copiar el estado de la conversación (sesiones/transcripciones/historial) de un perfil a otro — nunca las credenciales |
-| `multi-cli continue --no-merge` | Sobrescribir los archivos de destino en lugar de conservar los más recientes |
-| `multi-cli continue --dry-run` | Previsualizar lo que se copiaría, sin cambiar nada |
-
-`base` funciona como nombre de perfil en cualquiera de los extremos y significa el directorio home real de la herramienta (`~/.codex`, `~/.claude`, …). Compatible con `codex`, `claude-cli`, `gemini-cli` y `commandcode`. Consulta [Continuar un chat entre cuentas](#continuar-un-chat-entre-cuentas).
-
-### Utilidades
-
-| Comando | Descripción |
-|---------|-------------|
-| `multi-cli tools` | Listar todas las herramientas compatibles y su estado de instalación |
-| `multi-cli stats` | Mostrar el uso de disco por perfil |
-| `multi-cli doctor` | Diagnosticar tu entorno |
-| `multi-cli completion {bash\|zsh\|powershell}` | Configurar el autocompletado del shell |
-| `multi-cli help` | Mostrar ayuda |
-| `multi-cli version` | Mostrar la versión |
-
----
-
-## Cómo funciona el aislamiento
-
-Los adaptadores schema-v2 declaran un mecanismo de cuenta separado del estado normal:
-
-| Mecanismo | Cómo funciona |
-|-----------|--------------|
-| `fileOverlay` | Las credenciales permanecen dentro del perfil; el estado normal declarado enlaza con el home compartido nativo de la herramienta. |
-| `processSecret` | Una credencial por perfil, de máxima precedencia, se inyecta únicamente en el proceso hijo. El lanzamiento permanece deshabilitado hasta que se configure un almacenamiento seguro de secretos. |
-| `osUserCredentialStore` | Las identidades fijas del llavero se separan con un usuario del sistema operativo propiedad de multi-cli. Permanece deshabilitado hasta que se verifiquen la propiedad y la limpieza. |
-| `inseparable` | El proveedor combina la autenticación y el estado normal; el lanzamiento conforme falla de forma cerrada y se muestra la limitación. |
-
-Los perfiles de la versión 1 conservan el comportamiento anterior de raíz completa (`env`, `userDataDir`, `redirectHome`, `appdata` y `sandboxUser`) por compatibilidad. Cada `/adapter.json` indica las capacidades por producto/plataforma y los requisitos de evidencia.
-
----
-
-
-
-## Continuar un chat entre cuentas
-
-¿Alcanzaste un límite de velocidad en la cuenta A a mitad de una conversación? Cambia a un perfil con sesión iniciada en la cuenta B y retoma el chat donde se quedó. `multi-cli continue` copia el estado portable de la conversación — sesiones, transcripciones, historial — entre perfiles. **Las credenciales nunca se copian.**
-
-```bash
-# You were working in codex/work (account A) and got rate-limited.
-# codex/personal is logged into account B.
-multi-cli continue codex work personal # copy the conversation state
-multi-cli continue codex work personal --dry-run # preview first, if you like
-
-codex-personal # launch account B's profile
-codex resume # resume the same chat (codex ≥ 0.30)
-```
-
-Ejecuta `codex resume` sin argumentos para abrir un selector interactivo de sesiones anteriores, así nunca tendrás que buscar un id. Si lo necesitas, el id de sesión es el UUID del nombre de archivo de rollout bajo `sessions/YYYY/MM/DD/`.
-
-`base` es un nombre de perfil válido en cualquiera de los extremos y se refiere al directorio home real de la herramienta (`~/.codex`, `~/.claude`, …), por lo que puedes continuar hacia o desde tu instalación predeterminada.
-
-Por defecto, los archivos se **fusionan** — se conservan los archivos más recientes del destino. Pasa `--no-merge` para sobrescribir el destino, o `--dry-run` para previsualizar sin cambiar nada.
-
-Después de copiar, reanuda dentro del perfil de destino con el comando propio de la herramienta:
-
-| Herramienta | Comando de reanudación |
-|------|----------------|
-| codex | `codex resume ` (≥ 0.30) |
-| claude-cli | `claude --resume ` (ejecutar desde el mismo directorio de proyecto) |
-| gemini-cli | `gemini --resume` (última sesión guardada automáticamente) o `/chat resume ` para puntos de control guardados |
-| commandcode | lanzar desde el mismo directorio de trabajo |
-
-**No compatible:** `opencode` (las sesiones y las credenciales viven en una única base de datos SQLite compartida) y `cursor` (los chats se almacenan en SQLite indexados por la ruta del espacio de trabajo).
-
-> Los perfiles heredados de esquema v1 se siembran desde `base` por defecto. Los perfiles de cuenta de esquema v2 ya leen las conversaciones y la configuración declaradas desde la raíz nativa compartida; los perfiles aislados empiezan vacíos. Usa `multi-cli continue` para copiar conversaciones compatibles hacia o desde un perfil aislado.
-
----
-
-## Tipos de perfil
-
-| Opción | Significado |
-|------|---------|
-| *(ninguno)* | **Compartido por defecto** — credenciales separadas; conversaciones y configuración compartidas cuando el adaptador lo permite. |
-| `-i`, `--isolate`, `--isolated` | **Aislado** — toda la raíz de la herramienta vive dentro del perfil; no se comparte nada. |
-| `--shared` | Alias heredado para el modo compartido cuando el adaptador lo admite. |
-| `--cli` | **CLI** — marca el perfil para lanzamiento solo en terminal. |
-| `--from ` | Clonar desde una plantilla guardada. |
-
----
-
-## Variables de entorno
-
-| Variable | Valor por defecto | Propósito |
-|----------|---------|---------|
-| `MULTICLI_HOME` | `~/MultiCliProfiles` | Dónde se almacenan todos los perfiles |
-| `MULTICLI_OVERRIDE_BINARY` | *(sin definir)* | Forzar una ruta de binario específica para el próximo lanzamiento |
-| `MULTICLI_REPO` | *(sin definir)* | URL de Git para la instalación remota |
-| `MULTICLI_PLATFORM` | *(automático)* | Anular la detección de plataforma (`darwin`, `linux`) |
-
----
-
-## Perfiles heredados
-
-Los perfiles creados antes de schema-v2 son perfiles heredados de raíz completa: conservan el comportamiento anterior de `env`, `userDataDir`, `redirectHome`, `appdata` y `sandboxUser` por compatibilidad. Un directorio de perfil sin archivo `.profile.json` se trata como heredado.
-
-`multi-cli migrate /` convierte un perfil heredado a schema-v2: las credenciales declaradas se mueven al perfil y el estado normal declarado se enlaza con el home compartido de la herramienta. Usa `--dry-run` para previsualizar el plan de movimiento sin cambiar nada, y `--prefer-profile` para reemplazar los archivos compartidos en conflicto con la copia del perfil — los destinos de credenciales nunca se sobrescriben. El almacenamiento de perfiles y la raíz de estado compartido deben estar en el mismo volumen, porque la migración usa movimientos atómicos dentro del mismo volumen.
-
----
-
-## Diagnóstico
-
-```bash
-multi-cli doctor
-```
-
-Comprueba que el almacenamiento de perfiles existe, que el directorio de alias está en el PATH y que el binario de cada herramienta se detecta (o muestra una sugerencia de instalación).
-
----
-
-## Autocompletado del shell
-
-```bash
-multi-cli completion bash # or zsh, powershell
-```
-
-Sigue las instrucciones para añadirlo a tu `.zshrc`, `.bashrc` o `$PROFILE` de PowerShell.
-
----
-
-## Desinstalación
-
-**macOS / Linux**
-
-```bash
-curl -fsSL https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/uninstall.sh | bash
-```
-
-**Windows**
-
-```powershell
-irm https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/uninstall.ps1 | iex
-```
-
-Se te preguntará si deseas eliminar los datos de tus perfiles — nada se borra sin confirmación.
-
----
-
-## Enlaces
-
-- [Matriz de compatibilidad](docs/support-matrix.md) — estado de aislamiento por producto y por SO, y los criterios de verificación
-- [Política de seguridad](SECURITY.md)
-- [Licencia](LICENSE)
-- [Repositorio en GitHub](https://github.com/Spielewoy/multi-cli)
-
----
-
-## Créditos
-
-- **Creador** — [Spielewoy](https://github.com/Spielewoy)
-
----
-
-## Licencia
-
-[MIT](LICENSE)
diff --git a/README.he.md b/README.he.md
deleted file mode 100644
index d946ef7..0000000
--- a/README.he.md
+++ /dev/null
@@ -1,315 +0,0 @@
-[English](README.md) | [Español](README.es.md) | [العربية](README.ar.md) | [中文](README.zh.md) | [Русский](README.ru.md) | **עברית**
-
-
-
-# multi-cli
-
-**הפעלת מספר פרופילי חשבון של כלי תכנות מבוססי AI בו-זמנית.**
-
-פרופיל schema-v2 מבודד את אישורי החשבון והמכסה, ומשתף שיחות, הגדרות והרחבות כאשר הגבול בטוח. כאשר הספק משלב אימות עם סשנים, multi-cli משתמש במשתמש מערכת הפעלה נפרד או בפרופיל שורש מלא באמצעות `--isolated`. [מטריצת התמיכה](docs/support-matrix.md) מפרטת את המצב והדרישות המדויקים לכל פלטפורמה.
-
-פרופילי schema-v1 קיימים נשארים פרופילים מדור קודם בעלי שורש מלא עד שיועברו — ראו [פרופילים מדור קודם](#legacy-profiles).
-
-[](https://github.com/Spielewoy/multi-cli)
-[](https://github.com/Spielewoy)
-[](https://github.com/Spielewoy/multi-cli/stargazers)
-[](#install)
-[](#license)
-
----
-
-## כלים נתמכים
-
-המאגר כולל 17 מתאמים. `supported` פירושו ש-multi-cli מספק לפחות מצב בידוד עובד אחד במערכת זו; `unsupported` פירושו שהמוצר או מצב הבידוד אינם זמינים בה. המקור הסמכותי הוא [docs/support-matrix.md](docs/support-matrix.md).
-
-| כלי | סוג | Windows | macOS | Linux |
-|------|------|---------|-------|-------|
-| [Claude Code](claude-cli/) | CLI | supported (file overlay) | supported for API-key profiles only; subscription OAuth is unsupported | supported (file overlay) |
-| [OpenAI Codex CLI](codex/) | CLI | supported (file overlay; file credential store mode) | supported | supported |
-| [Gemini CLI](gemini-cli/) | CLI | supported (file overlay) | supported | supported |
-| [OpenCode](opencode/) | CLI | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Command Code](commandcode/) | CLI | supported (file overlay; use `commandcode`, bare `cmd` collides with cmd.exe) | supported | supported |
-| [Cursor Desktop](cursor/) | IDE | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Cursor CLI](cursor-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Antigravity](antigravity/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [AGY CLI](agy-cli/) | CLI | supported (OS-user isolation; elevated terminal) | unsupported (owned-user Keychain isolation not proven) | unsupported (owned-user Secret Service session not implemented) |
-| [Kiro](kiro/) | IDE | supported (OS-user isolation) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Zed](zed/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [Devin Desktop / Windsurf](windsurf/) | IDE | supported (OS-user isolation; elevated terminal) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [GitHub Copilot CLI](copilot-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Copilot in VS Code](copilot-vscode/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [Kimi Code CLI](kimi-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Codex Desktop App](codex-gui/) | GUI | supported (owned Windows user and Store AppX activation) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (no desktop app) |
-| [Grok Build CLI](grok-cli/) | CLI/TUI | supported (process token via `multi-cli auth set`) | supported | supported |
-
-לכל כלי תיקייה משלו בשורש המאגר עם קובץ `adapter.json` שמתאר את גבול החשבון, את המצב הרגיל המשותף ואת הראיות הנדרשות לקידום לסטטוס מאומת.
-
----
-
-
-
-## התקנה
-
-**macOS / Linux**
-
-```bash
-curl -fsSL https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/install.sh | bash
-```
-
-**Windows** — פתחו PowerShell:
-
-```powershell
-irm https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/install.ps1 | iex
-```
-
-> לאחר ההתקנה, **הפעילו מחדש את הטרמינל** כדי ששינויי ה-PATH ייכנסו לתוקף.
-
-### מקוד המקור
-
-```bash
-git clone https://github.com/Spielewoy/multi-cli.git
-cd multi-cli
-./scripts/install.sh --local # macOS/Linux
-.\scripts\install.ps1 -Local # Windows
-```
-
-> לאחר ההתקנה, **הפעילו מחדש את הטרמינל** כדי ששינויי ה-PATH ייכנסו לתוקף.
-
-> [jq](https://jqlang.github.io/jq/) **מותקן אוטומטית** על ידי תוכנית ההתקנה בכל הפלטפורמות — אין צורך בהגדרה ידנית.
-
----
-
-## התחלה מהירה
-
-```bash
-# Create a profile
-multi-cli new claude-cli/work
-
-# Launch it
-multi-cli launch claude-cli/work
-
-# Or use the shorthand
-multi-cli claude-cli/work
-```
-
-כל פרופיל מקבל כינוי shell אוטומטי:
-
-| פלטפורמה | מיקום |
-|----------|----------|
-| macOS / Linux | `~/MultiCliProfiles/bin/` (הוסיפו ל-`PATH`) |
-| Windows | קיצורי דרך בתפריט ההתחלה נוצרים אוטומטית |
-
----
-
-## פקודות
-
-### ניהול פרופילים
-
-| פקודה | תיאור |
-|---------|-------------|
-| `multi-cli new
/` | יצירת פרופיל חשבון (אישורים נפרדים ומצב רגיל משותף) |
-| `multi-cli new / --isolated` | יצירת פרופיל שורש מלא ללא מצב משותף |
-| `multi-cli new / --shared` | פרופיל משותף ישן של schema-v1; פרופילי schema-v2 כבר משתפים את המצב הרגיל המוצהר כברירת מחדל |
-| `multi-cli new / --from ` | יצירה מתבנית שמורה |
-| `multi-cli /` | הפעלת פרופיל (קיצור) |
-| `multi-cli launch /` | הפעלת פרופיל |
-| `multi-cli list []` | הצגת כל הפרופילים |
-| `multi-cli status` | List profiles with their type and disk size |
-| `multi-cli clone / /` | העתקת פרופיל קיים |
-| `multi-cli rename / /` | שינוי שם של פרופיל |
-| `multi-cli delete /` | מחיקת פרופיל וכל הנתונים שלו |
-
-### אימות חשבונות והעברה
-
-| פקודה | תיאור |
-|---------|-------------|
-| `multi-cli auth set /` | שמירת אישור הסוד התהליכי של הפרופיל במאגר האישורים של מערכת ההפעלה (שואל באופן אינטראקטיבי או קורא שורה אחת מ-stdin) |
-| `multi-cli auth status /` | דיווח האם מאוחסנים אישורים עבור הפרופיל |
-| `multi-cli auth clear /` | הסרת האישורים המאוחסנים |
-| `multi-cli migrate / [--dry-run] [--prefer-profile]` | העברת פרופיל schema-v1 מדור קודם ל-schema-v2 |
-
-`auth` חל רק על מתאמים המשתמשים במנגנון `processSecret` (`cursor-cli`, `copilot-cli`, `kimi-cli`, `grok-cli`). ההפעלה נשארת מושבתת עד שמאוחסנים אישורים. ראו [פרופילים מדור קודם](#legacy-profiles) לגבי `migrate`.
-
-### תבניות
-
-| פקודה | תיאור |
-|---------|-------------|
-| `multi-cli template save / ` | שמירת פרופיל כתבנית לשימוש חוזר |
-| `multi-cli template list` | הצגת תבניות שמורות |
-| `multi-cli template delete ` | הסרת תבנית |
-
-### גיבוי והעברה
-
-| פקודה | תיאור |
-|---------|-------------|
-| `multi-cli export / [path]` | ארכוב פרופיל ל-`.tar.gz` (`.zip` ב-Windows) |
-| `multi-cli import /` | שחזור פרופיל מארכיון |
-
-### סשנים
-
-| פקודה | תיאור |
-|---------|-------------|
-| `multi-cli continue ` | העתקת מצב השיחה (סשנים/תמלילים/היסטוריה) מפרופיל אחד לאחר — אישורים לעולם אינם מועתקים |
-| `multi-cli continue --no-merge` | דריסת קבצי היעד במקום שמירת החדשים יותר |
-| `multi-cli continue --dry-run` | תצוגה מקדימה של מה שיועתק, ללא שינוי דבר |
-
-`base` עובד כשם פרופיל בכל אחד מהצדדים ומשמעותו תיקיית הבית האמיתית של הכלי (`~/.codex`, `~/.claude`, …). נתמך עבור `codex`, `claude-cli`, `gemini-cli` ו-`commandcode`. ראו [המשך שיחה בין חשבונות](#continue-a-chat-across-accounts).
-
-### כלי עזר
-
-| פקודה | תיאור |
-|---------|-------------|
-| `multi-cli tools` | הצגת כל הכלים הנתמכים וסטטוס ההתקנה שלהם |
-| `multi-cli stats` | הצגת שימוש בדיסק לכל פרופיל |
-| `multi-cli doctor` | אבחון הסביבה שלך |
-| `multi-cli completion {bash\|zsh\|powershell}` | הגדרת השלמה אוטומטית ל-shell |
-| `multi-cli help` | הצגת עזרה |
-| `multi-cli version` | הצגת גרסה |
-
----
-
-## איך הבידוד עובד
-
-מתאמי schema-v2 מצהירים על מנגנון חשבון בנפרד מהמצב הרגיל:
-
-| מנגנון | איך זה עובד |
-|-----------|--------------|
-| `fileOverlay` | האישורים נשארים בתוך הפרופיל; המצב הרגיל המוצהר מקושר לבית המשותף המקורי של הכלי. |
-| `processSecret` | אישור ייחודי לפרופיל, בעל קדימות עליונה, מוזרק רק לתהליך הבן. ההפעלה נשארת מושבתת עד שמוגדר אחסון סודות מאובטח. |
-| `osUserCredentialStore` | זהויות קבועות של צרור המפתחות מופרדות באמצעות משתמש מערכת הפעלה בבעלות multi-cli. נשאר מושבת עד שאומתו הבעלות והניקוי. |
-| `inseparable` | הספק משלב אימות ומצב רגיל; הפעלה תקינה נכשלת באופן סגור והמגבלה מוצגת. |
-
-פרופילי גרסה 1 שומרים על התנהגות השורש המלא הקודמת (`env`, `userDataDir`, `redirectHome`, `appdata` ו-`sandboxUser`) לצורך תאימות. כל `/adapter.json` מציין את יכולות המוצר/הפלטפורמה ואת דרישות הראיות.
-
----
-
-
-
-## המשך שיחה בין חשבונות
-
-נתקלתם במגבלת קצב בחשבון A באמצע שיחה? עברו לפרופיל המחובר לחשבון B והמשיכו את השיחה מהנקודה שבה היא נעצרה. `multi-cli continue` מעתיק את מצב השיחה הנייד — סשנים, תמלילים, היסטוריה — בין פרופילים. **אישורים לעולם אינם מועתקים.**
-
-```bash
-# You were working in codex/work (account A) and got rate-limited.
-# codex/personal is logged into account B.
-multi-cli continue codex work personal # copy the conversation state
-multi-cli continue codex work personal --dry-run # preview first, if you like
-
-codex-personal # launch account B's profile
-codex resume # resume the same chat (codex ≥ 0.30)
-```
-
-הריצו `codex resume` ללא ארגומנט כדי לפתוח בורר אינטראקטיבי של סשנים קודמים, כך שלעולם לא תצטרכו לחפש מזהה. אם בכל זאת צריך, מזהה הסשן הוא ה-UUID בשם קובץ ה-rollout תחת `sessions/YYYY/MM/DD/`.
-
-`base` הוא שם פרופיל חוקי בכל אחד מהצדדים ומתייחס לתיקיית הבית האמיתית של הכלי (`~/.codex`, `~/.claude`, …), כך שאפשר להמשיך אל ההתקנה ברירת המחדל או ממנה.
-
-כברירת מחדל, הקבצים **ממוזגים** — הקבצים החדשים יותר ביעד נשמרים. העבירו `--no-merge` כדי לדרוס את היעד במקום, או `--dry-run` לתצוגה מקדימה ללא שינוי דבר.
-
-לאחר ההעתקה, המשיכו בתוך פרופיל היעד עם הפקודה של הכלי עצמו:
-
-| כלי | פקודת המשך |
-|------|----------------|
-| codex | `codex resume ` (≥ 0.30) |
-| claude-cli | `claude --resume ` (להריץ מאותה תיקיית פרויקט) |
-| gemini-cli | `gemini --resume` (הסשן האחרון שנשמר אוטומטית) או `/chat resume ` לנקודות ביקורת שמורות |
-| commandcode | הפעלה מאותה תיקיית עבודה |
-
-**לא נתמך:** `opencode` (סשנים ואישורים חיים במסד נתונים SQLite משותף אחד) ו-`cursor` (שיחות מאוחסנות ב-SQLite עם מפתח לפי נתיב סביבת העבודה).
-
-> פרופילי schema-v1 ישנים מאותחלים מ-`base` כברירת מחדל. פרופילי חשבון schema-v2 כבר קוראים שיחות ותצורה מוצהרות מהשורש המקומי המשותף, ופרופילים מבודדים מתחילים ריקים. השתמשו ב-`multi-cli continue` כדי להעתיק שיחות נתמכות אל פרופיל מבודד או ממנו.
-
----
-
-## סוגי פרופילים
-
-| דגל | משמעות |
-|------|---------|
-| *(ללא)* | **משותף כברירת מחדל** — אישורים נפרדים; שיחות והגדרות משותפות כאשר המתאם מאפשר זאת. |
-| `-i`, `--isolate`, `--isolated` | **מבודד** — כל שורש הכלי נמצא בפרופיל; דבר אינו משותף. |
-| `--shared` | כינוי ישן למצב המשותף, כאשר המתאם תומך בו. |
-| `--cli` | **CLI** — הפעלה מהטרמינל בלבד. |
-| `--from ` | שיבוט מתבנית שמורה. |
-
----
-
-## משתני סביבה
-
-| משתנה | ברירת מחדל | מטרה |
-|----------|---------|---------|
-| `MULTICLI_HOME` | `~/MultiCliProfiles` | היכן מאוחסנים כל הפרופילים |
-| `MULTICLI_OVERRIDE_BINARY` | *(לא מוגדר)* | כפיית נתיב בינארי ספציפי להפעלה הבאה |
-| `MULTICLI_REPO` | *(לא מוגדר)* | כתובת Git להתקנה מרחוק |
-| `MULTICLI_PLATFORM` | *(אוטומטי)* | עקיפת זיהוי הפלטפורמה (`darwin`, `linux`) |
-
----
-
-
-
-## פרופילים מדור קודם
-
-פרופילים שנוצרו לפני schema-v2 הם פרופילים מדור קודם בעלי שורש מלא: הם שומרים על ההתנהגות הקודמת של `env`, `userDataDir`, `redirectHome`, `appdata` ו-`sandboxUser` לצורך תאימות. תיקיית פרופיל ללא קובץ `.profile.json` נחשבת לדור קודם.
-
-`multi-cli migrate /` ממיר פרופיל מדור קודם ל-schema-v2: האישורים המוצהרים עוברים לתוך הפרופיל, והמצב הרגיל המוצהר מקושר לבית המשותף של הכלי. השתמשו ב-`--dry-run` כדי לראות את תוכנית ההעברה מבלי לשנות דבר, וב-`--prefer-profile` כדי להחליף קבצים משותפים מתנגשים בעותק של הפרופיל — יעדי אישורים לעולם אינם נדרסים. אחסון הפרופילים ושורש המצב המשותף חייבים להיות באותו כרך, מכיוון שההעברה משתמשת בהעברות אטומיות בתוך אותו כרך.
-
----
-
-## אבחון
-
-```bash
-multi-cli doctor
-```
-
-בודק שאחסון הפרופילים קיים, שתיקיית הכינויים נמצאת ב-PATH, ושהבינארי של כל כלי מזוהה (או מציג רמז להתקנה).
-
----
-
-## השלמה אוטומטית ל-shell
-
-```bash
-multi-cli completion bash # or zsh, powershell
-```
-
-עקבו אחר ההוראות כדי להוסיף זאת ל-`.zshrc`, ל-`.bashrc` או ל-`$PROFILE` של PowerShell.
-
----
-
-## הסרת התקנה
-
-**macOS / Linux**
-
-```bash
-curl -fsSL https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/uninstall.sh | bash
-```
-
-**Windows**
-
-```powershell
-irm https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/uninstall.ps1 | iex
-```
-
-תישאלו אם להסיר את נתוני הפרופילים — דבר לא נמחק ללא אישור.
-
----
-
-## קישורים
-
-- [מטריצת תמיכה](docs/support-matrix.md) — סטטוס בידוד לפי מוצר ומערכת הפעלה, ושער האימות
-- [מדיניות אבטחה](SECURITY.md)
-- [רישיון](LICENSE)
-- [מאגר GitHub](https://github.com/Spielewoy/multi-cli)
-
----
-
-## קרדיטים
-
-- **יוצר** — [Spielewoy](https://github.com/Spielewoy)
-
----
-
-
-
-## רישיון
-
-[MIT](LICENSE)
-
-
diff --git a/README.md b/README.md
index fa8625a..c39f4ab 100644
--- a/README.md
+++ b/README.md
@@ -1,314 +1,243 @@
-**English** | [Español](README.es.md) | [العربية](README.ar.md) | [中文](README.zh.md) | [Русский](README.ru.md) | [עברית](README.he.md)
+
+
+
-# multi-cli
+Use multiple accounts simultaneously without switching.
-**Run multiple account profiles for AI coding tools simultaneously.**
+
+
+
+
+
+
-By default, each profile gets separate account credentials while conversations, configuration, agents, skills, and plugins stay shared where the tool allows it. Use `--isolated` when you want the entire tool home separated. Tools whose login cannot be separated safely use OS-user isolation instead. See the [support matrix](docs/support-matrix.md) for per-platform requirements.
+
+ English |
+ Español |
+ العربية |
+ 中文 |
+ Русский |
+ עברית
+
-Profiles created by older multi-cli versions keep their whole-root behavior until migrated — see [Legacy Profiles](#legacy-profiles).
+## Contents
-[](https://github.com/Spielewoy/multi-cli)
-[](https://github.com/Spielewoy)
-[](https://github.com/Spielewoy/multi-cli/stargazers)
-[](#install)
-[](#license)
-
----
-
-## Supported Tools
-
-17 adapters ship in this repository. Status is per operating system and binary: `supported` means multi-cli provides account isolation on that OS (any mode requirements are noted), and `unsupported` means no isolation mode works there. The authoritative source is [docs/support-matrix.md](docs/support-matrix.md).
-
-| Tool | Kind | Windows | macOS | Linux |
-|------|------|---------|-------|-------|
-| [Claude Code](claude-cli/) | CLI | supported (file overlay) | supported for API-key profiles only; subscription OAuth is unsupported | supported (file overlay) |
-| [OpenAI Codex CLI](codex/) | CLI | supported (file overlay; file credential store mode) | supported | supported |
-| [Gemini CLI](gemini-cli/) | CLI | supported (file overlay) | supported | supported |
-| [OpenCode](opencode/) | CLI | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Command Code](commandcode/) | CLI | supported (file overlay; use `commandcode`, bare `cmd` collides with cmd.exe) | supported | supported |
-| [Cursor Desktop](cursor/) | IDE | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Cursor CLI](cursor-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Antigravity](antigravity/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [AGY CLI](agy-cli/) | CLI | supported (OS-user isolation; elevated terminal) | unsupported (owned-user Keychain isolation not proven) | unsupported (owned-user Secret Service session not implemented) |
-| [Kiro](kiro/) | IDE | supported (OS-user isolation) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Zed](zed/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [Devin Desktop / Windsurf](windsurf/) | IDE | supported (OS-user isolation; elevated terminal) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [GitHub Copilot CLI](copilot-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Copilot in VS Code](copilot-vscode/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [Kimi Code CLI](kimi-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Codex Desktop App](codex-gui/) | GUI | supported (owned Windows user and Store AppX activation) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (no desktop app) |
-| [Grok Build CLI](grok-cli/) | CLI/TUI | supported (process token via `multi-cli auth set`) | supported | supported |
-
-Each tool has its own folder at the repo root with an `adapter.json` describing the account boundary, the shared normal state, and the per-OS support status.
-
----
+[Install](#install) · [Quick start](#quick-start) · [Supported tools](#supported-tools) · [Commands](#commands) · [Isolation](#how-isolation-works) · [Move sessions](#move-sessions-between-accounts) · [Troubleshooting](#troubleshooting) · [Uninstall](#uninstall)
## Install
-**macOS / Linux**
+Use the platform install script below, or download a packaged archive from [GitHub Releases](https://github.com/Spielewoy/multi-cli/releases).
+
+### macOS and Linux
```bash
curl -fsSL https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/install.sh | bash
```
-**Windows** — open PowerShell:
+### Windows
+
+Open PowerShell:
```powershell
irm https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/install.ps1 | iex
```
-> After install, **restart your terminal** for PATH changes to take effect.
+The installer clones or updates Multi-CLI and installs `jq` if needed. Rerun the same command to update. Restart your terminal after installation. On macOS and Linux, follow the printed PATH instruction if one appears.
-### From source
+
+Install from source
```bash
git clone https://github.com/Spielewoy/multi-cli.git
cd multi-cli
-./scripts/install.sh --local # macOS/Linux
-.\scripts\install.ps1 -Local # Windows
+./scripts/install.sh --local
```
-> After install, **restart your terminal** for PATH changes to take effect.
+Windows PowerShell:
-> [jq](https://jqlang.github.io/jq/) is **installed automatically** by the installer on all platforms — no manual setup required.
+```powershell
+git clone https://github.com/Spielewoy/multi-cli.git
+cd multi-cli
+.\scripts\install.ps1 -Local
+```
+
+
----
+Requirements: Git, an internet connection, Bash on macOS or Linux, or PowerShell on Windows. The installer resolves the required `jq` binary automatically when possible.
-## Quick Start
+## Quick start
```bash
-# Create a profile
-multi-cli new claude-cli/work
+# Check your setup and discover installed tools
+multi-cli doctor
+multi-cli tools
-# Launch it
+# Create and launch a profile
+multi-cli new claude-cli/work
multi-cli launch claude-cli/work
-# Or use the shorthand
+# Launch shorthand
multi-cli claude-cli/work
```
-Each profile gets an automatic shell alias:
-
-| Platform | Location |
-|----------|----------|
-| macOS / Linux | `~/MultiCliProfiles/bin/` (add to `PATH`) |
-| Windows | CLI aliases in `~/MultiCliProfiles/bin/`; Start Menu shortcuts for GUI profiles |
-
----
+By default, credentials stay inside the profile while supported settings, conversations, agents, skills, and plugins remain shared. Use `--isolated` only with adapters that support whole-root isolation. OS-user adapters reject it because a redirected folder cannot isolate a fixed OS credential store.
+
+## Supported tools
+
+| Tool | Adapter | Platforms | Account boundary |
+|---|---|---|---|
+| AGY CLI | `agy-cli` | Windows | OS user |
+| Antigravity | `antigravity` | Windows | OS user |
+| Claude Code | `claude-cli` | Windows, Linux, macOS API keys | File overlay |
+| Codex CLI | `codex` | Windows, macOS, Linux | File overlay |
+| Codex Desktop | `codex-gui` | Windows | OS user |
+| Command Code | `commandcode` | Windows, macOS, Linux | File overlay |
+| GitHub Copilot CLI | `copilot-cli` | Windows, macOS, Linux | Process secret |
+| GitHub Copilot in VS Code | `copilot-vscode` | Windows | OS user |
+| Cursor CLI | `cursor-cli` | Windows, macOS, Linux | Process secret |
+| Cursor Desktop | `cursor` | Windows, macOS, Linux | Isolated tool home |
+| Gemini CLI | `gemini-cli` | Windows, macOS, Linux | File overlay |
+| Grok Build CLI | `grok-cli` | Windows, macOS, Linux | Process secret |
+| Kimi Code CLI | `kimi-cli` | Windows, macOS, Linux | Process secret |
+| Kiro | `kiro` | Windows, macOS, Linux | OS user |
+| OpenCode | `opencode` | Windows, macOS, Linux | Isolated tool home |
+| Windsurf | `windsurf` | Windows, macOS, Linux | OS user |
+| Zed | `zed` | Windows | OS user |
+
+Platform requirements and known limits are documented in the [support matrix](docs/support-matrix.md). Run `multi-cli tools` to see what is available on your machine.
## Commands
-### Profile Management
+### Profiles
-| Command | Description |
-|---------|-------------|
+| Command | Action |
+|---|---|
| `multi-cli new /` | Create an account profile (credentials separate; normal state shared) |
-| `multi-cli new / --isolated` | Fully isolated schema-v2 profile — shares nothing (whole tool root inside the profile) |
-| `multi-cli new / --shared` | Legacy schema-v1 shared profile; schema-v2 profiles already share declared normal state by default |
-| `multi-cli new / --from ` | Create from a saved template |
-| `multi-cli /` | Launch a profile (shorthand) |
-| `multi-cli launch /` | Launch a profile |
-| `multi-cli list []` | List all profiles |
-| `multi-cli status` | List profiles with their type and disk size |
-| `multi-cli clone / /` | Copy an existing profile |
+| `multi-cli new / --isolated` | Create a whole-root isolated profile when the adapter supports it; aliases: `--isolate`, `-i` |
+| `multi-cli new / --from ` | Create a schema-v2 profile from a schema-v2 template |
+| `multi-cli /` | Launch a profile |
+| `multi-cli launch / [-- args...]` | Launch and pass arguments to the tool |
+| `multi-cli list []` | List profiles |
+| `multi-cli clone / /` | Copy a schema-v2 profile |
| `multi-cli rename / /` | Rename a profile |
-| `multi-cli delete /` | Delete a profile and all its data |
-
-### Account Authentication & Migration
-
-| Command | Description |
-|---------|-------------|
-| `multi-cli auth set /` | Store the profile's process-secret credential in the OS credential store (prompts interactively, or reads one line from stdin) |
-| `multi-cli auth status /` | Report whether a credential is stored for the profile |
-| `multi-cli auth clear /` | Remove the stored credential |
-| `multi-cli migrate / [--dry-run] [--prefer-profile]` | Migrate a legacy schema-v1 profile to schema-v2 |
-
-`auth` applies only to adapters that use the `processSecret` mechanism (`cursor-cli`, `copilot-cli`, `kimi-cli`, `grok-cli`). Launch stays disabled until a credential is stored. See [Legacy Profiles](#legacy-profiles) for `migrate`.
-
-### Templates
-
-| Command | Description |
-|---------|-------------|
-| `multi-cli template save / ` | Save a profile as a reusable template |
-| `multi-cli template list` | List saved templates |
-| `multi-cli template delete ` | Remove a template |
-
-### Backup & Transfer
-
-| Command | Description |
-|---------|-------------|
-| `multi-cli export / [path]` | Archive a profile to `.tar.gz` (`.zip` on Windows) |
-| `multi-cli import /` | Restore a profile from an archive |
-
-### Sessions
-
-| Command | Description |
-|---------|-------------|
-| `multi-cli continue ` | Copy conversation state (sessions/transcripts/history) from one profile to another — never credentials |
-| `multi-cli continue --no-merge` | Overwrite destination files instead of keeping newer ones |
-| `multi-cli continue --dry-run` | Preview what would be copied, change nothing |
-
-`base` works as a profile name on either end and means the tool's real home dir (`~/.codex`, `~/.claude`, …). Supported for `codex`, `claude-cli`, `gemini-cli`, and `commandcode`. See [Continue a Chat Across Accounts](#continue-a-chat-across-accounts).
-
-### Utilities
-
-| Command | Description |
-|---------|-------------|
-| `multi-cli tools` | List all supported tools and their install status |
-| `multi-cli stats` | Show disk usage per profile |
-| `multi-cli doctor` | Diagnose your environment |
-| `multi-cli completion {bash\|zsh\|powershell}` | Set up shell tab-completion |
-| `multi-cli help` | Show help |
-| `multi-cli version` | Show version |
-
----
-
-## How Isolation Works
-
-Schema-v2 adapters declare an account mechanism separately from normal state:
-
-| Mechanism | How it works |
-|-----------|--------------|
-| `fileOverlay` | Credentials stay under the profile; declared normal state links to the native shared tool home. |
-| `processSecret` | A per-profile, highest-precedence credential is injected into only the child process. Launch remains disabled until secure secret storage is configured. |
-| `osUserCredentialStore` | Fixed keychain identities are separated with a multi-cli-owned OS user. Provisioning requires an elevated terminal on Windows. |
-| `inseparable` | The vendor combines auth and normal state; compliant launch fails closed and the limitation is shown. |
-
-Version-1 profiles retain the earlier whole-root `env`, `userDataDir`, `redirectHome`, `appdata`, and `sandboxUser` behavior for compatibility. Each `/adapter.json` states product/platform capabilities and per-OS support status.
-
----
-
-## Shared vs Isolated Profiles
-
-Profiles are **shared** by default: account credentials are separate, while conversations, configuration, and skills use the tool's normal shared location. `--isolated` puts the tool's entire home/config directory inside the profile, so nothing is shared. Isolated profiles can still be used with `continue` to copy supported conversations between accounts. For tools whose login cannot be split from normal state, `--isolated` is the direct whole-root option and avoids creating a separate OS user.
+| `multi-cli delete /` | Delete a profile after confirmation |
+
+### Credentials and portability
+
+| Command | Action |
+|---|---|
+| `multi-cli auth set /` | Store a process secret in the OS credential store |
+| `multi-cli auth status /` | Check whether that secret exists |
+| `multi-cli auth clear /` | Remove that secret |
+| `multi-cli continue [--dry-run] [--no-merge]` | Copy supported session state, never credentials |
+| `multi-cli template save / ` | Save a credential-free schema-v2 template |
+| `multi-cli template list \| delete ` | List or delete templates |
+| `multi-cli export / [path]` | Export a schema-v2 profile |
+| `multi-cli import /` | Import a schema-v2 archive |
+
+### Maintenance
+
+| Command | Action |
+|---|---|
+| `multi-cli migrate / [--dry-run] [--prefer-profile]` | Migrate a legacy profile to schema v2 |
+| `multi-cli status` | Show profiles and sizes |
+| `multi-cli stats` | Show profile storage use |
+| `multi-cli doctor [--deep]` | Diagnose setup and optionally audit runtimes |
+| `multi-cli completion {bash\|zsh\|powershell}` | Print shell completion setup |
+| `multi-cli help` | Show every command |
+| `multi-cli version` | Show the installed version |
+
+## How isolation works
+
+| Mode | What stays separate | What stays shared |
+|---|---|---|
+| File overlay | Declared credential files | Native configuration and conversations |
+| Process secret | One credential injected into the child process | The tool's normal state |
+| OS user | The product's fixed OS credential identity | Nothing unless the adapter declares it |
+| Isolated tool home | The entire tool home | Nothing |
+
+Account profiles use the narrowest safe boundary. `--isolated` uses a separate tool home and shares nothing, but only for adapters that declare whole-root support. OS-user adapters reject it because folder redirection cannot isolate a fixed OS credential store. Products tied to that identity use a Multi-CLI-owned OS user; Windows requires an elevated terminal.
+
+Process-secret adapters require one extra step before launch:
```bash
-multi-cli new codex/acme --isolated # CODEX_HOME is the profile dir; ~/.codex is never touched
+multi-cli new cursor-cli/work
+multi-cli auth set cursor-cli/work
+multi-cli cursor-cli/work
```
----
-
-
-
-## Continue a Chat Across Accounts
-
-Hit a rate limit on account A mid-conversation? Switch to a profile logged into account B and pick the chat up where it stopped. `multi-cli continue` copies the portable conversation state — sessions, transcripts, history — between profiles. **Credentials are never copied.**
+Profiles created by earlier Multi-CLI versions keep their original whole-root behavior. Preview migration with:
```bash
-# You were working in codex/work (account A) and got rate-limited.
-# codex/personal is logged into account B.
-multi-cli continue codex work personal # copy the conversation state
-multi-cli continue codex work personal --dry-run # preview first, if you like
-
-codex-personal # launch account B's profile
-codex resume # resume the same chat (codex ≥ 0.30)
+multi-cli migrate codex/work --dry-run
```
-Run `codex resume` with no argument to open an interactive picker of past sessions, so you never have to look up an id. If you do need it, the session id is the UUID in the rollout filename under `sessions/YYYY/MM/DD/`.
-
-`base` is a valid profile name on either end and refers to the tool's real home dir (`~/.codex`, `~/.claude`, …), so you can continue to or from your default install.
-
-By default, files are **merged** — newer files in the destination are kept. Pass `--no-merge` to overwrite the destination instead, or `--dry-run` to preview without changing anything.
-
-After copying, resume inside the destination profile with the tool's own command:
+Only schema-v2 profiles, templates, and archives are portable. Migrate a legacy source profile before cloning it or creating a new template or export.
-| Tool | Resume command |
-|------|----------------|
-| codex | `codex resume ` (≥ 0.30) |
-| claude-cli | `claude --resume ` (run from the same project directory) |
-| gemini-cli | `gemini --resume` (auto-saved last session) or `/chat resume ` for saved checkpoints |
-| commandcode | launch from the same working directory |
+## Move sessions between accounts
-**Not supported:** `opencode` (sessions and credentials live in one shared SQLite database) and `cursor` (chats are stored in SQLite keyed to the workspace path).
+Copy supported conversation state when one account reaches a limit:
-> Legacy schema-v1 profiles are seeded from `base` by default. Schema-v2 account profiles already read declared conversations and configuration from the shared native root; isolated profiles start empty. Use `multi-cli continue` to copy supported conversations into or out of an isolated profile.
+```bash
+multi-cli continue codex work personal --dry-run
+multi-cli continue codex work personal
+multi-cli codex/personal
+codex resume
+```
----
+`base` refers to the tool's normal home, so either side can be a profile or the default installation. Credentials are never copied. Session transfer is supported for `codex`, `claude-cli`, `gemini-cli`, and `commandcode`.
-## Profile Types
+## Shell aliases
-| Flag | Meaning |
-|------|---------|
-| *(none)* | **Account profile** — separate credentials with declared conversations/config shared through the native tool root. |
-| `--isolated`, `--isolate`, `-i` | **Whole-root isolated** — shares nothing with the native tool root. |
-| `--shared` | **Legacy shared profile** — links settings/extensions for schema-v1 adapters; cannot be combined with `--isolated`. |
-| `--cli` | **CLI** — marks the profile for terminal-only launch (skips GUI discovery). |
-| `--from ` | Create from a validated, credential-free template. |
+Each profile gets a shortcut such as `claude-cli-work`.
----
+| Platform | Location |
+|---|---|
+| macOS and Linux | `~/MultiCliProfiles/bin/` |
+| Windows | `~/MultiCliProfiles/bin/`, plus Start Menu shortcuts for GUI profiles |
-## Environment Variables
+## Configuration
| Variable | Default | Purpose |
-|----------|---------|---------|
-| `MULTICLI_HOME` | `~/MultiCliProfiles` | Where all profiles are stored |
-| `MULTICLI_OVERRIDE_BINARY` | *(unset)* | Force a specific binary path for the next launch |
-| `MULTICLI_REPO` | *(unset)* | Git URL for remote install |
-| `MULTICLI_PLATFORM` | *(auto)* | Override platform detection (`darwin`, `linux`) |
-
----
+|---|---|---|
+| `MULTICLI_HOME` | `~/MultiCliProfiles` | Profile storage |
+| `MULTICLI_OVERRIDE_BINARY` | unset | Override binary discovery for one launch |
+| `MULTICLI_REPO` | GitHub repository | Override the install source |
+| `MULTICLI_INSTALL_DIR` | platform default | Override the installation directory |
-## Legacy Profiles
-
-Profiles created before schema-v2 are legacy whole-root profiles: they keep the earlier `env`, `userDataDir`, `redirectHome`, `appdata`, and `sandboxUser` behavior for compatibility. A profile directory without a `.profile.json` file is treated as legacy.
-
-`multi-cli migrate /` converts a legacy profile to schema-v2: declared credentials move into the profile, and declared normal state links to the shared tool home. Use `--dry-run` to preview the move plan without changing anything, and `--prefer-profile` to replace conflicting shared files with the profile's copy — credential targets are never overwritten. Profile storage and the shared state root must be on the same volume, because migration uses atomic same-volume moves.
-
----
-
-## Diagnostics
+## Troubleshooting
```bash
multi-cli doctor
+multi-cli doctor --deep
+multi-cli tools
```
-Checks that your profile storage exists, alias directory is in PATH, and each tool's binary is detected (or shows an install hint).
-
----
-
-## Shell Completion
-
-```bash
-multi-cli completion bash # or zsh, powershell
-```
-
-Follow the instructions to add it to your `.zshrc`, `.bashrc`, or PowerShell `$PROFILE`.
-
----
+Restart the terminal if `multi-cli` or a new profile alias is not found after installation. The [support matrix](docs/support-matrix.md) covers product-specific requirements.
## Uninstall
-**macOS / Linux**
+macOS and Linux:
```bash
curl -fsSL https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/uninstall.sh | bash
```
-**Windows**
+Windows PowerShell:
```powershell
irm https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/uninstall.ps1 | iex
```
-You'll be asked whether to remove your profile data — nothing is deleted without confirmation.
-
----
+Profile data is preserved unless you confirm its removal.
## Links
-- [Support matrix](docs/support-matrix.md) — per-product, per-OS isolation status and mode requirements
-- [Security policy](SECURITY.md)
-- [License](LICENSE)
-- [GitHub repository](https://github.com/Spielewoy/multi-cli)
-
----
-
-## Credits
-
-- **Creator** — [Spielewoy](https://github.com/Spielewoy)
-
----
+- [Support matrix](docs/support-matrix.md)
+- [Security policy](docs/SECURITY.md)
+- [Contributing](docs/CONTRIBUTING.md)
+- [Support](docs/SUPPORT.md)
+- [GitHub Releases](https://github.com/Spielewoy/multi-cli/releases)
## License
diff --git a/README.ru.md b/README.ru.md
deleted file mode 100644
index 0889add..0000000
--- a/README.ru.md
+++ /dev/null
@@ -1,305 +0,0 @@
-[English](README.md) | [Español](README.es.md) | [العربية](README.ar.md) | [中文](README.zh.md) | **Русский** | [עברית](README.he.md)
-
-# multi-cli
-
-**Запускайте несколько аккаунтных профилей инструментов ИИ-программирования одновременно.**
-
-Профиль schema-v2 изолирует учётные данные и квоту аккаунта, а при безопасной границе разделяет диалоги, настройки и расширения. Если вендор объединяет аутентификацию с сессиями, multi-cli использует отдельного пользователя ОС или режим полного корня `--isolated`. [Матрица поддержки](docs/support-matrix.md) указывает точный режим и требования для каждой платформы.
-
-Существующие профили schema-v1 остаются устаревшими профилями с полным корнем до миграции — см. [Устаревшие профили](#устаревшие-профили).
-
-[](https://github.com/Spielewoy/multi-cli)
-[](https://github.com/Spielewoy)
-[](https://github.com/Spielewoy/multi-cli/stargazers)
-[](#установка)
-[](#лицензия)
-
----
-
-## Поддерживаемые инструменты
-
-В репозиторий входят 17 адаптеров. `supported` означает, что multi-cli предоставляет на этой ОС хотя бы один рабочий режим изоляции; `unsupported` означает, что продукт или режим там недоступен. Авторитетный источник — [docs/support-matrix.md](docs/support-matrix.md).
-
-| Инструмент | Тип | Windows | macOS | Linux |
-|------|------|---------|-------|-------|
-| [Claude Code](claude-cli/) | CLI | supported (file overlay) | supported for API-key profiles only; subscription OAuth is unsupported | supported (file overlay) |
-| [OpenAI Codex CLI](codex/) | CLI | supported (file overlay; file credential store mode) | supported | supported |
-| [Gemini CLI](gemini-cli/) | CLI | supported (file overlay) | supported | supported |
-| [OpenCode](opencode/) | CLI | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Command Code](commandcode/) | CLI | supported (file overlay; use `commandcode`, bare `cmd` collides with cmd.exe) | supported | supported |
-| [Cursor Desktop](cursor/) | IDE | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Cursor CLI](cursor-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Antigravity](antigravity/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [AGY CLI](agy-cli/) | CLI | supported (OS-user isolation; elevated terminal) | unsupported (owned-user Keychain isolation not proven) | unsupported (owned-user Secret Service session not implemented) |
-| [Kiro](kiro/) | IDE | supported (OS-user isolation) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Zed](zed/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [Devin Desktop / Windsurf](windsurf/) | IDE | supported (OS-user isolation; elevated terminal) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [GitHub Copilot CLI](copilot-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Copilot in VS Code](copilot-vscode/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [Kimi Code CLI](kimi-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Codex Desktop App](codex-gui/) | GUI | supported (owned Windows user and Store AppX activation) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (no desktop app) |
-| [Grok Build CLI](grok-cli/) | CLI/TUI | supported (process token via `multi-cli auth set`) | supported | supported |
-
-У каждого инструмента есть собственная папка в корне репозитория с файлом `adapter.json`, описывающим границу аккаунта, разделяемое обычное состояние и доказательства, необходимые для повышения до статуса «верифицировано».
-
----
-
-## Установка
-
-**macOS / Linux**
-
-```bash
-curl -fsSL https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/install.sh | bash
-```
-
-**Windows** — откройте PowerShell:
-
-```powershell
-irm https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/install.ps1 | iex
-```
-
-> После установки **перезапустите терминал**, чтобы изменения PATH вступили в силу.
-
-### Из исходного кода
-
-```bash
-git clone https://github.com/Spielewoy/multi-cli.git
-cd multi-cli
-./scripts/install.sh --local # macOS/Linux
-.\scripts\install.ps1 -Local # Windows
-```
-
-> После установки **перезапустите терминал**, чтобы изменения PATH вступили в силу.
-
-> [jq](https://jqlang.github.io/jq/) **устанавливается автоматически** установщиком на всех платформах — ручная настройка не требуется.
-
----
-
-## Быстрый старт
-
-```bash
-# Create a profile
-multi-cli new claude-cli/work
-
-# Launch it
-multi-cli launch claude-cli/work
-
-# Or use the shorthand
-multi-cli claude-cli/work
-```
-
-Каждый профиль получает автоматический псевдоним оболочки:
-
-| Платформа | Расположение |
-|----------|----------|
-| macOS / Linux | `~/MultiCliProfiles/bin/` (добавьте в `PATH`) |
-| Windows | Ярлыки в меню «Пуск» создаются автоматически |
-
----
-
-## Команды
-
-### Управление профилями
-
-| Команда | Описание |
-|---------|-------------|
-| `multi-cli new /` | Создать профиль аккаунта (отдельные учётные данные, общее обычное состояние) |
-| `multi-cli new / --isolated` | Создать профиль полного корня без общего состояния |
-| `multi-cli new / --shared` | Устаревший общий профиль schema-v1; профили schema-v2 уже используют объявленное общее состояние по умолчанию |
-| `multi-cli new / --from ` | Создать из сохранённого шаблона |
-| `multi-cli /` | Запустить профиль (сокращение) |
-| `multi-cli launch /` | Запустить профиль |
-| `multi-cli list []` | Показать все профили |
-| `multi-cli status` | List profiles with their type and disk size |
-| `multi-cli clone / /` | Скопировать существующий профиль |
-| `multi-cli rename / /` | Переименовать профиль |
-| `multi-cli delete /` | Удалить профиль и все его данные |
-
-### Аутентификация аккаунтов и миграция
-
-| Команда | Описание |
-|---------|-------------|
-| `multi-cli auth set /` | Сохранить процессный секрет профиля в хранилище учётных данных ОС (интерактивный запрос или чтение одной строки из stdin) |
-| `multi-cli auth status /` | Сообщить, сохранены ли учётные данные для профиля |
-| `multi-cli auth clear /` | Удалить сохранённые учётные данные |
-| `multi-cli migrate / [--dry-run] [--prefer-profile]` | Мигрировать устаревший профиль schema-v1 в schema-v2 |
-
-`auth` применяется только к адаптерам с механизмом `processSecret` (`cursor-cli`, `copilot-cli`, `kimi-cli`, `grok-cli`). Запуск остаётся отключённым, пока учётные данные не сохранены. Про `migrate` см. [Устаревшие профили](#устаревшие-профили).
-
-### Шаблоны
-
-| Команда | Описание |
-|---------|-------------|
-| `multi-cli template save / ` | Сохранить профиль как переиспользуемый шаблон |
-| `multi-cli template list` | Показать сохранённые шаблоны |
-| `multi-cli template delete ` | Удалить шаблон |
-
-### Резервное копирование и перенос
-
-| Команда | Описание |
-|---------|-------------|
-| `multi-cli export / [path]` | Архивировать профиль в `.tar.gz` (`.zip` в Windows) |
-| `multi-cli import /` | Восстановить профиль из архива |
-
-### Сессии
-
-| Команда | Описание |
-|---------|-------------|
-| `multi-cli continue ` | Скопировать состояние диалога (сессии/транскрипты/историю) из одного профиля в другой — учётные данные никогда не копируются |
-| `multi-cli continue --no-merge` | Перезаписать файлы назначения вместо сохранения более новых |
-| `multi-cli continue --dry-run` | Предварительный просмотр того, что будет скопировано, без изменений |
-
-`base` работает как имя профиля с любой стороны и означает настоящий домашний каталог инструмента (`~/.codex`, `~/.claude`, …). Поддерживается для `codex`, `claude-cli`, `gemini-cli` и `commandcode`. См. [Продолжение диалога между аккаунтами](#продолжение-диалога-между-аккаунтами).
-
-### Утилиты
-
-| Команда | Описание |
-|---------|-------------|
-| `multi-cli tools` | Показать все поддерживаемые инструменты и статус их установки |
-| `multi-cli stats` | Показать использование диска по профилям |
-| `multi-cli doctor` | Диагностировать окружение |
-| `multi-cli completion {bash\|zsh\|powershell}` | Настроить автодополнение оболочки |
-| `multi-cli help` | Показать справку |
-| `multi-cli version` | Показать версию |
-
----
-
-## Как работает изоляция
-
-Адаптеры schema-v2 объявляют механизм аккаунта отдельно от обычного состояния:
-
-| Механизм | Как это работает |
-|-----------|--------------|
-| `fileOverlay` | Учётные данные остаются внутри профиля; объявленное обычное состояние связывается с родным общим домашним каталогом инструмента. |
-| `processSecret` | Уникальные для профиля учётные данные с наивысшим приоритетом внедряются только в дочерний процесс. Запуск остаётся отключённым, пока не настроено безопасное хранилище секретов. |
-| `osUserCredentialStore` | Uses a multi-cli-owned OS user for tools with a fixed credential identity. Windows requires elevation; macOS/Linux require `sudo`. |
-| `inseparable` | Вендор объединяет аутентификацию и обычное состояние; корректный запуск завершается отказом, а ограничение показывается пользователю. |
-
-Профили версии 1 сохраняют прежнее поведение с полным корнем (`env`, `userDataDir`, `redirectHome`, `appdata` и `sandboxUser`) для совместимости. Каждый `/adapter.json` указывает возможности продукта/платформы и требования к доказательствам.
-
----
-
-
-
-## Продолжение диалога между аккаунтами
-
-Уперлись в лимит запросов на аккаунте A посреди разговора? Переключитесь на профиль, вошедший в аккаунт B, и продолжите диалог с того места, где он остановился. `multi-cli continue` копирует переносимое состояние диалога — сессии, транскрипты, историю — между профилями. **Учётные данные никогда не копируются.**
-
-```bash
-# You were working in codex/work (account A) and got rate-limited.
-# codex/personal is logged into account B.
-multi-cli continue codex work personal # copy the conversation state
-multi-cli continue codex work personal --dry-run # preview first, if you like
-
-codex-personal # launch account B's profile
-codex resume # resume the same chat (codex ≥ 0.30)
-```
-
-Запустите `codex resume` без аргументов, чтобы открыть интерактивный выбор прошлых сессий — искать id не понадобится. Если он всё же нужен, id сессии — это UUID в имени файла rollout внутри `sessions/YYYY/MM/DD/`.
-
-`base` — допустимое имя профиля с любой стороны; оно указывает на настоящий домашний каталог инструмента (`~/.codex`, `~/.claude`, …), поэтому можно продолжать диалог в установку по умолчанию или из неё.
-
-По умолчанию файлы **объединяются** — более новые файлы в месте назначения сохраняются. Передайте `--no-merge`, чтобы вместо этого перезаписать назначение, или `--dry-run` для предварительного просмотра без изменений.
-
-После копирования возобновите работу внутри профиля назначения собственной командой инструмента:
-
-| Инструмент | Команда возобновления |
-|------|----------------|
-| codex | `codex resume ` (≥ 0.30) |
-| claude-cli | `claude --resume ` (запускать из того же каталога проекта) |
-| gemini-cli | `gemini --resume` (последняя автосохранённая сессия) или `/chat resume ` для сохранённых контрольных точек |
-| commandcode | запуск из того же рабочего каталога |
-
-**Не поддерживается:** `opencode` (сессии и учётные данные находятся в одной общей базе данных SQLite) и `cursor` (чаты хранятся в SQLite с привязкой к пути рабочей области).
-
-> Устаревшие профили schema-v1 по умолчанию заполняются из `base`. Профили аккаунтов schema-v2 уже читают объявленные диалоги и настройки из общего нативного корня, а изолированные профили начинают пустыми. Используйте `multi-cli continue`, чтобы копировать поддерживаемые диалоги в изолированный профиль или из него.
-
----
-
-## Типы профилей
-
-| Флаг | Значение |
-|------|---------|
-| *(нет)* | **Общий по умолчанию** — учётные данные раздельны; диалоги и настройки общие, когда адаптер это допускает. |
-| `-i`, `--isolate`, `--isolated` | **Изолированный** — весь корень инструмента находится в профиле; ничего не разделяется. |
-| `--shared` | Устаревший псевдоним общего режима, если адаптер его поддерживает. |
-| `--cli` | **CLI** — запуск только из терминала. |
-| `--from ` | Клонировать из сохранённого шаблона. |
-
----
-
-## Переменные окружения
-
-| Переменная | По умолчанию | Назначение |
-|----------|---------|---------|
-| `MULTICLI_HOME` | `~/MultiCliProfiles` | Где хранятся все профили |
-| `MULTICLI_OVERRIDE_BINARY` | *(не задано)* | Принудительно задать путь к бинарнику для следующего запуска |
-| `MULTICLI_REPO` | *(не задано)* | Git-URL для удалённой установки |
-| `MULTICLI_PLATFORM` | *(авто)* | Переопределить определение платформы (`darwin`, `linux`) |
-
----
-
-## Устаревшие профили
-
-Профили, созданные до schema-v2, — это устаревшие профили с полным корнем: они сохраняют прежнее поведение `env`, `userDataDir`, `redirectHome`, `appdata` и `sandboxUser` для совместимости. Каталог профиля без файла `.profile.json` считается устаревшим.
-
-`multi-cli migrate /` преобразует устаревший профиль в schema-v2: объявленные учётные данные перемещаются в профиль, а объявленное обычное состояние связывается с общим домашним каталогом инструмента. Используйте `--dry-run`, чтобы просмотреть план перемещения без изменений, и `--prefer-profile`, чтобы заменить конфликтующие общие файлы копией из профиля — целевые учётные данные никогда не перезаписываются. Хранилище профилей и корень общего состояния должны находиться на одном томе, так как миграция использует атомарные перемещения в пределах одного тома.
-
----
-
-## Диагностика
-
-```bash
-multi-cli doctor
-```
-
-Проверяет, что хранилище профилей существует, каталог псевдонимов находится в PATH, и что бинарник каждого инструмента обнаружен (или показывает подсказку по установке).
-
----
-
-## Автодополнение оболочки
-
-```bash
-multi-cli completion bash # or zsh, powershell
-```
-
-Следуйте инструкциям, чтобы добавить его в `.zshrc`, `.bashrc` или `$PROFILE` PowerShell.
-
----
-
-## Удаление
-
-**macOS / Linux**
-
-```bash
-curl -fsSL https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/uninstall.sh | bash
-```
-
-**Windows**
-
-```powershell
-irm https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/uninstall.ps1 | iex
-```
-
-Вас спросят, удалить ли данные профилей — ничто не удаляется без подтверждения.
-
----
-
-## Ссылки
-
-- [Матрица поддержки](docs/support-matrix.md) — статус изоляции по продуктам и ОС, а также критерии верификации
-- [Политика безопасности](SECURITY.md)
-- [Лицензия](LICENSE)
-- [Репозиторий на GitHub](https://github.com/Spielewoy/multi-cli)
-
----
-
-## Благодарности
-
-- **Автор** — [Spielewoy](https://github.com/Spielewoy)
-
----
-
-## Лицензия
-
-[MIT](LICENSE)
diff --git a/README.zh.md b/README.zh.md
deleted file mode 100644
index 7dac75d..0000000
--- a/README.zh.md
+++ /dev/null
@@ -1,305 +0,0 @@
-[English](README.md) | [Español](README.es.md) | [العربية](README.ar.md) | **中文** | [Русский](README.ru.md) | [עברית](README.he.md)
-
-# multi-cli
-
-**同时运行多个 AI 编程工具的账户配置。**
-
-Schema-v2 配置文件会隔离账户凭证与配额,并在边界安全时共享会话、配置和扩展。若厂商将认证与会话绑定,multi-cli 会使用独立的操作系统用户,或通过 `--isolated` 创建整根隔离配置文件。[支持矩阵](docs/support-matrix.md)列出每个平台的准确模式和前置条件。
-
-现有的 schema-v1 配置文件在迁移之前仍为旧版整根配置文件 — 见[旧版配置文件](#旧版配置文件)。
-
-[](https://github.com/Spielewoy/multi-cli)
-[](https://github.com/Spielewoy)
-[](https://github.com/Spielewoy/multi-cli/stargazers)
-[](#安装)
-[](#许可证)
-
----
-
-## 支持的工具
-
-本仓库包含 17 个适配器。`supported` 表示 multi-cli 在该系统上至少提供一种可用的隔离模式;`unsupported` 表示产品或隔离模式在该系统上不可用。权威来源为 [docs/support-matrix.md](docs/support-matrix.md)。
-
-| 工具 | 类型 | Windows | macOS | Linux |
-|------|------|---------|-------|-------|
-| [Claude Code](claude-cli/) | CLI | supported (file overlay) | supported for API-key profiles only; subscription OAuth is unsupported | supported (file overlay) |
-| [OpenAI Codex CLI](codex/) | CLI | supported (file overlay; file credential store mode) | supported | supported |
-| [Gemini CLI](gemini-cli/) | CLI | supported (file overlay) | supported | supported |
-| [OpenCode](opencode/) | CLI | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Command Code](commandcode/) | CLI | supported (file overlay; use `commandcode`, bare `cmd` collides with cmd.exe) | supported | supported |
-| [Cursor Desktop](cursor/) | IDE | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Cursor CLI](cursor-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Antigravity](antigravity/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [AGY CLI](agy-cli/) | CLI | supported (OS-user isolation; elevated terminal) | unsupported (owned-user Keychain isolation not proven) | unsupported (owned-user Secret Service session not implemented) |
-| [Kiro](kiro/) | IDE | supported (OS-user isolation) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [Zed](zed/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [Devin Desktop / Windsurf](windsurf/) | IDE | supported (OS-user isolation; elevated terminal) | supported (`--isolated` whole-root) | supported (`--isolated` whole-root) |
-| [GitHub Copilot CLI](copilot-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Copilot in VS Code](copilot-vscode/) | IDE | supported (OS-user isolation; elevated terminal) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (owned-user GUI/Secret Service session not implemented) |
-| [Kimi Code CLI](kimi-cli/) | CLI | supported (process token via `multi-cli auth set`) | supported | supported |
-| [Codex Desktop App](codex-gui/) | GUI | supported (owned Windows user and Store AppX activation) | unsupported (owned-user GUI/Keychain session not proven) | unsupported (no desktop app) |
-| [Grok Build CLI](grok-cli/) | CLI/TUI | supported (process token via `multi-cli auth set`) | supported | supported |
-
-每个工具在仓库根目录下都有自己的文件夹,其中的 `adapter.json` 描述了账户边界、共享的正常状态以及升级为“已验证”所需的证据。
-
----
-
-## 安装
-
-**macOS / Linux**
-
-```bash
-curl -fsSL https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/install.sh | bash
-```
-
-**Windows** — 打开 PowerShell:
-
-```powershell
-irm https://raw.githubusercontent.com/Spielewoy/multi-cli/main/scripts/install.ps1 | iex
-```
-
-> 安装后,**请重启终端**以使 PATH 更改生效。
-
-### 从源码安装
-
-```bash
-git clone https://github.com/Spielewoy/multi-cli.git
-cd multi-cli
-./scripts/install.sh --local # macOS/Linux
-.\scripts\install.ps1 -Local # Windows
-```
-
-> 安装后,**请重启终端**以使 PATH 更改生效。
-
-> 安装程序会在所有平台上**自动安装** [jq](https://jqlang.github.io/jq/) — 无需手动设置。
-
----
-
-## 快速开始
-
-```bash
-# Create a profile
-multi-cli new claude-cli/work
-
-# Launch it
-multi-cli launch claude-cli/work
-
-# Or use the shorthand
-multi-cli claude-cli/work
-```
-
-每个配置文件都会获得一个自动生成的 shell 别名:
-
-| 平台 | 位置 |
-|------|------|
-| macOS / Linux | `~/MultiCliProfiles/bin/`(添加到 `PATH`) |
-| Windows | 自动创建开始菜单快捷方式 |
-
----
-
-## 命令
-
-### 配置文件管理
-
-| 命令 | 说明 |
-|------|------|
-| `multi-cli new /` | 创建账户配置文件(凭据独立,常规状态共享) |
-| `multi-cli new / --isolated` | 创建不共享任何状态的整根隔离配置文件 |
-| `multi-cli new / --shared` | 旧版 schema-v1 共享配置文件;schema-v2 配置文件默认已共享声明的常规状态 |
-| `multi-cli new / --from ` | 从已保存的模板创建 |
-| `multi-cli /` | 启动配置文件(简写) |
-| `multi-cli launch /` | 启动配置文件 |
-| `multi-cli list []` | 列出所有配置文件 |
-| `multi-cli status` | List profiles with their type and disk size |
-| `multi-cli clone / /` | 复制现有配置文件 |
-| `multi-cli rename / /` | 重命名配置文件 |
-| `multi-cli delete /` | 删除配置文件及其所有数据 |
-
-### 账户认证与迁移
-
-| 命令 | 说明 |
-|------|------|
-| `multi-cli auth set /` | 将配置文件的进程级密钥凭证存入操作系统凭证存储(交互式提示,或从 stdin 读取一行) |
-| `multi-cli auth status /` | 报告配置文件是否已存储凭证 |
-| `multi-cli auth clear /` | 删除已存储的凭证 |
-| `multi-cli migrate / [--dry-run] [--prefer-profile]` | 将旧版 schema-v1 配置文件迁移到 schema-v2 |
-
-`auth` 仅适用于使用 `processSecret` 机制的适配器(`cursor-cli`、`copilot-cli`、`kimi-cli`、`grok-cli`)。在存入凭证之前,启动将保持禁用状态。关于 `migrate`,请见[旧版配置文件](#旧版配置文件)。
-
-### 模板
-
-| 命令 | 说明 |
-|------|------|
-| `multi-cli template save / ` | 将配置文件保存为可复用模板 |
-| `multi-cli template list` | 列出已保存的模板 |
-| `multi-cli template delete ` | 删除模板 |
-
-### 备份与迁移传输
-
-| 命令 | 说明 |
-|------|------|
-| `multi-cli export / [path]` | 将配置文件归档为 `.tar.gz`(Windows 为 `.zip`) |
-| `multi-cli import /` | 从归档恢复配置文件 |
-
-### 会话
-
-| 命令 | 说明 |
-|------|------|
-| `multi-cli continue