Tend your agents.
Stay in flow.

I built Tend so I could maximize the number of projects I work on simultaneously without burning out from context-switching between them, checking who needs me, and keeping them all stoked wherever they are. One board shows every agent across every project: who's working, who's done, who needs me.

$ td
TENDFri Mar 14, 14:32
?payments-apistuck
mobile-appdone(2m ago)
strategy-docworking(8m)
data-pipelineworking(23m)
?auth-servicewaiting(45m ago)
support-triageidle(3h ago)
1 needs attention · 1 done · 2 working · 1 idle  ↗ = relay
18/24h active · 5 done today · 12 this week · 2 open TODOs
~/projects$●2
Single binary·Any agent framework·Local or remote·AI insights·No daemon

Why Tend exists

Pull, not push.

For developers running 2+ AI agents across projects.

Running multiple AI agents simultaneously is the new normal. Some finish in minutes, others run for hours. The problem isn't the agents — it's knowing when each one needs you without that knowledge becoming a second job.

Dashboards are a permanent invitation to break focus. Notification badges are interrupts. They add vigilance, not concentration.

Tend uses a different model: you glance at the board when you're ready, not when a badge demands it. When it says , nothing needs you. The uncertainty that drives compulsive tab-switching is gone.

The insight

A single dot in your prompt.
Ambient certainty.

The shell prompt indicator updates after every command you run. It's already in your visual field. When it says , nothing needs you. The uncertainty that drives compulsive checking is gone.

zsh
~/projects/northstar
$git push origin feat/myfeature
nothing needs you

1. Finish a turn.

You hit enter. The agent is working. You have a natural gap.

2. Glance at the prompt.

It says ○. Nothing needs you. Stay focused where you are.

3. Or it says ?2 ◐3.

2 agents need you, 3 working. Type td. 3-second scan. Route yourself.

Get started

One command to install. One to set up.

install
$ curl -sSL https://raw.githubusercontent.com/metalaureate/tend-cli/main/install.sh | sh
Installing tend v0.1.132 (darwin/arm64)...
✓ Installed tend to /usr/local/bin/tend
✓ Symlinked td → tend
setup
$ cd ~/projects/my-app && td init
✓ Created .tend/ directory
✓ Installed agent hooks (Copilot + Claude Code)
✓ Added protocol to AGENTS.md
✓ Registered project

td init creates the event log, installs agent hooks for both Copilot and Claude Code, and writes the protocol to AGENTS.md. Run td from anywhere to see your board.

macOS and Linux only. Windows users: install WSL first, then run the install command from a WSL terminal.

$ td help
td — attention infrastructure for humans running AI agents
Usage:
tdShow the status board
td watchLive dashboard (auto-refreshes every minute)
td <project>Project detail + agent sessions
td init [project]Initialize .tend/ in a project
td clear [project]Clear events history for a project
td add [project] "msg"Queue a TODO for the agent's next session
td note "msg"Set a sticky note (replaces prediction until next emit)
td ack [project|--all]Clear done/stuck/waiting → idle
td dispatchPick a TODO and dispatch as a GitHub issue
td relay <subcmd>Relay management (setup|status|pull|token|share)
td versionShow version
td helpShow this help

AI insights

Know what each agent is really doing.
And what comes next.

Every time an agent reports state, Tend reads its recent event trail, project README, and TODO backlog — then generates two lines: what's happening and what's likely next. No dashboards to configure. No prompts to write. It just shows up on your board.

Without insights

payments-apibuilding auth scaffold
mobile-appPR #847 ready for review
?auth-servicechanges in src/auth

Raw event messages. You parse the meaning.

With insights

payments-api3rd auth pass → run tests, PR
mobile-apprefactor landed → merge if green
?auth-servicedirty worktree → commit or stash

Context + trajectory. You route yourself instantly.

Reads the trail

Last 25 events, project README, and pending TODOs. The model understands what your project is and what the agent has been doing.

Predicts next

Infers the likely action from work trajectory — not the TODO list. If the agent is debugging auth, it predicts “run tests” — not an unrelated backlog item.

Costs nothing

~$0.00005 per insight via OpenRouter. Only fires on state changes, not on views. Content-hashed: if nothing changed, no call is made. Enabled automatically on the hosted relay.

Backlog

Queue work without switching context.

