{"slug": "exo-a-recursive-agent-harness-that-can-modify-itself-at-runtime", "title": "Exo: A recursive agent harness that can modify itself at runtime", "summary": "Exo, a new open-source AI agent harness from the project exoharness, enables recursive self-improvement by allowing agents to modify their own code, prompts, memory, and tooling at runtime, with an immutable event log to prevent infinite loops. The framework, which requires an OpenAI or OpenRouter API key and supports tools like Docker, aims to let future models evolve every aspect of the system safely and incrementally, and is designed for long-running agents that can be accessed via CLI, web chat, or integrations like Discord and WhatsApp.", "body_md": "Exo is a systems approach to recursive self improvement. In short, it's a complete AI agent harness (supporting tools, tasks, integrations, etc. similar to OpenClaw, Pi or Hermes), with the crucial difference that it has full visibility into both its code and runtime logs. This allows Exo to incrementally improve every aspect of itself, clone itself, and even manage a lineage of clones.\n\nWhile most agents can do some form of self improvement, such as updating memory or creating skills, Exo is fully recursive in that it can clone or operate on any aspect of itself, from prompts, to memory, tooling, or even basic harness policy itself. It's architected so that this evolution can be done incrementally and (mostly) safely. The only thing it can't muck with is an event log which provides a canonical history of what it's tried to prevent getting stuck in recursive loops.\n\nThe goal of Exo is to be the minimal framework possible to give an agent full ability for recursive self improvement. Why would you want such a thing?\n\n- It's a good agent framework to build exactly the agent you like, that's maximally Bitter Lesson aligned. Future smarter models can evolve every aspect of the system at runtime, and do it safely with full history.\n- It's a good framework to allow AI models to solve complex problems by iterating on system level properties. We've had agents learn to play games, cost-optimize themselves, build complex systems. In each case, it required the agents to modify themselves heavily beyond memory.\n\nIn short, we think this is the best way to take advantage of the growing power of AI models when building long-lived agents.\n\nFor a more complete description of the architectural philosophy read\n[A Systems View of Recursive Self Improvement](/exoharness/exo/blob/main/exo/docs/RSI.md)\n\nExo was designed to be incredibly simple to use. With just a few commands you should have a fully functional agent who can do standard agent tasks (computer use, research, coding etc.) but can also extend itself as needed.\n\nTo use Exo as an agent, you'll need an OpenAI or OpenRouter API key. If you have that, simply do the following:\n\n```\ncurl -fsSL https://raw.githubusercontent.com/exoharness/exo/main/setup.sh -o setup.sh\nbash setup.sh\n```\n\n*Note that Exo requires git and Docker. The setup script offers to install\nthem if missing, and installs pinned node, pnpm, and rust toolchains\nautomatically via mise.*\n\nIt'll build Exo (may take a few minutes), then ask for the API key and your name and your agent's name, and give you the command to start Exo (./exo.sh).\n\nFor the basic setup of Exo, there are two methods of interacting: on the command\nline where you ran the setup script (or `exo.sh`\n\n), and through a browser using\nexo-chat.\n\nExo agents are intended to be long-running. For example, if you `/exit`\n\nfrom the\ncommand line you can still interact with it via exo-chat. And if you do exit,\nyou can always connect back to the CLI chat using `./exo.sh`\n\n.\n\nExo-chat is a minimal, web-based chat where you can talk to your agent from anywhere on the internet. However, Exo also supports standard chat applications like IRC, Discord, WhatsApp, Signal, or Slack. To configure them, just ask your agent to do so.\n\nIf you ever forget or lose your exo-chat URL, you can just ask Exo for it from the command line.\n\nA good end-to-end test is to have it install a tool in the sandbox and use it with the task scheduler. For example, try the following prompt:\n\n```\nInstall python3 and curl in the sandbox. You don't need sudo, just use apt-get. Once you've done that, please\nschedule a task to run every minute that grabs news headlines from the BBC RSS feed. Only print new headlines you've\nnot printed before. Please print them here.\n```\n\n`setup.sh`\n\nis only for the first-time install. After that, `./exo.sh`\n\nin the\nrepo root is the day-to-day control surface for your agent. Running it with no\narguments starts (or reconnects to) the local agent so you can talk to it via\nthe command line.\n\n```\n./exo.sh                # start the full stack (Docker sandbox, ExoChat) and open the CLI chat interface\n./exo.sh list           # list agents and conversations\n./exo.sh stop-all       # stop the scheduler and adapter runners; state is preserved\n./exo.sh fresh          # rebuild, delete all agents/conversations, start clean\n./exo.sh setup-profile  # update your local profile (name, preferences)\n./exo.sh --help         # all commands and options\n```\n\nThe most common command for the `./exo.sh`\n\nstarter script: use `stop-all`\n\nwhen you want to shut Exo down,\nplain `./exo.sh`\n\nto bring it back with all state intact, and `fresh`\n\nwhen you\nwant to throw everything away and start over with a brand-new agent.\n\nBy default `./exo.sh`\n\nuses the `canonical`\n\ntemplate: a Docker sandbox, the repo\nmounted at `/workspace/exo`\n\n, and ExoChat for remote access. Pass\n`--template dev`\n\nfor a developer variant that sets up IRC and Discord instead\nof ExoChat, or `--template minimal`\n\nfor a bare REPL with no Docker defaults or\nadapter setup.\n\nTo see what the agent is doing, follow its durable event stream from another terminal:\n\n```\npnpm events:tail\n```\n\nThis shows recent messages, tool calls and results, and turn boundaries, then\ncontinues following new events. It defaults to the `exo-agent`\n\nagent and `dev`\n\nconversation. Pass different slugs when needed, or change how much history is\nshown:\n\n```\npnpm events:tail exo-agent dev --history 50\npnpm events:tail exo-agent dev --history 0  # new events only\n```\n\nPress `Ctrl-C`\n\nto stop following events.\n\nThe scheduler and adapter services have separate host-side logs:\n\n```\ntail -F .exo/exo-scheduler.log  # scheduled task execution\ntail -F .exo/exo-adapters.log   # adapter startup, delivery, and failures\n```\n\nThese logs and the canonical event history remain available across ordinary\nrestarts. `./exo.sh fresh`\n\ndeletes agent and conversation state, so preserve\nanything needed for debugging before using it.\n\nThere are only a few key components you need to know about to understand how\nExo works. You can use Exo like any agent without understanding these internals.\nBut having a basic idea will help you more effectively guide Exo if you want it\nto evolve itself. For a deeper dive into these concepts, see\n[ exo/docs/EXO-BASICS.md](/exoharness/exo/blob/main/exo/docs/EXO-BASICS.md).\n\n**Basic Loop** Exo runs a host-side loop that receives user messages and adapter\nevents, builds the model context, exposes the active tools, executes tool calls,\nand records the results. This loop runs outside the sandbox.\n\n**Sandbox** Exo uses a vanilla unbuntu sandbox where\nit can install packages, run commands, and experiment. It can snapshot and\nrewind that sandbox when it needs to back out from changes.\n\n**Tools and Adapters** These are the core methods for Exo to interact with the\nworld and with itself. Tools are functions the model can call, such as executing\na shell command with the `shell`\n\ntool. Adapters are long-running host processes\nfor stateful external channels such as ExoChat, IRC, WhatsApp, Signal, and\nDiscord.\n\n**Canonical State** Exo stores durable conversation history, tool activity,\nadapter events, artifacts, and sandbox records outside the sandbox filesystem.\nThis state is not rewound when the sandbox is rewound, so the agent can\nreconstruct what happened across experiments, restarts, and rebuilds.\n\n**Source Code** Exo's source code is mounted in the\nsandbox at `/workspace/exo`\n\n. The agent can read and modify that code and has\ntools that allow it to rebuild and restart itself and all components. This allows Exo to be able to modify every aspect of itself.\n\n**REPL and ExoChat** The minimal setup gives you two ways to talk to Exo: the\nlocal REPL, which is a command-line chat interface, and ExoChat, a simple\ntext-only web chat hosted at `https://exoharness.ai`\n\n.\n\nIf you have your agent up and running, there really is little else you need to understand or do other than talk to it and ask it to evolve itself in a direction that you want. It already contains basic support for services such as WhatsApp, Slack, Discord, Signal, and IRC. But it's very easy to extend it to support more things\n\nWhile there are many, the most obvious is that right now there isn't a simple way for Exo to do generalized computer use of a windowed system. This is in the works and should land soon. But in the meantime, you can get a long way by asking Exo to build such a thing for itself.\n\nThere are a number of prompt files that Exo uses during runtime. You can edit these directly or ask Exo to.\n\n`exo/prompts/me.md`\n\n: the committed core identity and operating rules for the default Exo agent.`.exo/exo-profile.md`\n\n: local, git-ignored profile instructions such as your name and machine-specific preferences. Create or update it with`./exo.sh setup-profile`\n\n.`exo/harness.ts`\n\n: assembles the full prompt sent each turn, including dynamic instructions about tools, adapters, memory, sandbox behavior, and self-maintenance.\n\nAfter changing prompt files, ask Exo to rebuild/restart itself for them to go in use.\n\nBeyond built-in capabilities, Exo also supports human-authored extensions that add explicit, task-specific functionality, as shown in these examples:\n\n[ExoWorker](https://github.com/exoharness/exo/tree/exo-worker/examples/exo-worker)is a long-running autonomous worker with task-tree planning, durable memory, adapters, scheduling, and host-injected tools.[Gameboy Agent](/exoharness/exo/blob/main/examples/gameboy-agent)gives Exo an emulator sidecar and tools for playing Game Boy games.\n\nBuilding your own Exo? Share it with us on\n[Discord](https://discord.gg/8x23hdBJU6).\n\nExo is still in the early stages of development, with many areas of active work. We welcome participation ranging from core development to feedback from users. Current areas of focus include:\n\n**Autonomous self-maintenance:** Exo should periodically inspect its context, memories, tools, scheduled tasks, and running processes; identify stale or conflicting state; propose or perform safe cleanup; and record what changed. Success means a long-running agent becomes more organized over time rather than accumulating context and tool rot.**Recoverable, portable execution:** Schedulers, adapters, and other long-running work should persist enough state to resume after process, machine, or network failure. Work should be movable between compatible machines without losing canonical history or duplicating side effects.**High-level multi-agent orchestration:** Cloning and lineage are useful primitives, but agents also need policies for when to clone, how to divide work, how children report results, how conflicting conclusions are resolved, and when a lineage should stop. The goal is a family of agents that produces better results than one agent without creating unbounded cost or coordination overhead.\n\nMIT", "url": "https://wpnews.pro/news/exo-a-recursive-agent-harness-that-can-modify-itself-at-runtime", "canonical_source": "https://github.com/exoharness/exo", "published_at": "2026-08-25 07:14:50+00:00", "updated_at": "2026-08-25 07:45:20.347769+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-agents", "ai-tools", "ai-research"], "entities": ["Exo", "exoharness", "OpenAI", "OpenRouter", "OpenClaw", "Pi", "Hermes", "Docker"], "alternates": {"html": "https://wpnews.pro/news/exo-a-recursive-agent-harness-that-can-modify-itself-at-runtime", "markdown": "https://wpnews.pro/news/exo-a-recursive-agent-harness-that-can-modify-itself-at-runtime.md", "text": "https://wpnews.pro/news/exo-a-recursive-agent-harness-that-can-modify-itself-at-runtime.txt", "jsonld": "https://wpnews.pro/news/exo-a-recursive-agent-harness-that-can-modify-itself-at-runtime.jsonld"}}