KEEPROUTE // OTACONSKEEP STATUS // 1.0 STABLE
KEEPROUTE 1.0stable · powered by OmniRoute

OtaconsKeep Stateful AI Orchestration

One job. The right AI.
No starting over.

OmniRoute routes a request. KeepRoute owns the mission. When Claude hits a limit, OmniRoute can switch models, KeepRoute can keep the same job alive with checkpoints, remaining work, and a handoff to another agent so you are not copy-pasting progress by hand.

We did not invent OmniRoute. It is the excellent upstream routing gateway. KeepRoute is OtaconsKeep’s layer on top, built because long agent work kept dying when a single provider failed.

ROUTE · RECOVER · CONTINUE  //  MISSION CONTROL

Why KeepRoute was made

OmniRoute solves traffic. KeepRoute solves unfinished work.

People already had a great way to send chat to many AIs. What kept breaking real Keep workflows was not “pick a model”, it was losing the job when that model hit a wall.

OmniRoute

Chooses where this request goes among providers and models.

KeepRoute

Owns the whole job, watches it, checkpoints it, and continues it if the AI has to change.

OmniRoute moves packets of AI work. KeepRoute moves missions. Same underlying gateway. Different job: continuity under failure.

OmniRoute (upstream)

One API in → best available provider/model out → response.

Routing · fallback · health · combos · gateway

KeepRoute (OtaconsKeep)

One mission in → route → work → checkpoint → if failure, continue elsewhere → same mission completes.

Missions · policy · checkpoints · handoff · recovery · local-first

The problem we kept hitting

A coding session would be halfway done. Claude hit quota. Or Cursor stalled. Or the host rebooted. Stock routing can send the next prompt somewhere else, but the human still had to rebuild context: what finished, what failed, what files mattered, what not to do twice.

Why not “just use OmniRoute”?

You should, KeepRoute does. OmniRoute is the traffic director. KeepRoute is mission control. Without KeepRoute you still have excellent fallback between models. With KeepRoute the job itself has an ID, memory, and a recovery path.

What we refused to accept

Trivial “hi” burning paid tokens. Clients each inventing their own routing rules. Starting over after a recoverable failure. Replaying a destructive step because the new agent did not know it already ran.

The design bet

The mission is the product. The model is replaceable. KeepRoute exists so OtaconsKeep can treat Claude, Codex, Cursor, Grok, and Local as executors, not as the owner of your work.

See the UI

This is KeepRoute on real hardware

Screenshots from the live KeepRoute field UI, the same surface operators use on OtaconsKeep. Neon terminal look, Auto routing, providers on the left, answers on the right.

KeepRoute main screen with providers and ask panel
KeepRoute // main screen, Auto selected · OmniRoute online
KeepRoute how to use guide overlay
How to useBeginner guide built into the UI, plain steps, not a manual.
KeepRoute with a typed prompt ready to send
Ready to askType plain words. Leave Auto on. Press GO.
KeepRoute streaming a mission through OmniRoute
Mission in flightOmniRoute + Mission Controller pick the route while the answer window streams.

Screenshots sanitized for public use (no API keys, no private LAN addresses). Click any image for full size.

Where KeepRoute fits

Three layers. Clear ownership.

So you always know what is ours, what is upstream, and what the larger Keep is.

OtaconsKeep Local AI ecosystem, UI, agents, automation, local models, other Keep capabilities
KeepRoute Mission orchestration and agent continuity inside OtaconsKeep
OmniRoute Upstream provider/model routing data plane (open source)
Providers / models / agent runtimes Claude · Codex · Cursor · Grok · Local models · other supported providers

What does it actually do?

You describe the job. KeepRoute keeps the mission alive.

You tell the system what you want done. It chooses an appropriate AI or local model. If that provider hits a limit, crashes, or becomes unavailable, the job can continue through another compatible agent, without making you start over.

This does not mean every provider or every task is guaranteed to hand off perfectly. Handoff quality still depends on tool compatibility and what the mission has saved.

Example 1 // Simple greeting
YouHi
KeepRouteSimple request → Local AI
No reason to spend paid-provider usage on a greeting.
Local → Reply
Example 2 // Coding mission with recovery
YouBuild me a program that compares coffee prices.
KeepRouteCoding job → appropriate coding agent. Mission ID created. Checkpoints begin.
Claude → Limit → Checkpoint → Codex → Continue → Complete

If needed again: Codex → failure → Cursor → same mission continues. Completed work, remaining tasks, errors, and files travel with the mission, not private “hidden reasoning” from the previous model.

