Development Workflow

Diminuendo is designed to run locally while using staged backend services for Podium and Ensemble. This keeps the development loop fast and avoids building Rust/Go services unless you are modifying them directly.

Staging-First Setup

1

Install prerequisites

  • Bun 1.0+
  • AWS CLI access to the staging Parameter Store (read-only)
2

Fetch staging endpoints

# Ensemble
aws ssm get-parameter --name /maestro/staging/ensemble/endpoint --query Parameter.Value --output text
aws ssm get-parameter --name /maestro/staging/ensemble/api-key --with-decryption --query Parameter.Value --output text

# Podium
aws ssm get-parameter --name /podium/staging/gateway/endpoint --query Parameter.Value --output text
aws ssm get-parameter --name /podium/staging/gateway/admin-api-key --with-decryption --query Parameter.Value --output text
aws ssm get-parameter --name /podium/staging/encryption/secrets-key --with-decryption --query Parameter.Value --output text
3

Create your .env

Paste the values retrieved from Parameter Store:
ENSEMBLE_URL=<ensemble-endpoint-from-ssm>
ENSEMBLE_API_KEY=<ensemble-api-key-from-ssm>

PODIUM_URL=<podium-endpoint-from-ssm>
PODIUM_API_KEY=<podium-admin-api-key-from-ssm>
PODIUM_ADMIN_API_KEY=<podium-admin-api-key-from-ssm>
PODIUM_SECRETS_KEY=<podium-secrets-key-from-ssm>
4

Start the gateway

bun dev
scripts/dev.sh loads the .env, validates required keys, and starts the gateway with hot reload.
Only Bun and a populated .env are required. You do not need Rust, Go, or Docker for this workflow.

What Runs Locally vs Remotely

Local

Gateway (Bun), SQLite databases under ./data, and logs.

Remote (Staging)

Podium coordinator, Ensemble inference, Chronicle workspace sync, and sandbox execution.

Why This Works

Diminuendo’s minimal external dependency stack means bun dev is the only command needed to start developing. The gateway binary handles everything locally — SQLite databases are created on demand, migrations run automatically, and dev mode bypasses authentication. The heavy runtime dependencies (agent orchestration, LLM inference, sandbox execution) are delegated to staging services via the .env configuration. This is a deliberate architectural choice: by keeping the gateway self-contained (Bun + SQLite, no Postgres, no Redis), the local development experience requires only a JavaScript runtime and network access to staging endpoints.

When to Run the Full Stack Locally

If you are developing Podium, Ensemble, or Chronicle, you will need to build those services locally. Follow the README’s Full Development Stack section to build submodules and start the services on the standard ports (Podium 5082, Ensemble 5180, MinIO 9000, Valkey 6379).

Comparison to Fully Containerized Workflows

Ramp Inspect and similar systems place the full development environment inside containers (Modal sandboxes with complete service stacks). Diminuendo instead keeps the gateway local and points it to staging services, which reduces setup time and keeps iteration fast. The trade-off is that you depend on staging service availability for features that touch Podium or Ensemble — but for gateway-only development (protocol changes, automation logic, RBAC, event handling), no external services are needed at all.