(dpc's) Tau coding agent
Tau is a minimal Unix-first coding agent for people who want local control, simple process boundaries, and tooling that fits naturally into a command-line environment.
Tau runs its main components as standalone POSIX processes and connects them over stdio and Unix sockets.
New here? Follow Your first Tau task from installation and authentication through a small reviewed repository change, then stop and resume the saved session. Read its trust/data summary before the first model request.
Components include:
- UI
- Harness
- LLM provider integration
- Extensions
This architecture has important benefits:
- Starting a component is just running a process — supervise, sandbox, restart, or swap it for anything else that speaks the protocol.
- Components can be system-provided, which pairs well with technologies like NixOS.
- Components can be sandboxed individually using tools like bubblewrap, Docker, jails, or Landlock, according to their actual needs.
- Components can be implemented in any programming language.
- It avoids bringing in web technology where it does not belong.
Features
See FEATURES.md for a tour of the major features.
Sister-projects
Patchmark is a diff-aware language server for Markdown and plain-text review notes. It pairs nicely with Tau's prompt-editing flow: open your prompt in $EDITOR, review diffs with language-server help, and leave precise feedback for agents without leaving your normal editing environment.
Status: heavy development, daily use
Tau is still under heavy development, but it has been a productive daily driver for its developers for weeks. It already has features and design choices that are stronger than those in popular coding agents, while the Unix-centric UX keeps improving quickly.
Recent overview video: The State of Tau #1.
Terminal demo:
Installing
The canonical first-task guide explains prerequisites, provider authentication, a bounded first change, review, troubleshooting, and resume.
Native Linux packages
Tau v0.2.0 provides DEB, RPM,
and tar.gz downloads for amd64 and arm64. Choose individual components or
tau-full: its tarball bundles all nine binaries, while its DEB/RPM is an
exact-dependency metapackage. Verify downloads with the release's
SHA256SUMS.
See the installation guide for exact
downloads and commands. Packages require glibc 2.34 or later; default restricted
extension startup requires Linux 5.12 or later. Package checks do not establish
broad distro, CPU/kernel, or service-lifecycle qualification.
via Nix
Run the tagged release with nix run github:dpc/tau/v0.2.0. You can also import
that reference as a flake input. Installing or updating a flake input does not
by itself activate a NixOS configuration or restart Tau.
via cargo
With Rust 1.97 or newer and the native build tools required by dependencies:
The registry installation includes Tau's built-in extensions, not the separately maintained external integration binaries. See the release notes before upgrading existing state.
Extensions
Tau runs most capabilities as process extensions. Some standard extensions ship in this repository; other Tau projects are maintained separately. “External” below means a separate Tau project, not a third-party project.
Standard extensions
These extensions ship in the Tau workspace:
| Extension | What it provides |
|---|---|
| Provider backends | Built-in model providers and provider profile management |
| Shell and filesystem | Shell commands, file operations, locking, and image inspection |
| Utilities | Timers, reminders, and papercut reporting |
| Web search | Generic web search and URL fetching |
| Notifications | Terminal-facing activity notifications and detached notification commands |
| Rhai | Opt-in trusted local scripting |
External Tau projects
Tau maintains these extensions in separate repositories. Published projects are pinned and re-exported by the Tau flake.
| Integration | What it provides | Flake package | Source |
|---|---|---|---|
| PIM | Email and calendar tools with approval-gated writes | tau-ext-pim |
Radicle |
| Swarm | Live session projection and task coordination with a Tau Swarm peer | tau-ext-swarm |
Radicle |
| Zulip | Bot message bridge with long polling and scoped send/reaction tools | tau-ext-zulip |
Radicle |
| Rostra | Relay-only social client with local state, signed writes, and opt-in notifications | tau-ext-rostra |
Radicle |
| Slack | Socket Mode text bridge with scoped send/reaction tools and multiple-instance prefixes | tau-ext-slack |
Radicle |
| Telegram | Bot API text bridge, plus an optional separately supervised gateway | tau-ext-telegram, tau-telegram-gateway |
Radicle |
| XMPP | Disabled-by-default XMPP messaging integration | tau-ext-xmpp |
Radicle |
For example:
Installing a package only puts its executable on PATH. Each integration
remains disabled until you enable its std-* instance in harness.yaml,
provide the service account or identity and Tau-managed secrets, and configure
the allowed senders, routes, and role tool policy. Installation does not create
an account, add credentials, enable an extension, or authorize any route or
tool. See Configuring extensions and each standalone
project's README for the full setup.
Third-party extensions
- tau-ext-searxng-search,
maintained by akohlsmith, provides a standalone
searxng_searchtool that queries a configured SearXNG instance over HTTP, with configurable engines and categories plus optional local-category prioritization. See the project's documentation for installation and configuration.
Third-party extensions are independently maintained. Listing one here is not a compatibility, security, or maintenance endorsement; review its source and documentation before granting it access to Tau.
Configuration
Use tau init to generate config files.
Use tau provider add to create or replace built-in provider profiles, including ChatGPT/Codex, OpenAI-compatible Chat Completions, and OpenRouter profiles; edit harness.yaml for harness-owned roles, defaults, and extension settings.
Before using private repositories, review Trust and data. For normal stop/resume behavior and conservative upgrades, see Session lifecycle and upgrades.
wait({"timeout_minutes": N}) silently clamps its activating-input deadline to
the global harness.yaml bounds. The defaults trade small waits for fewer model
rounds while preserving immediate input delivery:
wait_timeout_minimum_minutes: 1
wait_timeout_maximum_minutes: 1440
Both bounds are positive, inclusive whole minutes, and the maximum cannot
exceed 65,535 minutes because wait registrations persist their effective value
as u16. The minimum cannot exceed the maximum. Argument-free and exact
background-result waits do not use these bounds.
By default, tau starts the harness daemon and the CLI UI.
To explore other entry points, run tau -h.
Contributing & Contact
Preferred: Tau Zulip chat
- Discord server
#support:dpc.pwMatrix channel- Rostra p2p social network profile
- GitHub Discussions — questions, ideas, general conversation
- Security policy — private vulnerability reporting; see ARCH-tau for system architecture
- I don't want your PRs anymore — I do not accept pull requests
License
Other agents named Tau
Because the author is not very original and forgot to do prior research, and Tau is just such a good name, there are other coding harnesses called "Tau", like:
- https://github.com/tau-agent/tau - CLI, in Rust, probably quite similar
- https://taulepton.com/
- https://github.com/AbdoKnbGit/tau
- https://alexledger.substack.com/p/tau-the-self-modifying-browser-based
Get used to it, I guess. Now that we can all be so productive, we'll have forks and personal re-implementations of everything, with conflicting names.
When you want to be specific, you can call this one "dpc's Tau coding agent".
AI usage disclosure
I use LLMs when working on my projects.
Because of its nature, this project is more AI-assisted than most of my other work.