Why this design exists

Providers are powerful. Each one still has limits.

Quotas, rate limits, outages, context limits, different strengths, different tools. KeepRoute separates the mission from the provider. The job belongs to the orchestration layer, not to Claude, Codex, Cursor, Grok, or any single model.

That means the system can choose the right executor, preserve progress, and move the mission when conditions change.

What did KeepRoute improve?

From disposable requests to durable missions

Requests became Missions

Long-running work gets a persistent Mission ID and state instead of living only inside one model call.

Routing became policy-controlled

Clients no longer secretly choose providers. One orchestration layer owns routing policy.

Failures became recoverable

Rate limits, quota issues, timeouts, and supported runtime failures can trigger controlled recovery instead of forcing a restart.

Provider fallback became continuation

Not merely retrying a prompt elsewhere, completed work, errors, checkpoints, files, and remaining tasks can be preserved.

Models became interchangeable executors

A mission can outlive the individual AI currently performing it.

Local AI became the default for cheap work

Simple requests can stay local instead of unnecessarily consuming paid-provider usage.

Restarts stopped killing the mission

Persistent state allows supported missions to survive service restart and validated host reboot recovery.

Project REX · latest advancement

KeepRoute / OmniRoute feed REX research: Keep and Premium

Traced end-to-end on the operator Keep, then clean-room productized into Otacon Expansion Premium (v1.3.2+): every KeepRoute / OmniRoute exchange can record into a shared learning pool. A world-model rebuild turns those records into risks, domain insights, and proposal sources. Project REX treats world_model:* as a first-class proposal source: same board pipeline as other REX work. That is aiding and driving R&D: routing outcomes become durable signal, not a disposable log line.

Driving + aiding

OmniRoute moves the request. KeepRoute owns the mission. Learning records the outcome. The world model summarizes it. REX can spawn or rank work from that summary: including KeepRoute-domain risks and low-confidence route patterns.

Global pool, not a local silo

The learning store and world model are one shared pool per install (Keep or Expansion), tagged by domain (for example keeproute). Tags filter; they do not wall off memory. Agents and REX draw from the same pool whether the exchange came from Claude, Codex, Cursor, Grok, or local Ollama through KeepRoute.

Gets smarter with traffic

Failed pre-flight / route attempts become risk signal. Successful exchanges after a fix dilute stale failure weight as fresher records accumulate. That is the practical “smarter over time” loop: success and failure both teach the board.

What public installers ship today

KeepRoute 1.0 public = mission orchestration on OmniRoute, plus an optional fail-open POST into Expansion when OTACON_EXPANSION_URL (or vault expansion_url) is set. Otacon Expansion Premium v1.3.2+ ships route_learning, world_model, and REX autonomy that consumes world_model:* proposals: the same loop as the operator Keep, clean-room for public installs.

CapabilityOperator Keep (live)Public KeepRoute 1.0Public Expansion / Premium
OmniRoute routing + KeepRoute missionsYesYesPairs via KeepRoute install
Exchange → shared learning recordsYes (global pool)Optional POST into ExpansionYes: route_learning (v1.3.2+)
World model rebuild (risks / insights)YesVia Expansion when wiredYes: world_model
REX consumes world_model:* proposalsYesVia Expansion when wiredYes: autonomy detect tick
ScopeGlobal per KeepMission UI + optional Expansion feedGlobal per Expansion install

No private Keep memories, hostnames, or live risk text are published here: architecture and install honesty only.

Before / after

Without KeepRoute vs with KeepRoute

Without KeepRoute

Prompt
↓
Provider
↓
Failure
↓
User recovers / restarts

With KeepRoute

Mission
↓
Provider A
↓
Checkpoint
↓
Failure
↓
Provider / Agent B
↓
Restore state
↓
Continue
↓
Complete

Architecture (conceptual)

USER ↓ KEEPROUTE MISSION CONTROLLER ↓ policy + classification OMNIROUTE (data plane) ↓ Claude Codex Cursor Grok Local ↓ checkpoint · supervise FAILURE? → HANDOFF / CONTINUE ↓ MISSION COMPLETE

Conceptual product architecture only. No internal network topology is shown.

OmniRoute vs KeepRoute

Same gateway family. Different job.

OmniRoute is the upstream routing data plane: pick a provider, fall back, stay healthy. KeepRoute was built because that was not enough for long Keep missions, when the model died, the work still died with it. KeepRoute sits on OmniRoute and adds mission state so the job can continue.

Made for

