Herdr UI
Herdr의 TUI가 뛰어나며, 창을 통해 추가되는 기능
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.