Architecture
Process extensions
Roder can host extensions written in any language. A process extension is a child process that speaks newline-delimited JSON-RPC over stdio, echoes a manifest, and registers ordinary services such as inference engines, event sinks, subagent dispatchers, and task executors.
Configuration
[[process_extensions]]
id = "python-chat-completions"
enabled = true
manifest = "examples/non-rust-extensions/python-chat-completions/roder-extension.toml"
command = "python3"
args = ["-m", "roder_python_chat_provider"]
cwd = "examples/non-rust-extensions/python-chat-completions"
env = { PYTHONUNBUFFERED = "1", PYTHONPATH = "src" }
startup_timeout_ms = 10000The environment is explicit and redacted. The host clears the child environment, forwards only configured variables plus PATH, and never prints secrets in manifests, diagnostics, or events.
Protocol shape
extension/initializevalidates protocol version, services, capabilities, and manifest checksum.inference/streamTurnlets a child stream canonical inference events.subagents/dispatchandtasks/executebridge remote agents and background executors.events/handleforwards filtered canonical runtime events to child sinks.
Current examples
The source tree includes a Python chat-completions provider proof and a TypeScript Cursor SDK agent extension. App-server clients see these services through the same registry metadata as native Rust extensions.