Skip to content

Overview

The Daedalus platform surfaces are the thin operational skin over the training engine. The engine itself is one function — pipelines.executor.run_pipeline (src/daedalus/pipelines/executor.py) — that runs the compiled compile → skeleton → enrich operator pipeline for a feature service.

Every surface wraps that same in-process API. None of them re-derives feature logic: they all resolve the catalog, compile the service, and call the executor through the shared method layer. The result is one engine reached five different ways, with no second implementation to keep in sync.

The surfaces

SurfaceModuleEntry pointUse it for
Dagster orchestrationdaedalus.definitionsuv run dagster dev -m daedalus.definitionsScheduled / partitioned production runs, lineage, retries
JSON-RPC APIdaedalus.apidaeda serve-apiHTTP control plane (catalog / service / compile / runs / lineage)
MCP serverdaedalus.mcpdaeda mcpTool access for external (non-Claude-Code) agents over stdio
Agent CLIdaedalus.commands.agentdaeda lineage, daeda materialize-dayAd-hoc lineage + single-day materialization for sample output
MLflow projection (optional)daedalus.trackingTrainingRunConfig.trackingOff-by-default experiment tracking of training run records

One in-process API

The JSON-RPC method layer (src/daedalus/api/methods.py) is the canonical surface. Its METHOD_HANDLERS table maps method names to plain functions over an ApiContext (catalog + run config + a runs backend). Both the HTTP server (daedalus.api.app) and the MCP server (daedalus.mcp.server) dispatch into that same table — the MCP tools are literally thin wrappers that delegate to daedalus.api.methods.

text
                       ┌───────────────────────────┐
   HTTP  /rpc ───────▶ │                           │
   MCP   tools ──────▶ │  daedalus.api.methods     │
   Dagster ops ──────▶ │  METHOD_HANDLERS +        │ ──▶ pipelines.executor
   daeda CLI ────────▶ │  compile / executor       │      .run_pipeline
                       └───────────────────────────┘

No feature logic is re-derived

The catalog, the compiler, and the executor are imported, not reimplemented. Adding a feature is still a YAML edit (see Training overview); the surfaces only change how you reach the engine, never what it computes.

The GUI is deliberately out of this repo

There is no web UI shipped here. The planned GUI is a separate stack (SvelteKit + shadcn-svelte) that consumes the JSON-RPC contract over HTTP. Keeping it out of this repository keeps the backend lean and the contract — not a bundled frontend — the integration boundary.

See also