Skip to main content

furb

An AI agent that answers in Python, on a record that you can read, replay and audit.

gates

The furb TUI: a message, the Python that the model writes, a Python word of the operator, the three views, the command palette, the rewind tree, and a change of theme

furb runs a model as a programmer, not as a caller of tools. You give the model a task. It answers with a short Python program, which furb calls a word. furb checks the word, runs it, and shows the model what happened. The model writes its next word, and so on, until it gives you its answer.

Each step goes into a record: each word, each answer of a model, and each result of a command. Stop furb at any time, open the record again, and the work goes on from where it stopped.

Why it matters

  • One answer does a lot of work. Most agents call one tool for each turn of the model. In furb, one word reads files, runs commands, asks other models, waits for them, and joins the results with loops and conditions.
  • Nothing is hidden from you. The whole system prompt is one Python file, src/furb/engine.py, smaller than 6520 tokens. The transcript is the exact text that the model reads.
  • A word is checked before it runs. A type checker reads each word first. A word that it refuses never runs, and the model reads why.
  • The record is the truth. A life that a crash stopped goes on from its record. A later run replays it exactly, and an audit checks it with no model and no network.
  • Work runs side by side. A word can start many commands and questions, then wait for all of them. Chains, which are separate conversations, work in parallel, each with its own state.
  • You stay in control. The model can ask you a question and wait for your answer. You can pause any work, set a dollar ceiling, rewind a chain to an earlier point, or change the plan of a model while it works.
  • Extensions are Python too. An extension is a word that each chain runs, so the model reads it as it reads its own work. Five come with furb: the memory of a project, its skills, compaction, the web, and a guide to extend furb.

Install

Where Command What you get
PyPI pip install furb The Python package and furb, the command line. It needs Python 3.14 or later.
npm npm install furb The engine for Node.js 22 or later and Bun 1.4.2 or later, with no Python.
Rust cargo add furb --git https://github.com/uael/furb The engine for a program of Rust, with no Python. Copy the Cargo.lock of furb into a new crate before its first build, since a newer version of a dependency breaks the build today.

furb asks the models of the claude command line when it finds it, then the models of each provider whose key stands in the environment, such as ANTHROPIC_API_KEY, then the models of a local server. The page of models says how to choose one.

A first life

The TUI runs from a clone of this repository, with no Python. It needs Git, Bun 1.4.2 or later and the Rust toolchain, and the TUI says how to install them on macOS, Linux and Windows. The first build takes some minutes:

git clone https://github.com/uael/furb && cd furb
bun install && bun run build         # The TypeScript package that the TUI runs on.
bun run demo                         # Watch a life that plays by itself. It asks no model and costs nothing.
bun run tui                          # Start a real life on your models.

In a program, a life is a few lines. This one asks for a plan, and keeps its record in release.jsonl:

import asyncio

import furb


async def main() -> None:
  life = await furb.open("release.jsonl")
  print(await life.prompt(str, "Plan the release of version 2."))


asyncio.run(main())

Stop it while the model works, and run it again: it finds its prompt in the record and goes on, and no answer of the model is asked for twice. The examples show the same program in TypeScript and in Rust, and four more.

The words of furb

  • A life is one run of furb, and its record is the file that holds it.
  • A chain is a conversation with its own state. A life starts with one chain, and a word can start more.
  • A prompt asks a model, or you, for an answer of a type, such as str or int.
  • A word is the Python that a model writes for one step, and a rung runs it.
  • An act is each thing that a word does: a read, a command, a prompt, a wait.
  • The operator is you.

Documentation

To Read
Use the TUI The TUI, and a picture of each screen
Run a life in a window The desktop app
Choose a model, or use a local one Models
Use furb from a program The examples, Python, TypeScript
Use the command line The command line, and its JSON-RPC
Extend furb Extensions
Check a record that someone gave you The audit
Change furb Contributing, and the contract, every law of the engine

License

Copyright (C) 2026 Abel Lucas. furb is free software under the GNU Affero General Public License, version 3, which LICENSE holds. You may use, study, change, and share it. Anyone who ships it, or who runs a changed furb as a service, must offer the source under the same terms. The engine carries no notice of its own, because its text is the system prompt of a model and every word of it counts.

Metadata

Release files for furb 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for furb 0.3.1
File Size Uploaded Provenance Actions
furb-0.3.1.tar.gz 86.2 kB Without provenance Details for furb-0.3.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for furb 0.3.1
File Interpreter ABI Platform Actions
furb-0.3.1-py3-none-any.whl Python 3 none any Details for furb-0.3.1-py3-none-any.whl

Total release size: 170.9 kB

Release files / furb-0.3.1.tar.gz

Download URL furb-0.3.1.tar.gz
Size 86.2 kB
Tags Source
SHA-256 checksum
How to use checksums
766e80fb21c2085033b77c894317bc91ad4128e1c4c5a6d8abf6f795d124b51f
BLAKE2b-256 checksum
How to use checksums
ebb13b9396f23c9455ed5f17abde665c7283bf608834e298a5260a8b127f3e21
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / furb-0.3.1-py3-none-any.whl

Download URL furb-0.3.1-py3-none-any.whl
Size 84.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c111d5456d382d049a740d41ed7931d2c3f85414b9c4a82d669ffdd16b0f038c
BLAKE2b-256 checksum
How to use checksums
29dec859100303a71d0ab9a8f2d1c9275711a521ca8a968291388be5d258a7f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for furb 0.3.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page