Doro is an AI-native home server control plane.
The project is built around one central control panel and many host agents:
doro-control-planeexposes the API, stores state, orchestrates tasks, handles approvals, and provides the AI entrypoint.doro-agentruns on each host and exposes host capabilities over gRPC such as metrics, logs, services, containers, files, and command execution.doro-uiis the Next.js operations console for hosts, tasks, approvals, applications, resources, logs, and settings.
doro-protocol- shared versioned protocol types for the UI, control plane, and agents.doro-control-plane- console API, event stream, and agent connection surface.doro-agent- host daemon for enrollment, heartbeat, metrics, cancellable command execution, and host-local task work.doro-store- Postgres persistence boundary using SeaORM.doro-config- environment/TOML configuration loading for the control plane and Agent config loading for~/.doro/agent.toml.doro-ai- AI planning/provider abstraction that never bypasses policy or approval.doro-cli- Doro operations CLI.doro-ui- Next.js frontend.docs- mdBook product and architecture documentation.
Doro keeps one Agent protocol: outbound gRPC from each enrolled Agent to the control plane. Long-running Agent work is keyed by command_id, tracked locally, and can be cancelled by the control plane with CancelCommand. Cancelled work reports COMMAND_STATUS_CANCELLED so task, audit, and UI code can distinguish operator cancellation from failure.
The Agent also includes reliability settings in ~/.doro/agent.toml under [reliability]:
event_spool_enabled,event_spool_path,event_spool_max_files, andevent_spool_max_bytesbound local event buffering while the stream is unavailable.command_cancel_grace_secondscontrols graceful terminal cancellation before the PTY is reset.preflight_enabledenables execution-time checks for file scope, transfer size, disk space, runtime readiness, and provider configuration.
Runtime health is exposed in metrics.snapshot.extra_json.agent_runtime, including pending command count, cancel count, and event spool counters.
cargo check --workspace
cargo test --workspace
cd doro-ui && bun run build
mdbook build docsRun the control-plane API:
cargo run -p doro-cli -- control-planeThe control plane listens on 0.0.0.0:8787 for the console and 0.0.0.0:8788 for agents so the UI can reach it over the host network.
Run the agent:
cargo run -p doro-cli -- agentInstall the control plane as a managed service. The service target uses systemd on Linux and launchd on macOS:
make control-plane-service-install
make control-plane-service-start
make control-plane-service-statusPass DORO_CONTROL_PLANE_* variables to make control-plane-service-install to override database, bind, security, and AI settings.
Install the agent the same way:
make agent-service-install
sudoedit /etc/doro/agent.toml
make agent-service-start
make agent-service-statusFor hosts where the agent should manage Docker, pass a supplementary group during install:
make agent-systemd-install DORO_AGENT_SUPPLEMENTARY_GROUPS=dockerExplicit platform targets are also available: *-systemd-* for Linux and *-launchd-* for macOS.
Set service log verbosity with the global CLI flag:
cargo run -p doro-cli -- --log-level debug control-planeRun the CLI:
cargo run -p doro-cli -- status