# einsia/agent-git architecture

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

- Interactive diagram: https://gitdiagram.com/einsia/agent-git
- Repository: https://github.com/einsia/agent-git

## Overview

agit is a local-first, lossless version-control CLI for AI-agent sessions, with a resident-control-daemon feature. The main workflow adopts or creates a runtime session, records snapshots and turns, then lets users inspect, resume, or publish it. The graph also preserves the README’s search, sharing, clone/run, and remote-control capabilities. Source excerpts establish entry-point dispatch, adapter and storage roles, hub-client behavior, and RC protocol/daemon roles; several command-level connections are documented in the README rather than sampled implementation.

Main entry points: [`src/commands/mod.rs`](https://github.com/einsia/agent-git/blob/main/src/commands/mod.rs) (Command dispatch), [`src/rc/daemon/mod.rs`](https://github.com/einsia/agent-git/blob/main/src/rc/daemon/mod.rs) (RC daemon), [`src/main.rs`](https://github.com/einsia/agent-git/blob/main/src/main.rs) (CLI entry), [`src/commands/push.rs`](https://github.com/einsia/agent-git/blob/main/src/commands/push.rs) (Hub commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI and terminal"]
  node_agit["CLI entry<br/>[main.rs]"]
  node_commands["Command dispatch<br/>[mod.rs]"]
  node_tui["Terminal interface<br/>[mod.rs]"]
end

subgraph group_sessions["Session lifecycle"]
  node_adapters["Runtime adapters<br/>[mod.rs]"]
  node_runtime(("Agent runtimes"))
  node_session_store[("Session storage<br/>[storage.rs]")]
  node_session_domain["Session domain<br/>[mod.rs]"]
  node_commit["Commit and history<br/>[commit.rs]"]
  node_import["Import and lineage<br/>[import.rs]"]
  node_resume_run["Resume and run<br/>[run.rs]"]
  node_inspect["Inspect sessions<br/>[show.rs]"]
  node_search["Session search<br/>[search.rs]"]
end

subgraph group_hub["Hub and publishing"]
  node_hub_commands["Hub commands<br/>[push.rs]"]
  node_hub_git["Hub Git operations<br/>[git.rs]"]
  node_hub_client["Hub HTTP client<br/>[client.rs]"]
  node_hub_service(("AgentGit Hub"))
end

subgraph group_remote["Remote control"]
  node_rc["RC daemon<br/>[mod.rs]"]
  node_harness["Agent harnesses<br/>[mod.rs]"]
  node_rpc["Session RPC types<br/>[mod.rs]"]
  node_peer["Peer transport<br/>[client.rs]"]
  node_controller["Peer controller<br/>[lib.rs]"]
  node_tunnel["Tunnel worker<br/>[worker.rs]"]
end

node_user(("User"))

node_user -->|"invokes"| node_agit
node_agit -->|"dispatches"| node_commands
node_agit -->|"opens"| node_tui
node_commands -->|"dispatches"| node_import
node_commands -->|"dispatches"| node_commit
node_commands -->|"dispatches"| node_resume_run
node_commands -->|"dispatches"| node_inspect
node_commands -->|"dispatches"| node_search
node_commands -->|"dispatches"| node_hub_commands
node_import -->|"reads runtime"| node_adapters
node_resume_run -->|"installs session"| node_adapters
node_adapters -->|"reads and writes"| node_runtime
node_commit -->|"saves versions"| node_session_store
node_inspect -->|"reads history"| node_session_store
node_search -->|"queries sessions"| node_session_domain
node_session_domain -->|"uses storage"| node_session_store
node_hub_commands -->|"publishes session"| node_hub_git
node_hub_commands -->|"calls API"| node_hub_client
node_hub_git -->|"transfers Git data"| node_hub_service
node_hub_client -->|"sends HTTP requests"| node_hub_service
node_rc -->|"supervises"| node_harness
node_rc -->|"encodes session events"| node_rpc
node_rc -->|"uses peer transport"| node_peer
node_peer -->|"connects controllers"| node_controller
node_rc -->|"dispatches tunnel work"| node_tunnel
node_rc -->|"streams events"| node_hub_service

click node_agit "https://github.com/einsia/agent-git/blob/main/src/main.rs"
click node_commands "https://github.com/einsia/agent-git/blob/main/src/commands/mod.rs"
click node_tui "https://github.com/einsia/agent-git/blob/main/src/tui/mod.rs"
click node_adapters "https://github.com/einsia/agent-git/blob/main/src/adapter/mod.rs"
click node_session_store "https://github.com/einsia/agent-git/blob/main/src/domain/storage.rs"
click node_session_domain "https://github.com/einsia/agent-git/blob/main/src/domain/session/mod.rs"
click node_commit "https://github.com/einsia/agent-git/blob/main/src/commands/commit.rs"
click node_import "https://github.com/einsia/agent-git/blob/main/src/commands/import.rs"
click node_resume_run "https://github.com/einsia/agent-git/blob/main/src/commands/run.rs"
click node_inspect "https://github.com/einsia/agent-git/blob/main/src/commands/show.rs"
click node_search "https://github.com/einsia/agent-git/blob/main/src/commands/search.rs"
click node_hub_commands "https://github.com/einsia/agent-git/blob/main/src/commands/push.rs"
click node_hub_git "https://github.com/einsia/agent-git/blob/main/src/hub/git.rs"
click node_hub_client "https://github.com/einsia/agent-git/blob/main/src/hub/client.rs"
click node_rc "https://github.com/einsia/agent-git/blob/main/src/rc/daemon/mod.rs"
click node_harness "https://github.com/einsia/agent-git/blob/main/src/rc/harness/mod.rs"
click node_rpc "https://github.com/einsia/agent-git/blob/main/src/protocol/mod.rs"
click node_peer "https://github.com/einsia/agent-git/blob/main/crates/agit-peer/src/client.rs"
click node_controller "https://github.com/einsia/agent-git/blob/main/crates/agit-controller/src/lib.rs"
click node_tunnel "https://github.com/einsia/agent-git/blob/main/crates/agit-tunnel/src/worker.rs"

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_agit,node_commands,node_tui,node_user toneBlue
class node_adapters,node_runtime,node_session_store,node_session_domain,node_commit,node_import,node_resume_run,node_inspect,node_search toneAmber
class node_hub_commands,node_hub_git,node_hub_client,node_hub_service toneMint
class node_rc,node_harness,node_rpc,node_peer,node_controller,node_tunnel toneRose
```

## Components

### CLI and terminal

- [CLI entry](https://github.com/einsia/agent-git/blob/main/src/main.rs): `src/main.rs`
- [Command dispatch](https://github.com/einsia/agent-git/blob/main/src/commands/mod.rs): `src/commands/mod.rs`
- [Terminal interface](https://github.com/einsia/agent-git/blob/main/src/tui/mod.rs): `src/tui/mod.rs`

### Session lifecycle

- [Runtime adapters](https://github.com/einsia/agent-git/blob/main/src/adapter/mod.rs): `src/adapter/mod.rs`
- **Agent runtimes**
- [Session storage](https://github.com/einsia/agent-git/blob/main/src/domain/storage.rs): `src/domain/storage.rs`
- [Session domain](https://github.com/einsia/agent-git/blob/main/src/domain/session/mod.rs): `src/domain/session/mod.rs`
- [Commit and history](https://github.com/einsia/agent-git/blob/main/src/commands/commit.rs): `src/commands/commit.rs`
- [Import and lineage](https://github.com/einsia/agent-git/blob/main/src/commands/import.rs): `src/commands/import.rs`
- [Resume and run](https://github.com/einsia/agent-git/blob/main/src/commands/run.rs): `src/commands/run.rs`
- [Inspect sessions](https://github.com/einsia/agent-git/blob/main/src/commands/show.rs): `src/commands/show.rs`
- [Session search](https://github.com/einsia/agent-git/blob/main/src/commands/search.rs): `src/commands/search.rs`

### Hub and publishing

- [Hub commands](https://github.com/einsia/agent-git/blob/main/src/commands/push.rs): `src/commands/push.rs`
- [Hub Git operations](https://github.com/einsia/agent-git/blob/main/src/hub/git.rs): `src/hub/git.rs`
- [Hub HTTP client](https://github.com/einsia/agent-git/blob/main/src/hub/client.rs): `src/hub/client.rs`
- **AgentGit Hub**

### Remote control

- [RC daemon](https://github.com/einsia/agent-git/blob/main/src/rc/daemon/mod.rs): `src/rc/daemon/mod.rs`
- [Agent harnesses](https://github.com/einsia/agent-git/blob/main/src/rc/harness/mod.rs): `src/rc/harness/mod.rs`
- [Session RPC types](https://github.com/einsia/agent-git/blob/main/src/protocol/mod.rs): `src/protocol/mod.rs`
- [Peer transport](https://github.com/einsia/agent-git/blob/main/crates/agit-peer/src/client.rs): `crates/agit-peer/src/client.rs`
- [Peer controller](https://github.com/einsia/agent-git/blob/main/crates/agit-controller/src/lib.rs): `crates/agit-controller/src/lib.rs`
- [Tunnel worker](https://github.com/einsia/agent-git/blob/main/crates/agit-tunnel/src/worker.rs): `crates/agit-tunnel/src/worker.rs`

### Other components

- **User**

## Connections

- User → CLI entry: invokes
- CLI entry → Command dispatch: dispatches
- CLI entry → Terminal interface: opens
- Command dispatch → Import and lineage: dispatches
- Command dispatch → Commit and history: dispatches
- Command dispatch → Resume and run: dispatches
- Command dispatch → Inspect sessions: dispatches
- Command dispatch → Session search: dispatches
- Command dispatch → Hub commands: dispatches
- Import and lineage → Runtime adapters: reads runtime
- Resume and run → Runtime adapters: installs session
- Runtime adapters → Agent runtimes: reads and writes
- Commit and history → Session storage: saves versions
- Inspect sessions → Session storage: reads history
- Session search → Session domain: queries sessions
- Session domain → Session storage: uses storage
- Hub commands → Hub Git operations: publishes session
- Hub commands → Hub HTTP client: calls API
- Hub Git operations → AgentGit Hub: transfers Git data
- Hub HTTP client → AgentGit Hub: sends HTTP requests
- RC daemon → Agent harnesses: supervises
- RC daemon → Session RPC types: encodes session events
- RC daemon → Peer transport: uses peer transport
- Peer transport → Peer controller: connects controllers
- RC daemon → Tunnel worker: dispatches tunnel work
- RC daemon → AgentGit Hub: streams events
