Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

omp-lane

Policy-enforced model lanes for omp: route a session through $0-only or zero-data-retention models, per project, with size tiers.

The guarantee is not a convention. Every request carries OpenRouter provider-routing preferences, so a request that cannot satisfy the lane fails at the router instead of quietly falling back to a model that logs your prompts or bills your card.

Lanes

Lane provider sent with every request Meaning
free max_price: {prompt: 0, completion: 0} $0 or the request fails. Prompts may be logged/trained on.
free-zdr + zdr: true, data_collection: deny $0 and no prompt retention.
zdr zdr: true, data_collection: deny, sort: price No prompt retention, free-first, then the cheapest ZDR endpoints.

Membership is derived from live data — /api/v1/models for pricing and capabilities, /api/v1/endpoints/zdr for the authoritative ZDR endpoint list — never hardcoded. Free :free variants are additionally probed against their own endpoints feed, because the model list keeps advertising retired ones.

Expect free-zdr to be small: free and contractually non-retaining is rare (one tool-capable text model at the time of writing). zdr is the practical everyday lane — same privacy guarantee, ~$0.07/Mtok, two dozen models.

Size tiers

Each lane member is tagged small / medium / large from two independent signals — parameter count parsed from the model id, and a curated capability tier — taking whichever says "more capable".

Tiers are selectable three ways:

omp --model zdr-small        # the [lane-size] name tag is a fuzzy selector
/lane zdr large              # in-session switch
Ctrl+P                       # cycles smol -> default -> slow == small -> medium -> large

Roles map to tiers: plan/slow = large, default/task = medium, smol/commit/tiny/advisor = small.

Install

omp plugin link .                       # not published to npm; link the checkout
ln -sf "$PWD/src/cli.ts" ~/.bun/bin/omp-lane
omp-lane refresh                        # fetch live data, write config

refresh writes:

  • ~/.omp/agent/models.yml — a managed block of providers.openrouter.modelOverrides giving each lane member its [lane-size] name tag and its policy. This is what makes omp --model zdr-small work from a cold start, before any session exists.
  • ~/.omp/overlays/{free,free-zdr,zdr}.yml — role wiring, fallback chains, and a hard enabledModels allow-list, for omp --config.
  • ~/.omp/cache/omp-lane.json — the lane data the extension reads (24 h TTL).

Use

omp-lane run zdr                  # session in the zdr lane (overlay + --lane)
omp --lane zdr                    # lane without the overlay's allow-list
OMP_LANE=zdr omp                  # same, via env
omp-lane pin zdr ~/sites/project  # writes <dir>/.omp/lane; every session there is in-lane
omp-lane ls zdr                   # lane membership from cache

In session:

/lane                     status: lane, tier, model, policy, data age
/lane zdr small           switch lane and/or tier
/lane list [lane]         membership with tiers and prices
/lane pin [lane]          pin the current directory
/lane refresh             refetch live data
/lane off                 disable for this session

Lane resolution, highest precedence first: --lane flag, /lane, OMP_LANE, <cwd>/.omp/lane, ~/.omp/lane.

How enforcement works

  • before_provider_request merges the lane policy into the OpenRouter request body. This covers any OpenRouter model, including ones the catalog gained after the last refresh — the models.yml overrides are for cold-start selection, not for the guarantee.
  • An explicitly chosen model is respected when it can honor the lane (any OpenRouter model, or a local engine where nothing leaves the machine). A model that cannot — Anthropic, Cursor, Copilot — is switched back to the lane at turn_start, with a warning.
  • Local engines (lm-studio, llama.cpp, ollama) are the tail of every fallback chain: free, and private by construction.

Verified behavior

$ omp --model openrouter/deepseek/deepseek-v4-flash -p 'say OK'
OK
$ OMP_LANE=free omp --model openrouter/deepseek/deepseek-v4-flash -p 'say OK'
404 No endpoints found that satisfy the max price for this request

Same model, same config; the only difference is the lane. The zdr lane produces the analogous 404 No endpoints available matching your guardrail restrictions and data policy when a model has no zero-retention endpoint.

Layout

src/lanes.ts      lane definitions, live OpenRouter data, tiering, caching
src/extension.ts  request-time enforcement, /lane command, model switching
src/cli.ts        refresh / ls / run / pin — the static config half

About

Policy-enforced model lanes for omp: $0-only and zero-data-retention routing over OpenRouter, with size tiers

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages