Back to articles

Orión: A Tier-Routing Philosophy for Personal AI Orchestration

· May 2026 · Jacint Gauxachs Marin
Orion constellation with three belt stars labeled Haiku, Sonnet and Opus

This isn't a "my side project beats serious products" article. It's a case study in a specific philosophy — cheap router, scoped workers, durable memory, nothing blocking — compared honestly against two mature projects that cover overlapping ground: Hermes from Nous Research and OpenClaw.

Over the last few weeks I installed Hermes, Nous Research's open-source agent, and tried OpenClaw, an MIT ecosystem with significant GitHub traction focused on 24/7 multi-channel personal agents. Both cover part of the problem I'd already solved at home with Orión, my personal orchestrator. I wanted to understand what they did better than me, what they did differently, and which parts of my design held up under scrutiny.

Short conclusion: Hermes is technically impressive on parallelism and sandbox diversity. OpenClaw is brutal on messaging channel coverage and ecosystem maturity (Foundation, skills marketplace, companion apps). Orión's real differentiator isn't raw feature surface — it's a concrete philosophy of cost-aware routing that no generalist product implements by default. This article explains that philosophy without inflating the comparison table.

The core problem: mono-tier agents

Most agent orchestrators — Hermes and OpenClaw included in default configuration — assume a single model handles every request. OpenClaw supports multi-provider with automatic failover on rate-limit, but the selection is still manual. Hermes lets you configure the model. Neither implements automatic cost-aware tier routing.

That's expensive by design. A routing question costs the same as a deep reasoning question. A greeting costs the same as a migration plan. And because everything goes through one pipe, latency compounds.

Mono-tier agents are tractors with one gear. They work, but you always pay for maximum torque even when crawling in a parking lot.

Orión's 3-tier architecture

Orión runs three model tiers, each with a specific mandate:

Orión — Full Architecture
👤 Discord voice
auto-join channel
👤 Discord text
messages + voice msg
👤 Telegram
optional · off by default
🎧 Groq STT
whisper-large-v3-turbo
4-key round-robin
🌉 Node.js Bridge
discord.js + voice-recv
pre-cached acks + ambient + queue
🐍 Python Orchestrator
aiohttp /api/chat
Telegram listener (opt)
master session
🔵 ORION (Haiku 4.5)
router · MCP server (17 tools) · CLAUDE.md · persistent context
delegate_to_project
tell_project
escalate_to_opus
check_project
remember / recall
invoke_skill
schedule_recurring
generate_image
share_file
notify_user
delegated execution (parallel, async)
🟠 Sonnet · proj A
🟠 Sonnet · proj B
🟠 Sonnet · proj C
per-project workers
serial queue · isolated cwd
Bash/Read/Edit/Glob
🟣 Opus 4.7
ad-hoc session
planning · architecture
🛡️ AI Fabric LiteLLM
on-prem fallback
(Anthropic 429 / quota)
+ gpt-image-2
⚡ Shell skills
pre-recorded commands
markdown frontmatter
⏰ APScheduler
persistent cron
SQLite jobs
persistence
🔷 Qdrant
semantic vectors
e5-small 384d
🔷 SQLite FTS5
exact lexical
RRF fusion k=60
💾 sessions.json
session_id per project
resume after restart
💾 metrics.db
event log
/metrics /cost /errors
💾 schedules.db
cron jobs
last_run · run_count
output
🔊 Edge TTS
es-ES Alvaro Neural
cloud free
🎵 Audio Queue
FIFO per-guild
no overlaps
🔔 Webhook /notify
async Discord push
text + voice channel
📎 Webhook /file
files ≤24MB
image / pdf / code

Tier 1 — Haiku: the front-line router

Every message lands here first. Haiku is fast (sub-second response for simple queries) and costs a fraction of Sonnet or Opus. The router's job is a decision tree, not heavy reasoning:

The key insight: the router never blocks. If it delegates, the user gets a confirmation in milliseconds. The heavy work happens async.

Tier 2 — Sonnet: project workers

Each project gets its own Sonnet worker session. Workers are persistent — a follow-up question in the same project resumes the existing session instead of starting cold. Workers can read files, execute shell commands, write code, run linters, check service logs — anything scoped to their project.

Multiple workers run in parallel. If you need work done on three different projects simultaneously, three Sonnet sessions run concurrently while the Haiku router is free to handle new messages.

Tier 3 — Opus: escalation for depth

Opus sessions are ad-hoc and expensive by design. Reserved for decisions that justify the cost: system architecture, migration planning, complex debugging, technical trade-off analysis. Opus is invoked async — results land as a notification, not as a blocking wait.

Key capabilities

🧠

Persistent RAG Memory

Every meaningful fact gets stored in a Qdrant vector database. Preferences, infrastructure details, credentials, past decisions — recalled automatically at conversation start via semantic similarity.

Async Delegation

Workers run in the background. The router acknowledges immediately and continues handling new messages. A push notification arrives when the worker finishes — no polling, no blocking.

🗺️

Intent-Based Routing

The router decides execution tier based on intent, not rigid keywords. Conceptual questions stay local. File and shell operations delegate to the right project worker. Deep analysis escalates to Opus.

💰

Cost-Optimized per Tier

Haiku handles the majority of interactions. Sonnet runs only when project work is needed. Opus fires rarely, on demand. Each tier pays only for what it actually does.

🔀

Multi-Project Isolation

One router, unlimited workers. The same front-line agent manages work across all projects — server infrastructure, code repos, documentation, data pipelines — without context bleed between them.

🔔

Push Notifications

Async completion events go straight to Discord (text + voice in channel). The router decides whether a result warrants a notification — trivial completions are silently dropped, important ones land on your phone.

🎙️

✅ Discord voice channel duplex

Node.js bridge (py-cord doesn't support Discord's DAVE encryption yet) with auto-join to the user's channel, STT via Groq cloud (whisper-large-v3-turbo, 4-key round-robin pool), Edge Neural TTS (es-ES Alvaro), context-aware pre-cached acks (delegating to Sonnet / escalating to Opus), ambient pad while Haiku thinks, FIFO audio queue. End-to-end voice round-trip ~3-8s.

🎨

✅ Image generation

generate_image(prompt, size) tool wired to gpt-image-2 via on-prem AI Fabric (LiteLLM). ~2MB PNG posted directly as Discord attachment. 60-180s latency.

📚

✅ Hybrid memory vector+lexical

Qdrant for semantic + SQLite FTS5 for exact token match (ports, IDs, commands). RRF (k=60) fusion combines rankings. Retrieves "port 8765" exactly even when semantic similarity is low.

✅ Skills (pre-recorded shortcuts)

Markdown catalog in ~/.claude-orchestrator/skills/ with YAML frontmatter. Parameterized shell commands that run without spawning Sonnet (e.g. claude-quota, disk-usage, list-services). Tools find_skill + invoke_skill. Typical skill: <1s vs 5-30s for a Sonnet worker.

✅ Persistent cron scheduler

schedule_recurring(prompt, cron_expr) tool registers job in SQLite + APScheduler. Fires prompts at scheduled times, runs as autonomous Orion turn (or delegates to project worker), notifies result via notify_user. Replaces n8n workflows for simple automations.

🛡️

✅ Anthropic → AI Fabric failover

When Anthropic returns 429/5xx/quota, exponential retry 3 times. If still failing, automatic fallback to Claude via on-prem LiteLLM AI Fabric (degraded text-only mode, no tools). Fallback usage metric exposed.

📊

✅ Discord-first metrics

SQLite event log captures each turn (model, duration, tokens, errors). Discord commands /metrics, /cost, /errors, /queue aggregate in real time. P50/P95 latency per tier. USD/day cost broken down by model.

📎

✅ File sharing

share_file(path, caption) tool uploads any file to Discord (≤24MB). Inline preview for images/audio/PDF, download for others.

An honest comparison with Hermes and OpenClaw

Before the table, a fair characterization of both projects. I read their public documentation and tried them briefly; what follows is what they actually do — not the strawman version designed to inflate my project.

