Skip to main content
Pioneer is a Cargo workspace with twenty-five Rust crates. The split is intentionally direct: public protocol, gateway orchestration, shared client logic, client FFI, CLI-backed agent runtimes, agent execution, hook runtime, provider adapters, tools, artifacts, tasks, MCP, skills, prompt compilation, agent memory, remote access, secret storage, telemetry, and durable storage are separate layers. This page is a map, not the architecture itself. Use it when you need to know where a responsibility lives before reading the deeper page for that layer.

Why the workspace is split this way

The split follows runtime boundaries. Provider code should not know about WebSocket sessions. Prompt compilation should not know about SQLite. Tools should not know which client requested a turn. The gateway is allowed to wire everything together; most other crates should stay focused. That shape keeps changes smaller. Adding an API provider should mostly touch provider and gateway provider listing/key handling, with secret values routed through keystore. Adding a CLI-backed agent runtime should touch cli-agent-runtime, gateway CLI runtime handlers, protocol contracts, and shared client presentation helpers, not provider. Changing prompt section ordering should mostly touch promt and prompt tests. Adding a task event should touch protocol, tasks, crud, and gateway notifications, but not shell-specific UI code.

Workspace crates

Dependency direction

The important rule is that protocol sits at the public edge while gateway is the integration layer. Lower-level crates should not need to know about desktop UI state. Domain crates expose typed APIs that the gateway wires into request handlers and background runtimes.

Where to look first