{"slug": "age-of-agents", "title": "Age of Agents", "summary": "Age of Agents, a new open-source tool from Agents Mill, visualizes AI coding agent sessions as a real-time strategy game, turning each session into a settler in a pixel-art realm. The tool runs locally alongside CLI workflows, watching transcripts from Claude Code, Codex, OpenCode, and Koda to create a glanceable, second-monitor view of agent activity. Available as an npm package, it prioritizes privacy by reading transcripts locally and never writing them elsewhere.", "body_md": "**Watch your AI coding sessions grow a peaceful pixel-art realm.**\n\nEvery Claude Code, Codex, OpenCode or Koda session becomes a settler walking out of the keep. The tool it runs decides which workshop it visits, subagents become workers, and tokens fill the storehouse — a calm, Age-of-Empires-style kingdom of your work. No combat, just a quiet realm you can watch at a glance.\n\n[ ▶ Live site](https://agentsmill.github.io/age-of-agents/) ·\n\n[Quick start](#-quick-start)·\n\n[How it works](#-how-it-works)·\n\n[Architecture](#-architecture)\n\nAge of Agents (npm package ** age-of-agents**) runs as a small local web app\nalongside your normal CLI workflow. It watches your agent session transcripts and\nrenders them as a calm, real-time strategy realm:\n\n**Each session → a settler.** Start a Claude Code, Codex, OpenCode or Koda session and a settler walks out of the keep, carrying your prompt as its task.**Tools → workshops.** The settler heads to the building that matches the work — the forge for code edits, the mage tower for web research, the mine for the terminal.**Subagents → workers.** When a session spawns subagents (e.g. the Task tool), they appear as little workers around their settler.**Tokens → harvest.** Tokens read and produced fill the storehouse. Settlers ponder while thinking, rest when waiting, and stroll home when the day's work is done.**Two worlds.** Switch between a**fantasy**(top-down) and a** sci-fi**(isometric) realm on the fly.** Many projects → cities.**Each project becomes a city you can switch between; open one for an optional peek at[Beads](https://github.com/steveyegge/beads)tasks and a[Graphify](https://github.com/safishamsi/graphify)code map (see[Project intel](#-project-intel-optional)).\n\nA glanceable, second-monitor view of what your agents are quietly up to.\n\n| Fantasy | Sci-Fi |\n|---|---|\n\n**Session detail** — click a settler to inspect its task, token economy and live activity:\n\n**Install — npm i -g.** Install it globally for the short\n\n`aoa`\n\ncommand; update with `npm update -g age-of-agents`\n\nwhen new versions ship:\n\n```\nnpm i -g age-of-agents\naoa            # watches ~/.claude, ~/.codex, ~/.opencode & ~/.koda sessions (+ Claude in local Docker), prints the URL\naoa --demo     # calm demo mode (fake sessions)\naoa --open     # also open the browser\n```\n\nThe server binds to\n\n`127.0.0.1`\n\nonly and never writes your transcripts anywhere — it just reads them locally and broadcasts game state over a local WebSocket. See[Privacy].\n\n```\ngit clone https://github.com/agentsmill/age-of-agents\ncd age-of-agents && npm install\nnpm run demo     # server (demo) + client (Vite) → http://localhost:5173\nnpm run dev      # visualize your real sessions\n```\n\nFor focused local testing you can limit which session sources are watched:\n\n```\nAOA_SOURCES=codex npm run dev\nAOA_SOURCES=claude,codex npm run dev\nAOA_CODEX_LOOKBACK_DAYS=3 npm run dev\n```\n\n`AOA_SOURCES`\n\naccepts `claude`\n\n, `codex`\n\n, `opencode`\n\n, and `koda`\n\n.\nCodex watches recent date folders by default instead of the entire historical\n`~/.codex/sessions`\n\ntree.\n\nLocal engines don't write transcripts, so Age of Agents captures them through a small logging proxy. Two ways in:\n\n**Ollama (terminal):**\n\n```\naoa local llama3        # wraps `ollama run llama3` and logs it as a hero\n```\n\nThe session shows up on the battlefield; the model appears in the **Modele** tab,\nwhere you can assign a sprite (context window is read automatically from Ollama).\n\n**Any OpenAI-compatible backend (llama.cpp / vLLM / oMLX / coding agents):**\n\n```\nLLM_BASE_URL=http://localhost:8000/v1 aoa local-proxy   # prints a proxy URL\n```\n\nPoint your client's base URL at the printed proxy URL. Default backend base URLs:\n\n| Backend | Default base URL |\n|---|---|\n| Ollama | `http://localhost:11434/v1` |\n| llama.cpp | `http://localhost:8080/v1` |\n| vLLM | `http://localhost:8000/v1` |\n| oMLX | `http://localhost:10240/v1` |\n\nOverrides: `LLM_BASE_URL`\n\n, `LLM_MODEL`\n\n, `LLM_API_KEY`\n\n.\n\n```\nagent session transcript ──▶ server (watcher + state machine) ──▶ WebSocket ──▶ client (PixiJS realm + HUD)\n```\n\n- The\n**server** tails JSONL transcripts, turns each line into a`Fact`\n\n, and runs a small per-session**state machine**(thinking / working / resting / idle / returning). - It broadcasts a\n`HeroSnapshot`\n\nfor every session over a WebSocket. The snapshot carries*what*the session is doing (`currentTool`\n\n, recent actions, tokens) — never raw coordinates. - The\n**client** decides*where*each settler goes and renders the pixel-art realm, the HUD, the minimap and the side panel. **Running agents in Docker?** Local containers are auto-discovered (zero-config) and their Claude sessions read straight out of the container via`docker exec`\n\n— no image changes, no host bind-mounts required. Containerized settlers carry a 🐳 badge in the side panel. Disable with`AGENTCRAFT_DOCKER=0`\n\n.\n\nRun several projects at once and each becomes its own **city** in the top bar — switch between them, or pick **All** to see every settler together. A city shows how many agents are active and which kind (Claude, Codex, OpenCode, Koda).\n\nSelect a city to open the **Architect's Hall**, a side panel that surfaces two optional, third-party signals about that project — read-only and entirely opt-in:\n\n**📜 Beads**— open tasks from[Beads](https://github.com/steveyegge/beads), an AI-native issue tracker that lives in your repo. Age of Agents reads`.beads/issues.jsonl`\n\n(falling back to`bd list --json`\n\n). Turn it on in a project with`bd init`\n\n.**🌳 Graph**— a code knowledge graph: symbol, edge and community counts plus the most-connected \"god-nodes\". Age of Agents reads`graphify-out/graph.json`\n\n. Generate it with the**bundled, dependency-free generator**— run`npm run graphify`\n\nin a project (or`node scripts/graphify.mjs <dir>`\n\n) to scan relative imports and write`graphify-out/graph.json`\n\n. You can also use the external[Graphify](https://github.com/safishamsi/graphify)tool; the schema is the same.\n\nNeither tool is bundled or required. If a project has no `.beads/`\n\nor `graphify-out/`\n\n, the panel just reads \"not initialized\"; it polls every few seconds, so intel appears as soon as the files do.\n\nTwo full art sets, switchable from the top bar:\n\n**Fantasy**— top-down: keep, mage tower, library, guild, market, mine, orchard & ponds.** Sci-Fi**— isometric: command center, hangars, drone factory, ore refinery, research lab on a calm Martian colony.\n\nA small npm-workspaces monorepo, published as the single `age-of-agents`\n\nCLI:\n\n| Package | Stack | Responsibility |\n|---|---|---|\n`packages/shared` |\nTypeScript | WebSocket protocol types (`GameEvent` , snapshots) |\n`packages/server` |\nNode + Fastify + `ws` + SQLite |\ntranscript watcher, state machine, hooks endpoint, demo generator, CLI |\n`packages/client` |\nVite + React 19 + PixiJS v8 | the game realm, HUD, minimap, side panel |\n\n```\nnpm test      # unit tests (server + client)\nnpm run build # production client + bundled CLI (dist/cli.js)\n```\n\n- The server listens on\n`127.0.0.1`\n\nonly — nothing is exposed to your network. - Transcripts are read\n**locally and read-only**; their contents are never written to disk by Age of Agents or sent anywhere. - Installing the optional Claude Code hooks modifies\n`~/.claude/settings.json`\n\n(a fast event channel). Demo mode touches nothing of yours. **Optional interactive mode (off by default).** You can let the panel answer Claude Code permission prompts and plan approvals via the local hooks. It stays`127.0.0.1`\n\n-only; with the mode off, Age of Agents remains a passive read-only observer. When on, an unanswered prompt (timeout or app closed) always falls back to the terminal — the app never auto-allows. \"Always allow\" rules live in`~/.age-of-agents/permission-policy.json`\n\n; the app never edits the permission rules in`~/.claude/settings.json`\n\n.**Optional: launch agents from the app (BETA —** With the Claude Agent SDK installed ([setup guide](/agentsmill/age-of-agents/blob/main/docs/launch-agent.md)).`npm i @anthropic-ai/claude-agent-sdk`\n\n), a**🚀 Launch agent** button lets you start a Claude Code session from the panel — pick a folder, type a prompt, choose a permission mode. These app-owned sessions are real Claude Code runs (they use your account and tokens) and you answer their permission prompts, plan approvals and multiple-choice questions (a centered \"agent question\" modal) directly in the panel. The SDK is an optional dependency; without it the button is hidden and nothing changes.**Auth for launching:** the Agent SDK authenticates from environment variables only — it does**not** read your interactive Claude Code login. To use your subscription, generate a long-lived token once with`claude setup-token`\n\n, then start the app from a shell where`CLAUDE_CODE_OAUTH_TOKEN`\n\nis set (and`ANTHROPIC_API_KEY`\n\nis unset, or it takes precedence). Without it, launches fail with`401 Invalid authentication credentials`\n\n; the launch dialog warns when no auth is present.\n\nAll pixel-art assets in `packages/client/public/assets/`\n\nwere **generated by the author with PixelLab** and are the author's own work — released here under the same MIT license as the code. Without any assets the game still runs on procedurally generated placeholders.\n\n`assets-manifest.json`\n\n+ `scripts/download-assets.mjs`\n\nare an **optional** helper for swapping in alternative third-party packs locally; those packs are never committed (some forbid redistribution) and are not needed to run the game.\n\nIssues and PRs are welcome. To get going: `npm install`\n\n, then `npm run demo`\n\nto see the realm, and `npm test`\n\nbefore opening a PR.\n\n[MIT](/agentsmill/age-of-agents/blob/main/LICENSE) © Mateusz Pawelczuk. Art assets generated with PixelLab, redistributed under MIT per PixelLab's Terms of Service.\n\nInspired by [AgentCraft](https://www.getagentcraft.com). Built with [PixiJS](https://pixijs.com), [React](https://react.dev), [Fastify](https://fastify.dev) and [PixelLab](https://pixellab.ai).", "url": "https://wpnews.pro/news/age-of-agents", "canonical_source": "https://github.com/agentsmill/age-of-agents", "published_at": "2026-06-24 04:22:10+00:00", "updated_at": "2026-06-24 04:44:29.304038+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-tools", "ai-products", "generative-ai"], "entities": ["Agents Mill", "Claude Code", "Codex", "OpenCode", "Koda", "Ollama", "npm", "Vite"], "alternates": {"html": "https://wpnews.pro/news/age-of-agents", "markdown": "https://wpnews.pro/news/age-of-agents.md", "text": "https://wpnews.pro/news/age-of-agents.txt", "jsonld": "https://wpnews.pro/news/age-of-agents.jsonld"}}