Quick Start
Run the local platform first, then choose your starting point: use the ready workspace app, bring an existing agent behind KDCube's serving seam, or author a new app from the SDK. You do not need to adopt chat, ReAct, UI, or every platform service at once.
-
1
Install the KDCube CLI
# Recommended: pipx (isolated installation) pipx install kdcube-cli # Or with pip pip install kdcube-cliPrerequisites: Python 3.11+, Docker, Git.
-
2
Initialize and start the runtime
kdcube init --tenant acme --project staging --prompt-secrets kdcube start --tenant acme --project staginginitruns the setup wizard. It asks for a sign-in method: application-hosted Google login is preselected and needs a Google Web application OAuth client id — public, no client secret, with your runtime's UI origin authorized as a JavaScript origin. Have it ready before you start, or picksimplefor a development/demo runtime with no external identity. SimpleIDP is not a production identity posture. Do not proceed app-hosted with a placeholder id: the result is a runtime you cannot sign into.Non-interactive form of the same choice:
kdcube init --tenant acme --project staging \ --auth-type bundle --client-id "<google-web-oauth-client-id>" \ --bootstrap-admin-email you@example.com # optional: first super-admininitcreates the tenant/project workdir, stages descriptors and source, and optionally builds images. It is a first-time operation for that workdir; it ends with a first-run checklist of unfilled secret slots — features backed by an unfilled slot stay inactive, everything else runs. Fill them later inconfig/bundles.yaml/bundles.secrets.yamlor the AI Bundles dashboard.startlaunches the local Docker Compose runtime. Prompted secrets go to the staged secret descriptor, not a Compose.envfile.Updating later — platform via
kdcube refresh, apps viakdcube bundle reload— is a separate flow: see Update below. Your staged descriptors are preserved. -
3
Open the UI
http://localhost:5173/platform/chat5173is the CLI/default UI port; use the value selected during setup if you overrode it.You're now running a full KDCube stack with the built-in reference apps. Start with
workspacefor the ready assistant and scene, or inspectported-langgraph-agents@2026-07-13for the existing-agent serving pattern.Use the ready app
Configure models, tools, skills, integrations, and execution policy; keep the SDK chat and workspace surfaces.
Bring your agent
Keep LangGraph, CrewAI, Claude Agent SDK, or custom logic. Add the thin execution and streaming seam; rebuild stateful graphs per turn.
Build an app
Expose only the API, MCP, jobs, named services, UI, website, chat, or agent surfaces your product actually needs.
-
4
Connect your AI assistant (optional)
Client setup — pick your client
Three slash commands in any Claude Code session — no config-file editing:
/plugin marketplace add https://github.com/kdcube/agent-plugins /plugin install kdcube@kdcube /reload-pluginsThe current plugin packages runtime bootstrap (
/kdcube:runtime-init), app scaffolding (/kdcube:bundle-new), configuration, testing, release, operator workflows, and an offline Tier-1 documentation pack. Source: github.com/kdcube/agent-plugins.Edit
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) or%APPDATA%\Claude\claude_desktop_config.json(Windows):{ "mcpServers": { "kdcube-docs": { "type": "streamable-http", "url": "https://kdcube.tech/mcp/docs" } } }Restart Claude Desktop after editing. Tools then appear under the
kdcube-docsnamespace.Edit
~/.cursor/mcp.json:{ "mcpServers": { "kdcube-docs": { "url": "https://kdcube.tech/mcp/docs" } } }Reload Cursor (Cmd/Ctrl+Shift+P → "Reload Window") after editing.
Add the streamable HTTP server with the Codex CLI:
codex mcp add kdcube-docs --url https://kdcube.tech/mcp/docs codex mcp listGemini CLI uses the standard
mcp.jsonshape. Refer to Gemini CLI's configuration docs for the file location for your install. Configuration body:{ "mcpServers": { "kdcube-docs": { "url": "https://kdcube.tech/mcp/docs" } } }
Install
Workdir Layout
~/.kdcube/kdcube-runtime/<tenant>__<project>/
├─ config/
│ ├─ .env # Base Docker Compose env
│ ├─ .env.ingress # Ingress env
│ ├─ .env.proc # Processor env
│ ├─ .env.metrics # Metrics env
│ ├─ .env.postgres.setup # Local Postgres setup env
│ ├─ assembly.yaml # Platform version, auth type, domain
│ ├─ secrets.yaml # Deployment-wide local secrets
│ ├─ bundles.yaml # Staged local app authority; edit or use Admin/CLI
│ ├─ bundles.secrets.yaml # App-level local secrets
│ ├─ gateway.yaml # Rate limits, circuit breaker
│ ├─ economics.yaml # Spend plans, budgets, user limits
│ ├─ install-meta.json # CLI install metadata
│ ├─ frontend.config.<mode>.json # Static /config.json fallback
│ ├─ nginx_proxy*.conf # Nginx reverse proxy
│ └─ nginx_ui.conf # Nginx UI config
├─ data/
│ ├─ bundle-storage/ # Per-app filesystem storage
│ ├─ bundles/ # Local path app root
│ ├─ managed-bundles/ # Git-resolved and example apps
│ ├─ exec-workspace/ # Code execution sandboxes
│ ├─ kdcube-storage/ # Conversations, artifacts, files
│ ├─ nginx/ # Nginx runtime data
│ ├─ postgres/ # Database volume
│ └─ redis/ # Redis persistence
└─ logs/ # Service logs
Deployment-wide secrets supplied during local init go to config/secrets.yaml. App-level secrets live in config/bundles.secrets.yaml. They are not written to Compose .env files.
Frontend browser config is public runtime config. It can be declared in assembly.yaml under frontend.config; the CLI renders the static fallback and ingress serves the same shape from /api/cp-frontend-config.
Full CLI reference: kdcube_cli/README.md
Update
Updates never regenerate your staged descriptors: everything under config/ — assembly.yaml, bundles.yaml, gateway.yaml, economics.yaml, secrets.yaml, bundles.secrets.yaml — is preserved. init is a first-time operation; updating goes through two separate paths depending on what changed.
# platform / SDK update — pick exactly one source
kdcube refresh --tenant acme --project staging --latest --build
kdcube refresh --tenant acme --project staging --release <ref> --build
kdcube refresh --tenant acme --project staging --path /path/to/kdcube-ai-app --build
# app updates — hot, no restart
kdcube bundle reload <app_id>
kdcube bundle config apply --descriptors-location <dir> --reload
refresh performs the stop/start cycle itself — do not wrap it in a separate kdcube stop/start. To change the authentication method on an initialized runtime, use kdcube config apply rather than re-running init.
Stable MCP URLs (operator note)
The canonical app MCP route includes tenant, project, app ID, and endpoint alias. If clients need a shorter stable URL, prefer an app-owned stable public alias on the runtime host. A reverse proxy or CDN can alternatively issue a method-preserving 308 to the canonical streamable-HTTP route.
The redirect layer is routing only: it does not replace the MCP endpoint's declared app-owned or Connection Hub managed authentication. Avoid 301/302 redirects for JSON-RPC POST clients because some clients may change the method.
KDCube's own production edge follows shape B, and you can watch it work: curl -I "https://kdcube.tech/mcp/docs" answers with a method-preserving 308 and the canonical route in Location.