Hermes — Nous Research

MIT · open-source · Feb 2026

Single agent with isolated parallel subagents. Each subagent has its own conversation, terminal and Python RPC scripts.

  • Persistent local memory (~/.hermes/) + FTS5 search + Honcho profiles
  • Native notifications: Telegram, Discord, Slack, WhatsApp, Signal, Email, CLI
  • Natural-language cron built-in ("every Monday 9am check X")
  • Serverless hibernation: Daytona, Vercel targets (separate from execution sandboxes)
  • 5 execution sandbox backends: local, Docker, SSH, Singularity, Modal
  • 200+ models via OpenRouter, Nous Portal, NVIDIA NIM, local vLLM
  • Auto-generated skills: the agent learns and stores reusable skills

OpenClaw

MIT · Foundation · successive renames: Clawdbot → Moltbot → OpenClaw (Anthropic trademark dispute)

Local Node.js gateway + macOS/iOS companion app. Multi-agent routing per channel/workspace with isolated sessions. Non-profit Foundation governance, active ecosystem with commercial plugins.

  • 20+ native messaging channels: WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Teams, Matrix, Feishu, LINE, WeChat, QQ, Gmail, Twitch...
  • Native voice via ElevenLabs + macOS/iOS companion with push-to-talk overlay
  • Persistent memory: local SQLite + vector embeddings for semantic search
  • 3 sandbox backends: host (main session), Docker (default non-main), SSH, OpenShell
  • Multi-LLM with failover: Claude, OpenAI, DeepSeek, MiniMax, local — manual selection + rate-limit fallback
  • ClawHub marketplace: centralized registry of community-built markdown skills (SKILL.md in ~/.openclaw/workspace/skills/)
  • Massive ecosystem: Claworc (multi-instance orchestrator), Mission Control (dashboard), CloudBot.ai (voice plugin), NVIDIA NemoClaw stack

Note: OpenClaw runs one task per session at a time (serialized to avoid race conditions). Parallelism comes from multiplying instances per channel/workspace, not from concurrent subagents inside one session like Hermes. It's a design trade-off: simplicity and predictability over raw parallelism.

Capability Orión Hermes OpenClaw
Cost-aware tier routing Explicit (Haiku → Sonnet → Opus) Manually configurable Manual + automatic failover
Async delegation Native non-blocking NL cron + serverless hibernation Persistent 24/7, 1 task/session serialized
Durable memory Qdrant RAG cross-session Local FTS5 + Honcho profiles Local SQLite + vector embeddings
Parallel subagents 1:1 Sonnet workers per project Concurrent RPC subagents 1 task/session serialized
Sandbox backends Local only 5 (local/Docker/SSH/Singularity/Modal) 3 (host/Docker/SSH/OpenShell)
Messaging channels Discord (Node bridge) + optional Telegram 6 native (TG/Discord/Slack/WA/Signal/Email) 20+ native (incl. iMessage, Teams, Matrix, LINE, WeChat)
Native voice Discord voice channel duplex (Groq STT + Edge TTS + ambient + queue) Not native ElevenLabs + macOS/iOS companion with push-to-talk
Natural-language cron Yes (APScheduler + MCP tool) Yes, built-in Cron tool, NL not confirmed
Reusable skills Manual markdown catalog (v1) — auto-gen on roadmap Auto-generated by the agent Manual + ClawHub marketplace
Image generation gpt-image-2 (AI Fabric) → direct Discord post N/A Via external plugin
Model flexibility Anthropic + AI Fabric LiteLLM failover 200+ models any provider Multi-provider + failover (Claude/GPT/DeepSeek/local)
Maturity / ecosystem Personal, not public Research project, active community Strong ecosystem with Foundation governance + commercial plugins
License Personal / not released MIT MIT (Foundation governance)
Monthly cost Pay per use, tier-optimized Self-hosted (infra + API only) Self-hosted free (BYOK) or third-party SaaS (Clowdbot, etc.)

Honest read of the table:

Real usage examples