“Send this chat to the right model.”

OmniRoute · request routing

Made for

“Finish this mission even if the model has to change.”

KeepRoute · mission orchestration

We do not claim stock OmniRoute is “bad.” Stock column verified against public OmniRoute docs. Where stock has no mission-orchestration equivalent, we say so plainly.

Capability Stock OmniRoute KeepRoute 1.0
Multiple providers / modelsYesUses OmniRoute
Provider / model routingYesUses OmniRoute
Provider fallback / combosYesUses OmniRoute + mission-aware recovery
Health / circuit handlingYesUses OmniRoute resilience + KeepRoute supervision
Policy-based task classificationNot KeepRoute-style mission policyYes
Persistent Mission IDNo equivalent mission layerYes
Persistent mission stateNo equivalent mission layerYes
CheckpointsNot core stock routingYes
Completed / remaining work trackingNo equivalentYes
Unresolved-error preservationNo equivalentYes
Route history (mission-level)Request/usage telemetry ≠ mission historyYes
Service restart recoveryNo mission-level equivalentYes (tested)
Full-host reboot recoveryNo mission-level equivalentYes (verified 2/2 in KeepRoute testing)
Stateful model continuationFallback ≠ mission continuation packageYes
Cross-agent runtime handoffNoYes, supported/tested paths
Claude Code → Codex continuationNoYes, supported/tested path
Multi-hop continuationNo mission multi-hopYes
Duplicate / destructive action protectionNo mission ledger equivalentYes
Local-first trivial routingConfigurable routingPolicy-enforced local-first for trivial work
Operational mission metrics / release gateGateway monitoringMission soak metrics + release verification

Sources: upstream OmniRoute README / Architecture / Resilience Guide (public GitHub). KeepRoute column = OtaconsKeep 1.0 release capabilities.

Why OmniRoute · why not Jev

We need a local gateway, not a cloud judgment model

OmniRoute and Jev both get mentioned in “AI routing” conversations, but they solve different problems. KeepRoute needs a local multi-provider data plane that Claude, Codex, Cursor, Grok, and Ollama can actually talk to. Jev is a typed decision / judgment layer (TypeSafe AI) that scores complexity, gates tool calls, and advises which model tier to use, usually via cloud gateway or MCP. Useful elsewhere. Wrong job for KeepRoute’s foundation.

Jev (TypeSafe AI)

A decision model: classify the turn, pick fast / balanced / deep, gate risky tools, review patches. Host agent still owns files and commands.

Cloud / MCP · judgments · waitlist / gateway keys

OmniRoute (upstream)

A local OpenAI-compatible gateway: one endpoint, many providers, combos, fallback, health, and circuit handling on hardware you control.

Self-hosted · provider traffic · keys stay local

What OmniRoute gives KeepRoute

A real data plane on 127.0.0.1: providers connected once, Auto routing, fallbacks when Claude hits quota, local models for cheap work. KeepRoute’s Mission Controller sits on top of that plane. Without a gateway like OmniRoute, there is nothing durable to hand a mission to when the executor changes.

What Jev actually is

Jev answers typed questions: next step, risk, model tier, tool allow/block. It does not run your Claude/Codex/Cursor sessions, hold provider API keys on your LAN, or expose an OpenAI-compatible proxy your Keep UI can stream through. It is middleware advice, not the traffic pipe KeepRoute wraps.

Why OmniRoute wins for this stack

Local-first and offline-capable. Provider keys and routing stay on your machine. No waitlist for the core path. Works with the same agent CLIs OtaconsKeep already uses. Open source, Docker-friendly, and already proven under KeepRoute’s soak tests. Jev still needs a host model and usually a cloud gateway bill for the judgments themselves.

Can they coexist?

Yes, in theory. You could ask Jev “is this turn deep enough for Opus?” while OmniRoute still carries the request. That does not replace OmniRoute. KeepRoute’s bet is mission continuity on a self-hosted gateway, not outsourcing every routing judgment to a third-party decision model.

Question Jev OmniRoute KeepRoute (on OmniRoute)
Primary jobTyped decisions / judgmentsProvider & model traffic routingMission state, checkpoints, handoff
Where it runsCloud gateway / MCP clientLocal (self-hosted)Local, on OmniRoute
Holds provider keys for Claude / Codex / …No (advice only)YesUses OmniRoute
OpenAI-compatible proxy for CLIs / UINoYesUses OmniRoute
Fallback when a provider failsCan suggest a tierYes (gateway)Yes + mission continuation
Persistent Mission ID / checkpointsNoNoYes
Fits OtaconsKeep local-first ruleCloud-centric by defaultYesYes
Bottom line: OmniRoute is the pipe. Jev is a referee. KeepRoute needs the pipe. We chose OmniRoute so missions, keys, and recovery stay on hardware we control. Jev can advise a host agent; it cannot be the KeepRoute data plane.

