An AI agent harness for hard, exact tasks. Keeps one evolving artifact, spends compute only on decisions that can change it, and seals the result against a verifiable evidence ledger. Python, built on the Codex CLI.
Find a file
2026-09-03 12:57:30 +00:00
.github/workflows Reconstruct Flourite around canonical runtime boundaries 2026-08-26 15:03:33 +00:00
assets Make the intelligence kernel Flourite's canonical runtime 2026-08-26 17:31:20 +00:00
docs Make artifact finalization atomic 2026-09-02 15:51:56 +00:00
examples Collapse Flourite onto the canonical kernel 2026-08-27 08:01:37 +00:00
src/frontier_harness Reconstruct worker-owned runtime boundaries 2026-09-03 12:57:30 +00:00
tests Reconstruct worker-owned runtime boundaries 2026-09-03 12:57:30 +00:00
.gitignore Public portfolio release 2026-08-25 20:48:02 +00:00
AGENTS.md Rebuild Flourite around causal evidence 2026-09-01 06:38:58 +00:00
CHANGELOG.md Preserve live work across durable retries 2026-08-27 13:29:57 +00:00
CONTRIBUTING.md Public portfolio release 2026-08-25 20:48:02 +00:00
LICENSE Public portfolio release 2026-08-25 20:48:02 +00:00
MANIFEST.in Public portfolio release 2026-08-25 20:48:02 +00:00
NOTICE Public portfolio release 2026-08-25 20:48:02 +00:00
pyproject.toml Public portfolio release 2026-08-25 20:48:02 +00:00
README.md Make Flourite's causal contracts executable 2026-09-01 09:03:16 +00:00
RELEASE_NOTES.md Public portfolio release 2026-08-25 20:48:02 +00:00
SECURITY.md Public portfolio release 2026-08-25 20:48:02 +00:00
uv.lock Public portfolio release 2026-08-25 20:48:02 +00:00

Flourite

Flourite is a durable intelligence harness for problems where one strong model run gets close, but not close enough.

It does not replace the model with a workflow graph or a cast of agents. A persistent Lead builds the best answer it can with the full tool plane. Flourite keeps the objective stable, preserves what the run learns, opens a separate trajectory only when the problem genuinely branches, and asks a fresh Challenger to inspect the actual deliverable before accepting completion.

The result is one artifact—not a folder of competing drafts—with a replayable record of how it got there.

Quick start · How it works · Live control · Commands · Canonical model · Rebuild history · Operations · Security

Flourite is an independent open-source project, not an OpenAI product.

Caution

Trusted mode gives the model the permissions of the current user. Run it in a dedicated VM, VPS, or disposable machine without unrelated secrets. Read SECURITY.md before using it elsewhere.

Why Flourite

Ordinary harness Flourite
Fixed phases and agent roles One adaptive loop around the live artifact
Many independent answers One current best, with optional real branches
Chat history as memory Compressed frontier, evolving quality lens, and content-addressed evidence
Criticism as more prose Findings that change the next construction move
Stop at a call or round limit Stop when the claim survives direct challenge, or an explicit operator limit is exhausted
Crash between model output and integration Commit the whole semantic move atomically or not at all
Restart a run to change its machinery Replace code atomically; the next activity leases it live

The model remains the intelligence. Flourite handles the parts long runs are bad at handling for themselves: exact goal continuity, recovery, global reframing, causal learning from rejection, artifact-bound completion, and durable operator control.

There is no default semantic call count, round count, or reserved “synthesis phase.” Transport and component recovery use bounded retries so a broken boundary cannot consume the run forever. An operator wall-time envelope can interrupt a live move; metered token and turn envelopes close the run at the next atomic move boundary. Otherwise productive work is not stopped by a hidden harness horizon. Flourite does not pretend to enforce a dollar limit when the provider does not report authoritative cost.

Quick start

You need Linux, Python 3.11+, Node.js, the Codex CLI, and Oh My Pi.

npm install -g @openai/codex @oh-my-pi/pi-coding-agent
codex login

git clone https://github.com/mystxcal/flourite.git
cd flourite
python -m venv .venv
source .venv/bin/activate
python -m pip install .

flourite doctor
flourite init flourite.toml

doctor checks OMP, ChatGPT authentication, and the configured model without spending a model token. Actual tool availability is proven by the first real move instead of inferred from CLI error text. The generated configuration works as-is; the annotated version is in examples/flourite.toml.

Run a task

For research, decisions, formal work, design, or another file artifact:

flourite run \
  --config flourite.toml \
  --adapter research \
  --source brief.md \
  --output answer.md \
  "Find the strongest defensible answer."

For a repository:

flourite run \
  --config flourite.toml \
  --adapter software \
  --workspace . \
  --output final.patch \
  "Fix the parser bug, preserve compatibility, and prove the change."

Software runs stay isolated. Verify the result, then apply it explicitly:

flourite verify latest
flourite apply latest

To test the complete production kernel without a provider call:

flourite demo

The deterministic runner is intentionally not a model simulation. It proves that creation, atomic commit, challenge, replay, control, and materialization use the same architecture as a live run.

Watch and steer

Attach from another terminal:

flourite live latest

The dashboard shows the current workspace, trajectories, move history, usage, model and tool activity, completion claim, and queued operator commands. It is a disposable projection over durable state; detaching it does not affect the run.