Example 1 — Direct reply (Haiku inline)

User: "What projects are running right now?"

Haiku calls list_projects(), formats the response, replies in under a second. No worker, no delegation. Cost: one Haiku inference.

Example 2 — Async delegation (Sonnet worker)

User: "In the server project, restart the monitoring stack and check for errors in the last 100 log lines."

Haiku identifies project, calls delegate_to_project("server", prompt), returns ack immediately. Sonnet worker executes shell, analyzes logs, pushes Discord notification (text + voice channel narration) with findings. User gets ack in milliseconds and result a minute later — no terminal waiting.

# Router decision (pseudocode)
intent = classify(user_message)
# → "project_action" on project="server"

delegate_to_project(
  project="server",
  prompt="Restart monitoring stack. Check last 100 log lines for errors. Report."
)
# returns immediately

ack_user("On it — I'll notify you when done.")

Example 3 — Opus escalation (deep architecture)

User: "Think carefully about migrating our n8n workflows to a native agent architecture. Consider costs, maintenance and rollback."

"Think carefully" + strategic nature triggers escalation. Haiku calls escalate_to_opus(prompt), returns ack, continues handling other messages. When Opus finishes (5–15 min), notify_user pushes a summary with full analysis available on-demand.

Example 4 — Memory recall across sessions

User: "What did we decide about the database schema last week?"

Before answering, the system injects top-K hybrid memories (Qdrant + FTS5 fused via RRF). Exact match of "database schema" + semantic similarity surfaces the decision even if stored with different wording: remember("DB schema: UUID primary keys over auto-increment for cross-service portability", tags=["db", "schema"]).

Example 5 — Instant skill (no Sonnet)

User: "How much Anthropic quota do I have left?"

Haiku searches skill catalog → finds claude-quota → invokes invoke_skill("claude-quota", {}) → runs Python script against Anthropic API with OAuth Bearer → returns JSON with 5h/7d utilization. Latency <1s. Zero Sonnet/Opus cost.

Example 6 — On-demand image generation

User in Discord voice channel: "Orion, generate an image of an astronaut cat on Mars"

Haiku decides → generate_image("an astronaut cat on Mars", "1024x1024") → POST to AI Fabric gpt-image-2 → 2MB PNG → bridge uploads as direct Discord attachment. 60-180s latency, during which the ambient pad plays. Caption inline with the prompt.

Example 7 — Recurring scheduling

User: "Every Monday at 9 tell me the status of server services"

Haiku translates to cron → schedule_recurring("invoke skill list-services and report", "0 9 * * 1", label="monday-services"). APScheduler persists the job. Every Monday 9:00 it fires, executes as autonomous Orion turn, calls invoke_skill("list-services"), narrates the result with notify_user direct to Discord.

Example 8 — Transparent failover

Anthropic returns 429 (Max limit hit). Master Haiku retries 3 times with exponential backoff. If still failing, automatic fallback to AI Fabric LiteLLM (Claude same model, different provider). Degraded mode: text only, no tools. User notices slightly higher latency but NO interruption. Metric orchestrator_turn_fallback records the event — visible via /errors.

The cost arithmetic

Official Anthropic pricing May 2026 ($/M tokens):

ModelInputOutput
Haiku 4.5$1.00$5.00
Sonnet 4.6$3.00$15.00
Opus 4.7$5.00$25.00
gpt-image-2 (AI Fabric)~$0.07 / 1024² image

Note: the 4.5/4.6/4.7 generation cut Opus from $15/$75 (that was Opus 4/4.1) down to $5/$25 — a 67% reduction that materially changes the economics of premium-tier reasoning.

A typical day modeled (~200 turns):

Interaction typeOrión costMono-tier Sonnet (no routing)
~150 Haiku queries (routing, status, chitchat)~$0.13~$1.50
~40 Sonnet worker tasks~$0.30~$0.30
2 Opus escalations (planning)~$0.27~$0.20 (worse quality)
Edge TTS + Groq STT (voice channel)$0 (free tier)$0
Image gen (2 images / day)~$0.14N/A
Total / day~$0.84~$2.00 (worse on deep work, same TTS/STT)

