forked from herocode/horus
2.5 KiB
2.5 KiB
Runners Overview
Runners are the execution layer in the Horus architecture. They receive jobs from the Supervisor via Redis queues and execute the actual workload.
Architecture
Supervisor → Redis Queue → Runner → Execute Job → Return Result
Available Runners
Horus provides three specialized runners:
1. Hero Runner
Executes heroscripts using the Hero CLI ecosystem.
Use Cases:
- Running Hero automation tasks
- Executing heroscripts from job payloads
- Integration with Hero CLI tools
Binary: herorunner
2. SAL Runner
System Abstraction Layer runner for system-level operations.
Use Cases:
- OS operations (file, process, network)
- Infrastructure management (Kubernetes, VMs)
- Cloud provider operations (Hetzner)
- Database operations (Redis, Postgres)
Binary: runner_sal
3. Osiris Runner
Database-backed runner for data storage and retrieval using Rhai scripts.
Use Cases:
- Structured data storage
- Model-based data operations
- Rhai script execution with database access
Binary: runner_osiris
Common Features
All runners implement the Runner trait and provide:
- Job Execution: Process jobs from Redis queues
- Signature Verification: Verify job signatures before execution
- Timeout Support: Respect job timeout settings
- Environment Variables: Pass environment variables to jobs
- Error Handling: Comprehensive error reporting
- Logging: Structured logging for debugging
Runner Protocol
Runners communicate with the Supervisor using a Redis-based protocol:
- Job Queue: Supervisor pushes jobs to
runner:{runner_id}:jobs - Job Processing: Runner pops job, validates signature, executes
- Result Storage: Runner stores result in
job:{job_id}:result - Status Updates: Runner updates job status throughout execution
Starting a Runner
# Hero Runner
herorunner <runner_id> [--redis-url <url>]
# SAL Runner
runner_sal <runner_id> [--redis-url <url>]
# Osiris Runner
runner_osiris <runner_id> [--redis-url <url>]
Configuration
All runners accept:
runner_id: Unique identifier for the runner (required)--redis-url: Redis connection URL (default:redis://localhost:6379)
Security
- Jobs must be cryptographically signed
- Runners verify signatures before execution
- Untrusted jobs are rejected
- Environment variables should not contain sensitive data in production