unhardcoded
open source · MIT · runs on your keys

Stop hardcoding which model to call.

Two ideas. A policy decides which model handles one call. A workflow wires those decisions into a pipeline. Open source, MIT, and it runs on your own provider keys.

policies · the unit

A policy picks the model, not you.

Hardcode model="gpt-5.5" and it rots. New models ship weekly, prices move, and some requests need tools, vision, or just something cheaper. A policy declares what qualifies and how to rank it, picks the right model per request, and falls back on failure. You send the rule, not a name.

Every decision leaves a replayable trace: the same policy, inputs, and catalog reproduce it exactly, on the host or your own machine. Nothing routes in the dark.

compose routed calls

A workflow routes the whole job.

Real features aren’t one call. A support reply is triage → draft → guard: each step wants a different model, a guard can refuse before anything ships, and steps fan out and back in. One policy routes a call; a workflow routes the pipeline, and writes one stitched trace.

Triage cheap, draft to a quality floor, then a strong no-log guard that can refuse before anything ships.

Show flow_ir
flow.support-ticket.json
["flow", {
  "u": {"kind": "input"},
  "t": {"kind": "llm", "system": "Classify the ticket and extract the account id as JSON.",
    "policy": ["policy", ["and", ["meets_req"], ["not", ["is", "disabled"]], ["has_cap", "supports_json_mode"]],
      ["neg", ["normalize", ["field", "price_out"]]], ["argmax"], ["id"], ["always", {"action": "next_candidate"}]],
    "inputs": ["u"]},
  "d": {"kind": "llm", "system": "Write a reply using the ticket and the triage.",
    "policy": ["policy", ["and", ["meets_req"], ["not", ["is", "disabled"]], ["cmp", "bench_intelligence", "ge", 0.55]],
      ["neg", ["normalize", ["field", "price_out"]]], ["argmax"], ["id"], ["always", {"action": "next_candidate"}]],
    "inputs": ["u", "t"], "template": "Ticket:\n$1\n\nTriage:\n$2"},
  "g": {"kind": "llm", "system": "Check brand voice, PII, refund limits. Refuse if any fail.",
    "policy": ["policy", ["and", ["meets_req"], ["not", ["is", "disabled"]], ["is", "no_log"]],
      ["field", "bench_intelligence"], ["argmax"], ["id"], ["always", {"action": "next_candidate"}]],
    "inputs": ["d"]},
  "out": {"kind": "output", "inputs": ["g"]}
}]

scroll the diagram sideways →

See every workflow pattern in the docs →

start

Two repos, MIT, ready now.

Clone the host and the engine, point them at your provider accounts, and route on your own keys today. No markup, no hidden routing.

unhardcoded

The reference host that admits and fingerprints the policy, routes the call over your provider keys, and writes the trace.

unhardcoded-engine

The policy and flow IR, the reference interpreter, and the conformance vectors, the spec other implementations check themselves against.

MIT licensed provider-neutral portable IR self-hostable

Prefer not to run the host yourself? A hosted version (managed catalogs, trace storage, team controls) is coming.

No spam. One email when the hosted version is ready.