local-first / 127.0.0.1:14318 / v0.1.3 · alpha

A clear view of every agent.

Agenturm is a terminal-first monitor for the agents already running on your machine. Watch Codex, Claude Code, OpenCode, and any OpenTelemetry agent in one keyboard-driven cockpit — sessions, prompts, MCP calls, traces, tokens, and errors. Everything lands in local SQLite.

curl -fsSL https://www.agenturm.dev/install.sh | bash
✓ Python 3.11+ ✓ macOS · Linux · Windows ✓ zero config for Codex + Claude Code ✓ MIT
01 // surfaces

Seven panes. One run.

Switch with 1–7. Every row links back to the same session, trace, and tool call, so an error in one pane is one keystroke from its evidence in another.

1 agents

Agents

Every session, project, model, status, and the last thing it did. See who is working, who is waiting, and which session actually needs you.

status · model · tokens · current task · enter to inspect
2 activity

Activity

Prompts, assistant messages, shell commands, file changes, browser actions, and errors — in the order it happened.

filter by prompt · / search · e expand
3 mcp

MCP calls

Which server, which tool, what went in, what came back. Failures and durations stay attached to the execution that produced them.

servers · arguments · results · t linked trace
4 traces

Traces

Parent/child operations, model usage, durations, and errors. Follow a failing tool call outward until the run makes sense.

execution trees · error spans · model usage
5 host

Host

Known local agent processes, state, RAM, and cumulative CPU on Linux. Process inventory is reported separately from session counts.

pids · state · memory · load average
6 metrics

Metrics

OTLP metrics and resource usage as recorded. Token totals reflect emitted telemetry; costs stay unknown when the producer never reports them.

span metrics · token usage · no billing math
7 findings

Findings

A searchable review queue with occurrence counts, evidence links, and direct navigation to the source trace. Approvals stay hidden by default.

occurrences · evidence · jump to trace
02 // actual ui

Not a mockup. The cockpit.

Real terminal renders from the repository. The records are synthetic; the interface, layout, and keyboard model are exactly what ships.

synthetic records
Agenturm Agents view showing three sessions, summary cards, session overview, and recent work.
● actual Agenturm render · Alpine Ember · 1920 × 1234 full resolution ↗ animated walkthrough ↗

Documentation screenshots use synthetic example records. Your terminal shows what your local logs or telemetry actually contain — including the gaps.

03 // pipeline

Read the evidence. Don't guess.

Agenturm observes what your agents already record, plus whatever telemetry you choose to emit. It does not attach to arbitrary processes or invent missing actions.

discover

Find the local trail

On a loopback receiver, recent Codex and Claude Code session files are discovered and tailed as they change. OpenCode's local database is opened read-only.

# zero config ~/.codex/sessions ~/.claude/projects opencode.db · read-only
record

Receive and redact

A local receiver accepts OTLP/HTTP traces, logs, and metrics. Content is bounded, recognizable credentials are redacted best-effort, and metadata-only mode can drop text entirely.

# protobuf or JSON POST /v1/traces POST /v1/logs /v1/metrics → observatory.db
inspect

Follow the thread

The Textual cockpit refreshes live data every two seconds. Sessions, MCP calls, traces, host, metrics, and findings stay linked by the same recorded evidence.

$ agenturm → cockpit ready → 1–7 switch views → t follow the trace
! The receiver binds to 127.0.0.1 by default. It is not an internet-facing collector: remote access needs authentication, TLS, and a trusted reverse proxy.
04 // install

One command. Then watch.

Python 3.11+ and uv. No account, no API key, and no browser tab required for local monitoring. Start it wherever you already work.

$curl -fsSL https://www.agenturm.dev/install.sh | bash

recommendeddownloads the installer and installs the latest CLI with uv

first run · exampletty
$ agenturm
agenturm 0.1.3 · receiver 127.0.0.1:14318
✓ discovered ~/.codex/sessions (12 files)
✓ discovered ~/.claude/projects (8 files)
✓ opencode.db · read-only · 4 sessions
● 3 sessions · 2 working · 1 waiting
cockpit ready → press 1–7

You need

  • Python 3.11+ and uv
  • macOS, Linux, or Windows
  • An agent that leaves local records or emits OTLP
  • No browser, account, or API key for local monitoring

After it starts

  • 1–7 switch views
  • / search the active view
  • t follow the linked trace
  • ⌃P open the command palette

Heads up

There is no PyPI release yet. Install from the repository with uvx or uv tool. The Python import, settings, and database names stay compatible with the old Agent Observatory name.

05 // keybindings

The keyboard is the interface.

No mouse miles. No dashboard builder. The full key map ships in the footer of the terminal, and the command palette exposes the rest.

1–7 Switch viewsagents → findings
/ Searchcurrent view only
↑ ↓ Select a rowwithout the mouse
↵ Inspectopen the evidence
e Expand detailscompact terminals
t Follow tracelinked execution
c Copy detailsstraight to the buffer
d Diagnosticscollection + retention
x Export previewprivacy check first
⌃P Command palettetheme, scope, actions
esc Back / returnnever traps you
q Quitthe terminal stays yours
→ When a session needs a reply or approval, Agenturm points you to that agent's own terminal. It never submits the answer or approves the action for the agent.
06 // themes

