wooden-umbrella-84098
05/16/2026, 5:58 PMhundreds-twilight-32833
05/16/2026, 6:22 PMcalm-artist-7206
05/16/2026, 6:22 PMhundreds-twilight-32833
05/16/2026, 6:26 PMwooden-umbrella-84098
05/16/2026, 6:26 PMwooden-umbrella-84098
05/16/2026, 6:31 PMcalm-artist-7206
05/16/2026, 6:41 PMcalm-artist-7206
05/16/2026, 6:45 PMcalm-artist-7206
05/16/2026, 6:50 PMcalm-artist-7206
05/16/2026, 6:57 PMbland-bear-604
05/16/2026, 7:16 PMtool_call, context) that let extensions modify agent behavior, not just UI
• ctx.ui API with slots for status bar, widgets above/below editor, footer, header, working indicator, autocomplete providers — all first-class
• Custom interactive components via ctx.ui.custom() with full keyboard handling
• registerCommand, registerShortcut, registerFlag for slash commands and keybindings
• registerMessageRenderer for custom tool call/result display
• Hot reload via /reload command
What #481 has that pi doesn’t need:
• React component model (pi is terminal-native, so no React)
• Route-based add-on pages in a web sidebar
• CSS-only theming add-ons
Suggestions:
1. Steal pi’s event hook model. The on(event, handler) pattern with typed results is clean and would map well to Agent Canvas. Extensions that can intercept tool calls or inject context are far more powerful than UI-only add-ons.
2. Define explicit UI slots early (like pi’s setStatus, setWidget, setFooter). This avoids the route-less JavaScript question in #481 — instead of asking whether add-ons should return root React components or IIFE scripts, give them named slots to target.
3. Start with Option A (source/React components) for the first version. Pi proves that having extensions compiled alongside the host app works great for dev. The IIFE/runtime path can come later for installed users.
4. The register(api) pattern in #481 already mirrors pi’s export default function(pi) — that’s the right shape.
I wrote up pi’s UI extension design here if useful: https://gist.github.com/smolpaws/41ca749f31474bc2bb9e16620a316d6cbland-bear-604
05/16/2026, 7:19 PMAgentServerUIProviders, styleOverrides, CSS scoping via data-agent-server-ui
• No frontend extension/addon system yet
What Devin’s prototype (#481 branch) adds:
• Addon manifest (addon.json) with sidebar/route/styling config
• Registry generation script for build-time discovery
• AddonApi — gives addons fetchJSON, navigate, queryClient
• Routed addon pages under /addons/:addonId/* with error boundaries
• App-level CSS injection for style-only addons
• Two working examples: agent-status (routed page) and canvas-polish (CSS-only theme)
The gap vs pi: Devin’s prototype is routed pages + CSS theming. That’s useful but limited. Pi’s power comes from extensions that can hook into the agent’s runtime AND render UI in-context. For agent-canvas specifically, the highest-value additions would be:
1. Expose backend hook events to frontend addons. The WebSocket already streams HookExecutionEvent to the UI (agent-canvas renders them in chat). Addons should be able to subscribe to these events and react — e.g., show a custom approval dialog when a PreToolUse hook fires, or display tool results in a custom panel.
2. Add UI slots that addons can target. The conversation view is where users spend time. Slots like: sidebar widgets, conversation header actions, custom event renderers (like pi’s registerMessageRenderer), and status indicators in the conversation footer. These would be far more useful than just standalone routed pages.
3. Extend AddonApi with conversation context. Right now addons get fetchJSON and navigate but no access to conversation state, events, or the WebSocket. Adding onEvent(type, handler), getConversation(), and sendMessage() would make addons actually interactive.
4. Keep the build-time compilation model. Devin’s Vite-compiled approach is the right call for now. HMR during addon dev is a huge DX win. Runtime IIFE loading can come later for installed users.
The “coming soon” Plugins tab is a natural home for addon management UI. And the existing AgentServerUIProviders wrapper is already set up for scoped rendering — addons could mount inside that scope and get theming for free.calm-artist-7206
05/16/2026, 7:23 PMbland-bear-604
05/16/2026, 7:26 PMAddonApi with event subscriptions and conversation context. 🐾hundreds-twilight-32833
05/16/2026, 7:28 PMbland-bear-604
05/16/2026, 7:29 PMchilly-france-44439
05/16/2026, 7:51 PM