Jev description based on public TypeSafe / Vercel AI Gateway / OpenRouter listings. OmniRoute based on upstream public docs. Neither product is “bad”; they are different layers.

Why it helps this use case

Better for long-running agent work, not “better at everything”

Persistent work

The mission exists independently from a single model request.

Automatic recovery

Recoverable provider failures do not necessarily require starting again.

Cross-agent continuation

A coding mission can move between supported agent runtimes.

Local-first cost control

Simple work can remain local.

Checkpointing

Important mission state can survive service interruption.

Policy

Routing decisions are controlled by one orchestration layer rather than scattered through clients.

Visibility

You can inspect what route was selected and why.

Design improvements

Centralized routing ownership, durable checkpoints, failure taxonomy, adapters, local-first policy, restart recovery, and evidence-driven releases.

Project REX · latest advancement

KeepRoute / OmniRoute feed REX research: Keep and Premium

Traced end-to-end on the operator Keep, then clean-room productized into Otacon Expansion Premium (v1.3.2+): every KeepRoute / OmniRoute exchange can record into a shared learning pool. A world-model rebuild turns those records into risks, domain insights, and proposal sources. Project REX treats world_model:* as a first-class proposal source: same board pipeline as other REX work. That is aiding and driving R&D: routing outcomes become durable signal, not a disposable log line.

Driving + aiding

OmniRoute moves the request. KeepRoute owns the mission. Learning records the outcome. The world model summarizes it. REX can spawn or rank work from that summary: including KeepRoute-domain risks and low-confidence route patterns.

Global pool, not a local silo

The learning store and world model are one shared pool per install (Keep or Expansion), tagged by domain (for example keeproute). Tags filter; they do not wall off memory. Agents and REX draw from the same pool whether the exchange came from Claude, Codex, Cursor, Grok, or local Ollama through KeepRoute.

Gets smarter with traffic

Failed pre-flight / route attempts become risk signal. Successful exchanges after a fix dilute stale failure weight as fresher records accumulate. That is the practical “smarter over time” loop: success and failure both teach the board.

What public installers ship today

KeepRoute 1.0 public = mission orchestration on OmniRoute, plus an optional fail-open POST into Expansion when OTACON_EXPANSION_URL (or vault expansion_url) is set. Otacon Expansion Premium v1.3.2+ ships route_learning, world_model, and REX autonomy that consumes world_model:* proposals: the same loop as the operator Keep, clean-room for public installs.

CapabilityOperator Keep (live)Public KeepRoute 1.0Public Expansion / Premium
OmniRoute routing + KeepRoute missionsYesYesPairs via KeepRoute install
Exchange → shared learning recordsYes (global pool)Optional POST into ExpansionYes: route_learning (v1.3.2+)
World model rebuild (risks / insights)YesVia Expansion when wiredYes: world_model
REX consumes world_model:* proposalsYesVia Expansion when wiredYes: autonomy detect tick
ScopeGlobal per KeepMission UI + optional Expansion feedGlobal per Expansion install

No private Keep memories, hostnames, or live risk text are published here: architecture and install honesty only.

Benchmarks // verified release results

What we measured for KeepRoute 1.0

These are observed release-test results, not universal guarantees. Sample sizes are shown beside every rate. Registered in Engineering as KR-001–KR-009 with evidence EVID-KR-001.

58
Release soak missions (promotion sample)
Sample size
100%
Observed completion in that 58-mission soak sample
n = 58
0
User interventions observed in that sample
n = 58
0
Hard-invariant violations observed (state-loss, destructive replay, paid leak, etc.)
Release soak + sweep
200/200
Final repeated trivial → local verification (100/100 + 100/100)
Paid leakage: 0
100/100
Local-route verification after a large local model was already loaded
Paid leakage: 0
2/2
Host-reboot recovery tests
KeepRoute testing
0 fails
Final capability + hardening sweep (P1-P8 style suite)
Post-release smoke: PASS

1) Release soak (n=58)

Completion
100%
Intervention
0%

2) Local-routing verification

Run A
100/100
Run B
100/100
After large model
100/100
Paid leak
0

3) Recovery / handoff

