Tandemu v0.3.0: Know What AI Is Costing You, and Update Without SSH
Per-developer cost breakdown, monthly budgets, cost trend tracking, and one-click automatic updates for self-hosted deployments.
Two things happened in the same week that made this release feel urgent. First, a user asked us what their AI spend looked like per developer. We had the data — Claude Code sends cost metrics via OTEL — but the dashboard just showed a total. No breakdown by person, no trend, no way to set a budget. Second, the same user asked how to update their self-hosted instance. The answer was “SSH in and run docker compose pull.” Not great.
v0.3.0 fixes both.
Engineering cost tracking that doesn’t lie
The Insights page already showed a total AI cost, but “your team spent $342 on Claude this month” isn’t actionable. You need to know who’s spending what, whether costs are trending up or down, and whether you’re on track to blow your budget.
Per-developer cost breakdown
A new table on the Insights page shows each developer’s AI cost alongside their task count, AI lines written, and cost per line. The data comes from Claude Code’s native OTEL metrics (claude_code.cost.usage), grouped by user. If one developer is spending 10x more than the rest, you’ll see it immediately — and the cost-per-line column tells you whether that’s a problem or just someone doing more ambitious work.
Cost trend
The Total AI Cost stat now shows a percentage change vs. the previous period. If you’re looking at the last 30 days, you’ll see how that compares to the 30 days before. Green arrow down means you’re spending less. Red arrow up means you’re not. Simple.
Monthly budget
Organization settings now include an optional monthly AI cost budget. Set it to $500, and the Insights page shows a progress bar: green under 70%, amber at 70-90%, red above 90%. It’s informational — no automated alerts or hard caps — because the goal is awareness, not control.
Per-task cost attribution
This one runs in the background. When a developer finishes a task with /finish, the backend now queries cost and token metrics for that task’s time window and stores them as span attributes. Over time, this builds a dataset that links engineering cost directly to delivered work. We’re not surfacing this in the UI yet, but the data is there for teams that want to build custom reports.
One-click updates for self-hosted deployments
Self-hosting should be as easy as running docker compose up -d. Updating should be just as easy. It wasn’t.
How it works
Every Tandemu deployment now includes Watchtower, which monitors GHCR for new container images. When we publish a release, Watchtower detects the updated images and restarts the affected services automatically. Infrastructure services — Postgres, ClickHouse, Redis — are never touched.
By default, Watchtower polls every 24 hours. But you don’t have to wait.
The update banner
When a new release is available, organization Owners and Admins see a banner in the dashboard showing the current and latest version, with a link to the release notes. Click Update Now, and the backend triggers Watchtower’s HTTP API to pull images immediately. The frontend polls for a version change and reloads when it detects the update is complete.
No SSH. No CLI commands. No downtime.
What if something goes wrong?
If Watchtower isn’t running or the trigger fails, the banner shows fallback instructions: docker compose pull && docker compose up -d. We don’t hide the manual path — the one-click flow is a convenience, not a lock-in.
Disabling automatic updates
If you prefer to control exactly when updates happen, remove the watchtower service from docker-compose.yml. The dashboard banner still works for one-click manual updates, or you can pull images yourself on your schedule.
What’s next
The cost data we’re collecting per task opens up interesting questions. Can you correlate AI spend with task complexity? Is there a cost ceiling where AI stops being worth it for certain types of work? We’re collecting the data now. The analysis comes next.
If you’re self-hosting, pull the latest:
docker compose pull
docker compose up -dOr just wait — Watchtower will handle it.
Links: GitHub | Self-hosting docs | Changelog