A self-hosted OpenClaw alternative, in 11,478 lines of Go.
GoGogot is a self-hosted, open-source AI agent written in Go: one Docker container, a shell, a filesystem, four web tools, persistent memory and a cron scheduler, driven from your terminal, a Telegram bot you own, or any other interface you plug in. It covers a narrower job than OpenClaw does, and it covers it in 11,478 lines instead of roughly 430,000. This page is the honest version of that trade — both directions.
Five measurements
GoGogot against OpenClaw and Nanobot.
| Measurement | GoGogotGo | OpenClawTypeScript | NanobotPython |
|---|---|---|---|
| Lines of code | 11.5K | 430K | 4K |
| Dependencies | 9 | 800+ | 30+ |
| Install size | 206 MB | 1 GB | 150 MB |
| RAM at idle | 10 MB | 450 MB | 100 MB |
| Minimum host | anything with Linux | 2 GB RAM, 2 CPU | 512 MB RAM |
Where GoGogot loses
What OpenClaw does that GoGogot does not.
- A seat beside your editor.
- GoGogot has a terminal chat now as well as Telegram, but it is a chat with a container, not an agent in the repository you have open. It sees the directory you mounted and nothing else, there is no editor extension, and nothing sits beside your code while you write it. If what you want is an agent next to your editor — OpenClaw, Claude Code, or anything else that lives there — this is the wrong tool, and no table below will change that.
- More than one person.
- Every channel names a single owner — on Telegram, TELEGRAM_OWNER_ID — and the core drops every message from anyone else, whatever the bridge does. That is the entire auth model. It is deliberate and it is also a hard ceiling — there is no team mode, no roles and no shared workspace.
- An extension ecosystem.
- No registry and no marketplace, and tools are not plugins: adding one is Go code and a rebuild — cheap if you write Go, a wall if you do not. Interfaces are the exception. Each one is a plugin, a folder the agent can write for itself, but you will not find a catalogue of them to install.
- Retrieval that scales.
- There are no embeddings and no vector store. The recall tool hands the model up to 50 past-conversation summaries and asks which look relevant. That is enough for a personal agent and nowhere near enough for a knowledge base.
- The other 418,000 lines.
- A large codebase is not automatically a worse one. Those lines hold integrations, platform quirks and edge cases that 11,478 lines have simply never met. The argument on this page is that you probably do not need most of them — not that they are not there.
Where GoGogot wins
What GoGogot does that OpenClaw does not.
- It runs when you are not there.
- The agent writes its own cron entries, and they survive a restart. "Every Friday at 18:00, pull this week’s commits and send me a changelog" is a sentence, not a deployment. An agent that only exists while a terminal is open cannot do that.
- It idles at about 10 MB of RAM.
- Which is why it lives on a $4 VPS instead of on your laptop. Both linux/amd64 and linux/arm64 images are published, no GPU is involved, and the box only ever has to hold the container.
- You can read all of it.
- 11,478 lines of Go across 82 files, 9 direct dependencies, and a control flow that fits on one screen. Before you hand something a root shell on your server, being able to finish reading it in an afternoon is a security property.
- Your keys never leave your environment.
- They are environment variables on your machine. There is no GoGogot account, no telemetry and nothing that phones home — and no listener, no webhook and no EXPOSE in the Dockerfile, so nothing can reach it from outside either. Every connection is outbound.
- Any model, by slug.
- Three environment variables and a restart move it between Anthropic, OpenAI and every model on OpenRouter — Claude, GPT, DeepSeek, Gemini, Qwen, Nemotron, Kimi. You are not waiting on anyone to add a provider.
- A mobile client you did not have to build.
- Telegram is a third party and your messages pass through it — that is a real cost, stated plainly. What it buys: push notifications, file transfer both ways, and an app already on your phone. And its plugin is one Python file in your data folder, standard library only, that you can read in one sitting.
- Any interface is a plugin.
- The terminal is built in and Telegram ships as a plugin; Discord, Slack or email is one more. A plugin is a folder in /data/skills with a channel.json and a small program the core talks to in JSON lines over stdin and stdout — the core keeps the owner check, the rendering and the commands. Ask for one and the agent writes it from the bundled add-channel skill and starts it, with no rebuild.
The short version
Which one should you run?
- Use OpenClaw
- when the agent’s job is next to your code — reading the repository you are in, running your test suite, editing files you are about to review in your editor.
- Use GoGogot
- when the agent’s job is on a server — long-running, scheduled, reachable from a phone, and cheap enough to leave running for a month without thinking about it.
- Use neither
- when more than one person needs access. Nothing in GoGogot models a second user, and bolting one on is not a configuration change.
Asked and answered
Questions people ask before switching.
- Is GoGogot an OpenClaw alternative?
- For one specific job, yes: running an agent on a server you own, reachable from your terminal, Telegram or any interface you plug in, with your API keys in your own environment. GoGogot is 11,478 lines of Go against roughly 430,000 lines of TypeScript, 9 direct dependencies against 800+, and about 10 MB of RAM at idle against roughly 450 MB. It is not a drop-in replacement — it has a console chat, but no editor integration and nothing that works inside the repository you have open.
- What does self-hosted actually mean here?
- The agent process, its shell, its files, its memory and its scheduler all run in a container on your machine, and everything it writes lands in a directory you mounted. What is not self-hosted is the model: prompts still go to Anthropic, OpenAI or OpenRouter over their API, and that is the one dependency you cannot remove.
- What does it cost to run?
- A $4/month VPS and whatever your model provider charges. A typical session — roughly 50K tokens in and 10K out — is about a cent on DeepSeek V4 Flash and stays well under a dollar on frontier models. GoGogot itself is MIT licensed, with no seats, no tiers and no account.
- Which models does it work with?
- Set GOGOGOT_PROVIDER to anthropic, openai or openrouter, set GOGOGOT_MODEL, and supply the matching API key. Any OpenRouter slug works, so Claude, GPT, DeepSeek, Gemini, Qwen, Nemotron and Kimi all run without a code change. Switching model is three environment variables and a restart.
- Do I need a GPU?
- No. The model runs on your provider’s hardware, so the host only has to hold a ~206 MB image and about 10 MB of resident memory. Images are published for linux/amd64 and linux/arm64.
- Is it safe to give a language model a shell?
- Not unconditionally. The bash tool runs real commands as root inside the container, and the work directory is a real directory on your host that you mounted in — Docker is the only boundary there is. Run it on a box you can afford to rebuild, and mount read-only anything you would not want rewritten.
- How long does it take to set up?
- To try it, one docker run -it with three values — a provider, a model and an API key — and it answers in your terminal. To leave it running on a server, add a Telegram bot token from @BotFather and your numeric Telegram user ID: five values, and it is answering you in Telegram about a minute later.
- Can I talk to it somewhere other than Telegram?
- Yes. The terminal is built in, Telegram ships as a plugin, and several can run at once. Any other interface — Discord, Slack, email — is a plugin: a folder in /data/skills with a channel.json and a small program the core talks to in JSON lines over stdin and stdout. You can write one, or ask the agent to connect itself and it writes one from the bundled add-channel skill and starts it without a rebuild. Its token goes in the container environment, not the chat. Only the terminal and Telegram ship; the rest you add.
Try it instead of reading about it
Run GoGogot in one container.
docker run -d --restart unless-stopped \
--name gogogot \
-e TELEGRAM_BOT_TOKEN=<token> \
-e TELEGRAM_OWNER_ID=<your-id> \
-e GOGOGOT_PROVIDER=openrouter \
-e OPENROUTER_API_KEY=<key> \
-e GOGOGOT_MODEL=deepseek/deepseek-v4-flash \
-v ./data:/data \
-v ./work:/work \
octagonlab/gogogot:latestFive values are yours to fill in: a Telegram bot token, your own numeric Telegram ID, a provider, a model and the matching API key. Nothing else is configuration.
No bot yet? Run it with -it and only the last three, and it opens a chat in your terminal instead.