A frontier-model agentic loop, a per-user Docker sandbox, 65 tools, MCP support, GitHub integration, and a web dashboard over the same workspace - reachable from a Discord mention or a browser tab. Here's how the inside works.
Every message you send gets routed through the same agentic loop you'd build with the Anthropic, OpenAI, or Vercel AI SDKs - except it's hosted, the tools are pre-wired, and the workspace persists across messages.
Your message hits Ergod's gateway. It checks rate limit, server config, role/channel allowlists, then routes to your container.
Your active /session is loaded - full message history, system prompt, tool schemas, MCP-discovered tools merged in.
A Linux container with your /workspace volume mounted. Cold start up to ~20s, warm replies 10-15s. Code, files, installed packages - all yours.
The model writes code, runs commands, reads files, fetches the web, fixes its own errors. Until it's done.
Finished files attached in the channel. The same files show up in the dashboard file browser, where you can open one in place, download it, or mint a public link. Tool calls and reasoning stream back as they happen, on both surfaces, from one state machine.
Each Discord user gets their own container. Not a shared notebook, not an emulated REPL - a real Linux box with disk, network, and an apt of installed tooling.
/workspace volume survives across messages, sessions, and restarts. Pip installs stick. Generated files stick. Reset with /workspace reset.$ uname -a
Linux ergod-u-487a 6.1 #1 SMP x86_64 GNU/Linux
$ which python node go cargo
/usr/local/bin/python
/usr/local/bin/node
/usr/local/go/bin/go
/root/.cargo/bin/cargo
$ ls /workspace
README.md site/ scripts/ game_state.json
$ pip install pandas
Successfully installed pandas-2.2.3
# (still installed next message)
$ curl https://api.github.com/zen
Anything added dilutes everything else.Every tool is exposed as a structured tool call to the model - same schema as the Anthropic API, same patterns as Claude Code or aisdk.dev. You don't configure any of it.
ReadRead a file with offset/limit pagination. Aliased as read_file.
WriteCreate or overwrite a file in the workspace. Aliased as write_file.
EditSurgical find-and-replace with unique-string anchoring. Aliased as edit_file.
MultiEditSeveral anchored edits to one file applied as a single operation.
GlobFind files by pattern. Aliased as list_files.
GrepRipgrep-backed regex search over file contents, with context lines.
BashArbitrary shell inside the container - pipes, env, subshells, all of it. Also how git and gh run.
REPLPersistent Python or Node interpreter. Variables, imports and state survive across calls, unlike Bash. Self-hosted only - it runs on the host rather than inside your container, so it is blocked on the hosted product and the model never sees it.
CodeOutlineStructural outline of a source file - symbols and signatures without reading the whole thing.
LSPPython language server: go-to-definition, references, hover, diagnostics, rename. Loads on demand.
WebSearchLive search. Returns titles, URLs and snippets only - the agent follows up with WebFetch.
WebFetchFetch a URL as clean text. Falls through to a headless browser when a site blocks the fast path or renders via JS.
BrowserNavigateDrive a real headless browser - navigate, click, fill, evaluate. On demand, behind a ToolSearch lookup.
BrowserScreenshotScreenshot the page the browser is on, returned to the model as image input.
AttachDeliver workspace files to you in the channel - one file, a batch, or a zipped bundle. This is the delivery path; there is no hosted-preview tool.
GenerateImageGenerate an image into the workspace, then Attach it.
SkillLoad a saved skill - a reusable instruction bundle you registered with /skill add.
MemorySavePersist a fact about you across sessions and conversations.
MemorySearchKeyword, semantic or hybrid recall over stored memories.
MemoryListList everything currently stored about you.
MemoryDeleteDelete a stored memory by name.
SessionSearchSearch across your past sessions for something you already worked on.
EnterPlanModePlan a large change and get your sign-off before touching files.
TodoWriteTrack multi-step work in the open, so you can see where a long task is.
AgentDelegate an isolated sub-task to a sub-agent. On demand, behind a ToolSearch lookup. Pro and above - Free runs one agent at a time.
ToolSearchThe lazy-loader itself. Specialized tools stay dormant until the model asks for them by name.
These are real registered tool names, as the model sees them — a representative selection, not the whole inventory. The registry holds 75 tools; 10 are blocked on the hosted product because they run outside your container, leaving 65reachable from Discord. All 65 are listed on the How it thinks page. Git and GitHub are not separate tools: after /github link, the agent runs ordinary git and gh through Bash with your token in the environment. Sharing a file on a public URL is a dashboard action, not a tool - see below.
Connect remote HTTP MCP servers (Linear, Sentry, Supabase, Notion, Stripe, your own) - or run stdio MCP servers directly inside your sandbox. Discovered tools merge into the model's tool list on the next turn.
Streamable-HTTP transport. OAuth or bearer-token auth. Ideal for SaaS connectors with managed servers.
/mcp add
name: linear
url: https://mcp.linear.app/sse
→ Connected linear.
→ Discovered 7 tools, 2 resources.
→ Available on next turn.The server runs as a child process inside your sandbox. Talks JSON-RPC over stdin/stdout. Perfect for npx/uvx servers.
/mcp add-stdio
name: fs
command: npx -y @modelcontextprotocol/server-filesystem /workspace
→ Launched fs.
→ 11 tools available.In a channel session, run /mcp share name: linear as the sponsor and every collaborator in that channel gets access to your Linear connector - without sharing the token. Revoke any time with /mcp unshare. Tokens, headers, and URLs are never visible to other users.
One-time. /github link with a Personal Access Token. Validated against GitHub's API, then encrypted at rest. Per-user - never shared.
Just say it. “Clone vercel/next.js, find the App Router code, and explain the dynamic-route resolver.”
Ergod edits files in the cloned repo, runs tests, and shows you the diff before committing.
Commit, push to a feature branch, open a PR with a real description, and drop the PR link in chat.
Reply to redirect: “rename the variable, update the test, repush.” Same conversation, same workspace, same branch.
Your workspace is a Docker container only your Discord user can address. No shared volumes. Channel sessions are an explicit, sponsor-confirmed exception.
GitHub PATs, MCP bearer tokens, OAuth access tokens - encrypted at rest with per-tenant keys. Never logged, never returned to the model in plaintext.
@everyone, @here, and role pings are stripped from Ergod's replies by default. Toggleable per-server.
Admins can allowlist/blocklist channels and roles. Combine with Discord's native permission system for fine-grained control.
We don't train on your messages. Conversation history is yours; delete a session to wipe it.
Every release, every limit, every bug - discussed openly in the Discord. Tell us what to harden.
Quotas are per Discord user. A user's tier travels with them across every server that has Ergod. Daily usage is denominated as a percentage of each tier's budget — heavier tasks consume more, casual chat barely registers. New accounts get a one-time welcome boost worth 3 days of Free's daily usage on top of any tier — persistent, used last, never expires.
| Free | Pro | Pro+ | |
|---|---|---|---|
| Daily usage | baseline + welcome boost | 5× Free | 10× Free |
| Cap window | daily | rolling 7-day | rolling 7-day |
| Workspace storage | 1 GB | 5 GB | 10 GB |
| Image input | ✓ | ✓ | ✓ |
| GitHub integration | ✓ | ✓ | ✓ |
| MCP (remote + stdio) | ✓ | ✓ | ✓ |
| Web dashboard (chat, files, viewer, public links) | ✓ | ✓ | ✓ |
| Slash commands in the web composer | ✓ | ✓ | ✓ |
| Persistent memory | ✓ | ✓ | ✓ |
| Direct DMs to Ergod | ✓ | ✓ | ✓ |
| /collab personal workspace | - | ✓ | ✓ |
| Sponsor channel sessions | - | ✓ | ✓ |
Premium model selection (/model set) | - | ✓ | ✓ · same set as Pro |
| Sub-agents (parallel work on one task) | - | ✓ | ✓ |
| Container idle timeout | 15 min | 60 min | 60 min |
Pro and Pro+ differ on two rows and match on every other one, which is the honest shape of the tier: Pro+ is a volume tier. It doubles the usage budget and doubles the workspace, and Pro+ subscribers get priority support from us. Same models, same sub-agents, same social layer, same idle timeout. Take it when you are running out of room on Pro — not to unlock anything, because there is nothing behind it to unlock.
Building this in-house means a Discord bot, a queue, a sandbox runtime, GitHub OAuth, MCP plumbing, a web dashboard, model routing, billing, and a year of iteration. Or:
Open-source agents exist - but you'll be on the hook
Free in 30 seconds
Free tier covers everything technical - sandbox, GitHub, MCP, memory, the web dashboard. Drop in, ship something, decide later.