Host reboot
2/2
Final sweep
0 fails
Smoke
PASS

4) Hard invariants (observed)

State loss
0
Destructive replay
0
Trivial→paid
0
Contamination
0

Methodology disclosure

  • Release soak sample (n=58): mixed real mission classes (trivial/chat/coding/reasoning) collected for the 1.0 promotion sample, not a padded trivial-only set.
  • Local-routing verification: repeated “trivial greeting → must stay local” campaigns (100 requests each), plus a third campaign after a large local model was already loaded.
  • Recovery/handoff: controlled service-restart and host-reboot recovery tests; Claude→Codex and multi-hop paths exercised in the capability suite.
  • Hard invariants: counters for state loss, destructive replay, trivial→paid leakage, contamination, and forced user resubmit, observed at zero during the release window.
  • Engineering register: Cases KR-001–KR-009 under Engineering → Tests, evidence EVID-KR-001.
  • Not claimed: no apples-to-apples performance percentage comparison versus unmodified stock OmniRoute (capability comparison only).

Security / privacy

What we claim, and what we do not

We do not claim “everything is encrypted.” Public static website assets are not part of an encryption-at-rest story. Below is an honest control map for KeepRoute deployments.

Design intent

Provider credentials stay server-side

API keys and provider secrets must not be shipped to the browser or embedded in public pages.

Design intent

Public client vs private data plane

Internal routing data-plane services are intended for private/local binding, not for casual public exposure.

This page

Sanitized public diagnostics

This site publishes aggregate release results only. No raw mission payloads, logs, or credentials.

This page

No secrets in frontend bundles

Static HTML/CSS/JS for this page contain no API keys, tokens, or private remotes.

Not verified (do not claim)

Encryption of all mission state at rest

Full-disk / field-level encryption of every mission record is not claimed as a verified KeepRoute 1.0 guarantee.

Not verified (do not claim)

Encrypted backups of all sensitive state

Operators should apply their own backup encryption. KeepRoute 1.0 does not advertise a verified universal backup-crypto product feature.

Deployment-dependent

TLS across every trust boundary

Use TLS wherever traffic crosses an exposed network. Local-only installs may use loopback without public TLS, that is a deployment choice, not a magic shield.

Operator practice

Least privilege & auth for admin surfaces

Administrative APIs and dashboards should be authenticated and not published as open internet endpoints.

If a control is marked Not verified, we will not market it as finished. Prefer honest gaps over false confidence.

Pros & cons

Straightforward tradeoffs

Pros

  • Automatic routing with policy
  • Local-first inexpensive tasks
  • Stateful missions
  • Provider failover with continuation
  • Agent-runtime handoff (supported paths)
  • Restart / reboot recovery (tested)
  • Checkpointing
  • Less manual copying between agents
  • Route history and visibility
  • Avoids repeating completed destructive operations
  • Provider independence at the mission layer

Cons

  • More components than stock OmniRoute alone
  • Requires the Mission Controller layer
  • More storage/state to manage
  • Handoff quality depends on provider/tool compatibility
  • More setup than a single-provider workflow
  • Local inference needs adequate hardware
  • Cloud providers still have their own limits and costs
  • Recovery adds some latency
  • Not every external agent exposes identical capabilities

Limitations

Read this before you install

  • No AI system is guaranteed to finish every task.
  • A replacement agent cannot inherit another provider’s private hidden reasoning.
  • Handoff uses provider-independent mission state: files, decisions, errors, TODOs, tool results, and checkpoints.
  • Provider APIs and services may change without notice.
  • Some tasks require provider-specific tools and may not be transferable.
  • Local model quality depends on hardware and model choice.
  • Cloud usage can cost money.
  • Internet/provider outages can exhaust all available routes; the mission should stop cleanly rather than pretend success.
  • Checkpoints reduce risk but are not a substitute for backups.
  • Arbitrary destructive commands still require appropriate safety policy.
  • Benchmarks are release-test results, not universal performance guarantees.
  • Accepted residual operational notes (public-safe): occasional warm-up delay after a machine boots; cosmetic health-check noise on the upstream gateway container; intentional private binding of the internal data plane. These are monitored, low-severity, and not claimed as Sev-1 product failures.

Install // Free

Install KeepRoute on your own computer

KeepRoute is free. No supporter vault, no license key, no Buy Me a Coffee seat. No one-click Setup yet: you install the same KeepRoute field UI we run on OtaconsKeep hardware, on your machine. Do it in two parts: 1) check prerequisites (click any tool you do not have yet), then 2) follow the numbered install steps.

