Skip to main content

ffwf-tau-coding-agent

The interface of Tau, a programmable coding agent harness: the tau command, its Textual terminal UI, and the headless run paths behind tau -p and tau --mode rpc.

Tau began as a Python port of the TypeScript project pi-mono, which is still read as the reference implementation when porting or debugging; it now diverges from pi deliberately in several places.

Install

pip install ffwf-tau-coding-agent            # headless: the CLI, `tau -p`, `--mode rpc`
pip install 'ffwf-tau-coding-agent[tui]'     # add the interactive TUI
pip install ffwf-tau                         # the same thing, under the guessable name

Python 3.11 or newer. Pulls in ffwf-tau-agent-core, and through it ffwf-tau-llm. Note the ffwf- prefix: tau, tau-llm, and tau-ai on PyPI are unrelated projects.

ffwf-tau is a metapackage holding no code; it depends on ffwf-tau-coding-agent[tui] and nothing else. Use it when you want one short name, and this distribution when you want to choose extras.

Extra Adds Needed for
ffwf-tau-coding-agent[tui] textual, rich the interactive TUI. tau -p runs a full turn without it
ffwf-tau-coding-agent[jmfts] ffwf-tau-jmfts --store jmfts session storage

The interface is an extra, not a base dependency. A headless install is 15 packages and 13 MB; adding [tui] makes it 27 packages and 31 MB. Both extras report their own absence — asking for the TUI or for --store jmfts without the matching extra fails with the install command you need, not a traceback.

Two names for one command

The install puts both tau and ffwf-tau on your PATH. They are the same entry point, not a link: each is a wrapper pip owns and removes on uninstall.

Type tau. PyPI reserves distribution names but not command names, and at least one unrelated project ships its own tau; in an environment holding both, whichever installed last owns the name and neither pip nor uv says a word. ffwf-tau cannot be taken, which makes it the right name inside scripts, systemd units, and Dockerfiles. If tau --version does not report τ, ffwf-tau --version will.

Run

tau                                 # interactive TUI
tau -p "list the files here"        # headless: print a transcript, exit
tau -p --mode json "..."            # headless: JSONL lifecycle events instead of text
tau --mode rpc                      # drive τ as a subprocess over stdio (JSON-RPC 2.0)
tau -e permission_gate.py           # load an extension from a path
tau --help                          # the exact contract; treat this page as the stale one

tau -p and tau --mode rpc both write and resume real sessions under ~/.tau/sessions/, so a headless run appears in the TUI's sidebar and can be picked up interactively later. --no-session means nothing is persisted.

Flags worth knowing: -m/--model, -t/--tools and -nt/--no-tools, -e/--extension PATH, --thinking {off,minimal,low,medium,high,xhigh}, --max-turns N, -c/--continue, --session REF, --fork REF, --store {file,jmfts}.

There is no turn limit by default. An agent run ends when the model stops calling tools, a tool terminates it, an extension's budget guard aborts it, or you press Escape. --max-turns N adds a ceiling for one run, and "max_turns": N in ~/.tau/config.json sets a standing one.

Configure

On first run τ writes ~/.tau/config.json from a default shipped inside the package. It holds the models map that --model resolves names against, plus per-extension config and the session_store block. A model entry names the provider, the base URL, and the context window, so pointing τ at a local OpenAI-compatible server (vLLM, llama.cpp, Ollama) is a config edit rather than a code change.

The TUI

Built on Textual. Streamed text renders at 30 Hz; tool calls and their results appear as their own blocks.

Key Action
Ctrl+Enter send the message
Ctrl+B toggle the session sidebar
Ctrl+N new chat
Ctrl+G browse the conversation tree
Ctrl+Z roll back the last turn
Ctrl+R / Ctrl+T show or hide reasoning / tool blocks
Ctrl+E extensions
Ctrl+P command palette
Escape cancel the current generation

The sidebar and the tree browser are two different things. The sidebar picks which session to open — a flat list grouped by date. Ctrl+G opens a browser over the branch structure inside the current conversation, where you navigate to an earlier node, summarise a branch, or elide a span. Typed commands cover the rest: /compact, /tree, /fork, /extensions.

Why it is a separate package

Everything here is presentation and process management. The agent lives in ffwf-tau-agent-core, which has no Textual dependency and never imports this package. ffwf-tau-jmfts is a peer rather than a dependency: --store jmfts imports it lazily and fails at startup if it is absent, never falling back to files without saying so.

If you want the agent rather than the interface, use the runtime directly:

import asyncio
from tau_agent_core import create_agent_session


async def main():
    session = create_agent_session(model="gpt-4o", tools=["read", "bash"])
    print(await session.prompt("What is in this directory?"))


asyncio.run(main())

Docs

  • docs/tau-coding-agent.md — design notes for this package.
  • docs/CLI-PLAN.md — the flag set and its status.
  • docs/REMOTE-CONTROL.md, docs/RPC-PROTOCOL.md — --mode rpc.
  • docs/EXTENSIONS-WALKTHROUGH.md — writing an extension to load with -e.

Repository: https://github.com/jmccardle/tau

The rest of Tau

Distribution Imports as What it is
ffwf-tau-llm tau_llm the provider and streaming layer
ffwf-tau-agent-core tau_agent_core the agent loop, tools, sessions, extensions
ffwf-tau-jmfts tau_jmfts a JMFTS-backed session store

MIT © Fight Fire with Fire Robotics, LLC

Metadata

Release files for ffwf-tau-coding-agent 0.10.2

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

Source distribution (sdist)

Source distribution for ffwf-tau-coding-agent 0.10.2
File Size Uploaded
ffwf_tau_coding_agent-0.10.2.tar.gz 677.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ffwf-tau-coding-agent 0.10.2
File Interpreter ABI Platform
ffwf_tau_coding_agent-0.10.2-py3-none-any.whl Python 3 none any Details

Total release size: 981.4 kB

Release files / ffwf_tau_coding_agent-0.10.2.tar.gz

Download URL ffwf_tau_coding_agent-0.10.2.tar.gz
Size 677.5 kB
Tags Source
SHA-256 checksum
How to use checksums
85312c49eb44b36899ab851be3d62af9775da63d455d940e1fe27cd9a766234a
BLAKE2b-256 checksum
How to use checksums
1cd663039df29bcaf9b0943b98ae12b781a130ed5a2288bce0c57c6dd0485385
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / ffwf_tau_coding_agent-0.10.2-py3-none-any.whl

Download URL ffwf_tau_coding_agent-0.10.2-py3-none-any.whl
Size 303.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0ef4f369a98704cbcd540de67ab437c3a4ba36d21569a7930679a9bcf51dbcf7
BLAKE2b-256 checksum
How to use checksums
2176ae30263eccda81c94f9de48da977488b6a502f205eba59feca506c5edf30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release history Release notifications | RSS feed

0.11.0

2 release files

0.10.3

2 release files

This release

0.10.2 This release

2 release files

0.9.7

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

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