Why some extensions will not run on e
e is a minimal fork of the pi coding agent. It follows the strict rules set out in the founding post, "What I learned building an opinionated and minimal coding agent" by Mario Zechner: a minimal system prompt, a minimal toolset, no built-in to-dos, no plan mode, no MCP, no background bash, no sub-agents. The full list of binding commitments is on the promise page.
Upstream pi has added features that conflict with those rules. e does not carry them, so an extension that depends on them cannot work in e.
What e does not have
- Deferred tools (
exposure: "hidden"or"model-only"). A deferred tool is declared to the model but hidden until a search step loads it. That is tool search under another name. e has no tool search. - Tool-loadout hooks (
prepareLoadout). These change which tools the model sees partway through a conversation. e always sends the full, current tool list. - Mid-conversation tool changes. Sending
tool_addition,tool_removalordefer_loadingon the wire. e never sends them to any provider.
What this means for an extension
If an extension declares one of these surfaces, e will not load it as written. e checks for them at install time and prints a warning that points here. The extension may still work once its author removes the deferred or loadout behavior, because ordinary tools, commands, and event hooks are supported.
Why e will not add them
Each of these features hides part of what the model sees. The founding post asks for the opposite: the user should be able to inspect every aspect of the interaction, and no harness should inject context that is not visible in the UI. A tool the model can call but cannot see, or a tool list that changes between requests, breaks that. e treats such a change as a violation of its promise, not a missing feature.
What to do
- Installing an extension with a flagged surface shows a warning and continues.
- If you are the author, remove
exposurevalues other than"direct"and dropprepareLoadout. Keep the tool list fixed. - If you need deferred tools or dynamic tool loading, use upstream pi instead. e will not carry that code.