Subtlety: most of the saving comes from routing ~75% of turns to Haiku at a fraction of Sonnet cost. With current Opus pricing (much cheaper than the previous generation), escalating to Opus for deep planning barely moves the needle on cost. The Orión advantage isn't raw price — it's the automation of tiering: it does it by default, without you thinking about it. And for deep analysis, Opus delivers quality Sonnet can't match — now at a very reasonable cost.

You don't pay for standing capacity. You pay for actual work done at the tier that work requires.

How Orión can improve — lessons from the competition

Evaluating Hermes and OpenClaw seriously revealed areas where Orión falls short and which enter my near-term roadmap. I don't call these "things Orión already has". I call them "technical debt I recognize".

🎯

Auto-generated skills (Hermes)

When a Sonnet worker solves a repetitive task (e.g. "check nginx logs for 5xx errors"), persist it as a parameterized executable skill. Next run: Haiku invokes the skill directly, no Sonnet re-reasoning needed.

💤

Serverless hibernation (Hermes)

Idle Sonnet workers → snapshot to disk, decompress on-demand. Hermes does it via Daytona/Modal. Reduces warm-cache idle cost.

📦

Multi-sandbox backends (Hermes + OpenClaw)

Today Orión runs workers only locally. Add Docker (isolation), SSH (remote workers), Modal (on-demand scaling). Same delegate_to_project API, different physical destinations.

Natural-language cron (Hermes)

"Every Monday at 9 check server logs" → native schedule without going through n8n. Integrate NL parser → register worker with cron trigger, execute and notify.

📡

Multi-channel messaging (OpenClaw)

Orión today is Telegram-only. OpenClaw covers 20+ channels natively. Add generic output adapter with per-channel plugins (WhatsApp, Discord, Signal). Same notify_user(msg) API, routing per user preference.

🏪

Skills marketplace (OpenClaw ClawHub)

If I ever release Orión, copy the ClawHub model: public registry of standardized markdown skills (SKILL.md + manifest). Community contributes skills, Haiku discovers by semantic similarity.

🔄

Multi-provider failover (OpenClaw)

When Anthropic returns rate-limit on Haiku/Sonnet, automatic fallback to an equivalent provider (GPT-4o-mini for Haiku, GPT-4o for Sonnet). Keeps tier routing, gains resilience.

🎤

Push-to-talk companion (OpenClaw)

OpenClaw has macOS/iOS companion with always-available push-to-talk overlay. Orión today depends on Telegram. Consider a minimal native app talking direct to Haiku via gRPC.

🔍

Hybrid vector + lexical memory

Semantic RAG (Qdrant) is good for concepts, bad for exact queries. Add FTS5 index parallel (Hermes + OpenClaw SQLite style). Hybrid lexical + semantic search, fuse results.

Orión roadmap — updated status

Update May 2026: most of the Q2-Q3 roadmap landed in an intensive sprint. What follows reflects actual state.

✅ Done

Hybrid memory vector+lexical

Qdrant for semantic + SQLite FTS5 for exact match. RRF fusion (k=60). Retrieves specific tokens (ports, IDs) that semantic similarity missed.

✅ Done

Anthropic → AI Fabric on-prem failover

Exponential 3-retry on master Haiku. If retryable error persists (429/quota/5xx), fallback to Claude via on-prem LiteLLM AI Fabric (text-only mode, no MCP tools). Pure Anthropic tiers for normal flow.

✅ Done

Native natural-language cron

APScheduler + MCP tools schedule_recurring, list_schedules, cancel_schedule. Haiku translates "every Monday 9am" to cron expression. Jobs persist in SQLite and reload after restart.

✅ Done

Native Discord adapter + voice channel duplex

Dedicated Node.js bridge (needed because py-cord doesn't support Discord's DAVE yet). Auto-join user voice channel, Groq STT (4-key pool), Edge Neural TTS, contextual pre-cached acks, ambient pad while processing, audio FIFO queue. Telegram remains optional.

