Super Agent CEO
What is super-agent-ceo?
super-agent-ceo is a CLI that turns any machine — a laptop, a server, a CI runner — into a node your organization's AI agents can drive remotely. Once connected, your agents can execute tasks on the node through a secure NATS messaging channel, scoped to your organization. The /super-agent console in the dashboard gives you a live view of all connected nodes, their status, active runs, and controls.
Installation
Install with a single command:
curl -sSL https://install.agent.ceo/super-agent-ceo | sh
Or run via Docker:
docker run --rm -it ghcr.io/genbrainai/super-agent-ceo:latest \
login --api-key ace_YOUR_KEY_HERE
After installation, verify it works:
super-agent-ceo --version
Login
Authenticate with your organization-scoped API key:
super-agent-ceo login --api-key ace_YOUR_KEY_HERE
API keys starting with ace_ are available from the Settings → API Keys page in your agent.ceo dashboard. Each key is scoped to a single organization — a member of org A cannot access org B's nodes.
Logging in to your Claude subscription
The org API key above authenticates the node. It says nothing about how the node's
inference is billed. To bill prompts to your Claude subscription instead of metered
ANTHROPIC_API_KEY rates (roughly 10x), log the node's claude CLI in separately:
super-agent-ceo login claude
This runs claude setup-token, which prints an authorization URL, waits for you to
authorize in a browser, and accepts the code you paste back.
Where the credential lands is platform-specific, and this trips people up when they go looking for it:
- Linux —
~/.claude/.credentials.json(the command tightens it to0600). - macOS — the login keychain. The credentials file never appears there, so its absence is not evidence of a failed login.
super-agent-ceo login claude reports which store it actually found rather than assuming.
Logging in is not sufficient on its own. ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN
outrank a logged-in subscription inside the claude CLI, and they are stripped from operand
runs only by connect --subscription (see Driving a node from your own terminal below).
Without that flag a stale key in your shell silently wins — including a zero-balance one, which fails
every prompt with Credit balance is too low while login itself reported success. So the
pair is:
super-agent-ceo login claude # authorize the subscription
super-agent-ceo connect --subscription # the flag is what actually bills it
Headless and backend nodes
connect --subscription can drive the subscription login for you, but only when a TTY is
available. On a server, in a container, or in CI there is no TTY: it warns and does
nothing, leaving the node running with no subscription credential. Authorize such a node one
of two ways:
- Run
super-agent-ceo login claudeonce interactively on that host, before starting the service; or - Set
CLAUDE_CODE_OAUTH_TOKENin the node's environment — the tokenclaude setup-tokenprints is a first-class subscription credential, and a node authenticated purely that way is correctly recognised as logged in.
Connect
Register your machine as a node in your organization:
super-agent-ceo connect --name my-laptop
--name— a human-readable label shown in the console (e.g.,build-box,my-laptop)--agent-id— optional. Pins a specificsa_*agent id; by default one is minted fresh for you. It must start withsa_— the platform reserves other prefixes and the CLI will refuse anything else.--mode—localfor a laptop (the default) orbackendfor a server--role— role label shown in the dashboard (defaultsuper-agent)
The node appears in the /super-agent console within seconds. By default, nodes are locked down: filesystem access is sandboxed, bash is disabled, and operator prompts are refused. Opt in explicitly with flags at connect time.
Driving a node from your own terminal
To watch a node work and answer its prompts inline, connect with --terminal:
super-agent-ceo connect --name my-mac --terminal --subscription
--terminal reflects the operand's interactive I/O to the terminal running connect. You see output live and answer inline prompts — /login, permission requests — directly. Without it, a turn produces nothing observable until it returns over NATS, so a node that is working looks dead. Prompt text is passed to the runner as a positional argument, never through a shell, so it cannot inject.
--subscription bills inference to your Claude subscription instead of metered API credentials. It drives a subscription login when none is found and a TTY is available, then strips both environment credential channels the claude CLI honours — ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN — from operand runs, because either one outranks a logged-in subscription and stripping only one would let the other win.
Two things worth knowing before you rely on it:
- A deliberately configured credential still outranks it.
--subscriptionclears env-leaked credentials, not an intentional on-disk one. AnapiKeyHelperor a key insettings.jsonwill beat the subscription — remove those from the node's config if you want the subscription to win.connectwarns at startup when it detects anapiKeyHelperor a non-defaultANTHROPIC_BASE_URL, so a precedence surprise surfaces then rather than in your bill. - In a headless context with no credentials it warns and does nothing, leaving the env vars in place rather than breaking inference.
The startup banner prints the auth it resolved, and says plainly when you are logged in but not on a subscription — that is the difference between billing your plan and billing metered credits, which otherwise surfaces much later as a per-prompt Credit balance is too low that reads like a node fault.
Commands reference
| Command | Description |
|---|---|
super-agent-ceo login --api-key <key> | Authenticate with your org API key |
super-agent-ceo login claude | Log the node's claude CLI into your Claude subscription via OAuth, so connect --subscription has a credential to bill |
super-agent-ceo connect --name <name> | Register this machine as a node |
super-agent-ceo disconnect | Cleanly disconnect the node and revoke its token |
super-agent-ceo status | Show credentials state and active session. Does not touch the network |
super-agent-ceo key show | Ask the platform what the stored key is — org, key id, scopes, bound node. The key itself is never printed, and this does not bring the node online |
super-agent-ceo key rotate | Mint a replacement key for this node and revoke the old one. The successor carries the same node scope — rotation never widens what a node may do |
super-agent-ceo update | Self-update the binary; --check reports availability without installing |
super-agent-ceo install-agent [name] | Install a supported coding-agent CLI on this node (default claude) |
super-agent-ceo --version | Print the installed CLI version |
Connect flags
| Flag | Effect |
|---|---|
--terminal | Reflect the operand's interactive I/O to your terminal |
--subscription | Bill inference to your Claude subscription instead of API credentials |
--coding-agent <name> | Choose which CLI prompts run through; --ensure-agent installs it if missing |
--allow-fs <path> | Permit access to a path outside the sandbox root |
--allow-bash | Expose the bash_run tool to in-org agents |
--prompt-command "claude -p" | Accept operator prompts, run via this command |
--disable-fs-sandbox | Turn the filesystem boundary off entirely (use with caution) |
Troubleshooting
Connection refused
If super-agent-ceo connect fails with "connection refused":
- Check that your machine can reach
wss://nats.agent.ceoon port 443 - Verify your API key is valid and not expired:
super-agent-ceo login --api-key ace_... - Check if a firewall or proxy is blocking outbound WebSocket connections
- Confirm what the stored key actually is with
super-agent-ceo key show— it reports the org, scopes and bound node without bringing the node online
Certificate errors
TLS certificate errors typically mean:
- Your system clock is out of sync — run
ntpdate pool.ntp.orgor equivalent - A corporate proxy is intercepting TLS — add your proxy's CA certificate to the system trust store
- You're running an outdated OS with expired root certificates — update your CA bundle (
apt update && apt install -y ca-certificateson Debian/Ubuntu)
Every prompt fails with "Credit balance is too low"
This usually means the node is billing metered API credentials rather than your Claude subscription — and it can happen on a node that logged in successfully, because a login is not what selects the billing channel:
- Confirm the node is actually authorized:
super-agent-ceo login claude. On macOS the credential lives in the login keychain, so a missing~/.claude/.credentials.jsondoes not mean you are logged out. - Reconnect with
super-agent-ceo connect --subscription. Without this flag,ANTHROPIC_API_KEY/ANTHROPIC_AUTH_TOKENin the node's environment outrank the subscription — a stale or zero-balance key beats a brand-new login. - Check the startup banner. It prints the auth it resolved and says plainly when you are logged in but not on a subscription.
- If it still loses, look for a deliberately configured credential
--subscriptiondoes not clear: anapiKeyHelperor a key in the node'ssettings.json.connectwarns at startup when it sees anapiKeyHelperor a non-defaultANTHROPIC_BASE_URL.
Node shows as offline in the console
If a node was connected but shows offline (grey) in the dashboard:
- The CLI process may have exited — check if
super-agent-ceois still running - Network interruptions cause the node to go stale after 90 seconds of no heartbeat
- Restart with
super-agent-ceo connect --name <name>to reconnect