Concept 10 of 10

A deterministic harness for nondeterministic intelligence.

Nine smaller ideas point at one big one: the harness runs the process, and the model executes bounded steps inside it.

The standard model, inverted

The harness is the loop your agent runs in. Today that loop is the LLM itself — it decides what to do next and reaches for whatever tool it wants. Flowgate makes the loop a deterministic runtime the model plugs into. (Three ways to run it, from MCP gateway to owning the loop outright.)

The common pattern puts the LLM on top: give it tools, ask it to plan, hope it stays on task, patch the misses with prompts and retries. When that breaks on the work you actually run — the agent invents a step, calls a tool it shouldn't, drifts off the task — you're patching nondeterminism with more prose. Flowgate flips the stack. The harness comes first — mission, workflows, state, locks, legal moves — and the model executes bounded reasoning inside it.

the-inversion.txt
LLM-first (the norm)            Harness-first (Flowgate)
─────────────────────          ────────────────────────
LLM decides the process    →   the workflow defines the process
LLM gets a bag of tools    →   the runtime exposes legal next moves
LLM owns the context       →   the blackboard owns context; LLM gets a slice
best model for everything  →   cheapest sufficient model per step

The model as a worker inside the runtime

The sharpest expression of the inversion: the in-runtime LLM executor. Flowgate hosts the model call itself, and the tool surface the model sees is the current state's transitions — nothing more — under enforced iteration and cost caps, with its reasoning captured to the audit log. The LLM no longer owns the process. It's a replaceable reasoning engine the runtime calls when a step needs judgment.

in-runtime.yaml
triaging:
  goal: "Decide: bug, feature request, or noise."
  transitions:                      # these three ARE the model's whole tool surface
    mark_as_bug:
      target: investigating
      executor:
        kind: llm                   # flowgate hosts the call
        model: anthropic:claude-sonnet-4-6
        max_iterations: 3           # bounded; nothing but these transitions in scope
    mark_as_feature: { target: backlog }   # each decision transition
    close_as_noise:  { target: closed }    # carries the same llm executor

The category

Flowgate is a harness-first runtime for coding agents: workflows, guardrails, locks, and state come first; LLMs execute inside those constraints. That's why older, cheaper, local, and specialized models become useful — they don't have to understand the whole mission, only perform one bounded, state-specific task. The runtime leads. The models execute.

Concept 10 of 10

You've reached the top →

Start building

One YAML file. Two tools. Full governance. Free and open source.

See all concepts