Engine-First
The doctrine, inherited from gaius: the engine is the nervous system; CLI, TUI, and MCP are thin clients. A client does exactly three things:
- parse input,
await client.call(service, action, params),- format output.
No business logic in clients, no local algorithms, no engine-bypassing
fallbacks, no heavy dependencies (models, embedders). The CLI doubles as
the verification harness: every engine feature must be reachable and
verified through synth-cli.
The client layer (src/synth/client/) is the only import path clients
take: a generic GrpcEngineClient.call() plus typed proxies.