What you are installing: the KeepRoute UI plus OmniRoute underneath. KeepRoute remembers jobs as missions when the Mission Controller is also running; the UI alone still lets you ask Auto / providers through OmniRoute.

Part 1 · Prerequisites checklist

Click a row if you do not have that tool yet. Each row opens baby-step install help. When every Required row is done, go to Part 2.

Need Required? Quick check Help
Computer + terminal Required uname -a or open Terminal / PowerShell Open baby steps
  1. Pick where you install. Linux (Ubuntu/Debian) is the path we document. On Windows 10/11, use WSL2 Ubuntu (not plain PowerShell) for these same commands.
  2. Open a terminal. Linux: search “Terminal”. Windows: install WSL first (row below), then open Ubuntu from the Start menu.
  3. Make a folder for KeepRoute (you will reuse this path):
    mkdir -p ~/keeproute
    cd ~/keeproute
    pwd
    You should see a path like /home/YOURNAME/keeproute.
  4. Optional: install OtaconsKeep Lite first if you also want the broader Keep agent ecosystem. KeepRoute does not require Lite. Lite install →
Windows only · WSL2 Ubuntu Windows Start menu → “Ubuntu” Open baby steps

Skip this entire row if you already use Linux.

  1. Open PowerShell as Administrator (right-click Start → Terminal (Admin) / PowerShell (Admin)).
  2. Install WSL + Ubuntu:
    wsl --install -d Ubuntu
  3. Restart the PC if Windows asks. After reboot, Ubuntu may open and ask for a new Linux username and password. Remember that password, you need it for sudo.
  4. Open Ubuntu from the Start menu. All KeepRoute commands below run inside Ubuntu, not in PowerShell.
  5. Update packages once:
    sudo apt update
    sudo apt upgrade -y
  6. Confirm you are in Linux:
    uname -a
    You should see Linux in the output.
Python 3.10+ Required python3 --version Open baby steps
  1. Check what you already have:
    python3 --version
    Need 3.10 or newer (3.11 / 3.12 is fine). If the command is “not found”, continue.
  2. Ubuntu / Debian / WSL Ubuntu:
    sudo apt update
    sudo apt install -y python3 python3-venv python3-pip
  3. Check again:
    python3 --version
    Example good output: Python 3.12.3.
  4. If your distro only offers an older Python, install from the deadsnakes PPA (Ubuntu) or use your package manager’s “python3.11” / “python3.12” package, then call that binary (for example python3.12) in later steps.
pip (Python packages) Required python3 -m pip --version Open baby steps
  1. Always call pip through Python (safer than a bare pip command):
    python3 -m pip --version
  2. If that fails on Ubuntu / Debian / WSL:
    sudo apt update
    sudo apt install -y python3-pip
  3. Upgrade pip for your user (optional but helpful):
    python3 -m pip install --user --upgrade pip
  4. Confirm Flask can install (you will do the real install in Part 2):
    python3 -m pip install --user flask
    If you see a PATH warning about ~/.local/bin, that is normal; KeepRoute still runs with python3 desk/app.py.
Docker + Compose Required docker --version · docker compose version Open baby steps
  1. Check:
    docker --version
    docker compose version
    Both should print a version. If either fails, continue.
  2. Ubuntu / Debian / WSL Ubuntu (simple path):
    sudo apt update
    sudo apt install -y docker.io docker-compose-v2
    On some systems the Compose plugin is docker-compose-plugin. Either is fine as long as docker compose works.
  3. Let your user run Docker without typing sudo every time:
    sudo usermod -aG docker "$USER"
    Then log out and log back in (WSL: close Ubuntu and open it again). New groups only apply after a fresh login.
  4. Start Docker if it is not running:
    sudo service docker start
    # or on systemd hosts:
    sudo systemctl enable --now docker
  5. Verify with a hello container:
    docker run --rm hello-world
    You should see a “Hello from Docker!” message.
  6. Windows note: Docker Desktop + WSL2 backend also works. Install Docker Desktop, enable WSL integration for your Ubuntu distro, then run the same docker commands inside Ubuntu.
  7. Official docs if your distro differs: Docker Engine install.
unzip (and curl) Required unzip -v · curl --version Open baby steps
  1. Check:
    unzip -v | head -1
    curl --version | head -1
  2. Install if missing (Ubuntu / Debian / WSL):
    sudo apt update
    sudo apt install -y unzip curl
  3. Confirm again with the same check commands.
