個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Pithagoras — hosted web UI for the pi coding agent. Give it a task, close the browser, come back when it's done.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Runs are owned by the server, not by your tab. Every event pi emits is appended to a log, so reconnecting replays exactly what you missed and then continues live.
A fresh agent session starts at roughly 3.8k tokens of system context — the agent's identity and memory, its tool schemas, and a one-line listing of every installed skill. Skill bodies are read when the agent reaches for one, not loaded up front. Measured rather than budgeted, and it grows with what you install: each MCP server registered as direct tools adds 150–300 tokens per tool.
git clone https://github.com/thecodacus/pithagoras.git && cd pithagoras
cp .env.example .env # uncomment WORKSPACES_DIR with the folder your repos are in
docker compose up -d --build
Then open http://<host>:4100 and choose a password: the portal has none until you do, so do it as soon as it is up. The setup assistant in Settings → Providers
walks you through adding a model provider (a local llama.cpp / Ollama server, OpenRouter,
Anthropic, …); you can also set a key in .env.
The container uses host networking, so pi and its extensions reach services on the box at
127.0.0.1 — a llama.cpp server on :8080, for example — exactly as they would outside a
container. It needs the Docker socket mount for the Docker extension, which runs the containers
of the agent's browser, the voice service and Understory.
Running from source, the Portainer stack and the full variable list are in
Deploying.
Browsers install the portal as an app (PWA) only over HTTPS or on localhost.
AGENTS.md; the sidebar lists them by folder.gh), a terminal, canvases, subagents and background jobs,
each dockable on its own side.Browser ──SSE (replay + tail)──▶ portal ──▶ pi (SDK, in process — or in a container)
│
└─▶ SQLite: sessions + full event log
The browser never drives the agent. Submitting a prompt returns as soon as pi accepts it;
the run continues server-side. The client reconnects with the last event id it saw
(?since=), so nothing is lost and nothing is duplicated.
EXECUTOR | What it does |
|---|---|
host (default) | pi runs inside the portal process, working directly on the repos mounted at /workspaces. Fast, real git, full access to those directories. |
container | Each task gets its own container (PI_IMAGE, default pithagoras-runner:latest) with only its project mounted, dropped capabilities, no-new-privileges, and memory/CPU/PID caps. Needs the Docker socket mount. |
pi has no approval prompts — by design it runs with the permissions of its process ("real isolation needs to come from the OS or a container boundary"). That is what makes unattended runs possible, and also why a password is required and why the portal should stay on Tailscale/LAN rather than the public internet.
| Variable | Default | Purpose |
|---|---|---|
PORTAL_ALLOW_NO_PASSWORD | — | 1 runs with no login behind an authenticating proxy. The password itself is chosen in the browser on the first start and changed under Settings → Authentication; there is no variable for it. |
PORTAL_SECRET | random | HMAC key for the auth cookie. Set it so logins survive restarts. |
WORKSPACES_DIR | — (required) | Host directory mounted at /workspaces (Compose only; it will not start without one). |
PORTAL_DATA_DIR | named volume | Host directory for the data volume, instead of a Docker volume (Compose only). |
TZ | UTC | Time zone of the portal's clock, such as Europe/Berlin: an agent's quiet hours and repeating routines are read on it. |
EXECUTOR | host | host or container. |
PI_PROVIDER / PI_MODEL / PI_THINKING_LEVEL | inherit | Overrides only; pi's settings.json decides when unset. |
OPENROUTER_API_KEY, ANTHROPIC_API_KEY | — | Provider credentials, forwarded to pi. |
TASK_MEMORY_MB / TASK_CPUS / TASK_PIDS_LIMIT | 2048 / 2 / 512 | Per-task caps in container mode. |
The rest is in Configuration.
Settings (bottom of the sidebar) is the web equivalent of pi's slash commands: Providers and Defaults for models, Tools, Skills, MCP and Extensions for the agent, Channels and People, and This browser, Shortcuts, About and Advanced for the portal, with a page for each extension that has settings, such as Media. What a chat uses lives on the pills under its composer. Defaults you set apply to newly started sessions only.
A session is a conversation, and it works in a folder. New starts one in Home, the
own directory of the first agent (or of the one you picked for New), where its SOUL.md, PrimaryUser.md and MEMORY.md are. A project is an
extra folder you make on purpose, on the Projects tab: "Cool Project" becomes cool-project,
with instructions of its own saved as its AGENTS.md. Opening a project opens its chat, and
/new or /clear starts a fresh one in it. Deleting a session never deletes a folder.
The sidebar shows every session with a live status dot: running, idle, error, or interrupted — the server restarted while that task was mid-run. Sending another message resumes the conversation.
host mode edit the same working tree. Use
container mode or separate workspaces to run those in parallel.Full docs live in docs/ and are a VitePress site.
npm run docs # dev server
npm run docs:build # static build into docs/.vitepress/dist
Pithagoras is licensed under the Apache License 2.0 (see also NOTICE). The voice mode ships a voice activity model and a WebAssembly runtime from other projects, under their own licences: see THIRD_PARTY_NOTICES.md.