Messages
APX logs every interaction — agent runs, Telegram chats, direct calls — as JSONL messages. These logs are local to your machine and never committed.
Channels
Section titled “Channels”Every message belongs to a channel that describes its origin:
| Channel | What it captures | Where it lives |
|---|---|---|
runtime | apx run invocations — prompt in, response out | ~/.apx/projects/<id>/messages/ |
a2a | Agent-to-agent calls made from within a session | ~/.apx/projects/<id>/messages/ |
exec | Quick apx exec calls | ~/.apx/projects/<id>/messages/ |
telegram | Telegram bot messages | ~/.apx/messages/telegram/ (global — not per project) |
Message format
Section titled “Message format”Each line in a .jsonl file is one message:
{ "id": "msg_01abc...", "ts": "2026-05-30T14:22:01.123Z", "channel": "runtime", "type": "agent", "actor_id": "reviewer", "project_id": "077078af9dd7", "content": "I reviewed the diff. The main issue is..."}The type field distinguishes participants in a thread:
type | Who sent it |
|---|---|
user | A human (CLI, Telegram, web) |
agent | An APX project agent |
tool | A tool call or tool result |
system | An internal APX system message |
The actor_id carries the specific identity — a Telegram user id, an agent slug, or "apx" for
the super-agent — so chat views can distinguish who is talking.
Commands
Section titled “Commands”Tail recent messages
Section titled “Tail recent messages”apx messages tail # last 50 messages, all channelsapx messages tail --channel runtime # only agent run messagesapx messages tail --channel telegram # only Telegram messagesapx messages tail -n 100 # increase the limit$ apx messages tail 2026-06-14 09:30:51 ← telegram alex: deploy the staging branch 2026-06-14 09:30:52 → telegram roby: on it — handing this to backend 2026-06-14 09:31:02 → runtime sofia: spawned claude-code (exit 0, 4.2s) 2026-06-14 09:31:48 ← web alex: any failing tests? 2026-06-14 09:31:50 → agent backend: cart total test is flaky, retrying
Chat view
Section titled “Chat view”The chat subcommand formats messages as a readable transcript, grouping by actor and highlighting
user vs. agent turns:
apx messages chat # all channels, chat formatapx messages chat --channel telegram # Telegram conversationapx messages chat --channel runtime -n 20$ apx messages chat --channel telegram -n 20 [2026-06-14 09:30:51] user alex: deploy the staging branch [2026-06-14 09:30:52] super-agent roby: On it — handing this to the backend agent. [2026-06-14 09:31:50] agent backend: Deploy queued. The cart total test is flaky; retrying once before I promote the build. [2026-06-14 09:32:31] super-agent roby: Done — staging is live on commit a1f3c92.
Search
Section titled “Search”apx messages search "deploy" # full-text search in message logsapx messages search "bug" --channel runtimeStorage layout
Section titled “Storage layout”Per-project messages are partitioned by date:
~/.apx/projects/<apx_id>/messages/├── 2026-05-28.jsonl├── 2026-05-29.jsonl└── 2026-05-30.jsonlTelegram messages are stored globally (not per-project) because a single bot can serve multiple projects:
~/.apx/messages/telegram/└── 2026-05-30.jsonl