Ollama (Local AI) Optional Local replies without paid APIs Open baby steps

Skip if you will only use cloud providers (Claude, OpenAI, etc.). No GPU? Cloud-only is fine.

  1. Install Ollama from the official site instructions for your OS: ollama.com/download.
  2. Pull a small chat model (example):
    ollama pull qwen2.5:3b
  3. Confirm it answers:
    ollama run qwen2.5:3b "Say hi in one short sentence."
  4. Later, connect Ollama inside the OmniRoute dashboard so KeepRoute can route trivial work to Local.
Provider API keys For cloud Have keys ready before “Add providers” Open baby steps
  1. Decide which cloud providers you will use (Claude, OpenAI/Codex, xAI/Grok, etc.). Local-only skips this.
  2. Create API keys in each provider’s own console. Keep them in a password manager.
  3. Never paste keys into Discord, email, GitHub issues, or this website. Keys stay on your computer inside OmniRoute / KeepRoute.
  4. You will paste keys into the OmniRoute dashboard (and KeepRoute’s OmniRoute API key field) in Part 2, Step 4.

When the Required rows are done, continue to Part 2 · Install steps.

Download the KeepRoute UI package

  1. Click download (saves KeepRoute-UI.zip):

    Download KeepRoute-UI.zip

  2. In your terminal, go to the KeepRoute folder and unzip:
    mkdir -p ~/keeproute
    cd ~/keeproute
    # If the zip landed in Downloads (Linux / WSL):
    unzip -o ~/Downloads/KeepRoute-UI.zip
    # WSL tip: Windows Downloads is often:
    # unzip -o /mnt/c/Users/YOUR_WINDOWS_USER/Downloads/KeepRoute-UI.zip
    ls
  3. You should see a folder (often KeepRoute-UI) containing at least: desk/, docker-compose.omniroute.yml, and README.txt.
  4. Enter that folder and stay there for the next steps:
    cd ~/keeproute/KeepRoute-UI
    # If the unzip created a nested folder name, cd into whatever ls showed.
    pwd
    ls

Start OmniRoute (the routing engine)

  1. Still inside the KeepRoute-UI folder, pick a strong first-login password (yours alone, not an example from the internet):
    export OMNIROUTE_INITIAL_PASSWORD='pick-a-strong-password'
  2. Start OmniRoute with Docker Compose:
    docker compose -f docker-compose.omniroute.yml up -d
  3. Confirm the container is up:
    docker ps | grep -i omni
    You should see a running container line. If not, scroll to If something fails.
  4. OmniRoute listens on your machine at http://127.0.0.1:20127 (loopback only). Open that URL in a browser if a dashboard appears, sign in with the password you set, and connect providers there (Claude / OpenAI / Cursor / xAI / Ollama, etc.).
  5. Product write-up: KeepRoute on GitHub. Upstream gateway: OmniRoute on GitHub.

Install Python deps and start the KeepRoute UI

  1. Still in the KeepRoute-UI folder, install Flask for your user:
    python3 -m pip install --user flask
  2. Create an empty credentials file (KeepRoute will fill this later from the UI):
    mkdir -p desk/state
    echo '{}' > desk/state/credentials.json
    chmod 600 desk/state/credentials.json
  3. Point KeepRoute at OmniRoute and start the UI (leave this terminal open):
    export OMNIROUTE_HOST=http://127.0.0.1:20127
    export OMNIROUTE_DESK_PORT=20129
    export OMNIROUTE_DESK_BIND=127.0.0.1
    python3 desk/app.py
  4. In your browser open:

    http://127.0.0.1:20129/

    You should see the KEEPROUTE screen (providers on the left, ask box on the right).
  5. Optional later: copy keeproute-ui.service.example into your user systemd units so it starts on login.

Add providers and keys (inside KeepRoute)

  1. In the KeepRoute UI click ADD PROVIDERS.
  2. Create or copy an OmniRoute API key from the OmniRoute dashboard, paste it into KeepRoute, then Save Keys. That alone is usually enough for Auto.
  3. Connect each cloud provider you use inside OmniRoute first, then confirm it appears under Your Providers in KeepRoute.
OmniRoute API keyUsually enough for AutoCreate/copy inside OmniRoute → paste into KeepRoute → Save Keys.
ClaudeCloud · usually paidConnect in OmniRoute, then confirm it appears under Your Providers.
Codex / OpenAICloud · usually paidSame: connect in OmniRoute, refresh KeepRoute.
CursorAgent runtimeOptional coding executor when you use Cursor.
GrokCloud · usually paidOptional.
Local AIOn your hardwareConnect Ollama (or similar) through OmniRoute. No GPU? Skip Local and use cloud only.

