dockai
v0.15.0
Published
CLI for DockAI — self-hosted Claude Code session manager
Maintainers
Readme
dockai
Command-line client for DockAI — a self-hosted manager for Claude Code sessions running in Docker.
The CLI talks to your DockAI server over its HTTPS/WebSocket API. It is generic: anyone running a DockAI instance can use the same dockai binary, configured per-machine with the server URL.
Install
npm install -g dockai
# or with pnpm (run `pnpm setup` once if it says the global bin is not in PATH):
pnpm add -g dockai
# or run ad-hoc without installing:
npx dockai <command> # pnpm dlx dockai <command>Requires Node.js 20+ (the package declares >=20).
Setup
dockai login --server https://your-dockai.example.comIt prints a short code and opens your browser (or prints the link, to open on
your phone). Check the code matches, set the computer's switches, and press
Pair. For scripts, --code <code> (from Settings → Your devices → Add a
computer) and --token dka_… still work.
The computer is then listed in Your devices with its hostname, CLI version and,
while dockai claude runs, the project it is attached to. Its switches there —
Chrome (forward Claude in Chrome), Files (off · the folder you run
dockai claude in · only listed folders) and Commands (run_computer_command) — decide
what conversations may use on it; only you change them, on the web or the phone.
The CLI stores { serverUrl, token, deviceId } in ~/.config/dockai/config.json
(0600). A token from Settings → API Tokens still works (dockai login --token dka_…,
or --paste to be asked): the CLI is then unpaired and uses its command-line flags alone.
Commands
dockai login [--server <url>] [--code <code> | --token <token> | --paste] [--name <name>]
Pair this computer, confirmed in the browser,
and write the ~/.ssh config block
dockai logout Remove this computer from Your devices and
clear the saved token
dockai computer This computer's name and switches
dockai computer allow-folder <dir> Ask the owner to list a folder; added only
on their Allow
dockai computer connect [--at-login | --off | --status [--json]] [--no-chrome]
Keep this computer connected and lent to
your projects with no terminal open
(macOS and Linux); --at-login installs
the login service, --off removes it;
--status --json is what DockAI for Mac
reads (no token in it)
dockai whoami Show the account you are signed in as
dockai projects List your projects
dockai status Server status and a project overview
dockai accounts Claude accounts: signed in, plan, usage
dockai accounts login [name] Sign an account in with this browser
dockai usage The same as dockai accounts
dockai start <slug> Start a project's worker
dockai stop <slug> Stop a project's worker
dockai logs <slug> [--tail N] [-f] Tail a project's logs; -f keeps following
dockai open <slug> Open the project's page in the dashboard
dockai claude <slug> [claude args…] Run Claude Code in the worker, over the
tunnel, in tmux — this is the main one.
With nothing else it asks: a new
conversation, or which one
dockai shell <slug> A shell in the worker
dockai code <slug> Open the worker in VS Code Remote-SSH
dockai sessions list <slug> The project's conversations
dockai sessions resume <slug> <id> Attach to one
dockai sessions handoff <slug> <ref> Carry a conversation's context into a new one
dockai push <slug> <paths…> Copy files from here into the workspace
dockai sessions push <slug> Bring this folder's Claude conversations into the
project: asks which, never overwrites, puts the
newest 3 in the Claude app (--no-remote, --all,
--config-dir <dir>)
dockai paste <slug> Put the Mac clipboard into the workspace
dockai browser <slug> The project's browser in your VNC viewer (Screen Sharing on a Mac)
dockai doctor [--fix] Check this computer's setup and say how to fix it
dockai update Install your server's CLI when it is newer
(dockai claude does this before attaching)
dockai completion [zsh|bash] Tab completion (commands, projects, accounts)
dockai ssh-config Print the ~/.ssh/config block
dockai proxy <host> The ProxyCommand transport (not run by hand)
dockai deploy [target] Redeploy DockAI, or a named Compose stackLeave the project out and it asks which one, listing first the projects used from the folder you are in (or, the first time, the project whose repository the folder is a checkout of); that one is pre-selected and taken on its own after 5 seconds unless you press a key. Every list can be narrowed by typing.
Tab completion: dockai completion zsh > ~/.dockai-completion.zsh, then add
source ~/.dockai-completion.zsh to ~/.zshrc (bash: the same with bash).
Flags written after the project name are passed to claude untouched, so
dockai claude app --permission-mode bypassPermissions -r works. That is also
why dockai's own options go before the name.
While dockai claude is attached to one project, this computer is also lent
to your other running projects:
- Each gets what its Use your computers level allows (Project → Settings →
Your computer): Files and Chrome, the default, is its own checkouts on
this computer — the folder you last ran
dockai claude <project>from, or a listed folder, when it is a clone of the project's repository — and Chrome where its browser setting includes the laptop. Everything adds commands, the clipboard and the microphone, within the computer's switches. Off is nothing. - Each gets its own secret, so one project never acts as another, and every
request is logged with its project in
~/.config/dockai/attach.log. - A conversation started from the phone in any of them can use the computer.
A project that people other than you can reach — a shared Telegram group, the
assistant API, collaborators on its repository — is never lent, and only the
conversation you attached gets the computer there. Lend to projects on the
computer's page (Settings → Your devices) stops lending for that computer.
--no-lend keeps one attachment to its own project. dockai doctor says
whether this computer lends, and to which projects.
How it reaches the worker
No SSH port is published on the DockAI host. dockai login writes a
Host dockai-* block into ~/.ssh/config whose ProxyCommand runs
dockai proxy, which pipes stdin and stdout over an authenticated WebSocket
to the worker's sshd. So ssh dockai-<slug>, VS Code Remote-SSH and the
Claude app's SSH backend all work from anywhere the server is reachable —
there is nothing LAN-only about it, and nothing to open on a firewall.
License
MIT — see the LICENSE in the main repo.
