Skip to content

Workbench redesign: make dev mode an application explorer with live route rendering, MCP/hooks traces, and embedded host sessions #600

Description

@ScriptedAlchemy

Problem

The current Workbench exposes a large number of framework-oriented pages (Overview, Routes, MCP, Hooks, Playground, Artifacts, Comparisons, Evals, Logs, Hosts, etc.) and much of the useful application behavior is split across them.

That makes the dev experience feel like an administrative console for Agent Bundle internals rather than the dev server for the plugin being built.

For a meta-framework whose product intent is roughly "Next.js for agent-host plugins", the default development experience should answer four questions immediately:

  1. What surfaces does my plugin expose?
  2. What does this route actually render/return?
  3. What happens when Claude/Codex/Cursor invokes it?
  4. Which hooks/events/MCP calls fired, in what order, with what context/result?

Today the Routes page is primarily a table/catalog with source/config/input information. Tool routes can hand off to a separate MCP session, while non-tool routes often stop at validation. Hooks, MCP, logs, runtime/App preview, and host behavior live in separate top-level pages. That is technically powerful but cognitively fragmented.

Direction

Reframe Workbench as an application explorer + live host lab over the canonical Application IR / manifest from #592.

The primary UI should be centered around one navigable tree of the plugin's actual surfaces, not around Agent Bundle subsystems.

Illustrative shell:

┌─────────────────────────────────────────────────────────────────────────────┐
│ cargo-hauler                                      build ✓  Claude ● Codex ○ │
├──────────────────────┬─────────────────────────────────────┬────────────────┤
│ APPLICATION          │ ROUTE / SURFACE                     │ INSPECTOR      │
│                      │                                     │                │
│ MCP                  │ hauler_status                       │ Input          │
│  Tools               │                                     │ Context        │
│   hauler_status  ◀   │ [ rendered Agent document ]         │ Trace          │
│   hauler_request     │                                     │ Projection     │
│   hauler_result      │ daemon running ...                  │ Raw MCP        │
│  Resources           │ ...                                 │ Source         │
│  Prompts             │                                     │                │
│  Apps                │ ─────────────────────────────────── │                │
│   dashboard          │ Structured result                   │                │
│                      │ { ... }                              │                │
│ Events / Hooks       │                                     │                │
│  session/start       │ [ Run ] [ Open in host ]            │                │
│  tool/before         │                                     │                │
│  tool/after          │                                     │                │
│  stop                │                                     │                │
│                      │                                     │                │
│ CLI                  │                                     │                │
│  request             │                                     │                │
│  status              │                                     │                │
│ Scripts              │                                     │                │
├──────────────────────┴─────────────────────────────────────┴────────────────┤
│ TRACE  session/start → tool/before → tools/call hauler_status → tool/after │
└─────────────────────────────────────────────────────────────────────────────┘

The exact visual design is open. The information architecture is the important part.


1. One application navigation tree

Replace most top-level product navigation with a route/surface tree derived from the compiled application graph.

Suggested groups:

MCP
  Tools
  Resources
  Prompts
  Apps

Events / Hooks
  session/start
  agent/start
  tool/before
  tool/after
  stop
  ...

CLI
Scripts
Skills
Rules / Commands

Each leaf is a first-class application surface.

Selecting a leaf opens the same central route workspace regardless of kind.

Do not make users think "Routes page vs MCP page vs Hooks page" to inspect one logical route.

Keep framework/admin views secondary

Artifacts, diagnostics, projection comparisons, eval management, raw logs, and build internals remain useful, but should move behind an Inspect, Build, or advanced/devtools area instead of defining the primary navigation.

2. Render the route as the primary result

For executable/rendered routes, the center pane should show what the plugin author actually created.

For a tool route:

Input controls
   ↓
Run
   ↓
Rendered Agent Document
Structured result
Metadata
Progress stream

The rendered Agent Document should be visually rendered, not primarily shown as JSON/protocol envelopes.

Allow tabs/toggles for:

  • Rendered
  • Structured result
  • Raw AgentDocument
  • MCP projection
  • CLI projection, when available

But Rendered should be the default.

This is analogous to a web framework dev server showing the page before showing request headers or compiled chunks.

3. Every executable route should be directly runnable

The current Routes UX has a significant distinction where tools can open in MCP while other route kinds often provide validation only.

Workbench should have one invocation abstraction capable of running any route that Agent Bundle can execute safely in dev:

  • MCP tools;
  • prompts/resources where meaningful;
  • CLI routes;
  • scripts;
  • semantic event routes/hooks;
  • App/browser routes;
  • future page routes.

For event routes, provide generated event-input forms plus host fixtures/presets:

Event: tool/before
Host fixture: Claude | Codex | Cursor | Canonical
Payload: {...}

[ Run event ]

Then render:

Canonical input
Observed request context
Providers
Returned decision / Agent document
Projected Claude hook result
Projected Codex result
Projected Cursor result

4. Treat MCP as a route projection, not a separate product page

The existing MCP tooling is extensive and should be reused, not discarded.

Move its useful pieces into contextual panes around MCP surfaces:

When selecting MCP > Tools > hauler_status:

  • list schema/config;
  • invoke it directly;
  • render the result;
  • show structuredContent/content/_meta;
  • show MCP protocol trace;
  • preview its bound MCP App;
  • inspect/list related resources/prompts;
  • optionally open the full raw MCP session inspector.

The standalone "MCP page" can survive as an advanced protocol session view, but normal tool development should not require navigating away from the route.

5. Treat hooks/events the same way

Hooks should appear beside tools in the application tree.

Selecting Events > tool/before should show:

  • semantic event name;
  • source;
  • supported host projections/capabilities;
  • canonical payload schema;
  • host-specific input examples;
  • Run button;
  • rendered/context result;
  • host-lowered hook response;
  • recent live invocations of that hook.

The current separate Hooks area becomes a contextual event simulator/live history rather than a parallel navigation universe.

6. Add a unified live invocation trace

The most useful debugging surface is not a generic log stream. It is a correlated timeline of application activity.

For example:

22:41:04.101 Claude session started
22:41:04.118 event session/start
               context.host = claude
               result = continue + context
22:41:09.532 tool/before
               tool = Bash
22:41:09.541 MCP tools/call hauler_status
               input = {...}
               provider haulerDaemon 3.2ms
               render shell 8.1ms
               render complete 14.7ms
22:41:09.558 tool/after
22:41:09.562 notice delivered

Each trace entry should be clickable and open the corresponding route with that invocation snapshot loaded.

Trace should correlate:

  • host session / conversation;
  • semantic event routes;
  • MCP requests;
  • route execution;
  • providers;
  • state/notices where relevant;
  • render events/progress;
  • projection/lowering;
  • diagnostics/errors.

This should consume the same execution tracing from the one execution kernel described by #592 rather than adding Workbench-only instrumentation semantics.

7. Embedded real host sessions

Add an optional Hosts panel based on PTY + terminal rendering (for example xterm.js or equivalent) so developers can launch real Claude Code / Codex / other CLI hosts already attached to the dev plugin.

Illustrative layout:

Hosts
  Claude ●
  Codex  ●
  Cursor external

┌────────────────────────────────────────────┐
│ Claude                                     │
│ > what cargo jobs are currently running?  │
│                                            │
│ ...                                        │
└────────────────────────────────────────────┘

Workbench/server responsibilities:

  • allocate PTY;
  • launch the real host process with the dev plugin already installed/attached through the existing stable dev proxy/epoch mechanism;
  • stream PTY bytes to the browser terminal;
  • resize terminal;
  • terminate/restart explicitly;
  • correlate the host process/session with the unified invocation trace.

The browser terminal should be a view onto a real local process, not a simulated chat UI.

Security / authority

This is explicitly developer-local functionality.

  • no arbitrary remote PTY exposure;
  • bind through the existing authenticated foreground dev server;
  • explicit host launch action;
  • project-root/workspace authority is visible;
  • preserve host's own permission/consent behavior rather than bypassing it;
  • terminal and route invocation share trace IDs but not hidden credentials/content beyond what the host actually emits.

8. "Open in host" from any relevant route

For a route, provide:

