| layout | default |
|---|---|
| title | Admin Console |
| nav_order | 5 |
The admin console (/admin) provides a UI for managing deployment targets, deploying advisors, and connecting MCP servers. Configuration is per-user -- each authenticated user manages their own deployment targets and API keys.
Access at /admin/setup. A 4-step flow:
- Claude Managed Agents -- deploy to Anthropic's managed cloud
- Busibox -- deploy to a self-hosted Busibox instance
- CMA: Anthropic API key
- Busibox: Host URL + API key
Credentials are tested against the target API:
- CMA: sends a minimal Haiku request
- Busibox: hits the
/api/healthendpoint
All 8 agents (7 advisors + QA Judge) are deployed to the target. The wizard shows progress and reports success/failure.
Access at /admin/targets/[id]. Shows:
- Deployment status (deployed, error, deploying, unconfigured)
- Number of deployed agents
- Last deployment timestamp
Manage OAuth connections for MCP servers:
- Notion -- opens Notion's OAuth flow at
mcp.notion.com/mcp - Slack -- opens Slack's OAuth flow at
mcp.slack.com/mcp - Google Workspace -- requires Claude connector (deferred)
Connection status is tracked per target so you can have different MCP configurations for different deployment targets.
List of all agents with:
- Agent name and ID
- Version number
- Health status (click "Check Status" to poll the target API)
- Redeploy All -- re-deploys all agents (updates existing, creates missing)
- Check Status -- polls the target for agent health
- Delete -- removes the target configuration (does not archive deployed agents)
The admin console stores configuration in SQLite with encrypted credentials:
config -- key-value settings store (per-user)
deploy_targets -- deployment target configurations (per-user)
- Credentials encrypted at rest using AES-256-GCM
- Key derived from
CONFIG_ENCRYPTION_KEYenv var or a machine-specific fallback - Agent state (IDs, versions) stored alongside for update/redeploy
mcp_connections -- MCP server auth state per target
The adapter pattern (lib/deploy/adapter.ts) defines a common interface:
interface DeployAdapter {
validate(config): Promise<{ valid, error? }>
deploy(coaches, config): Promise<DeployResult>
status(config, agentState): Promise<TargetStatus>
teardown(config, agentState): Promise<{ success, error? }>
}Ports the logic from deploy.py to TypeScript:
- Creates/reuses an environment
- Deploys base agents (QA Judge) first
- Deploys dependent agents with
callable_agentsreferences - Prepends date/time preamble to system prompts
Pushes INSTRUCTIONS.md content to the Busibox Agent API:
- Validates connection via
/api/health - POSTs each advisor to
/api/agents - Checks status via GET
/api/agents