skip to content
all projects
in progress 2026

Atlas

A chat and notes web app that drives a coding agent running on my server, from any device.

TypeScript Bun SvelteKit Svelte 5 Cloudflare Workers Durable Objects D1 CodeMirror 6
aiwebinfra

Atlas is my own chat and notes app, deployed at atlas.joshbaker.gg – and the chat half drives the omp coding agent running always-on on a Linux server, as omp acp subprocesses spawned per conversation. I can start a coding task from the iPhone while every other machine is asleep, tap through its permission prompts, and pick the conversation up on any device. A second machine, the Windows desktop, now runs a channel too.

The wire is three pieces. atlas-web is the client: agent chat, notes in a CodeMirror 6 editor, tasks, a finances view over Monzo, web push – Svelte 5 runes throughout, a PWA on iOS, D1 for persistence. Notes are rows that query, not files that sync. atlas-relay is a Cloudflare Worker with a Durable Object routing WebSocket frames between devices and machines; it reads the outer envelope, never parses the ACP body, and stores no content. atlas-channel runs as a systemd user service on the server, supervising the omp acp children, muxing them onto one outbound WebSocket, and spooling frames locally so a Cloudflare outage delays history rather than losing it. A small omp extension, atlas-fidelity, forwards the events ACP’s mapper drops – compaction and retries – and derives the model fallback omp never announces, so the transcript shows everything the terminal would.

Every session event lands in D1 (agent_frames, keyed (session_id, direction, seq), idempotent by construction) and transcripts render on read, paged, because a real 82MB omp session is 54,300 frames and unbounded reads cost a browser a 939MB heap. atlas-agent-tools is an MCP server that makes the host itself a device, so the agent can ask what machines exist and read either one’s session logs. The notes-and-code MCP is planned for the brain phase, which deliberately comes second: a coding environment I use daily first, the indexed brain it feeds after.

It began as an Obsidian plugin, and pivoted to this on 2026-07-27 when the evidence said the file model was wrong for how I work – 18 vault files running dataviewjs, every one a relational join hand-written in JavaScript. The north star is unchanged: “a lil AI friend that just knows EVERYTHING about you and what’s going on”. It still runs entirely on the Max subscription – no Anthropic API calls, zero extra billing.

Writeups

from this project