Run directly
Open in Claude
Open in Codex

Open in host should focus/start that host terminal and seed an appropriate developer prompt or invocation context where feasible.

For example a tool could seed:

Call the cargo-hauler hauler_status tool and explain the result.

The important point is not prompt generation. It is making the loop:

route source -> direct run -> real host run -> hook/MCP trace

one click apart.

9. Bound MCP Apps/browser previews to their routes

If a tool has _meta.ui.resourceUri -> dashboard, its App preview should appear directly in the selected tool's workspace.

Likewise selecting the App itself should show:

  • actual browser view;
  • bound tools;
  • live client calls in the same trace;
  • structured route data;
  • host profile selector where MCP App hosts differ.

Do not require the user to mentally join Routes, MCP, and an App preview page.

This aligns with #564/#594.

10. Make the route URL-addressable

Workbench navigation should map naturally to URLs such as:

/routes/mcp/hauler/tool/hauler_status
/routes/events/tool/before
/routes/cli/status
/routes/apps/hauler/dashboard
/hosts/claude
/trace/<invocation-id>

Exact paths are non-normative.

Benefits:

  • refresh preserves context;
  • links in diagnostics jump directly to the route;
  • trace entries deep-link;
  • browser history works;
  • tests can address a route deterministically.

11. Simplify the default nav aggressively

Target primary nav should be closer to:

Application
Host sessions
Trace
Diagnostics

with Application expanded into the route tree.

Advanced secondary surfaces can include:

Build / artifact
Projection comparison
Evals
Raw logs
Framework internals

A plugin author should not need to know which internal Workbench subsystem owns a capability.

12. Reuse current Workbench machinery

This is primarily an information-architecture consolidation, not a request to throw away existing implementation.

Existing useful systems include:

  • compiled route catalog and generated schema editor;
  • MCP session controller;
  • MCP App renderer/preview;
  • runtime bridge/trace;
  • hook simulator/client;
  • playground/script execution;
  • live host dev proxy/adoption;
  • diagnostics/log clients;
  • artifact/projection inspection.

The problem is that these currently present as separate products.

Refactor them behind one route-centric shell.

Relationship to #592

This should be the Workbench manifestation of #592.

If #592 says:

one application graph, one execution kernel, many projections

then Workbench should visually present exactly that:

one application tree
      ↓
one selected route
      ↓
run/render
      ↓
inspect projections + live host executions

Workbench must consume the canonical Application IR/manifest and execution trace rather than maintaining independent MCP/hook/playground catalogs where that can be avoided.

Non-goals

  • building a fake Claude/Codex chat clone;
  • replacing the actual host UIs;
  • making PTY hosting part of production plugin artifacts;
  • exposing arbitrary system terminals remotely;
  • turning Agent Bundle into an IDE/code editor;
  • hiding raw MCP/hook protocol data from advanced users.

Acceptance criteria

  • Primary navigation is application/surface-centric rather than subsystem-centric.
  • MCP tools/resources/prompts/apps, semantic event/hooks, CLI routes, and scripts are navigable in one application tree.
  • Selecting an executable route shows its rendered output as the primary result.
  • Tools can be invoked without navigating to a separate MCP page.
  • Event/hook routes can be invoked with canonical or host fixture payloads and show the projected host result.
  • MCP raw protocol inspection remains available contextually/advanced.
  • Bound MCP App previews appear from the relevant tool/App route workspace.
  • Live route/event/MCP calls produce one correlated trace timeline.
  • Clicking a trace entry opens the corresponding route/invocation snapshot.
  • Claude/Codex CLI hosts can optionally be launched in authenticated local PTYs embedded in the Workbench.
  • Host terminals are attached to the current dev plugin/proxy and their plugin calls appear in the same trace.
  • Routes and trace entries are deep-linkable by URL.
  • Artifacts/comparisons/evals/raw logs remain available but are secondary developer tooling.
  • The redesign reuses existing Workbench controllers/clients rather than duplicating MCP/hook/runtime semantics.

Related: #592, #564, #594, #595, #596.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestmeta-frameworkAgent Bundle compiler-coupled meta-framework

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions