renderer
All paths are relative to `apps/emdash-desktop/`.
How it fires
How this agent gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
Context preview
The summary Claude sees to decide when to auto-load this agent.
All paths are relative to `apps/emdash-desktop/`.
Agent definition
renderer.mdRenderer
All paths are relative to `apps/emdash-desktop/`.
Main Entry Points
- `src/renderer/main.tsx`: renderer bootstrap
- `src/renderer/App.tsx`: top-level provider composition
- `src/renderer/app/workspace.tsx`: main post-onboarding shell
- `src/renderer/app/view-registry.ts`: view definitions and navigation guards; switches between views
- `src/renderer/lib/ipc.ts`: typed RPC client (`rpc`) and event emitter (`events`) used throughout renderer
App Shell (`src/renderer/app/`)
- `workspace.tsx`, `home-view.tsx`, `welcome.tsx` — shell and top-level views
- `modal-registry.ts` — central modal registry; all modals are registered here
- `view-registry.ts` — central view registry; all views are registered here
- `app-menu-events.tsx` — native app menu event wiring
Feature Areas (`src/renderer/features/`)
- `tasks/` — task experience: `conversations/`, `diff-view/`, `editor/` (Monaco, file tree),
`terminals/`, `create-task-modal/`, `issue-context/`, `task-config/`, `tabs/`, `stores/` (MobX task stores and `task-selectors.ts`), `hooks/`, `view/`
- `projects/` — project management, settings panel, branch selector; `stores/` holds
project stores and `project-selectors.ts`
- `sidebar/` — app sidebar
- `mcp/` — MCP server management UI (`mcp-view.tsx`, `components/`)
- `skills/` — skills catalog and management
- `integrations/` — integration management (GitHub, GitLab, Jira, Linear, ...)
- `settings/` — settings view
- `automations/`, `browser/`, `command-palette/`, `library/`, `onboarding/`
Shared Renderer Infrastructure (`src/renderer/lib/`)
- `ipc.ts` — typed RPC client and event emitter
- `modal/` — modal provider, renderer, store, and close-guard infrastructure
- `layout/` — layout, navigation, and panel drag providers
- `commands/` — command registry (`registry.ts`) and view-level `commandProvider` hooks
- `pty/` — frontend PTY sessions, pool provider, panes, prompt injection
- `monaco/`, `editor/` — Monaco editor integration
- `stores/` — cross-feature stores (navigation, dependencies, resource monitor, ...)
- `providers/`, `hooks/`, `components/`, `ui/`, `theme/` — shared providers, hooks, and UI primitives
Tests
- Renderer unit tests: `src/renderer/tests/`
- Playwright-backed browser tests: `src/renderer/tests/browser/`
When Editing Here
- Check `agents/conventions/renderer-patterns.md` for modal, view, PTY frontend, and store patterns.
- Call RPC methods via the typed `rpc` client from `src/renderer/lib/ipc.ts`
(alias `@renderer/lib/ipc`), e.g. `rpc.tasks.create(...)`.
- New modals must be registered in `src/renderer/app/modal-registry.ts`.
- New views must be registered in `src/renderer/app/view-registry.ts`.
- The preload bridge (`src/preload/index.ts`) exposes only `invoke`, `eventSend`,
`eventOn`, and `getPathForFile` on `window.electronAPI`; keep renderer-main calls on typed RPC and typed events.
Read more
Renderer
All paths are relative to `apps/emdash-desktop/`.
Main Entry Points
- `src/renderer/main.tsx`: renderer bootstrap
- `src/renderer/App.tsx`: top-level provider composition
- `src/renderer/app/workspace.tsx`: main post-onboarding shell
- `src/renderer/app/view-registry.ts`: view definitions and navigation guards; switches between views
- `src/renderer/lib/ipc.ts`: typed RPC client (`rpc`) and event emitter (`events`) used throughout renderer
App Shell (`src/renderer/app/`)
- `workspace.tsx`, `home-view.tsx`, `welcome.tsx` — shell and top-level views
- `modal-registry.ts` — central modal registry; all modals are registered here
- `view-registry.ts` — central view registry; all views are registered here
- `app-menu-events.tsx` — native app menu event wiring
Feature Areas (`src/renderer/features/`)
- `tasks/` — task experience: `conversations/`, `diff-view/`, `editor/` (Monaco, file tree),
`terminals/`, `create-task-modal/`, `issue-context/`, `task-config/`, `tabs/`, `stores/` (MobX task stores and `task-selectors.ts`), `hooks/`, `view/`
- `projects/` — project management, settings panel, branch selector; `stores/` holds
project stores and `project-selectors.ts`
- `sidebar/` — app sidebar
- `mcp/` — MCP server management UI (`mcp-view.tsx`, `components/`)
- `skills/` — skills catalog and management
- `integrations/` — integration management (GitHub, GitLab, Jira, Linear, ...)
- `settings/` — settings view
- `automations/`, `browser/`, `command-palette/`, `library/`, `onboarding/`
Shared Renderer Infrastructure (`src/renderer/lib/`)
- `ipc.ts` — typed RPC client and event emitter
- `modal/` — modal provider, renderer, store, and close-guard infrastructure
- `layout/` — layout, navigation, and panel drag providers
- `commands/` — command registry (`registry.ts`) and view-level `commandProvider` hooks
- `pty/` — frontend PTY sessions, pool provider, panes, prompt injection
- `monaco/`, `editor/` — Monaco editor integration
- `stores/` — cross-feature stores (navigation, dependencies, resource monitor, ...)
- `providers/`, `hooks/`, `components/`, `ui/`, `theme/` — shared providers, hooks, and UI primitives
Tests
- Renderer unit tests: `src/renderer/tests/`
- Playwright-backed browser tests: `src/renderer/tests/browser/`
When Editing Here
- Check `agents/conventions/renderer-patterns.md` for modal, view, PTY frontend, and store patterns.
- Call RPC methods via the typed `rpc` client from `src/renderer/lib/ipc.ts`
(alias `@renderer/lib/ipc`), e.g. `rpc.tasks.create(...)`.
- New modals must be registered in `src/renderer/app/modal-registry.ts`.
- New views must be registered in `src/renderer/app/view-registry.ts`.
- The preload bridge (`src/preload/index.ts`) exposes only `invoke`, `eventSend`,
`eventOn`, and `getPathForFile` on `window.electronAPI`; keep renderer-main calls on typed RPC and typed events.
Emdash is the Open-Source Agentic Development Environment (🧡 YC W26). Run multiple coding agents in parallel. Use any provider.
Repo: generalaction/emdash
Other agents on emdash.
- acp-runtime
The ACP runtime is the domain service that serves the ACP API contract. It owns the host-scoped dependencies needed to run provider ACP sessions, but it should not mix cross-session routing with per-session state projection.
Open agent - main-process
The main process is organized into domain modules under `src/main/core/`. Each domain typically has a `controller.ts` (RPC handlers) and service/implementation files.
Open agent - overview
All paths are relative to `apps/emdash-desktop/`.
Open agent - shared
- Agent/provider DTOs: - `src/shared/core/agents/agent-payload.ts` - provider metadata and capabilities are sourced from `packages/plugins/src/agents/registry.ts` - IPC primitives: - `src/shared/ipc/rpc.ts` — typed RPC router, controller, and client - `src/shared/ipc/events.ts`
Open agent - workspace-server
The Workspace Server (`apps/workspace-server/`) is a Node daemon that runs on a remote machine and exposes workspace runtimes (git, files, deps, ACP, …) to Emdash clients over the `@emdash/wire` protocol. Clients connect over an SSH-forwarded Unix socket; the daemon is
Open agent - config-files
Repo root:
Open agent

