Operations

From development to production deployment, fleet management, and ongoing maintenance. This section covers everything you need to ship your HORUS application to real hardware.


Quick Reference

TaskCommand
Deploy to one robothorus deploy pi@192.168.1.100
Deploy to named targethorus deploy jetson-01
Deploy to all robotshorus deploy --all
List deploy targetshorus deploy --list
Monitor running systemhorus monitor
Check system healthhorus doctor
View flight recorderhorus blackbox
Record a sessionhorus run --record session1
Replay a recordinghorus record replay session1

Deployment

New to deploying? See Deploy to Your Robot for the full setup guide — from preparing your robot to running your first deploy.

Single Robot

Deploy directly to a host:

# Build, sync, and deploy
horus deploy pi@192.168.1.100

# Deploy and run immediately
horus deploy pi@192.168.1.100 --run

# Deploy to specific architecture
horus deploy ubuntu@jetson.local --arch aarch64

# Preview without deploying
horus deploy pi@192.168.1.100 --dry-run

Named Targets

Configure robots in deploy.yaml (project root):

targets:
  jetson-01:
    host: nvidia@10.0.0.1
    arch: aarch64
    dir: ~/robot
  jetson-02:
    host: nvidia@10.0.0.2
    arch: aarch64
    dir: ~/robot
  arm-controller:
    host: pi@10.0.0.10
    arch: aarch64
    dir: ~/arm
    port: 2222
    identity: ~/.ssh/robot_key

Deploy by name:

horus deploy jetson-01
horus deploy jetson-01 --run

Fleet Deployment

Deploy to multiple robots at once:

# Multiple named targets
horus deploy jetson-01 jetson-02 jetson-03

# All targets from deploy.yaml
horus deploy --all

# Preview fleet deployment
horus deploy --all --dry-run

# List all configured targets
horus deploy --list

Fleet deploy builds once (shared binary for same architecture), then syncs to each robot sequentially. Confirmation is asked once for the entire fleet, not per robot.

If a deployment fails for one robot, the fleet continues to the next. A summary is printed at the end:

HORUS Fleet Deploy (3 targets)

--- [1/3] jetson-01
  [checkmark] jetson-01 done
--- [2/3] jetson-02
  [checkmark] jetson-02 done
--- [3/3] jetson-03
  [x] jetson-03 failed: SSH connection refused

=== Fleet Deploy Summary
  [checkmark] 2/3 targets deployed successfully

Supported Architectures

ArchitectureAliasCommon Robots
aarch64arm64, jetson, pi4, pi5Raspberry Pi 4/5, Jetson Nano/Xavier/Orin
armv7arm, pi3, pi2Raspberry Pi 2/3, older ARM boards
x86_64x64, amd64, intelIntel NUC, standard PCs
nativehost, localSame as build machine

Monitoring

Web Dashboard

horus monitor
# Opens web dashboard at http://localhost:4200

The monitor shows:

  • Active nodes with health status, tick rates, CPU/memory usage
  • Topic graph with message flow and rates
  • Parameters with live editing
  • Packages with install/uninstall
  • API Docs with searchable symbol browser and topic flow visualization
  • Logs with filtering by node and severity

TUI Dashboard

horus monitor --tui
# Terminal-based dashboard (no browser needed)

Programmatic Access

# Node status
horus node list --json

# Topic rates
horus topic list --json

# System health
horus doctor --json

Environment Management

Reproducible Builds

horus.lock pins every dependency to an exact version. Commit it to git, and horus build on another machine installs identical deps.


Flight Recorder (BlackBox)

The BlackBox records the last N events before a crash — like an airplane's black box.

// Enable in code
let scheduler = Scheduler::new()
    .blackbox(64)  // Keep last 64MB
    .tick_rate(100_u64.hz());
# View after crash
horus blackbox
horus blackbox --json
horus blackbox anomalies

Record and Replay

Record a session for debugging or regression testing:

# Record
horus run --record session1

# List recordings
horus record list

# Replay
horus record replay session1

# Compare two recordings
horus record diff session1 session2

# Export for analysis
horus record export session1 --format mcap

Health Checks

# Full system health check
horus doctor

# JSON output for CI
horus doctor --json

The doctor checks:

  • Rust toolchain (cargo, rustc, clippy, fmt)
  • Python toolchain (python3, ruff, pytest)
  • Project manifest validity
  • Shared memory status
  • Disk usage
  • Plugin registry connectivity

Deployment Checklist

Before deploying to production:

  1. Enable safety monitoring.watchdog(500_u64.ms())
  2. Configure real-time.prefer_rt() for graceful RT, .require_rt() for strict
  3. Run testshorus test
  4. Check healthhorus doctor
  5. Deployhorus deploy <target> --run
  6. Monitorhorus monitor from your development machine

See Production Deployment for the full guide.


See Also