# openjiuwen-ai/icode architecture

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

- Interactive diagram: https://gitdiagram.com/openjiuwen-ai/icode
- Repository: https://github.com/openjiuwen-ai/icode

## Overview

iCode is a terminal application for configuring and orchestrating AI agents and workflows; it does not provide its own model. The main path is user input through the TUI or ACP interface, into session and turn orchestration, then configured model/tool execution, with results rendered in chat and file changes available for review or rollback. The graph also preserves documented capabilities for agent/model configuration, workflows, shell access, and trajectory inspection. Some service implementations were not sampled; their directory-level nodes and README-supported links reflect that evidence limit.

Main entry points: [`src/chrys/orchestration/engine/engine.py`](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/orchestration/engine/engine.py) (Agent engine), [`src/chrys/app/tui/app.py`](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/app/tui/app.py) (Terminal UI), [`src/chrys/app/cli/app.py`](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/app/cli/app.py) (CLI), [`src/chrys/app/tui/widgets/chat/panel.py`](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/app/tui/widgets/chat/panel.py) (Chat surface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_cli["CLI<br/>[app.py]"]
  node_tui["Terminal UI<br/>[app.py]"]
  node_chat["Chat surface<br/>[panel.py]"]
  node_acp["ACP server<br/>[server.py]"]
end

subgraph group_orchestration["Session orchestration"]
  node_sessions["Session manager<br/>[session_manager.py]"]
  node_events["Event bus<br/>[bus.py]"]
  node_engine["Agent engine<br/>[engine.py]"]
  node_kernel["Model client<br/>[client.py]"]
  node_state[("Session persistence")]
  node_config["Settings<br/>[settings_store.py]"]
end

subgraph group_services["Agent services"]
  node_profiles["Agent and model profiles"]
  node_context["Context management<br/>[manager.py]"]
  node_hooks["Hooks<br/>[manager.py]"]
  node_mutations["File mutation tracking<br/>[tracker.py]"]
  node_workflows["Workflow execution"]
end

subgraph group_capabilities["User capabilities"]
  node_chat_result["Rendered answers"]
  node_agents["Agent configuration"]
  node_models["Model profiles"]
  node_workflow_view["Workflow monitor"]
  node_diff["Diff and rollback"]
  node_trajectory["Trajectory viewer"]
  node_shell["Integrated shell"]
end

node_user(("User"))
node_provider{{"Configured model provider"}}

node_user -->|"launches"| node_cli
node_cli -->|"starts"| node_tui
node_user -->|"interacts"| node_tui
node_user -->|"sends requests"| node_acp
node_acp -->|"manages sessions"| node_sessions
node_sessions -->|"hosts"| node_engine
node_tui -->|"communicates through"| node_events
node_engine -->|"subscribes to"| node_events
node_engine -->|"reads settings"| node_config
node_engine -.->|"runs model calls"| node_kernel
node_kernel -.->|"calls"| node_provider
node_engine -.->|"persists sessions"| node_state
node_engine -.->|"builds context"| node_context
node_engine -.->|"dispatches hooks"| node_hooks
node_engine -.->|"tracks changes"| node_mutations
node_user -->|"configures agents"| node_agents
node_user -->|"configures models"| node_models
node_user -->|"runs workflows"| node_workflows
node_workflows -.->|"reports progress"| node_workflow_view
node_tui -->|"shows conversation"| node_chat
node_chat -->|"renders answers"| node_chat_result
node_user -->|"reviews changes"| node_diff
node_mutations -.->|"supplies change data"| node_diff
node_user -->|"opens timeline"| node_trajectory
node_user -->|"opens shell"| node_shell

click node_cli "https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/app/cli/app.py"
click node_tui "https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/app/tui/app.py"
click node_chat "https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/app/tui/widgets/chat/panel.py"
click node_acp "https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/app/acp/server.py"
click node_sessions "https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/app/acp/session_manager.py"
click node_events "https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/foundation/events/bus.py"
click node_engine "https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/orchestration/engine/engine.py"
click node_kernel "https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/kernel/client.py"
click node_state "https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/service/state"
click node_config "https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/foundation/config/settings_store.py"
click node_profiles "https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/service/profiles"
click node_context "https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/service/context/manager.py"
click node_hooks "https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/service/hooks/manager.py"
click node_mutations "https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/service/mutations/tracker.py"
click node_workflows "https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/service/workflows"
click node_chat_result "https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/widgets/chat"
click node_agents "https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/screens/agents"
click node_models "https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/screens/models"
click node_workflow_view "https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/widgets/workflow"
click node_diff "https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/screens/diff"
click node_trajectory "https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/widgets/trajectory"
click node_shell "https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/terminal"

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_tui,node_chat,node_acp,node_user toneBlue
class node_sessions,node_events,node_engine,node_kernel,node_state,node_config toneAmber
class node_profiles,node_context,node_hooks,node_mutations,node_workflows toneMint
class node_chat_result,node_agents,node_models,node_workflow_view,node_diff,node_trajectory,node_shell toneRose
class node_provider toneIndigo
```

## Components

### User interfaces

- [CLI](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/app/cli/app.py): `src/chrys/app/cli/app.py`
- [Terminal UI](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/app/tui/app.py): `src/chrys/app/tui/app.py`
- [Chat surface](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/app/tui/widgets/chat/panel.py): `src/chrys/app/tui/widgets/chat/panel.py`
- [ACP server](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/app/acp/server.py): `src/chrys/app/acp/server.py`

### Session orchestration

- [Session manager](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/app/acp/session_manager.py): `src/chrys/app/acp/session_manager.py`
- [Event bus](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/foundation/events/bus.py): `src/chrys/foundation/events/bus.py`
- [Agent engine](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/orchestration/engine/engine.py): `src/chrys/orchestration/engine/engine.py`
- [Model client](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/kernel/client.py): `src/chrys/kernel/client.py`
- [Session persistence](https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/service/state): `src/chrys/service/state`
- [Settings](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/foundation/config/settings_store.py): `src/chrys/foundation/config/settings_store.py`

### Agent services

- [Agent and model profiles](https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/service/profiles): `src/chrys/service/profiles`
- [Context management](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/service/context/manager.py): `src/chrys/service/context/manager.py`
- [Hooks](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/service/hooks/manager.py): `src/chrys/service/hooks/manager.py`
- [File mutation tracking](https://github.com/openjiuwen-ai/icode/blob/main/src/chrys/service/mutations/tracker.py): `src/chrys/service/mutations/tracker.py`
- [Workflow execution](https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/service/workflows): `src/chrys/service/workflows`

### User capabilities

- [Rendered answers](https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/widgets/chat): `src/chrys/app/tui/widgets/chat`
- [Agent configuration](https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/screens/agents): `src/chrys/app/tui/screens/agents`
- [Model profiles](https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/screens/models): `src/chrys/app/tui/screens/models`
- [Workflow monitor](https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/widgets/workflow): `src/chrys/app/tui/widgets/workflow`
- [Diff and rollback](https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/screens/diff): `src/chrys/app/tui/screens/diff`
- [Trajectory viewer](https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/widgets/trajectory): `src/chrys/app/tui/widgets/trajectory`
- [Integrated shell](https://github.com/openjiuwen-ai/icode/tree/main/src/chrys/app/tui/terminal): `src/chrys/app/tui/terminal`

### Other components

- **User**
- **Configured model provider**

## Connections

- User → CLI: launches (evidence: `README.md`)
- CLI → Terminal UI: starts (evidence: `src/chrys/app/cli/app.py`)
- User → Terminal UI: interacts (evidence: `README.md`)
- User → ACP server: sends requests
- ACP server → Session manager: manages sessions (evidence: `src/chrys/app/acp/server.py`)
- Session manager → Agent engine: hosts (evidence: `src/chrys/app/acp/session_manager.py`)
- Terminal UI → Event bus: communicates through (evidence: `src/chrys/app/tui/app.py`)
- Agent engine → Event bus: subscribes to (evidence: `src/chrys/orchestration/engine/engine.py`)
- Agent engine → Settings: reads settings (evidence: `src/chrys/orchestration/engine/engine.py`)
- Agent engine → Model client: runs model calls
- Model client → Configured model provider: calls
- Agent engine → Session persistence: persists sessions (evidence: `src/chrys/orchestration/engine/engine.py`)
- Agent engine → Context management: builds context
- Agent engine → Hooks: dispatches hooks
- Agent engine → File mutation tracking: tracks changes (evidence: `src/chrys/orchestration/engine/engine.py`)
- User → Agent configuration: configures agents (evidence: `README.md`)
- User → Model profiles: configures models (evidence: `README.md`)
- User → Workflow execution: runs workflows (evidence: `README.md`)
- Workflow execution → Workflow monitor: reports progress
- Terminal UI → Chat surface: shows conversation (evidence: `README.md`)
- Chat surface → Rendered answers: renders answers (evidence: `README.md`)
- User → Diff and rollback: reviews changes (evidence: `README.md`)
- File mutation tracking → Diff and rollback: supplies change data
- User → Trajectory viewer: opens timeline (evidence: `README.md`)
- User → Integrated shell: opens shell (evidence: `README.md`)
