CDP
The Cerebel Development Platform, or CDP, is the local developer CLI for bringing up a Cerebel by booting a Cerebrum substrate, and helping the Cerebrum become a domain specialist.
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.
Substrate : A bootable or launchable system unit in this architecture, with its own declaration, acquisition source, launch contract, and lifecycle policy. A substrate may be a whole system or a subsystem; examples include Cerebrum, cortices, Thalamus, and future additions.
Cerebrum : The Cerebrum substrate booted by RAS and surfaced by CDP.
Domain : The logical context selected by CDP at boot time.
Domain Bundle
: The folder-scoped startup configuration unit for a domain specialist. A Domain Bundle lives under config/domains/<domain_id>/ and currently includes cerebrum.md plus cortices/*.md markdown files.
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:
- Boot the substrate runtime with
cdp up. - Start an interactive chat session with
cdp chat. - Stop the runtime with
cdp down.
uv run cdp comms listuv run cdp up --domain demouv 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 substrate 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. |
CDP selects the active comms cortex id from the Domain Bundle comms-cortices list in declared order.
Example:
uv run cdp up --domain democdp chat
Section titled “cdp chat”Starts a chat session through the active comms 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, comms cortex id, and boot identity.
cdp comms list
Section titled “cdp comms list”Lists the available comms cortex ids declared by the selected Domain Bundle.
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 comms cortex id 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. |
comms-cortices |
yes | List of interaction-critical comms cortex refs. Each item must include id and source. |
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: proposedcomms-cortices: - id: comm.cli source: ./cortices/cli-comms-cortex.mdrequired-cortices: []degradable-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. |
channel |
yes (for role: comms) |
Transport-facing channel label such as cli. |
protocol |
yes (for role: comms) |
Comms protocol mode such as request-response. |
requires-session-id |
yes (for role: comms) |
Whether chat requests must include a session identifier. |
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. |
What launch.target means
Section titled “What launch.target means”The launch.target block is the import pointer for creating a substrate runtime. It does not define the whole launch contract, and it does not hold the runtime itself.
CDP uses launch.launcher to choose the execution backend, then uses launch.target to find the callable that builds the substrate.
The hierarchy is:
SubstrateDomainis the domain definition/configuration.SubstrateDomain.launchis the launch contract for that domain.SubstrateDomain.launch.targetis the import target nested inside the launch contract.
The target lives inside the loaded SubstrateDomain object, so it is part of the domain in memory after CDP reads the bundle, not a separate runtime cache.
module-pathtells CDP which Python module to import.symbol-nametells CDP which callable inside that module to invoke.- The callable is passed the selected substrate domain and returns the instantiated runtime.
In other words, the target is the recipe for construction, while the substrate instance is the object produced by that recipe.
Example:
---kind: cortexid: comm.clirole: commschannel: cliprotocol: request-responserequires-session-id: truedescription: Comms 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 substrate bundle.