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`
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.
- 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`
Agent definition
shared.mdShared Modules
Main Shared Areas
- 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` — typed event emitter
- Typed event definitions:
- `src/shared/events/` — `agentEvents.ts`, `appEvents.ts`, `editorEvents.ts`, `fsEvents.ts`, `githubEvents.ts`, `hostPreviewEvents.ts`, `lifecycleEvents.ts`, `ptyEvents.ts`, `sshEvents.ts`
- MCP types:
- `src/shared/mcp/`
- Skills types and validation:
- `src/shared/skills/`
- Domain type modules (flat files):
- `conversations.ts`, `fs.ts`, `git.ts`, `github.ts`, `hostPreview.ts`, `lifecycle.ts`, `projects.ts`, `pull-requests.ts`, `ssh.ts`, `tasks.ts`, `terminals.ts`, `urls.ts`, `utils.ts`
- PTY helpers:
- `ptySessionId.ts` (provider-aware PTY ID parsing lives in main under `src/main/core/pty/`)
- App settings types:
- `app-settings.ts`
Path Aliases
All aliases are defined in a single `tsconfig.json` and mirrored in `electron.vite.config.ts`:
| Alias | Resolves to | | --- | --- | | `@/*` | `src/*` | | `@renderer/*` | `src/renderer/*` | | `@main/*` | `src/main/*` | | `@shared/*` | `src/shared/*` | | `@root/*` | `./*` |
Aliases are resolved at build time by electron-vite. No runtime monkey-patching is needed.
Provider Metadata Rules
When adding a provider:
1. add or update its plugin in `packages/plugins/src/agents/impl/` and register it in `packages/plugins/src/agents/registry.ts` 2. add any required env passthrough in `src/main/core/pty/pty-env.ts` 3. add or update hook/plugin installation in `src/main/core/agent-hooks/` if the provider supports explicit events 4. update renderer surfaces that consume agent metadata from `rpc.agents.*` 5. add tests for non-standard spawn or detection behavior
Read more
Shared Modules
Main Shared Areas
- 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` — typed event emitter
- Typed event definitions:
- `src/shared/events/` — `agentEvents.ts`, `appEvents.ts`, `editorEvents.ts`, `fsEvents.ts`, `githubEvents.ts`, `hostPreviewEvents.ts`, `lifecycleEvents.ts`, `ptyEvents.ts`, `sshEvents.ts`
- MCP types:
- `src/shared/mcp/`
- Skills types and validation:
- `src/shared/skills/`
- Domain type modules (flat files):
- `conversations.ts`, `fs.ts`, `git.ts`, `github.ts`, `hostPreview.ts`, `lifecycle.ts`, `projects.ts`, `pull-requests.ts`, `ssh.ts`, `tasks.ts`, `terminals.ts`, `urls.ts`, `utils.ts`
- PTY helpers:
- `ptySessionId.ts` (provider-aware PTY ID parsing lives in main under `src/main/core/pty/`)
- App settings types:
- `app-settings.ts`
Path Aliases
All aliases are defined in a single `tsconfig.json` and mirrored in `electron.vite.config.ts`:
| Alias | Resolves to | | --- | --- | | `@/*` | `src/*` | | `@renderer/*` | `src/renderer/*` | | `@main/*` | `src/main/*` | | `@shared/*` | `src/shared/*` | | `@root/*` | `./*` |
Aliases are resolved at build time by electron-vite. No runtime monkey-patching is needed.
Provider Metadata Rules
When adding a provider:
1. add or update its plugin in `packages/plugins/src/agents/impl/` and register it in `packages/plugins/src/agents/registry.ts` 2. add any required env passthrough in `src/main/core/pty/pty-env.ts` 3. add or update hook/plugin installation in `src/main/core/agent-hooks/` if the provider supports explicit events 4. update renderer surfaces that consume agent metadata from `rpc.agents.*` 5. add tests for non-standard spawn or detection behavior
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 - renderer
All paths are relative to `apps/emdash-desktop/`.
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

