Three Tools, Not One

April 2026

Tackworks ships three products: Tack (task board), Chock (approval queue), and Spur (event relay). Each is a single Python file with a SQLite backend. They work together or alone. This is a deliberate choice.

The monolith temptation

The natural instinct is to build one tool that does everything. A task board with built-in approvals and built-in notifications. One database, one deployment, one API. Simpler to explain, simpler to sell.

But that instinct is wrong for this domain.

AI agents are composable. Their tools should be too.

Most agent systems already have some notion of task tracking. Some already have approval workflows. Many have their own notification pipelines. When you build a monolith, you force people to adopt your whole worldview or nothing.

With three separate tools, you can drop in just what you need. Already have a task board? Just use Chock for approvals. Already handling notifications? Just use Tack for the board. Need to route events from three different services to Telegram? Just run Spur.

Single-file services are the right unit

Each Tackworks service is one server.py file. Not a framework. Not a library. Not a package with 47 dependencies. One file you can read top to bottom in 20 minutes, understand completely, and modify without fear.

This matters for AI agents especially. When an agent needs to understand a tool, you feed it the API spec. When a human needs to debug the tool, they read one file. When someone needs to fork and customize, they copy one file.

The glue is HTTP

Tack and Chock send webhook events. Spur receives them, matches routes, and forwards to destinations. The glue between the three services is plain HTTP — no message broker, no shared database, no service mesh.

Tack --webhook--> Spur --route--> Telegram
Chock --webhook--> Spur --route--> Slack
Any source ------> Spur --route--> Any destination

If Spur goes down, Tack and Chock keep working. They just don't send notifications. If Tack goes down, Chock and Spur keep working. Each failure is isolated. Each service can be replaced.

The Docker Compose bridge

For people who want the full stack, there's a single docker-compose.stack.yml that runs all three wired together. One command, three services, zero configuration beyond setting your notification credentials. You get the benefits of composition without the hassle of manual wiring.

The principle

Build tools that do one thing well. Connect them with the simplest possible interface. Let people compose what they need.

This is Unix philosophy applied to AI infrastructure. It's not a new idea. It's an old idea that the AI tooling ecosystem has mostly forgotten in its rush to build platforms.

Tackworks builds tools, not platforms.