http://localhost:63372 when the gateway is started. Everything in the dashboard is also available via the CLI and the Captain HTTP API.
First-time setup
When the gateway starts with no config file, it enters setup mode:- A one-time setup code is printed to the terminal
- Open
http://localhost:63372/setupin your browser - Enter the setup code to verify local access
- Set a password for future logins
- Configure your LLM provider and first agent connector
- The gateway writes the config file and starts normally
Headless / automated setup
For unattended deployments (cloud-init, Docker, CI), setMEEPAGATEWAY_PASSWORD before the first run. The gateway will hash the password, write it to config, and start normally without displaying a setup code:
password_hash exists in config. Once a hash is written, it is ignored on subsequent starts.
Authentication
Captain supports three authentication methods.Password
Set during setup. Stored as an Argon2 hash in the config file undercaptain.password_hash. Change it via the dashboard Settings page or:
API keys
For programmatic access. Each key has a name and acptn_ prefix displayed in the dashboard.
WebAuthn (passkeys)
Hardware key or biometric authentication. Register credentials via the dashboard Settings page. Credentials are stored in the config file undercaptain.webauthn_credentials.
Configuration
| Value | Behavior |
|---|---|
local | Bind 127.0.0.1 — localhost only (default) |
lan | Bind 0.0.0.0 — accessible on the local network |
tailscale_private | Bind 127.0.0.1, tailscale serve proxies |
cloudflare_tunnel | Bind 127.0.0.1, Cloudflare tunnel routes inbound |
tailscale_funnel | Bind 0.0.0.0, Tailscale Funnel |
reverse_proxy | Bind 0.0.0.0, user-managed reverse proxy |
API reference
All dashboard operations are available via the Captain API athttp://localhost:63372/api/captain/.
Status
No authentication required.Auth endpoints
| Method | Path | Description |
|---|---|---|
POST | /api/captain/auth/login | Password login |
POST | /api/captain/auth/logout | Logout |
POST | /api/captain/auth/setup | Complete first-time setup |
POST | /api/captain/auth/password | Change password |
GET | /api/captain/auth/api-keys | List API keys |
POST | /api/captain/auth/api-keys | Create API key |
DELETE | /api/captain/auth/api-keys/{id} | Revoke API key |
GET | /api/captain/auth/check | Check auth status |
Config endpoints
| Method | Path | Description |
|---|---|---|
GET | /api/captain/config | Get parsed config |
PUT | /api/captain/config | Replace config |
PATCH | /api/captain/config/{section} | Update a config section |
GET | /api/captain/config/raw | Get raw config file |
PUT | /api/captain/config/raw | Replace raw config file |
POST | /api/captain/config/test | Validate config without saving |
POST | /api/captain/config/reload | Reload config from disk |
POST | /api/captain/config/reset | Reset config to defaults |
POST | /api/captain/restart | Restart the gateway |
Agent endpoints
| Method | Path | Description |
|---|---|---|
GET | /api/captain/agents | List agents |
POST | /api/captain/agents | Create agent |
GET | /api/captain/agents/{id} | Get agent |
PATCH | /api/captain/agents/{id} | Update agent |
DELETE | /api/captain/agents/{id} | Delete agent |
GET | /api/captain/agents/{id}/soul | Get soul |
PUT | /api/captain/agents/{id}/soul | Update soul |
GET | /api/captain/agents/{id}/agents-md | Get AGENTS.md |
GET | /api/captain/agents/{id}/memory | Get MEMORY.md |
PUT | /api/captain/agents/{id}/memory | Update MEMORY.md |
GET | /api/captain/agents/{id}/user | Get USER.md |
PUT | /api/captain/agents/{id}/user | Update USER.md |
GET | /api/captain/agents/{id}/skills | List skills |
GET | /api/captain/agents/{id}/skills/{name} | Get skill |
PUT | /api/captain/agents/{id}/skills/{name} | Create or update skill |
DELETE | /api/captain/agents/{id}/skills/{name} | Delete skill |
GET | /api/captain/agents/{id}/connectors | List connectors |
POST | /api/captain/agents/{id}/connectors | Add connector |
PUT | /api/captain/agents/{id}/connectors/{name} | Update connector |
DELETE | /api/captain/agents/{id}/connectors/{name} | Remove connector |
GET | /api/captain/agents/{id}/mcp/servers | List MCP servers |
POST | /api/captain/agents/{id}/mcp/servers | Add MCP server |
DELETE | /api/captain/agents/{id}/mcp/servers/{name} | Remove MCP server |
POST | /api/captain/agents/{id}/mcp/servers/{name}/test | Test MCP server |
GET | /api/captain/agents/{id}/cron | List cron jobs |
POST | /api/captain/agents/{id}/cron | Create cron job |
GET | /api/captain/agents/{id}/cron/{job_id} | Get cron job |
PATCH | /api/captain/agents/{id}/cron/{job_id} | Update cron job |
DELETE | /api/captain/agents/{id}/cron/{job_id} | Delete cron job |
POST | /api/captain/agents/{id}/cron/{job_id}/run | Trigger cron job now |
Example: create an agent
Example: update agent soul
Example: add a connector
Security recommendations
- Keep
bind: 127.0.0.1unless you need remote access. Use a reverse proxy with TLS for public exposure. - Create dedicated API keys for CI/CD pipelines. Revoke them when no longer needed.
- Use a strong, unique password. The gateway uses Argon2 hashing.
- Consider WebAuthn for unphishable authentication on personal deployments.
