Install
bun install succeeds.
Static project documentation
This site documents how the reconstructed Workbench CLI works, what the cloud and remote-control surfaces do, what state the repo is in right now, and the 20 highest-value improvements that would move it closer to a maintainable release.
bun install succeeds.
bun run build succeeds and emits
dist/cli.js.
bun run typecheck reports 4,469 TypeScript errors in
this checkout.
Remote control, teleport, direct connect, and managed settings are all materially implemented.
This repository is a reconstructed agentic CLI codebase built around Bun, React, a custom Ink fork, a large tool system, MCP integration, and several cloud-facing session flows. The central runtime is real and substantial: there is enough code here to study architecture, trace the execution path, and understand how local, remote, and teleported sessions are meant to behave.
The repo is not in release shape. The biggest gaps are missing generated or extracted source files, partial native/private shims, and heavy type drift between the recovered source and the dependency versions currently installed.
High. Most of the core execution, UI, tools, and cloud flows are present.
Medium. A fresh install now produces a working bundle, but the fallback shim layer is still fragile.
Low. The checkout currently fails typecheck at scale.
Medium. Remote-control and teleport logic are real, but the release surface is incomplete.
build.ts bundles
src/entrypoints/cli.tsx, injects a small
MACRO set, and relies on shims/bun-bundle.ts
to disable all feature flags by returning false.
src/entrypoints/cli.tsx
handles fast paths such as version printing and special entrypoints,
then hands control to src/main.tsx.
src/entrypoints/init.ts
turns on config loading, safe environment variables, TLS and proxy
setup, telemetry bootstrapping, scratchpad setup, and cleanup hooks.
src/context.ts
prepares system and user context, including git state snapshots and
CLAUDE.md memory injection.
src/QueryEngine.ts
owns turn lifecycle, message state, usage, and SDK-facing session
behavior. src/query.ts runs the actual streaming loop.
src/services/api/claude.ts streams model responses,
while src/services/tools/StreamingToolExecutor.ts and
src/services/tools/toolOrchestration.ts execute tool
calls with permission checks and concurrency rules.
src/replLauncher.tsx
mounts src/screens/REPL.tsx, which is the main full
screen interface built on top of the custom Ink implementation in
src/ink/.
src/commands.ts, tools from src/tools.ts,
MCP servers from src/services/mcp/, plugins from
src/utils/plugins/, and skills from
src/skills/.
src/bridge/, src/remote/,
src/server/, and src/utils/teleport.tsx.
| File | Role | Why it matters |
|---|---|---|
build.ts |
Bundle entry and macro injection | Defines what ships and what feature-gated code survives. |
src/entrypoints/cli.tsx |
Fast-path bootstrap | Decides whether the process becomes the CLI, a bridge, or a special worker. |
src/main.tsx |
Main runtime coordinator | Registers commands, parses options, handles resume, teleport, and remote sessions. |
src/entrypoints/init.ts |
Config, auth, network, telemetry init | Most cross-cutting startup side effects live here. |
src/context.ts |
Prompt context builder | Injects git and memory context into every session. |
src/QueryEngine.ts |
Per-session execution engine | Holds state across turns for SDK and future non-REPL usage. |
src/query.ts |
Streaming query loop | Runs model sampling, tool execution, retries, and compaction behavior. |
src/services/api/claude.ts |
Model request layer | Converts tools, context, betas, and auth into model calls. |
src/services/api/client.ts |
Provider client factory | Creates Anthropic, Bedrock, Foundry, or Vertex clients. |
src/services/tools/StreamingToolExecutor.ts |
Streaming tool runner | Controls tool concurrency, cancellation, and result ordering. |
src/screens/REPL.tsx |
Main interactive UI | Largest single UI file and the center of operator experience. |
src/services/mcp/client.ts |
MCP transport and tool binding | Connects external MCP servers into the tool layer. |
src/utils/plugins/pluginLoader.ts |
Plugin discovery and loading | Owns marketplace, cache, versioning, and local plugin resolution. |
src/skills/loadSkillsDir.ts |
Skill loader | Bridges markdown skill files into executable prompt commands. |
src/remote/RemoteSessionManager.ts |
Remote session controller | Handles cloud session messaging and permission prompts. |
src/bridge/bridgeMain.ts |
Remote-control bridge supervisor | Runs long-lived environment registration and work polling. |
src/utils/teleport.tsx |
Teleport flow | Creates or resumes sessions across machines and repositories. |
The cloud-facing part of the repo is not a single subsystem. It is a stack of session transport, bridge control, and state handoff layers.
Local CLI
|
+-- main.tsx
| |
| +-- REPL / QueryEngine / tools / MCP
|
+-- Remote session path
| |
| +-- remote/RemoteSessionManager.ts
| +-- remote/SessionsWebSocket.ts
| +-- remote/sdkMessageAdapter.ts
|
+-- Direct connect path
| |
| +-- server/directConnectManager.ts
|
+-- Remote-control bridge path
| |
| +-- bridge/bridgeMain.ts
| +-- bridge/createSession.ts
| +-- bridge/replBridge.ts
|
+-- Teleport path
|
+-- utils/teleport.tsx
+-- utils/teleport/api.ts
+-- services/api/sessionIngress.ts
Used when the REPL attaches to a cloud session. Messages come over WebSocket and are adapted back into local REPL message types.
A simpler WebSocket path that forwards structured SDK messages and permission requests directly to a remote endpoint.
A long-running environment bridge that polls for work, spawns or resumes sessions, heartbeats them, and keeps web/mobile control alive.
A session handoff path that validates git state, creates or resumes remote sessions, and restores the branch or transcript.
Enterprise settings can be fetched remotely and applied before other systems initialize, which affects policy, MCP, and auth.
MCP is the extension spine. The client layer supports stdio, SSE, streamable HTTP, WebSocket, and SDK in-process transports.
The repo contains real core logic for startup, REPL rendering, query execution, tool orchestration, MCP integration, plugin loading, skills, auth, and cloud session flows.
Several generated or extracted files are missing, some native or private integrations only have compatibility shims, and the type surface is out of sync with the installed dependency graph.
All feature flags are forced off by shims/bun-bundle.ts,
so internal or Anthropic-only paths stay dead unless they are
restored deliberately.
This is now a buildable developer artifact, not a production release. It is useful for study, customization, and targeted salvage, but not for shipping unchanged.
bun install passed.bun run build passed after wiring local file-based
stub packages for @ant/claude-for-chrome-mcp,
@ant/computer-use-*, color-diff-napi,
and modifiers-napi.
bun run typecheck failed with 4,469 TypeScript
errors.
TS7006 (2,087), TS2307 (535),
TS2339 (470), and TS2305 (410).
../../types/message.js (81),
../types/message.js (71), ./types.js (51),
src/types/message.js (20), and
../../types/tools.js (15).
color-diff-napi and modifiers-napi now
resolve, but the current placeholders silently degrade behavior.
The runtime should announce unavailable features and select TS
fallbacks intentionally.
src/entrypoints/sdk/controlTypes.ts.
The code imports ./sdk/controlTypes.js from many places,
but only controlSchemas.ts exists. The protocol surface is
incomplete without the generated types.
src/types/message.ts.
Message types are imported all over the runtime, UI, and cloud
layers. Their absence alone causes a large fraction of the typecheck failures.
src/types/tools.ts and related shared type files.
Tool progress and transport types are missing, which breaks tool UIs,
structured IO, and process-user-input helpers.
src/utils/secureStorage/types.ts,
assistant helpers, and transport helper files should either be recreated
or fully compiled out of the external build.
contextCollapse.
Only src/services/contextCollapse/index.ts exists, but the
repo still imports operations.js and persist.js.
That makes the feature half-stubbed and half-live.
MACRO.PACKAGE_URL,
MACRO.NATIVE_PACKAGE_URL, and
MACRO.VERSION_CHANGELOG, but they still point to a
placeholder release story instead of a maintained updater pipeline.
src/utils/autoUpdater.ts short-circuits
assertMinVersion() immediately, which makes the rest of the
minimum-version path dead code.
react/compiler-runtime intentionally.
Roughly 395 files import the compiler runtime helper. The repo needs
either the right typings and transform pipeline, or a conversion back
to normal authored TSX.
src/main.tsx into domain modules.
It currently mixes CLI parsing, bootstrapping, remote flows, resume
logic, and command wiring in one huge file, which slows onboarding
and raises change risk.
src/screens/REPL.tsx into smaller view-model slices.
The REPL is the operator surface and currently does too much:
messaging, tasks, permission dialogs, bridge state, IDE hooks, and notifications.
RemoteSessionManager, SessionsWebSocket,
DirectConnectSessionManager, and the bridge stack all
solve overlapping connection and message-routing problems differently.
StreamingToolExecutor and
toolOrchestration.ts. The concurrency and cancellation
behavior should come from one path so fixes land once.
src/services/api/client.ts already carries a TODO about
reusing GoogleAuth. The same mindset should apply to other
expensive auth and provider objects.
This site is plain static HTML and CSS. You can host it as-is from
the repository /docs directory with GitHub Pages, Netlify,
Cloudflare Pages, S3, or any static web server.
docs/ folder.python3 -m http.server 8080 --directory docs.