Agents with an identity
Each agent carries its own soul prompt, provider instance, model and thinking level -- from off all the way to max.
Open source · self-hosted · written in Go
One binary. No database, no container, no API key. TionHarness gives a team of autonomous agents a workspace, a board, a scheduler and a permission model — then gets out of the way.
unreleased · Windows, Linux, macOS · 12 MB
<task-notification> SES104 returned · 2 workers still running
Installation
Storage is the filesystem: entities are JSON, sessions are append-only JSONL. Backing up means copying a folder.
services:
api:
image: platform/api:latest
depends_on: [db, redis, vector]
worker:
image: platform/worker:latest
db:
image: postgres:16
volumes: [pgdata:/var/lib/postgresql/data]
redis:
image: redis:7
vector:
image: qdrant/qdrant
volumes:
pgdata:
# ... then migrations, then .env, then keys .\tionharness.exe Capabilities
Not a chat wrapper. A runtime with scheduling, orchestration, permissions and its own management API.
Each agent carries its own soul prompt, provider instance, model and thinking level -- from off all the way to max.
An agent can spawn a tree of workers, stream their results back as notifications, and synthesise the answer itself.
Every agent has one main flow its turns run through. Insert a critic loop or a planning stage on the canvas, let the agent edit it with tools, or let the observer propose changes from real runs.
A kanban card moving into a column is a trigger: rules spawn agents or archive cards without an LLM in the loop.
Every workspace gets its own store, runtime, scheduler and theme. Nothing leaks across the boundary.
Built-in file and shell tools plus external MCP servers over stdio or streamable HTTP, with lazy loading so the catalogue stays cheap.
Tools are risk-classified and gated by auto, ask or read-only modes, with argument patterns like Bash(git *) and a full audit trail.
Agents create their own schedules, automations, skills and secrets and evolve their own flow and prompts through tools -- the app is its own API surface.
Editable lenses scan past sessions for wasted spend and broken habits, then file findings as app fixes or workspace tweaks.
Multi-agent
Turn on coordinator mode and an agent stops doing the work itself. It spawns workers, hands each a scoped profile, and stitches the results together.
Coordinator session with several workers running in parallel
/shots/coordinator.png — run scripts\shots.ps1
Orchestration
Each agent owns one versioned flow: input, a few model / route / transform stages, output. A route can loop back for a second draft, every loop is bounded in code, and every change is a version you can revert.
Flow builder canvas with a branching multi-agent graph
/shots/flows.png — run scripts\shots.ps1
Automation
Tags, board moves, cumulative token spend and message counters are all triggers. Each one spawns a session whose agent runs its own evolving flow.
Kanban board with automation rules
/shots/board.png — run scripts\shots.ps1
Appearance
Themes are pure CSS custom properties, so a workspace can carry its own look and switching one repaints the whole app instantly.
Quickstart
Prebuilt binaries are not published yet, so the path below builds one from source. It takes about a minute.
# Prerequisites: Go 1.26.4+, Node 20.19+ (20.x) or 22.12+, and a configured provider.
git clone <REPO_URL> tionharness
cd tionharness
# Builds the UI into internal/web/dist, then embeds it into one exe.
.\scripts\build.ps1
$env:TIONHARNESS_ADDR="127.0.0.1:8095"
.\tionharness.exe # open http://127.0.0.1:8095 # Prerequisites: Go 1.26.4+, Node 20.19+ (20.x) or 22.12+, and a configured provider.
git clone <REPO_URL> tionharness
cd tionharness
cd frontend && npm ci && npm run build && cd ..
CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o tionharness ./cmd/tionharness
TIONHARNESS_ADDR=127.0.0.1:8095 ./tionharness # Prerequisites: Go 1.26.4+, Node 20.19+ (20.x) or 22.12+, and a configured provider.
git clone <REPO_URL> tionharness
cd tionharness
cd frontend && npm ci && npm run build && cd ..
go build -trimpath -ldflags "-s -w" -o tionharness ./cmd/tionharness
TIONHARNESS_ADDR=127.0.0.1:8095 ./tionharness Working on TionHarness itself? One script starts the backend and Vite together:
# One command for backend + frontend with hot reload
.\scripts\dev.ps1 # LAN-visible, opens the browser
.\scripts\dev.ps1 -Loopback # 127.0.0.1 only, no firewall prompt Download
One file, no installer, no runtime. Unzip it and run it.
Builds are not published yet. Until then, build from source — it is one go build.
Read this first
It is easier to trust a tool that tells you where its edges are.
TionHarness is built to run beside you, on hardware you control. That is why it trusts its caller completely -- and why the caller has to be you.
There is no account, no tenant, no billing. You run the binary; your data never leaves the machine it runs on.
The HTTP API has no auth and CORS is wide open. Bind it to loopback or a Tailscale address. Never expose it to the public internet.
File and shell tools reach the whole filesystem by design. The permission mode -- auto, ask, read-only -- is the only guardrail, so pick it deliberately.
It orchestrates models you already have access to. Bring your own claude-cli login or an API key for one of the supported providers.