Changelog
All notable user-visible changes to metor are recorded here. The format follows
Keep a Changelog, versions follow
Semantic Versioning (the current version is in VERSION).
Maintenance rule: whoever finishes a user-visible feature or fix adds one or two lines under
Unreleased, written from the user’s point of view - technical detail belongs in commits and ADRs.
On a release the section is renamed to the version number and dated. Ideas and open items live in
BACKLOG.md, decisions in knowledge/decisions/.
[Unreleased]
Added
-
Free-text bot names: a bot can be called
Fußball-Späher 2orMein Bot!. The create dialog derives the id (fussball-spaeher-2- directory, links, address between bots) live and lets you change it; the name is what the sidebar, the header, notifications and the bot’s own instructions show. CLI:metor bot create "Mein Bot!" [--id mein-bot]. -
Phone app with push notifications (ADR-0013): the interface installs as an app (Android: “Install metor as an app” under Devices or the browser menu; iPhone and iPad: Share → Add to Home Screen, then sign in once inside the app with a pairing code). Turned on under Devices → Notifications on this device, it sends a push when a bot needs an approval, has finished a reply or stopped unexpectedly – never to the device that is looking at that chat. No third-party service in between: the box signs and sends the messages itself (needs HTTPS).
-
Claude Code sign-in from the interface: the “New bot” dialog now runs the official Claude login too (open the link, sign in, paste the code the page shows) - no terminal needed. Codex keeps its device-code flow.
-
Sign-in without passwords (ADR-0012): the first browser gets in with a one-time setup link (printed by the installer and by
metor auth link), further phones and computers are linked from a signed-in device by QR code, link or pairing code (valid two minutes), and the new Devices dialog lists every signed-in browser and signs one out. The gateway checks the session on every request, including screen and terminal. -
Unattended installation:
install.shinstalls Docker by itself when it is missing (METOR_INSTALL_DOCKER=nostops instead), reads the domain fromMETOR_DOMAINand the ghcr login fromMETOR_GHCR_USER/METOR_GHCR_TOKENwhen set, and asks only for what is missing - onesshline installs a server; it ends with the setup link.
Changed
- The bundled Caddy configuration no longer carries a login (no user, no password hash, no WebSocket exception) - Caddy only terminates TLS; the installer asks for the domain only.
Removed
- The old background-session mode (
harness: "claude", Claude Code--bgwith Remote Control and the Haiku chat bridge) is gone; every bot now runs through its runtime’s host process. Bots that were still on the old mode keep their role and files but start a fresh session.
Changed
- Routine limits: up to 30 routines per bot, names up to 60 characters, the last 30 runs are kept. The routine that pauses itself after many unattended runs is now called “auto-pause”.
Fixed
- After a restart of the computer a bot could show as “stopped” for a long time although it answered (its host mistook a stale process ID for a running twin).
[0.1.0] - 2026-09-02
First public release. Everything below was built between 2026-08-30 and 2026-09-02.
Added
Bots and their computer
- Computer (the box) with one desktop per bot: virtual display, Chromium, terminal window, noVNC access; the desktop has a dock to switch between browser and terminal.
- Bots as persistent sessions with name, role, memory and their own directory. Bots can assign tasks to each other (Claude bots) and send watch links (with token) when they need a hand in the browser.
- Bots run as Agent SDK sessions (ADR-0009): the chat shows answers, tool activity and clickable approval cards; a restart resumes the session and its context.
- Codex as second runtime (ADR-0011): bots run on Claude Code or Codex (ChatGPT subscription). Runtime and model are chosen when the bot is created (also for Claude bots: Opus / Sonnet / Haiku). Codex bots chat, use shell and files, drive their own browser, create routines and send files to the chat; restarts keep the context.
- Setup wizard: a runtime that is not signed in yet shows the official device-code login in the
“new bot” dialog (link + one-time code, confirmation on the phone). Login data stays inside the
box (new volume
metor-codex). A login failure of one runtime stops only that runtime’s bots.
Interface
- Own web interface under
/bots/(ADR-0008): create and control bots, chat, watch the desktop (noVNC), Markdown in the chat. - Token streaming: answers type in live (a “writing” bubble with Markdown).
- Stop button for running turns, expandable tool results, quota display (5 hours / week) for the Claude subscription in the sidebar, optional ntfy push when a bot waits for an approval.
- Terminal tab: a real terminal (ttyd / xterm.js with copy and paste) as a sub-tab of the computer panel, per bot, behind the gateway.
- File browser: third sub-tab “files” in the computer panel - navigate the bot’s directory, view and download files (breadcrumb, dot directories hidden).
- Attachments in the chat: paperclip, paste screenshots (Cmd/Ctrl+V), drag and drop; chips with
a remove button above the input, thumbnails in the history. Files are stored under
<bot>/uploads/; the bot reads images itself (runtime-neutral). Max. 25 MB per file, 10 per message. - Files from the bot: when the bot writes
[File: path]in its reply, the file appears as a card (image preview or download) inside its message; file paths mentioned in the text are offered as cards automatically as well. - Responsive interface: messenger pattern on phones (bot list -> chat with back arrow and back gesture), actions in a “more” menu, “side by side” only at desktop width.
Routines
- Routines (ADR-0010): bots create their own schedules
via chat (
add_task/list_tasks/remove_task); the supervisor fires them in box local time and catches up a missed run once; routines panel in the interface. Runtime-neutral. - Routine polish:
update_task(change / pause / resume) and an auto-pause - a routine pauses after 20 runs without user activity (configurable viaMETOR_ROUTINE_GUARD).
Installation and operations
- Server installation: prebuilt image on the GitHub Container Registry (built by a GitHub
Action),
deploy/compose.ymlwith or without bundled Caddy (TLS and login), one-line installercurl ... install.sh | sudo bash, INSTALL.md with all.envoptions anddeploy/.env.example. Reference deployment behind a Caddy login. - This changelog.
Changed
- Mono-repo with
backend/,frontend/andknowledge/; product name metor (ADR-0007). - Agent SDK sessions are the default; the previous background-session mode remains as a fallback.
- Bus log rotation.
Fixed
- Screen and terminal behind the server login: WebSockets failed on Basic Auth (browsers send no credentials there) - the gateway now checks a watch cookie instead.
- The screen stayed on “connecting” because x11vnc hung on an absurdly high Docker
nofilelimit; the container now runs with 65536.
This page is metor-com/metor/blob/main/CHANGELOG.md in the metor repository, rendered as it is.