multishell runs one Codex manager behind a terminal TUI and fans work out to persistent Codex and Claude workers.
Prerequisites:
- Python 3.11+
- On Ubuntu, the installer uses
sudoto installpython3-venv,cmake,build-essential, and Playwright browser dependencies if they are missing. - On other Linux distributions, install
cmakeand a C++ compiler yourself before running the setup script.
One-command install and first-time setup:
curl -fsSL https://github.com/catid/multishell/releases/latest/download/install.sh | bashThe installer:
- creates a dedicated Python venv under
~/.local/share/multishell - installs a
multishellwrapper into~/.local/bin - installs missing Ubuntu system packages with
sudowhen needed - launches
multishell loginso you can add Google accounts in a curses TUI, mask/edit passwords, and toggle OpenAI, Anthropic, and Gemini AI Ultra access per account - runs
multishell install-browser --with-depson Ubuntu, otherwisemultishell install-browser - runs
multishell install-auth-model - runs
multishell auto-login --allin headless mode using a local Qwen 3.5 auth model to drive the Google sign-in flow
After install, start multishell from the repository or project directory you want the workers to use:
cd /path/to/project
multishellThe worker sessions default to the directory where you launch multishell, so you can use one install across different repos.
Edit the account list again later:
multishell loginThe login TUI starts with an empty account list. Add as many Google accounts as you want and toggle provider access per row:
- OpenAI-enabled accounts determine the manager account plus the available Codex worker pool.
- Anthropic-enabled accounts determine the available Claude worker pool.
- Gemini-enabled accounts become the Gemini AI Ultra account pool for Deep Think jobs.
Check whether a newer tagged release is available:
multishell check-updateInstall the latest tagged release into the local install root and repoint the wrapper to it:
multishell updateRoll back to the previously installed release:
multishell rollbackYou can also roll back to a specific installed version:
multishell rollback 0.1.0multishell keeps installed releases under ~/.local/share/multishell/releases/<version> and points the wrapper at ~/.local/share/multishell/current.
By default, startup checks for updates at most once per day and prompts whether to install a newer tagged release before the TUI opens. If you accept, multishell installs the update and exits so you can restart into the new version. To disable the startup check entirely:
export MULTISHELL_AUTO_UPDATE=offTo automatically install the newest tagged release at startup before the TUI opens, then restart into it without prompting:
export MULTISHELL_AUTO_UPDATE=applymultishell auto-login now uses a headless Playwright-managed Chromium by default, even on machines with DISPLAY set. Pass --headed only when you explicitly want visible browser windows for debugging.
multishell auto-login manages the local auth-model server for you. If the local model runtime is installed, it starts llama.cpp on demand and uses a locally hosted Qwen 3.5 model to read the live auth page text, decide the next browser action, and automatically log into the configured Google accounts in headless Chromium.
Accounts are processed one at a time by default during multishell auto-login. Pass --parallel N if you explicitly want concurrent login flows.
If Google returns a hard error like wrong password, account not found, browser not secure, or a manual verification challenge, multishell now fails that lane immediately with a specific message instead of sitting on the page until timeout.
If one account fails during multishell auto-login, the remaining accounts still run afterward. The command prints a per-account failure line as it goes and raises one summary at the end listing every failed account, including the debug artifact directory when a browser page dump was captured.
The default local model settings target a llama.cpp-style server:
export MULTISHELL_AUTH_MODEL_API_BASE=http://127.0.0.1:8080/v1
export MULTISHELL_AUTH_MODEL=Qwen/Qwen3.5-9BInstall or refresh the full local auth-model runtime again later with:
multishell install-auth-modelIf you want to force a rebuild of llama.cpp and a fresh model download, use:
multishell install-auth-model --forceThe GGUF download is resumable, so rerunning the command after an interrupted download continues from the existing .part file instead of restarting from zero. The local llama.cpp build and Qwen GGUF cache live under ~/.multishell/cache/auth-model by default.
The auth controller sends enable_thinking=false for Qwen and strips any stray <think>...</think> output before parsing actions.
The Playwright browser runtime is also kept under the multishell install root instead of the default global Playwright cache, so the install stays self-contained.
If you are setting up on Ubuntu outside the one-shot installer and need Playwright’s shared browser libraries too, run:
multishell install-browser --with-depsEach auth-model run also writes a per-agent trace log under ~/.multishell/debug/<agent>/ with the page snapshot summary, visible elements, model metrics, raw model output, and chosen action. On failures, those traces sit next to the saved screenshot and HTML dump.
To verify the local auth-model server and headless browser loop without touching Google, run:
multishell auth-model-smoke-testTo benchmark local CPU speed for the auth model:
multishell auth-model-benchThe lower-level llama.cpp build step is still available separately if you only want the binaries:
multishell install-llama-cppRemove the installed wrapper, runtime, and saved state:
multishell uninstallRemove the install but keep the saved account data, auth state, browser profiles, and other runtime files under ~/.multishell:
multishell uninstall --keep-state- Runtime state lives under
~/.multishellby default. - Set
MULTISHELL_STATE_ROOTto move the runtime state elsewhere. - Set
MULTISHELL_WORKSPACE_ROOTif you want to override the default worker cwd instead of using the current directory. - On startup,
multishellcleans up stale old sessions from the same state root before starting the fresh controller. Tabtoggles the debug view andCtrl+Cexits.
For everything else, use:
multishell --help