One Python file · one import at startup (six installable) · any OpenAI-compatible endpoint — llama.cpp, vLLM, SGLang, Ollama, or a cloud API.
概览
One Python file · one import at startup (six installable) · any OpenAI-compatible endpoint — llama.cpp, vLLM, SGLang, Ollama, or a cloud API. Runs : you send a task, it uses real tools (shell, execute_code, edit_file, fetch_url, …), narrates its work, keeps state in plain files beside itself. One process serves whichever are configured; same sessions, notes, skills, model switches. The page can command more than the box it runs on. Give it cohorts — other tinycmdr boxes — and it grows a rail section (one row per cohort), a tab per engaged cohort, and a channel that streams that box's work line by line, exactly like a local run: The hub relays server-to-server over the agent-to-agent protocol; token_env names a variable in the hub's .env holding that cohort's page token — copy the cohort's TINYCMDR_WEB_TOKEN value into the hub's .env under the name you chose (never into config.json), and orders and channels only ever name a configured cohort.
README
以下为原文 README 节选,完整内容请查看原文。
Runs on the machine it manages: you send a task, it uses real tools (shell, execute_code,
edit_file, fetch_url, …), narrates its work, keeps state in plain files beside itself.
Problems → what it does
| With a self-hosted model, the cost is | tinycmdr |
|---|---|
| 15–30K tokens of harness boilerplate re-prefilled every uncached turn | ~4.6K-token fixed prompt on a clean unpack (est_tokens; the endpoint read ~3.5K in September) — tinycmdr status prints this install’s |
| a volatile prefix that invalidates the KV cache every request | static prefix, volatile context tail-anchored |
| a looping or stuck model wedging your inference slot | loop guard, per-run scan budget, stall watchdog, supervised restart |
| “the UI” requiring a hosted service or an open LAN port | built-in browser page, token-gated, loopback by default — or CLI, --once, Mattermost/Telegram |
| no way to hand files back and forth | page uploads (drag-drop/paste) and downloads for files the agent offers |
| upgrade procedures per version | one update command from every version; host files never overwritten |
| infrastructure sprawl | no database, no container, no daemon: one process, plain files |
| secrets leaking into prompts | tokens live in .env only; config.json never holds one |
Doors
| Door | For |
|---|---|
| Page (default) | live cards, file upload/download, conversation rail, tasks/jobs/log/inventory, and a rail of linked boxes below — browser, phone on your LAN |
Terminal (--app, --cli) |
ops on the box |
| Chat (Mattermost / Telegram) | steering from anywhere; uploads both ways |
--once "…" |
scripts |
One process serves whichever are configured; same sessions, notes, skills, model switches.
Several linked boxes
The page lists other tinycmdr boxes as a legion. A cohort is another box’s own page: the rail grows one row per linked box, shows its version and whether it answers, and clicking the row selects that box — the row is a link, so the click itself changes this tab to that box’s page, which the hub signs in with a one-time code (that box’s token never rides the browser URL); the
推荐工具
换一个关键词,或者移除筛选条件。
安装
npx skillfish add trappsquid/tinycmdr-dev