Steering is admitted at the next safe move boundary and becomes a durable objective amendment. Pause and stop use the same boundary, so an in-flight model call is not silently discarded.

flourite steer latest "Test the assumption against primary evidence."
flourite pause latest
flourite resume latest
flourite stop latest

The run itself is a Ship of Theseus. Its objective, journal, and component protocol remain stable; the implementation does not have to. To replace code without rebuilding or restarting the run:

flourite component bind latest /path/to/flourite
flourite component status latest

The active activity finishes with the immutable generation it leased. The next activity starts in a fresh process from the newly validated generation. A bad generation cannot partially replace a running worker, and every lease leaves a receipt beside the journal.

How it works

Flourite keeps five semantic objects:

  • Objective — immutable original task plus explicit operator amendments.
  • Frontier — the shortest causal model from which a fresh strong model can continue.
  • Quality lens — task-native success and failure signatures, observable discriminators, proxy traps, and blind spots that evolve from evidence.
  • Evidence — provenance-bearing observations, tests, failures, steering, and challenge findings.
  • Artifact and trajectory heads — the actual current deliverables and the few live alternatives that earned independent development.

One loop advances them:

exact objective + frontier + quality lens + direct evidence
                         │
                         ▼
              Lead makes the strongest move
                         │
              ┌──────────┴──────────┐
              │                     │
      artifact/evidence      real uncertainty width
              │                     │
              │             optional trajectories
              └──────────┬──────────┘
                         ▼
              one integrated current best
                         │
             finish claim or next construction
                         │
                 valid direct challenge
                  │                  │
               support          material finding
                  │                  │
              satisfied       ordinary construction

The Lead keeps both session and live-workspace continuity within a trajectory; generated outputs and partial work survive ordinary moves and transport interruptions. A fresh Navigator appears only when local continuation stops producing information; it reconstructs the global frontier without inheriting the Lead's framing. A fresh Challenger can support, challenge, or remain uncertain about a concrete finish claim. A material rejection is not a terminal “review phase”—it becomes evidence for the next normal construction move. A challenge first proves that its assay can actually perceive the target. Missing material repairs and replays the same evaluation; it cannot become a semantic verdict. New material distinctions update the quality lens and reopen affected claims.

Every external result is committed as one move.applied transaction: observations, artifact, workspace, branches, continuation, finish claim, usage, and failure residue. A crash cannot leave half of that meaning authoritative. The hash-chained ledger is the source of truth; state.json is a rebuildable projection and large content lives in the blob store.

Infrastructure failure pauses the same semantic move in the same workspace. A separate Codex repairer works on an isolated component copy; the supervisor admits it only as a new immutable generation and replays the exact failed activity. Task reasoning never gets polluted with transport repair, and a non-terminal or stale artifact cannot cross into evaluation.

Adapters own domain observations. A software adapter can run deterministic checks against the candidate; a media adapter can retain rendered deliverables; the universal kernel does not pretend a language-model opinion is equivalent to a direct measurement.

Read the canonical model for the authoritative design and the rebuild history for the failure analysis that led to it.

Commands

Command Purpose
flourite run Start one exact task
flourite status Show the compact current state
flourite inspect Inspect trajectories, moves, observations, and usage
flourite live Attach the live dashboard
flourite steer Amend direction at the next safe boundary
flourite pause Pause at the next safe boundary
flourite resume Continue from the ledger
flourite stop Stop safely while retaining the run
flourite component bind Replace implementation code at the next activity boundary
flourite component status Show the implementation the next activity will lease
flourite component rollback Atomically return to the previous implementation
flourite verify Replay the ledger and verify every referenced blob
flourite events Print the immutable event stream as JSONL
flourite export Create a redacted diagnostic or lossless audit bundle
flourite apply Apply a verified software result explicitly
flourite doctor Check provider, authentication, model, and tools
flourite demo Run the real kernel with a deterministic offline executor

frontier remains an install-time compatibility alias. The Python import stays frontier_harness for compatibility.

Configuration

The normal path uses GPT-5.6 Sol xhigh through OMP with shell, editing, LSP, browser, web research, and bounded nested tasks. Ambient rules, skills, and extensions are disabled so the provider boundary contains only context that Flourite records explicitly.

The important current sections are:

  • [kernel] — optional hard envelopes and the in-flight move safety ceiling;
  • [provider] and [provider.capabilities] — transport and tool plane;
  • [provider.strong] — model and reasoning effort;
  • [software] — domain checks, deliverables, and explicit apply behavior.

Unknown configuration fields fail immediately; Flourite does not carry a second set of inert compatibility knobs.

Compared with

Project Flourite is the better fit when Use the other project when
LangGraph You want a finished high-ceiling harness, not a graph-building toolkit. You are building a product and want to own every node and edge.
CrewAI The problem should decide whether multiple trajectories exist. Stable role-play is itself part of your workflow.
OpenHands / SWE-agent Research, design, formal work, and software should share one durable intelligence loop. Your work is exclusively repository-shaped.
Hosted deep research You need local tools, durable state, live steering, and an auditable artifact. You want a disposable answer in a chat window.

Development

python -m pip install -e '.[dev]'
pytest -q
ruff check src/frontier_harness tests
mypy src/frontier_harness

Project notes

Flourite is available under the Apache License 2.0.