Fruth

Where local AI becomes durable work.

Fruth is a durable semantic state inference engine for local AI. A model can say “done”; Fruth records what the runtime can prove happened: which outputs exist, which work remains open, and why. Runtime results become inspectable artifacts and continuable runtime state.

Local by default. Use compatible models through Ollama, MLX, or llama.cpp. Backend packages and model weights are installed separately.

Inside a durable response

A response is more than an answer.

A Fruth response connects intent to a graph of required work, dependencies, and evidence. Its working state stays fluid as results arrive and reviews guide the next step. The visible reply is one view of that evolving state.

Promotion turns possibility into obligation.

Intent opens a possibility space. Validated promotion makes relevant work an explicit obligation, with its own requirements and evidence for completion. Other possibilities can remain available without becoming owed work.

Owed work stays visible.

Dependencies can leave required work pending. Late fill keeps that work explicit and binds later results and evidence back to the same response. Missing outputs and blocked branches remain visible.

Completion follows evidence.

Review checks branch results against their requirements and the current intent. Each frozen frame records what is fulfilled, blocked, or still open. Continuation adds a new frame while preserving the earlier state and evidence.

One response, opened up

One request becomes connected work.

“Echoes of the Pass” asked Fruth for a local exhibition website with two mountain images and a spoken narration. The recorded run connects five saved artifacts in one response.

Completion still has to be earned. Here, the evidence includes five materialized outputs, audio integrity checks, fulfilled branch contracts, and a bundle whose local links resolve.

Request summary

Create a local exhibition website with HTML, CSS, exactly two mountain images, and one English WAV narration.

  1. 1
    Define the owed work.

    Five saved outputs: HTML, CSS, two mountain images, and an English WAV narration. Their dependencies keep the exhibition and its media connected.

  2. 2
    Fill the pending outputs.

    Late fill carries the image, audio, and file branches until their saved results and evidence are available. The page then links to those actual media files.

  3. 3
    Review and freeze.

    The final frame records fulfilled closure with no pending or failed branches. The portable bundle contains all five artifacts, with its local links checked.

Recorded result · fulfilled The reply summarizes the moment. The response preserves the work.

Echoes of the Pass · 18 September 2026. Inspect the exact prompt, final response, monitor snapshot, and artifact checksums.

Inspect the run’s evidence on GitHub

The runtime underneath

Fruth gives every
response a body.

Fruth connects compatible local backends, supported media capabilities, durable artifacts, and canonical Responses endpoints so work can be executed, inspected, and continued.

Run compatible local models.

Run Ollama, MLX, and llama.cpp side by side from one control plane – including multiple instances of the same model. Pull compatible models, add Hugging Face repositories or local GGUF files, remove local copies, and start or stop each instance independently.

Turn branches into outputs.

Route text and image generation, voice input and transcription, text-to-speech, vision, and OCR work to compatible local capabilities, then keep saved results as previewable artifacts.

Carry the work forward.

Inspect outputs and response state, open compatible link-checked bundles, revisit saved work, or connect through canonical Responses endpoints.

Third-party providers. Fruth can optionally use an explicitly enabled third-party provider (currently ChatGPT), directly or through Fruth's routing. For those turns, the current prompt, only the context Fruth promotes as relevant, and any explicitly selected files or Fruth artifacts leave your device and are processed by that provider – by OpenAI for the current ChatGPT integration. Fruth also offers an optional companion skill that helps ChatGPT inspect runtime truth, work with canonical outputs, and execute requests through Fruth. Local operation does not depend on either.

Local setup

Start Fruth with a local model.

Fruth itself can start before a backend or model is available. Local inference needs one supported runtime and at least one compatible model; neither the runtime nor its model weights are bundled.

Fruth is experimental, tested on macOS on Apple Silicon with Python 3.11 or newer. Output quality and factual accuracy still depend on the models and providers you choose.

Backend

Choose a local runtime.

Install Ollama, MLX, or llama.cpp using that project's own setup.

Model

Add a compatible model.

Add or select at least one model the chosen runtime can actually run. After Fruth starts, its Models view can manage compatible models and instances.

Fruth

Start Fruth.

From the repository checkout, create the Python environment, install the requirements, and launch Fruth.

Terminal
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
./fruth start
View Fruth on GitHub