Configuration
defineConfig, LaufwerkConfig, project identity and the boundary between project and execution settings.
Import defineConfig and LaufwerkConfig from @laufwerk/sdk.
defineConfig(config)
| Property | Type | Required | Meaning |
|---|---|---|---|
projectId | string | Yes | Stable consumer project identity |
sandboxes | Readonly<Record<string, HarnessV1SandboxProvider>> | No | Named legacy sandbox providers; agent construction explicitly chooses one |
projectId must be 1–128 characters, start with a letter or digit, and contain only
ASCII letters, digits, ., _ or -. Invalid identity throws a synchronous
TypeError. The function returns the config with its sandbox key types preserved;
it does not allocate resources or start a server.
import { defineConfig } from "@laufwerk/sdk";
export default defineConfig({ projectId: "acme-tools" });Place this file at laufwerk/laufwerk.config.ts in the consumer. Keep the same
project ID when updating. Use execution constructors
for local/Docker environment settings and agent settings
for models, tools and instructions.
Settings that belong elsewhere
There are no model, workspaces, sessions, benchmark, port, retry or
concurrency properties in LaufwerkConfig.
| Setting | Where it belongs |
|---|---|
| Model and reasoning | createCodex / createClaudeCode |
| Tools, instructions, permissions | execution.agent |
| Container resources / image | createDockerExecution |
| Source directory / copy mode | Workspace.open |
| Per-workflow input and result | Workflow.make |
| Per-step identity | Session/Human key, Activity name |
| HTTP routes | laufwerk/http.ts, using defineHttpRoutes |
| Operator Studio origin | Host ~/.laufwerk/config.json; see CLI |
The host configuration is distinct from this consumer TypeScript configuration.
Do not paste server settings into defineConfig and expect them to take effect.