CDP
The Cerebel Development Platform, or CDP, is the local developer CLI for bringing up a Cerebel, choosing a communication profile, and talking to it from the terminal.
This page is the working contract for the current MVP. If the implementation changes, update this page first so the team keeps the same terminology and command expectations.
For the review-first file format specification, see Domain Bundle File Formats.
Pre-v1 policy:
- CDP schema and config contracts are allowed to break while we iterate.
- When we adopt a standard, we switch fully instead of carrying compatibility fallbacks.
CDP : Cerebel Development Platform. The developer-facing CLI and local harness for booting and interacting with a Cerebel.
Cerebrum : The booted runtime instance managed by RAS and surfaced by CDP.
Domain : The logical context selected by CDP at boot time.
Domain Bundle
: The folder-scoped configuration unit for one Domain. A Domain Bundle lives under config/domains/<domain_id>/ and includes cerebrum.md plus cortices/*.md markdown files.
Profile : The selected communication cortex profile. Profiles let you choose which chat-facing cortex CDP should use for a given session.
Install
Section titled “Install”CDP is installed as part of the docs-and-dev workflow for the repository.
Recommended local setup
Section titled “Recommended local setup”uv sync --extra devmake activateThe first command installs dependencies into the project environment. The second command activates the virtual environment so you can run cdp directly from the shell.
Run without activation
Section titled “Run without activation”You can also invoke the CLI through uv:
uv run cdp statusCore workflow
Section titled “Core workflow”The MVP flow is:
- Choose a profile.
- Boot the runtime with
cdp up. - Start an interactive chat session with
cdp chat. - Stop the runtime with
cdp down.
uv run cdp profiles listuv run cdp up --domain demo --profile cliuv run cdp chat "hello"uv run cdp downCommands and options
Section titled “Commands and options”cdp up
Section titled “cdp up”Boots the local Cerebrum runtime.
| Option | Meaning |
|---|---|
--domain <domain_id> |
Selects the Domain Bundle root at config/domains/<domain_id>/. If omitted, CDP falls back to the configured default domain. |
--profile <profile> |
Selects the active communication profile for the boot session. If omitted, CDP uses the saved active profile or the default profile from config/defaults.json. |
Example:
uv run cdp up --domain demo --profile clicdp chat
Section titled “cdp chat”Starts a chat session through the active communication cortex for the current booted session.
| Option | Meaning |
|---|---|
message |
The message to send to the current session. |
If you pass a message, CDP sends one response and exits. If you omit the message, CDP enters a simple interactive prompt in the current terminal and stays open until you type exit, quit, or press Ctrl-D.
Example:
uv run cdp chat "hello cerebrum"Interactive example:
uv run cdp chatcdp down
Section titled “cdp down”Stops the local runtime and clears the active boot session.
cdp status
Section titled “cdp status”Shows the current runtime state, including the active domain, profile, and boot identity.
cdp profiles list
Section titled “cdp profiles list”Lists the available communication profiles.
cdp profile use <profile>
Section titled “cdp profile use <profile>”Sets the active profile for future cdp up commands.
cdp logs [service]
Section titled “cdp logs [service]”Shows log output for the current runtime or a selected service.
cdp notebook open
Section titled “cdp notebook open”Prints the notebook URL for the local developer environment.
cdp metrics
Section titled “cdp metrics”Prints the metrics endpoint URL for the local developer environment.
Current MVP guarantees
Section titled “Current MVP guarantees”The current CLI behavior is intentionally strict:
cdp chatonly works aftercdp up.cdp chatuses the profile selected for the active session.cdp chatstays in the current terminal unless you decide to open a second terminal.cdp downends the active session.
These rules are the shared contract for the current MVP and are the baseline for future boot and conversation work.
Working with logs while chatting
Section titled “Working with logs while chatting”The chat session is intentionally terminal-based, not a separate window.
If you want to inspect logs while chatting, open a second terminal or split pane and run cdp logs there. That keeps the chat session alive in the first terminal while you review runtime output in the other.
Domain Bundle Format
Section titled “Domain Bundle Format”CDP now uses a forced directory layout for each Domain Bundle:
config/domains/ <domain_id>/ cerebrum.md cortices/ <cortex-config>.mdThis format follows the same readability pattern used by Agent Skills:
- YAML frontmatter for machine-readable fields.
- Markdown body for human and LLM context.
Case policy for markdown config keys:
- Markdown keys must be kebab-case.
- Snake_case markdown keys are invalid and should fail validation.
- Snake_case inside values is allowed (for example Python module paths, symbol names, and metadata payload values).
cerebrum.md required fields
Section titled “cerebrum.md required fields”| Field | Required | Notes |
|---|---|---|
kind |
yes | Must be cerebrum. |
name |
yes | Human-readable bundle name. |
description |
yes | What this bundle is for and when to use it. |
version |
yes | Bundle version tag, such as v0. |
domain-id |
yes | Must match the domain folder name. |
tenant-id |
yes | Tenant scope used by runtime state. |
lifecycle |
yes | Current state label such as proposed or active. |
required-cortices |
yes | List of cortex refs. Each item must include id and source. |
degradable-cortices |
yes | Explicit list of tolerated-loss cortices, even when empty. |
Example:
---kind: cerebrumname: demo-cerebrumdescription: Single-cortex MVP Domain Bundle for local CLI chat validation.version: v0domain-id: demotenant-id: tenant-demolifecycle: proposedrequired-cortices: - id: comm.cli source: ./cortices/cli-comms-cortex.mddegradable-cortices: []---Cortex config required fields
Section titled “Cortex config required fields”| Field | Required | Notes |
|---|---|---|
kind |
yes | Must be cortex. |
id |
yes | Cortex identifier, must match the ref in cerebrum.md. |
role |
yes | Runtime role such as communication. |
profile |
yes | Profile key used by cdp up --profile and cdp profile use. |
description |
yes | Short explanation of cortex purpose. |
launch.launcher |
yes | Backend type, currently inprocess for MVP. |
launch.target.module-path |
yes | Python module path for factory/launcher symbol. |
launch.target.symbol-name |
yes | Callable symbol to build the cortex runtime. |
Example:
---kind: cortexid: comm.clirole: communicationprofile: clidescription: Communication cortex used by cdp chat in the terminal.launch: launcher: inprocess target: module-path: cdp.comms_cortex symbol-name: create_cli_comms_cortex---Source reference model
Section titled “Source reference model”Each cortex entry in required-cortices and degradable-cortices uses a source field.
Current support:
- Local relative markdown paths.
Designed next:
- Remote URL or repository references.
- Mixed local and remote cortex bundles in one cerebrum.