You're deep in one project and think of something for another. Don't context-switch to write it down. Type it from where you are. The agent picks it up on its next session.

terminal — working in northstar
$ td add atlas-api "fix auth regression on /users endpoint"
✓ Added to atlas-api
next session in atlas-api
# Agent reads .tend/TODO on session start:
Pending TODOs for atlas-api:
1. fix auth regression on /users endpoint
2. add rate limiting to public API
Proposing item #1 to the developer...

Plain text. Committed to the repo. No app to open, no board to drag. Just lines in a file that agents read automatically.

The relay

Your board in the browser.
Readable by humans and machines.

One command gives you a live web board at relay.tend.cx. Check on your agents from your phone, another machine, or share the link with your team. Every board also exposes a structured /llms.txt endpoint — so other agents can read your board and take action on your behalf.

terminal
$ td relay setup
Registering with relay at https://relay.tend.cx...
✓ Token stored in ~/.tend/relay_token
Your board is live at:
https://relay.tend.cx/tnd_281w29...392t
Structured agent view:
https://relay.tend.cx/tnd_281w29...392t/llms.txt

Live web board

See all your agents from any browser. Auto-refreshes every 60 seconds. No login, no app — just your token in the URL.

AI insights

Each project gets a terse summary and next-action prediction, generated from the event trail, README, and TODO list. Powered by OpenRouter. Enabled automatically on the hosted relay. Self-hosted: add your API key as a Worker secret.

Agent-readable

Every board serves /llms.txt — structured Markdown that orchestrator agents can fetch to triage, route, or act on stuck projects.

No accounts. One token.

Run td relay setup once. Commit the token or set it as an env var. Local and remote agents on one board.

Relay API

HTTP API for agents and integrations.

Base URL: https://relay.tend.cx. All /v1/* routes require a Bearer tnd_... token (except register). Responses are JSON.

POST/v1/registerno auth

Create a new relay token. Returns { token: "tnd_..." }

POST/v1/events

Emit a state event. Body: { project, state, message?, session_id?, timestamp? }

States: working · done · stuck · waiting · idle

GET/v1/events/:project

Fetch event history. Query params: since, limit

GET/v1/projects

List all projects with events for this token.

POST/v1/todos

Create a TODO. Body: { message, project? }

GET/v1/todos

List TODOs. Query params: status, project

PATCH/v1/todos/:id

Update status. Body: { status, issue_url? }. Flow: pending → dispatched → done

DELETE/v1/todos/:id

Delete a TODO.

POST/v1/board-token

Create a read-only board token (tnb_...) for sharing.

GET/:tokenno auth

HTML board view. Works with tnd_ or tnb_ tokens in the URL.

GET/:token/llms.txtno auth

Structured Markdown for agents. Project states, messages, insights, and backlog.

GET/v1/insights

LLM-generated summaries and next-action predictions for all projects.

GET/v1/insights/:project

Insight for a single project. Returns summary, prediction, and cache timestamp.

PUT/v1/notes/:project

Set a sticky note. Body: { note }. Overrides AI prediction on the board. Cleared on next emit.

GET/v1/notes

List all sticky notes for this token.

DELETE/v1/notes/:project

Clear a sticky note.

quick start
# 1. Register
$ curl -X POST https://relay.tend.cx/v1/register
→ { "token": "tnd_abc123..." }
# 2. Emit state
$ curl -X POST https://relay.tend.cx/v1/events \
-H "Authorization: Bearer tnd_abc123..." \
-d '{"project":"my-app","state":"working","message":"building auth"}'
# 3. View your board
$ open https://relay.tend.cx/tnd_abc123...

Performance

26ms per Enter.
Same as git.

The shell prompt indicator reads from a local cache file and returns immediately. Background refresh happens in a detached process — you never wait for it.

$ hyperfine — 200 runs, Apple Silicon
tend status
26ms
git branch --show-current
25ms
Statistically equivalent. No perceptible difference.

Cache-first

Prompt reads a local file. Computation happens in a detached background process for the next prompt.

200ms timeout

If the binary ever hangs, the shell kills it. After 3 failures, the hook auto-disables for the session.

No network

td status never contacts the relay. Network calls only on explicit board or relay commands.

No daemon

No background process, no watcher, no polling. The binary runs, prints, and exits.