acp-runtime
AgentThe ACP runtime is the domain service that serves the ACP API contract. It owns the host-scoped dependencies needed to run…
- `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.
ACP conversations project agent status from runtime session summaries. Pending permission requests set `awaiting-input`, including requests already present on first observation. Resolving the final request restores `working` if generation continues and the session is not cancelling. The task and conversation indicators consume this projected status.
Provider-injected transcript notifications are normalized by the provider plugin, not by the Markdown renderer. Claude monitor envelopes become passive `notification` items; they do not open user turns, settle foreground work, or mark an idle session as generating. Task envelopes with a tool identity and an explicit known status continue to update subagent state. Missing or unknown statuses must not default to running. Incomplete or unrecognized envelopes remain readable message text: chat-ui renders HTML/XML nodes literally instead of dropping them or executing markup.
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. On Windows each hook command is a single `powershell.exe ... -EncodedCommand` call, because agents run hooks through Git Bash, cmd.exe or PowerShell. Do not wrap it in `cmd.exe /c` or add `/`-style switches, redirects, or quotes: Git Bash rewrites `/c` into a path, and cmd.exe then reads the hook payload from stdin as commands.
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 | | Antigravity CLI | `~/.gemini/config` | | Muse Code | `$XDG_CONFIG_HOME/muse`, falling back to `~/.config/muse` on macOS and Linux |
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.
full refresh. Explicit overlapping desktop refreshes share one reques
Emdash is the Open-Source Agentic Development Environment (🧡 YC W26). Run multiple coding agents in parallel. Use any provider.
The ACP runtime is the domain service that serves the ACP API contract. It owns the host-scoped dependencies needed to run…
This page defines the target organization of `packages/core/src/`. Core is organized by module type so that shared domain APIs…
Git is split into a transport contract and a host-scoped runtime. Renderer, desktop, and workspace-server code share the Wire…
The main process is organized into domain modules under `src/main/core/`. Each domain typically has a `controller.ts` (RPC…
`@emdash/core/primitives/path/api` is the source of truth for portable file identity and lexical path operations. The detailed…
Validates project structure against co-location and architecture patterns defined in AGENTS.md
Deprecated placeholder. Do not use; follow root AGENTS.md and package instructions instead.
Use this agent when you need to create or update technical documentation that helps developers understand the deep patterns,…
Orchestration patterns learned from experience. Review at startup and before heartbeat responses.