Skip to content

What is Pithagoras

Pithagoras is a web front end for the pi coding agent. You point it at a directory, describe a task, and close the tab. The work carries on without you, and the transcript is waiting when you come back.

That last part is the whole design. A prompt is accepted, not awaited — the HTTP request returns as soon as pi has taken the message, and the run continues under the server's ownership. Everything pi emits is appended to a SQLite event log, so a browser that reconnects an hour or a week later replays from its last seen position rather than discovering it missed the interesting part.

What it is not

It is not a sandbox by default. The host executor runs pi as a child of the portal with the portal's own permissions, working directly on mounted directories. That is fast and simple, and it assumes you trust the tasks you submit. A container executor exists for stricter isolation — see Architecture.

It is also not multi-tenant. There is one password, and anyone who knows it gets the same view. Run it somewhere private; Tailscale is the setup it was built against.

The pieces

Sessions are the normal unit of work: one workspace directory, one conversation, its own model and effort level. You create them, they persist, you pin the ones you keep coming back to. See Sessions.

The agent is a single long-lived session rooted at a fixed directory (agentHome), reachable from outside the portal through channels. Where sessions are per-task, the agent is continuous. See Agent and channels.

Channels are two-way links into that agent — Telegram, a webhook, whatever you write. Messages arrive through a channel and replies go back the same way, and every channel points at the same conversation. Channel types are packages, so adding one is installing a repo rather than patching the portal. See Writing a channel.

Extensions are pi's own package system. Anything you install shows up in the portal's slash command palette, interactive menus included. See Extensions.

Status

Honest state of things, so you know what you are getting:

AreaState
Sessions, workspaces, transcript replayWorking
Model and effort per session, surviving restartsWorking
Slash commands — builtin, extension, prompt, skillWorking
Settings, extension config, package managementWorking
Channel packages: loading, installing, configuringWorking
The channel supervisor — starting them, routing repliesWorking
The builtin packages against real Telegram/Slack/DiscordUntested

Channels start, resolve each conversation to its own session, and carry the reply back. What has not happened is a connection to a real Telegram, Slack or Discord account — that needs credentials I could not test with, so treat the first one you configure as the real trial.

Give it a task, close the browser, come back later.