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…
- `packages/plugins/src/agents/registry.ts` - `packages/plugins/src/agents/impl/` - `src/main/core/dependencies/dependency-managers.ts` - `src/main/core/pty/`
How it fires
How this agent gets triggered: by you, by Claude, or both.
Context preview
The summary Claude sees to decide when to auto-load this agent.
- `packages/plugins/src/agents/registry.ts` - `packages/plugins/src/agents/impl/` - `src/main/core/dependencies/dependency-managers.ts` - `src/main/core/pty/`
codex, claude, grok, devin, qwen, qoder, droid, antigravity, cursor, copilot, amp, commandcode, opencode, hermes, charm, auggie, goose, kimi, kilocode, kiro, rovo, cline, codebuddy, continue, codebuff, freebuff, mistral, muse, jules, junie, oh-my-pi, pi, prime-agent, autohand, letta, mimocode, zero
codex, claude, opencode, grok, devin, qwen, qoder, droid, cursor, copilot, hermes, auggie, goose, kimi, kilocode, kiro, cline, mistral, junie, mimocode, oh-my-pi, prime-agent, codebuddy
Agent activity, completion, and attention states come from explicit hooks or plugins installed by the `tui-agents` runtime in `packages/core/src/runtimes/tui-agents/`. Emdash does not infer agent status from terminal output. If a provider has no hook/plugin integration for an event, the renderer should not show or notify an inferred status for that event.
Shipped hook integrations install into user-global provider configuration, never into a task worktree. The provider behavior resolves its root from the same allowlisted environment passed to the CLI, including provider-specific home overrides and XDG/APPDATA conventions. Paths returned by hook and file-drop behaviors are relative to that root. `scope: 'workspace'` remains available as an extension escape hatch, but no built-in provider uses it.
Managed config entries include an Emdash hook-config version marker. On session startup the installer checks the complete expected entry set before taking a per-root write lock, checks again under the lock, and writes only when missing or stale. Existing JSON or TOML that cannot be parsed is left untouched and reported through logging. Global hooks are harmless in sessions outside Emdash: their commands exit successfully when the Emdash hook server environment is absent.
The global roots used by the built-in integrations are:
| Providers | Root behavior | | --- | --- | | Auggie, CodeBuddy, Command Code, Qoder, Grok, Amp, Kilo, Droid, Goose | Fixed home roots (`~/.augment`, `~/.codebuddy`, `~/.commandcode`, `~/.qoder`, `~/.grok`, `~/.amp`, `~/.kilo`, `~/.factory`, `~/.agents`) | | Claude, Codex, Copilot, Qwen, Kimi, Kiro, Mistral Vibe | Provider home env override with a home fallback | | OpenCode, MiMoCode, Devin | Provider override where supported, then XDG config on POSIX or APPDATA on Windows | | Pi | `$PI_CODING_AGENT_DIR` with `~/.pi/agent` fallback | | Oh My Pi | `$PI_CODING_AGENT_DIR`, then `$PI_CONFIG_DIR`, with `~/.omp/agent` fallback | | Prime Agent | `$PRIME_AGENT_CODING_AGENT_DIR` with `~/.prime/agent` fallback |
Kimi also keeps the legacy `~/.kimi/config.toml` root synchronized. Kiro maintains both the classic `agents/emdash.json` format and the standalone `hooks/emdash.json` v1 schema so classic and `--v3` sessions are covered. The agent details UI obtains read-only installed/pending status through the host's `agent-config` runtime for both local and remote hosts.
Emdash passes provider API keys through to the agent CLIs it spawns. The allowlisted agent environment in `packages/core/src/primitives/agent-env/api/index.ts` is the single source of truth for which variables reach a spawned agent.
[OrcaRouter](https://www.orcarouter.ai) is an OpenAI-compatible gateway that routes to models from OpenAI, Anthropic, Google, DeepSeek, Qwen, and more through one API key (`sk-orca-…`). OpenCode resolves `orcarouter/*` models through its models.dev catalog, so setting `ORCAROUTER_API_KEY` lets you select an OrcaRouter model from the OpenCode model picker.
Provider plugins declare PATH-only definitions (`binaryNames`, install guidance, and optional update argv). Runtimes receive only the narrow resolver contract and must not infer package managers, fetch latest versions, or keep a second executable cache.
require elevation are wrapped by the host-dependency runtime, while npm-style `on-failure` commands first run with user privileges and may be explicitly retried with passwordless sudo after a permission-classified failure. Homebrew and user-local installers must remain `never`-elevated.
interpolated shell command and no uninstall/install lifecycle in provider metadata. Future managed sources such as Nix should add new source and selection variants without changing runtime spawn injection.
names on the host PATH; a saved path or CLI-name override resolves independently of discovery. The resolver accepts an optional proposed selection, so validation and startup share one operation and implementation. Invalid overrides block launch and never fall back to Auto. Settings save only after validation, and failed saves retain the previous selection. Existing path-selection JSON remains valid; CLI selections add a `kind: 'cli'` variant with a `command` field. Overrides accept executable files or PATH names; use a wrapper script for commands with arguments, such as `srt claude`.
Emdash is the Open-Source Agentic Development Environment (🧡 YC W26). Run multiple coding agents in parallel. Use any provider.
Repo: generalaction/emdash
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…
This page defines the target organization of `packages/core/src/`. Core is organized by module type so that shared domain APIs and their platform…
Git is split into a transport contract and a host-scoped runtime. Renderer, desktop, and workspace-server code share the Wire vocabulary without importing Git…
The main process is organized into domain modules under `src/main/core/`. Each domain typically has a `controller.ts` (RPC handlers) and service/implementation…
`@emdash/core/primitives/path/api` is the source of truth for portable file identity and lexical path operations. The detailed package docs live in…