AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
Octopus is a personal agent platform
翻譯準備中
開發工具Python · TypeScriptGitHub @archeryue自行安裝營運者未確認
試用過了嗎? 點一下就好,不需要登入。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
安裝型專案無需部署網域也可驗證。個人儲存庫可透過 GitHub 登入驗證,組織儲存庫可使用上方的儲存庫驗證檔案。
正在載入完整 README。 以下為已儲存的摘錄。
Octopus is a personal agent platform. It turns Claude Code and Codex
into durable, always-on AI agents that run on your own machine and work for you
around the clock — reachable from your phone or any browser.檢視完整 README ↗Octopus is a personal agent platform. It turns Claude Code and Codex into durable, always-on AI agents that run on your own machine and work for you around the clock — reachable from your phone or any browser.
One install can serve more than one person. Each account is a completely separate Octopus — its own agents, sessions, applications, credentials, memory, and a workspace it cannot see out of — so a household or a few trusted people share the machine without sharing anything else. Signup is invite-only, and the first account (created with the install's own token) is the admin who mints the invites. It stays a personal product either way: there is no cross-account collaboration, no shared team space — just several private ones side by side.
Each agent keeps its own persistent setup (prompt, model, tools, schedules,
connectors), keeps work running in the background across turns, and can reach
real third-party APIs. Octopus drives the claude / codex CLIs directly via
their stream protocols, so there's no extra API cost — it uses your existing
Claude and ChatGPT subscriptions (or an API key you attach).
Phone / Browser
→ REST + WebSocket → FastAPI (web UI + API on one port)
→ Agent (durable: prompt · model · credential · tool policy · connectors)
→ backend: Claude Code or Codex (local CLI subprocess, stream-json)
→ MCP tools: bg · ask · ask_agent · schedule · research · connectors
(served in-process at /mcp/<name>, not spawned per session)
claude login / codex login) when none is attached.user_id, so one account never sees another's data, and each
account's secrets are encrypted under a per-user key so even the database
can't cross the line. A session's working directory is confined to the
account's own workspace (a relative path means "inside my workspace"; admins
can grant extra roots), and each account gets its own concurrency quota.
Admin surface: invites, disable/enable people, operator-only Monitor. Before
the first account exists the install runs on its install token; creating
that first account adopts whatever is already there.
Design: docs/plans/multi-tenancy.md.octopus serve --tunnel gives
instant public HTTPS via Cloudflare Tunnel. Session-bearer auth that a browser
or phone remembers for 30 days; HTTPS/WSS behind tunnels and reverse proxies.claude-code agent can delegate to a codex agent), and her
reply lands back in the caller's session as a follow-up turn. The
model:
mcp__ask_agent__ask, gets a delegation_id immediately, ends its
turn; the reply ([agent-reply:Vera …]) arrives as a new turn when
Vera finishes. Multiple delegations in flight at once give you
parallel fan-out for free.ask again with a
prior delegation_id continues that child session, so the delegated
agent keeps her own transcript for review rounds instead of starting
cold.docs/plans/agent-collaboration.md./showme <reference> opens a file from the
session's working directory in a browser modal — markdown rendered,
images/PDFs inline, code highlighted. Exact paths short-circuit (no
model call); fuzzy references like the readme are resolved by a
one-shot model call that reads recent conversation. Browser-only by
design — the agent never opens files on its own, since it can't tell
whether anyone is at the screen.POST /api/sessions/{id}/reset escape hatch); mid-turn
interrupt (Esc) + message queue; virtualized, lazy-loaded chat that stays
light on thousand-message sessions./rewind — rewind a conversation to any prior user message and
re-issue it (edited, redone, or replaced). A sidebar tree shows branches; a
confirm popover discloses side effects (file edits, bg tasks, irreversible
tool calls) and optionally reverts file edits via git stash when the
working tree is clean. Design:
docs/plans/session-rewind.md./fork [name] — duplicate the current session onto an independent
full copy of its working directory, leaving the original untouched. The fork
resumes the real conversation history (native transcript copy), so the model
sees full context. Design:
docs/plans/session-fork.md./research <question> (or the
mcp__research__deep_research MCP tool, which agents can call themselves)
starts a multi-phase Octopus-orchestrated research job: scope decompose →
parallel web-search sub-turns per angle → dedup + rank → adversarial verify →
final synthesis into a cited report. Octopus owns the fan-out,
concurrency limits, cancellation, and persistence; web access comes from the
harness's own native tools (WebSearch/WebFetch for Claude; web_search for
Codex). A ResearchCard in the chat tracks phase progress and exposes a cancel
button; the final report arrives as a follow-up turn the agent can act on.
Design: docs/plans/native-deep-research.md.start.sh at its root and
Octopus allocates a port, runs it, proxies /apps/{id}/api/* to it and stops
it when idle — with the app's own state in a directory a rebuild never
touches. A running app can also hold conversations with your agents through
its own scoped token.
Design: docs/plans/applications.md,
application-backends.md,
app-agent-access.md.--resume transcripts are untouched by this.
Design: docs/plans/memory.md.Task, Codex's spawn_agent), the run shows up as a live card
with status and token counts rather than a tool call that sits there. An
Octopus agent can also bring its own named sub-agents.
Design: docs/plans/native-subagents.md.POST /api/auth/rotate), with no restart and nothing to edit by
hand: editing .env yourself changes what the server checks while leaving
those secrets keyed to a token nobody has. Rotation re-keys them, rewrites the
env files, swaps the live setting, drops the processes carrying the old token,
and hands the new one to tabs already open.
Design: docs/plans/token-rotation.md.octopus handoff imports local Claude Code sessions;
octopus pull exports a session as JSONL for local claude --resume.# Clone and set up
git clone https://github.com/archeryue/Octopus.git && cd Octopus
python3 -m venv .venv && .venv/bin/pip install -e "."
cp .env.example .env # edit OCTOPUS_AUTH_TOKEN
# Build the frontend (the server serves web/dist/)
cd web && bun install && bun run build && cd ..
# Run (API + UI on port 8000)
octopus serve
Open http://localhost:8000 and enter the install token from your .env. On a
fresh install that first token gets you to Create the first account —
pick a username and password, and that account becomes the admin (it also
adopts any agents/sessions already on disk). From then on you sign in with that
username and password, and the admin mints invite codes for anyone else who
should have their own account. Then pick the default Octo agent, create a
session, and start chatting. For phone access, octopus serve --tunnel gives
you a public HTTPS URL.
Auth for the agent's backend uses your existing CLI login (claude login /
codex login) by default — or add an API key under Credentials and attach
it to an agent.
# Terminal 1 — backend (hot-reload)
.venv/bin/uvicorn server.main:app --host 0.0.0.0 --port 8000 --reload
# Terminal 2 — frontend (Vite proxies /api + /ws to the backend)
cd web && bun dev
Open http://localhost:5173 for the hot-reloading dev server.
octopus serve # Start server (API + UI on port 8000)
octopus serve --tunnel # ... with a public Cloudflare Tunnel (HTTPS)
octopus handoff # Import a local Claude Code session
octopus pull <session-id> # Export an Octopus session as local JSONL
Backend: Python 3.12 · FastAPI · claude + codex CLI subprocesses ·
aiosqlite · APScheduler · cryptography (Fernet) · MCP namespaces served
in-process over streamable-HTTP
Frontend: React 19 · TypeScript (strict) · Vite · zustand · Tailwind v4 · Radix
./scripts/check.sh # every gate: ruff · mypy · pytest · eslint · vitest · tsc · contracts · docs index
.venv/bin/pytest -m "not real" # 1,313 backend tests, hermetic — no CLI, no network, ~34s
.venv/bin/pytest -m real # the 34 that drive a live model (needs a signed-in claude / codex)
cd web && bun run test # 299 frontend unit tests (vitest)
cd web && bun run typecheck # TypeScript check (tsc -b across the project)
cd web && bun run test:e2e # 107 Playwright tests in a real browser
cd web && bun run test:e2e:fast # ... the 67 that need no model (~40s)
cd web && bun run test:e2e:llm # ... the 40 that drive real Claude / Codex turns
The real-CLI tier is selected by marker rather than by filename, so a plain
--collect-only never spawns a model.
Install lefthook and run
./scripts/setup-hooks.sh. Commits then run the same gates ./scripts/check.sh
does, scoped to what you staged: ruff + mypy + the hermetic pytest tier for
Python, eslint + tsc + vitest for web, and the generated-contract and
docs-index checks when they could have drifted. Each skips when no relevant file
is staged, so a doc-only commit stays fast.
See docs/ for all documentation — start with docs/architecture.md for system design, data flow, and the WebSocket protocol; docs/plans/ holds the per-initiative design records.