✅ Done

Skills v1 (manual-curated)

Markdown catalog with YAML frontmatter at ~/.claude-orchestrator/skills/. MCP tools find_skill, list_skills, invoke_skill. Auto-extraction (Hermes-style) still on roadmap.

✅ Done

Discord-first metrics + observability

SQLite event log with hooks per turn. Discord commands /metrics, /cost, /errors, /queue. P50/P95 latency + USD/day cost broken down by model.

✅ Done

Image generation

generate_image(prompt, size) tool → gpt-image-2 via on-prem AI Fabric LiteLLM → direct Discord attachment.

Q3 2026

Auto-generated skills

Detector that analyzes recent worker turns in RAG, identifies successful repetitive patterns, proposes saving as markdown skill. User confirms before activating.

Q3 2026

Multi-sandbox backends

Refactor delegate_to_project to support pluggable backends. Implementations: local (current), Docker (isolation), SSH (remote workers). Each project declares its preferred backend in orion.yaml.

Q4 2026

Idle worker hibernation

Sonnet workers without activity >10 min → snapshot to disk (KV cache + conversational state). Sub-2s on-demand decompression when a new message arrives for the project. Reduces warm-cache cost for rarely-used workers.

Q4 2026

Tier 0 local — on-prem model for trivial queries

Test Llama 3.3 8B or Qwen 2.5 via vLLM as pre-Haiku filter for ultra-simple queries (greetings, dates, list_projects). Marginal cost zero. Reserve Haiku for real routing requiring context.

2027

Open-source Orión core (evaluating)

Once stabilized, consider releasing the core as a pip library + MIT adapter compatible with ClawHub (import OpenClaw skills via bridge). Customizable parts (memory, voice) stay as user layer.

What Orión doesn't replace

OpenClaw is clearly the best option if your priority is channel coverage (you want to talk to your agent from WhatsApp, iMessage, Signal and Telegram depending on the moment), mature ecosystem with commercial plugins (CloudBot.ai voice, Claworc multi-instance), native macOS/iOS companion apps, or you need an MIT project with Foundation governance for sustainable professional use.

Hermes is excellent if you need real subagent parallelism with diverse sandboxes (Docker/SSH/Modal/Daytona), 200+ multi-provider models in the same pipeline, agent-generated auto-skills, or out-of-the-box serverless hibernation.

Orión fits a different profile: a technical operator who already runs their own infra, wants full control over per-interaction cost (hence the tier-routing), prefers a pure Anthropic stack with optional failover, and is willing to invest days of setup to have an orchestrator shaped to their personal flow, not to a generic use case. If those profiles don't fit, OpenClaw or Hermes are better options, and that's fine.

Closing thought

This article isn't meant to replace or outdo Hermes, OpenClaw, or any other serious product in the ecosystem. Hermes is technically excellent. OpenClaw is a reference for maturity. Either can be the right choice for a lot of people, and I have no ambition to compete with them on breadth, ecosystem, or community traction.

What this article is meant to do is defend a simple idea: anyone with interest and time can build their own personal agent. You don't have to wait for a generalist product to cover your exact use case. You don't have to delegate every decision to third-party code whose implementation you don't understand. You can pick your stack, your models, your channels, your memory, your tone — and modify any of them the moment something feels off.

Cost-aware routing is one concrete example. Owning your own RAG memory with the semantics you care about is another. Deciding which messaging channel you use, which voice replies, which pre-recorded ack you hear while the model thinks — dozens of small decisions no generalist product is going to nail exactly to your taste. Building it yourself means every choice is conscious, and when something breaks you know exactly where to look.

There's a cost: setup time, maintenance, accumulated tech debt. I take that cost because I care about understanding what sits under each layer of the software I use most. It's not for everyone, and that's fine. But if you've ever wondered what exactly happens when you press a button on that SaaS you depend on, that curiosity alone is enough reason to start building.

Building your own orchestrator isn't competing with serious products. It's exercising conscious control over the tool you use most every day — and discovering, along the way, just how much you can do yourself.

Back to articles