{"slug": "i-built-an-ai-assistant-that-keeps-working-after-the-chat-ends", "title": "I built an AI assistant that keeps working after the chat ends", "summary": "Developer shotah released ai-gantry, a standalone Go-based runtime that keeps AI assistants working after a chat session ends, alongside Gantree, an operator board for managing multiple gantry instances. The stack runs one Distroless Go process per persona, connects to any OpenAI-compatible model, and communicates via outbound chat (Telegram, Discord, Slack) with no open ports, positioning itself as an alternative to plugin-based harnesses inside Claude Code or Copilot.", "body_md": "The product is the crane\n\n# A long-horizon harness you run. Not a plugin pack inside someone else’s.\n\nMost things branded “harness engineering” are skills, agents, and slash\ncommands that sit inside Claude Code or Copilot. That is a wrapper around\na host you do not own. The host still holds context, tools, and whether\nthe trajectory finishes.\n\n[ai-gantry](https://github.com/shotah/ai-gantry) is the\nruntime: one Distroless Go process, one persona, one OpenAI-compat model,\nmemory you can `sqlite3`\n\n, chat that dials out. Gantree is the\nshipping yard those cranes live in — a board for an operator, never a hop\nin a chat turn.\n\n- gantry\n- The rigid frame that holds and positions tools. The frame does nothing by itself; the tools and the memory do the work.\n\n- gantree\n- The shipping yard those cranes live in. Files and Docker. Pull, don’t punch.\n\nThe difference\n\n## A harness is a process. A marketplace is a costume.\n\n### What this stack is\n\n- A binary you run. Aims, personality, and work still exist on Thursday.\n- The model is a socket — Ollama, Gemini, ChatGPT, Grok. Swap it. The loop stays.\n- MCP listed in\n`mcp.toml`\n\nis the grant. Omit it and it does not exist.\n- Outbound chat (Telegram, Discord, Slack).\n**No open ports. Ever.**\n- Independent lookups fan out in one round; the next round uses the results. Garmin → sheet → Strava is one thread.\n\n### What it is not\n\n- A Claude Code or Copilot plugin marketplace with “harness” in the README.\n- Prompts, skills, and sub-agents that still live in someone else’s context window.\n- A chatbot that dies when the window gets expensive, then\n`/new`\n\nlobotomizes it.\n- A dashboard or gateway in the token path so every message pays a platform tax.\n- MkDocs around a wrapper. Documentation is not a runtime.\n\nThe crane\n\n## ai-gantry holds the person. The yard does not talk.\n\nOne process. One persona. Chat stays Telegram. Health is an exit code, not a\nport. Mid-chain does not die on a typo — the loop was hardened on the 7–12B\nclass, then pointed at Flash when you want the trajectory now.\n\n```\nstatic binary + persona + mcp.toml + any OpenAI-compat LLM  →  outbound chat\n```\n\nWant a bot tonight? Stay here. Open the board, build a crane — this yard\npulls `shotah/ai-gantry`\n\n, writes the files, recreates. You do not\nneed the other checkout to stand one up.\n\nThe yard\n\n## Operate named pets. Never sit in the turn.\n\nGantree is the operator plane: board, doctor, grants, logs, spend. It reads\nDocker and files after the fact. If a chart would make the harness slower,\nthe chart is wrong. Agents open zero inbound ports. Only this UI is\nreachable, and only through a path you chose.\n\n```\nbrowser  →  gantree (localhost | Tailscale | tunnel)\n                                                 gantry  gantry  gantry\n```\n\nHello\n\n## Docker on the same Linux host. Node 22. First boot is /setup.\n\n```\ngit clone https://github.com/shotah/gantree.git\ncd gantree\ncp gantree.toml.example gantree.toml\nnpm install\nnpm run build\nnpm start                 # http://127.0.0.1:3000\n```\n\nOpen the board. Build a crane. Grant a tool. Message it on your phone.\nThe UI never sits in a chat turn. Home Mini vs cloud VM:\n[install](docs/install.html).\n\nOperator docs\n\n## The board, the door, the files.\n\n**Install** Home Mini or cloud VM. Same console. Zero inbound agent ports.\n**Console** Board, grants, doctor, avatars. Chat stays Telegram.\n**Operators** Setup, login, profile, roles on a handful of people.\n**Headless** Attach existing dirs, tunnels, the gotchas.\n**Architecture** Why Vinext on the Docker host, and why the yard pulls.\n**Security** The door: bind, passphrases, sessions. Not a reason to open WAN 3000.\n**Custom MCP** Your binary, still a [[server]] in that crane’s mcp.toml.\n**ai-gantry** Design, features, MCP — the harness repo.", "url": "https://wpnews.pro/news/i-built-an-ai-assistant-that-keeps-working-after-the-chat-ends", "canonical_source": "https://shotah.github.io/gantree/", "published_at": "2026-08-29 04:24:17+00:00", "updated_at": "2026-08-29 04:48:33.587906+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools"], "entities": ["shotah", "ai-gantry", "Gantree", "Claude Code", "Copilot", "Ollama", "Gemini", "Grok"], "alternates": {"html": "https://wpnews.pro/news/i-built-an-ai-assistant-that-keeps-working-after-the-chat-ends", "markdown": "https://wpnews.pro/news/i-built-an-ai-assistant-that-keeps-working-after-the-chat-ends.md", "text": "https://wpnews.pro/news/i-built-an-ai-assistant-that-keeps-working-after-the-chat-ends.txt", "jsonld": "https://wpnews.pro/news/i-built-an-ai-assistant-that-keeps-working-after-the-chat-ends.jsonld"}}