Four palettes. Pick your light.

Alpine Ember is the default. Bright, Dark, and Solarized apply across panels, tables, controls, and evidence text. This page listens too — click a card.

Site preview uses the same palette names and spirit as the terminal. The terminal's default theme is Alpine Ember; press ⌃P → Theme to switch there. Your choice here is stored in localStorage, nowhere else.

07 // privacy

Local by default. Not a vibe.

The interesting data is your prompts, commands, diffs, and MCP arguments. Treat it like source code — because it usually contains some.

// boundary

Your agent logs never leave the box.

Session records and telemetry stay in SQLite on the host running the receiver. No account. No cloud sync. No telemetry about the telemetry.

127.0.0.1 → sqlite

Loopback receiver

The receiver binds to 127.0.0.1:14318 by default. Remote access needs authentication, TLS, and a trusted reverse proxy; it is not multiuser software.

Best-effort redaction

Recognizable credentials and selected sensitive structured fields are redacted before storage. Private reasoning, encrypted reasoning, binary payloads, and process environments are excluded — but upstream schemas can leave gaps.

Metadata-only mode

agenturm serve --metadata-only omits native session text, commands, and outputs for new ingestion. It does not erase content already stored.

AI summaries are opt-in

Recorded-progress summaries work immediately and offline. Optional provider-backed summaries reuse OPENAI_API_KEY and run only when you request them.

Exports are sensitive

Pressing x opens a privacy preview; no file is written until you confirm. Exports are not an additional redaction pass and contain loaded evidence.

→ Read the full capture and privacy boundaries ↗. If you need a guarantee, read the code and the boundaries — not a marketing badge.

08 // sources

Bring any agent. Keep the evidence.

Native discovery where the logs exist, OTLP where they don't. The UI shows what the producer actually recorded — no inference, no fabricated tool calls.

source collection path what becomes visible
Codex CLI local session files sessions, prompts, shell commands, file changes, MCP calls
Claude Code local session files prompts, tool calls, file changes, session status
OpenCode local SQLite · read-only session metadata, model/token spans, tool parts, checklist progress
Gemini CLI built-in OTLP export traces, logs, metrics, token usage, MCP calls
GitHub Copilot CLI built-in OTLP export agent, model, and tool spans; session and token usage
Cursor Enterprise team OTLP export conversation and request activity, tokens, MCP events
Any OTel agent OTLP/HTTP whatever the producer emits — normalized when GenAI attributes exist
Python / JS client manual spans explicit traces, progress events, session grouping
local discovery OTLP/HTTP client SDK Coverage follows each producer's schema and truncation.
export OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:14318
export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf

For SDK capture, framework adapters, and framework-specific setup, read the framework guide ↗. The companion SpanHound investigates trace files through MCP when you want to ask questions instead of scroll.

09 // faq

The obvious questions. Answered plainly.

If something is still unclear, the source, docs, and issue tracker are one click away. Small reproductions are welcome.

Is this another cloud dashboard?

No. Agenturm is a terminal UI plus a local OTLP/HTTP receiver. Records live in SQLite on the host running it. No browser, account, or API key is needed for local monitoring.

Does it send my prompts anywhere?

Not by default. Session text and telemetry stay local. Optional AI summaries reuse an existing OPENAI_API_KEY and run only when requested; that path sends documented session evidence to the provider. See the privacy boundaries before enabling it.

Can it approve actions or answer an agent for me?

No. When a session asks for a reply or approval, Agenturm shows the wait and points you to that agent's own terminal. It does not submit answers or approve actions on the agent's behalf — that boundary is deliberate.

Which agents work with zero setup?

On loopback, recent Codex and Claude Code session records are discovered automatically, and OpenCode's local database is read-only discovered. Gemini CLI, Copilot CLI, Cursor Enterprise, and any OTLP-capable agent send telemetry to 127.0.0.1:14318.

Is it on PyPI yet?

Not as of v0.1.3. Install directly from the repository with uvx or uv tool — the commands above are the supported path. The Python import, settings, and database names remain compatible with the older Agent Observatory name.

Does it work on Windows?

Yes. The terminal UI is Textual, and the repository includes a PowerShell installer. Python 3.11+ and uv are the only runtime requirements. Exact terminal support depends on your terminal emulator.

How much does it cost?

Agenturm is MIT-licensed and free. Optional provider-backed summaries use your own API key, so provider usage may cost money — but local discovery, the receiver, and the cockpit do not.

Why is it called Agenturm?

It borrows the silhouette of Berlin's TV Tower: a spherical observation deck above a slim mast. The mark is a vantage point over agent activity, not control of the agents. The default palette is called Alpine Ember.

Point it at your agents.

One command. Then open the terminal where you actually work. Local records, live evidence, and a keyboard-first way to find the failure.

curl -fsSL https://www.agenturm.dev/install.sh | bash

MIT / local-first / v0.1.3 / changelog ↗

↑ ↓ navigate ↵ run esc close agenturm://palette
✓ copied