# anentrypoint/acpreact architecture

> Architecture diagram of the GitHub repository anentrypoint/acpreact, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/anentrypoint/acpreact
- Repository: https://github.com/anentrypoint/acpreact

## Overview

acpreact is a multi-agent ACP SDK with a CLI, chat-platform adapters, and a terminal UI. The main workflow accepts a prompt through the CLI or an adapter, runs it through ACPProtocol and a configured agent CLI, parses the output, and returns a response; registered tools can also be invoked from parsed tool calls. Service fallback handles rate limits and unavailable agents. The graph preserves the documented adapter and agent choices. Source excerpts show core execution and adapter behavior; relationships for unsampled details are omitted.

Main entry points: [`core.js`](https://github.com/anentrypoint/acpreact/blob/main/core.js) (ACPProtocol), [`bin.js`](https://github.com/anentrypoint/acpreact/blob/main/bin.js) (CLI), [`adapters.js`](https://github.com/anentrypoint/acpreact/blob/main/adapters.js) (Adapter factory), [`gui.js`](https://github.com/anentrypoint/acpreact/blob/main/gui.js) (Terminal UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Entry points"]
  node_cli["CLI<br/>[bin.js]"]
end

subgraph group_protocol["ACP protocol"]
  node_acp["ACPProtocol<br/>[core.js]"]
  node_tool_api["Tool registration<br/>[core.js]"]
  node_output_parser["Output parser<br/>[parser.js]"]
end

subgraph group_execution["Agent execution"]
  node_registry[("Service registry<br/>[services.js]")]
  node_arg_builders["Agent arguments<br/>[services.js]"]
  node_fallback["Fallback engine<br/>[fallback.js]"]
  node_rate_policy["Rate-limit policy<br/>[services.js]"]
end

subgraph group_channels["Chat adapters"]
  node_adapter_factory["Adapter factory<br/>[adapters.js]"]
  node_discord["Discord adapter<br/>[adapters.js]"]
  node_telegram["Telegram adapter<br/>[adapters.js]"]
  node_slack["Slack adapter<br/>[adapters.js]"]
  node_webhook["Webhook adapter<br/>[adapters.js]"]
end

subgraph group_interface["Terminal interface"]
  node_tui["Terminal UI<br/>[gui.js]"]
end

node_user(("User"))
node_agent_clis{{"Agent CLIs"}}
node_chat_platforms{{"Chat platforms"}}

node_user -->|"submits prompt"| node_cli
node_cli -->|"processes prompt"| node_acp
node_cli -->|"creates adapter"| node_adapter_factory
node_cli -->|"creates UI"| node_tui
node_acp -->|"selects services"| node_registry
node_acp -->|"runs stack"| node_fallback
node_acp -->|"builds arguments"| node_arg_builders
node_acp -->|"spawns process"| node_agent_clis
node_fallback -->|"checks limits"| node_rate_policy
node_acp -->|"parses output"| node_output_parser
node_acp -->|"executes calls"| node_tool_api
node_adapter_factory -->|"creates"| node_discord
node_adapter_factory -->|"creates"| node_telegram
node_adapter_factory -->|"creates"| node_slack
node_adapter_factory -->|"creates"| node_webhook
node_discord -->|"receives and sends"| node_chat_platforms
node_telegram -->|"receives and sends"| node_chat_platforms
node_slack -->|"receives and sends"| node_chat_platforms
node_webhook -->|"receives requests"| node_chat_platforms
node_cli -->|"routes chat messages"| node_acp
node_cli -->|"passes prompts"| node_tui
node_user -->|"enters prompts"| node_tui

click node_cli "https://github.com/anentrypoint/acpreact/blob/main/bin.js"
click node_acp "https://github.com/anentrypoint/acpreact/blob/main/core.js"
click node_tool_api "https://github.com/anentrypoint/acpreact/blob/main/core.js"
click node_output_parser "https://github.com/anentrypoint/acpreact/blob/main/parser.js"
click node_registry "https://github.com/anentrypoint/acpreact/blob/main/services.js"
click node_arg_builders "https://github.com/anentrypoint/acpreact/blob/main/services.js"
click node_fallback "https://github.com/anentrypoint/acpreact/blob/main/fallback.js"
click node_rate_policy "https://github.com/anentrypoint/acpreact/blob/main/services.js"
click node_adapter_factory "https://github.com/anentrypoint/acpreact/blob/main/adapters.js"
click node_discord "https://github.com/anentrypoint/acpreact/blob/main/adapters.js"
click node_telegram "https://github.com/anentrypoint/acpreact/blob/main/adapters.js"
click node_slack "https://github.com/anentrypoint/acpreact/blob/main/adapters.js"
click node_webhook "https://github.com/anentrypoint/acpreact/blob/main/adapters.js"
click node_tui "https://github.com/anentrypoint/acpreact/blob/main/gui.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_user toneBlue
class node_acp,node_tool_api,node_output_parser toneAmber
class node_registry,node_arg_builders,node_fallback,node_rate_policy toneMint
class node_adapter_factory,node_discord,node_telegram,node_slack,node_webhook toneRose
class node_tui,node_agent_clis,node_chat_platforms toneIndigo
```

## Components

### Entry points

- [CLI](https://github.com/anentrypoint/acpreact/blob/main/bin.js): `bin.js`

### ACP protocol

- [ACPProtocol](https://github.com/anentrypoint/acpreact/blob/main/core.js): `core.js`
- [Tool registration](https://github.com/anentrypoint/acpreact/blob/main/core.js): `core.js`
- [Output parser](https://github.com/anentrypoint/acpreact/blob/main/parser.js): `parser.js`

### Agent execution

- [Service registry](https://github.com/anentrypoint/acpreact/blob/main/services.js): `services.js`
- [Agent arguments](https://github.com/anentrypoint/acpreact/blob/main/services.js): `services.js`
- [Fallback engine](https://github.com/anentrypoint/acpreact/blob/main/fallback.js): `fallback.js`
- [Rate-limit policy](https://github.com/anentrypoint/acpreact/blob/main/services.js): `services.js`

### Chat adapters

- [Adapter factory](https://github.com/anentrypoint/acpreact/blob/main/adapters.js): `adapters.js`
- [Discord adapter](https://github.com/anentrypoint/acpreact/blob/main/adapters.js): `adapters.js`
- [Telegram adapter](https://github.com/anentrypoint/acpreact/blob/main/adapters.js): `adapters.js`
- [Slack adapter](https://github.com/anentrypoint/acpreact/blob/main/adapters.js): `adapters.js`
- [Webhook adapter](https://github.com/anentrypoint/acpreact/blob/main/adapters.js): `adapters.js`

### Terminal interface

- [Terminal UI](https://github.com/anentrypoint/acpreact/blob/main/gui.js): `gui.js`

### Other components

- **User**
- **Agent CLIs**
- **Chat platforms**

## Connections

- User → CLI: submits prompt (evidence: `bin.js`)
- CLI → ACPProtocol: processes prompt (evidence: `bin.js`)
- CLI → Adapter factory: creates adapter (evidence: `bin.js`)
- CLI → Terminal UI: creates UI (evidence: `bin.js`)
- ACPProtocol → Service registry: selects services (evidence: `core.js`)
- ACPProtocol → Fallback engine: runs stack (evidence: `core.js`)
- ACPProtocol → Agent arguments: builds arguments (evidence: `core.js`)
- ACPProtocol → Agent CLIs: spawns process (evidence: `core.js`)
- Fallback engine → Rate-limit policy: checks limits (evidence: `fallback.js`)
- ACPProtocol → Output parser: parses output (evidence: `core.js`)
- ACPProtocol → Tool registration: executes calls (evidence: `core.js`)
- Adapter factory → Discord adapter: creates (evidence: `adapters.js`)
- Adapter factory → Telegram adapter: creates (evidence: `adapters.js`)
- Adapter factory → Slack adapter: creates (evidence: `adapters.js`)
- Adapter factory → Webhook adapter: creates (evidence: `adapters.js`)
- Discord adapter → Chat platforms: receives and sends (evidence: `adapters.js`)
- Telegram adapter → Chat platforms: receives and sends (evidence: `adapters.js`)
- Slack adapter → Chat platforms: receives and sends (evidence: `adapters.js`)
- Webhook adapter → Chat platforms: receives requests (evidence: `adapters.js`)
- CLI → ACPProtocol: routes chat messages (evidence: `bin.js`)
- CLI → Terminal UI: passes prompts (evidence: `bin.js`)
- User → Terminal UI: enters prompts (evidence: `gui.js`)
