NAVis lite · The Shape

three entry paths · one agent · one filesystem

companion to technical · same system, fewer boxes
three ways in · one agent that thinks · one place things actually change HOW WORK ENTERS THE SYSTEM 1 · WEBCHAT me in a browser, typing to my agent goes through the agent loop 2 · TELEGRAM me on my phone, messaging NAVis also goes through the agent loop 3 · CRON · SELF-TRIGGER no human · scheduled daily reflection @ 04:00 spawns its own agent loop run 4 · TERMINAL me with a keyboard, direct to the server NO agent loop · goes straight to files WHAT HAPPENS IN BETWEEN THE AGENT LOOP one per session · runs the same way for webchat, telegram, and cron 1 · READ identity + memory SOUL · USER · AGENTS · MEMORY 2 · THINK (LLM call) gpt-4.1-mini decides what to do 3 · ACT (tools / skills) skill · shell cmd · file write 4 · REPLY / WRITE DOWN send response · update memory loop if more tools needed between THINK and ACT: model may claim, without actually calling the tool. verify on disk. WHERE ANYTHING REAL LIVES FILESYSTEM the only thing the LLM can't predict away identity files memory/ (daily logs) skills/ (what it can do) jobs.json (schedule) session logs / artifacts cat · ls · git log = ground truth terminal bypasses the agent loop entirely reads writes THE ONE THING TO REMEMBER three entry paths (webchat, telegram, cron) all feed the SAME agent loop on the server. the fourth path (terminal) skips the loop entirely and touches files directly. that's why terminal is how you verify the agent actually did what it said. everything is on a private Tailscale network — nothing in this diagram is exposed to the public internet

lite · Structural Essence

What this diagram shows

Four ways work enters NAVis, one thing that happens in the middle, one place where anything real ends up. Strip anything else and this is still recognisably NAVis.

The one sentence

NAVis is an agent that runs on a server I own, reachable from my browser, my phone, on a schedule — all three going through the same loop — and directly from my keyboard when I need to check whether the loop actually did what it claimed.

The three paths that use the agent

Webchat: me in a browser, typing. Telegram: me on my phone, messaging. Cron: no human at all — a scheduled job that triggers itself at 04:00. All three enter the same agent loop. That loop does four things: read my identity and memory, think with an LLM, act via tools or skills, reply and write things down. It can loop through step 2 and 3 multiple times before finishing.

The fourth path that doesn't

Terminal: me SSH'd into the server, typing Linux commands directly to the filesystem. No LLM, no agent, no prediction — the file either exists or it doesn't. This is how I verify the other three paths actually did what they said they did.

Why the filesystem is singled out

The LLM can say "I wrote the file" without issuing the tool call that actually writes it. The filesystem can't lie. It's the one layer with no model in front of it. That's why the diagram puts it on its own side, and why the agent loop has an arrow going to it — the loop reads from it, writes to it, but doesn't get to edit it in its head.

What I deliberately left out

Ports, sockets, Tailscale internals, the distinction between the gateway process and the loop it hosts, the split between the webchat UI and the chat API, Telegram long-poll vs webhook, concurrency issues, cost splits. Those belong in the technical diagram. This one is for remembering the shape.