Never paste API keys into Discord, email, or this website. Keys stay on your computer inside KeepRoute / OmniRoute.

Test it

  1. Leave Auto selected.
  2. Type Hi → press GO → expect a Local / inexpensive route when Local is healthy.
  3. Type Write a small Python calculator → expect a coding-capable provider when one is connected.
  4. Status lights: green = connected; Routed = used on the last job.

Optional · Mission Controller (full KeepRoute 1.0 orchestration)

  1. The field UI works with OmniRoute alone.
  2. For persistent missions, checkpoints, and the full KeepRoute 1.0 control plane, also run the Mission Controller sidecar from the KeepRoute 1.0 release package when you have it.
  3. Then set:
    export MISSION_CONTROLLER_URL=http://127.0.0.1:20130
    Auto policy is owned by Mission Controller when that service is present.

Done · daily use

  1. Type normal requests. Prefer Auto unless you intentionally force a provider.
  2. To stop KeepRoute UI: press Ctrl+C in its terminal.
  3. To stop OmniRoute:
    cd ~/keeproute/KeepRoute-UI
    docker compose -f docker-compose.omniroute.yml down
READY (example)
KeepRoute UI: http://127.0.0.1:20129/
OmniRoute: Connected
Local AI: Connected
Claude: Connected
Codex: Connected
Cursor: Not configured
Grok: Not configured

Routing: Ready
→ OPEN KEEPROUTE

Release

KeepRoute 1.0

KEEPROUTE1.0 · stable

Product: KeepRoute, OtaconsKeep Stateful AI Orchestration

Version: 1.0

Status: Stable (released)

Relationship: Powered by OmniRoute (upstream data plane)

Friendly changelog: First stable release of mission orchestration, persistent missions, checkpoints, recovery, local-first trivial policy, supported agent handoff, and release-verified soak results. Packaging/installer polish for one-click KeepRoute remains in progress.

FAQ

Practical questions

Why does KeepRoute exist if OmniRoute already routes?

OmniRoute routes a request. KeepRoute owns the mission. We built KeepRoute because long agent jobs kept dying when Claude hit a limit, a provider failed, or the host restarted. Stock routing can send the next prompt elsewhere, KeepRoute checkpoints the job and continues it so you are not rebuilding progress by hand.

Is there a GitHub write-up?

Yes, github.com/Otaconskeep/KeepRoute has the full product write-up, INSTALL.md how-to, WHY doc, and the KeepRoute-UI package you can clone. This page mirrors the install path with screenshots.

Is this stock OmniRoute?

No. It uses stock OmniRoute as its underlying provider/model routing data plane and adds a stateful Mission Controller and orchestration layer (KeepRoute). Same family of gateway; different product job.

Did you fork OmniRoute?

KeepRoute extends OmniRoute with an independent stateful orchestration/control layer. We do not present KeepRoute as “our OmniRoute fork.” Upstream OmniRoute remains its own project, KeepRoute is OtaconsKeep’s mission layer on top.

Why OmniRoute instead of Jev?

Different layers. Jev (TypeSafe AI) is a cloud/MCP decision model that judges complexity and tool risk. OmniRoute is a local multi-provider gateway that actually carries Claude / Codex / Cursor / Grok / Ollama traffic. KeepRoute needs that local pipe for missions and keys. Jev can advise a host agent; it cannot replace OmniRoute as the KeepRoute data plane. Full comparison: Why OmniRoute · why not Jev.

What happens when Claude reaches its limit?

KeepRoute can checkpoint the mission and continue on another eligible provider/agent when the path is supported. That is different from simply retrying the same prompt blindly.

Can it use Cursor?

Yes, as a supported agent adapter path when configured. Not every Cursor capability is identical to every other agent.

What if everything is offline?

The mission should stop cleanly rather than pretending it succeeded.

Can I run everything locally?

Simple work can stay local. Heavy coding/agent work may still need cloud providers depending on your hardware and models.

Does it guarantee my code won’t break?

No.

Does it guarantee every mission completes?

No. Release tests showed strong results in the measured samples; they are not a universal guarantee.

Are my API keys public?

No. Keys must stay server-side and protected. Never paste them into a public webpage or chat.

Upstream

Powered by OmniRoute

OmniRoute is an open-source local AI gateway: one OpenAI-compatible endpoint, many providers, combos, and resilience features. Learn more from the upstream project: