# kuddev/pebrel architecture

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

- Interactive diagram: https://gitdiagram.com/kuddev/pebrel
- Repository: https://github.com/kuddev/pebrel

## Overview

Pebrel is a native desktop terminal and workspace for local shells, SSH hosts, files, and AI command-line sessions. The main workflow starts with a user opening a workspace, creating terminal panes or tabs, and interacting with local or remote sessions; the app also surfaces agent activity and captured answers. Separate capabilities include SFTP, file browsing, session restoration, configuration, and native document viewing. The tree and README support these subsystem boundaries, but sampled source is limited, so edges represent documented workflows or directly evidenced calls rather than inferred internal wiring.

Main entry points: [`nebula_app/src/gpui_shell/workspace.rs`](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/workspace.rs) (Workspace UI), [`nebula_app/src/main.rs`](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/main.rs) (Application startup), [`nebula_app/src/gpui_shell/terminal/view.rs`](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/terminal/view.rs) (Terminal view), [`nebula_app/src/gpui_shell/terminal/session.rs`](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/terminal/session.rs) (Terminal session)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workspace["Desktop workspace"]
  node_app["Application startup<br/>[main.rs]"]
  node_workspace_ui["Workspace UI<br/>[workspace.rs]"]
  node_session_restore["Session restore"]
  node_split_layout["Split layout<br/>[lib.rs]"]
  node_runtime_api["Runtime API<br/>[runtime_api.rs]"]
end

subgraph group_terminal["Terminal sessions"]
  node_terminal_view["Terminal view<br/>[view.rs]"]
  node_terminal_session["Terminal session<br/>[session.rs]"]
  node_completion["Command completion<br/>[suggest_engine.rs]"]
end

subgraph group_remote["Remote and files"]
  node_ssh["SSH connectivity<br/>[ssh.rs]"]
  node_sftp["SFTP panel<br/>[sftp_panel.rs]"]
  node_file_tree["File browsing<br/>[file_tree.rs]"]
end

subgraph group_agents["AI workflows"]
  node_ai_activity["Agent activity<br/>[ai_agents.rs]"]
  node_ai_hooks["AI hook integration<br/>[ai_hook.rs]"]
  node_hook_bridge["Hook bridge<br/>[main.rs]"]
  node_answer_reader["Answer reader"]
end

subgraph group_interface["Configuration and display"]
  node_config["Configuration<br/>[mod.rs]"]
  node_settings["User settings<br/>[lib.rs]"]
  node_document_tabs["Document tabs<br/>[doc_tabs.rs]"]
  node_markdown["Markdown rendering<br/>[mod.rs]"]
  node_math["Math rendering<br/>[mod.rs]"]
  node_renderer["GPU renderer<br/>[mod.rs]"]
end

node_user(("User"))
node_shell{{"Local shell"}}
node_ssh_hosts{{"SSH hosts"}}
node_filesystem[("Local and remote files")]
node_ai_cli{{"AI CLI tools"}}

node_user -->|"opens"| node_app
node_app -->|"starts"| node_workspace_ui
node_workspace_ui -->|"restores sessions"| node_session_restore
node_workspace_ui -->|"arranges panes"| node_split_layout
node_workspace_ui -->|"opens terminals"| node_terminal_view
node_terminal_view -->|"controls"| node_terminal_session
node_terminal_session -->|"runs commands"| node_shell
node_terminal_view -->|"requests suggestions"| node_completion
node_workspace_ui -->|"opens remote sessions"| node_ssh
node_ssh -->|"connects to"| node_ssh_hosts
node_workspace_ui -->|"opens file transfers"| node_sftp
node_workspace_ui -->|"browses files"| node_file_tree
node_file_tree -->|"reads files"| node_filesystem
node_sftp -->|"transfers files"| node_filesystem
node_terminal_session -->|"runs tools"| node_ai_cli
node_ai_cli -.->|"emits events"| node_hook_bridge
node_hook_bridge -->|"forwards events"| node_ai_hooks
node_ai_hooks -->|"updates activity"| node_ai_activity
node_ai_hooks -->|"captures answers"| node_answer_reader
node_app -->|"starts endpoint"| node_runtime_api
node_workspace_ui -->|"uses configuration"| node_config
node_workspace_ui -->|"uses settings"| node_settings
node_workspace_ui -->|"opens documents"| node_document_tabs
node_document_tabs -->|"renders Markdown"| node_markdown
node_document_tabs -->|"renders formulas"| node_math
node_workspace_ui -->|"draws interface"| node_renderer

click node_app "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/main.rs"
click node_workspace_ui "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/workspace.rs"
click node_session_restore "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/workspace/session_persistence.rs"
click node_split_layout "https://github.com/kuddev/pebrel/blob/main/nebula_split/src/lib.rs"
click node_terminal_view "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/terminal/view.rs"
click node_terminal_session "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/terminal/session.rs"
click node_ssh "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/ssh.rs"
click node_sftp "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/display/sftp_panel.rs"
click node_file_tree "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/workspace/file_tree.rs"
click node_completion "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/display/suggest_engine.rs"
click node_ai_activity "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/ai_agents.rs"
click node_ai_hooks "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/ai_hook.rs"
click node_hook_bridge "https://github.com/kuddev/pebrel/blob/main/nebula_hook/src/main.rs"
click node_answer_reader "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/assistant_answer.rs"
click node_runtime_api "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/runtime_api.rs"
click node_config "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/config/mod.rs"
click node_settings "https://github.com/kuddev/pebrel/blob/main/nebula_settings/src/lib.rs"
click node_document_tabs "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/doc_tabs.rs"
click node_markdown "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/markdown/mod.rs"
click node_math "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/math/mod.rs"
click node_renderer "https://github.com/kuddev/pebrel/blob/main/nebula_app/src/renderer/mod.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_app,node_workspace_ui,node_session_restore,node_split_layout,node_runtime_api,node_user toneBlue
class node_terminal_view,node_terminal_session,node_completion,node_filesystem toneAmber
class node_ssh,node_sftp,node_file_tree toneMint
class node_ai_activity,node_ai_hooks,node_hook_bridge,node_answer_reader toneRose
class node_config,node_settings,node_document_tabs,node_markdown,node_math,node_renderer,node_shell,node_ssh_hosts,node_ai_cli toneIndigo
```

## Components

### Desktop workspace

- [Application startup](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/main.rs): `nebula_app/src/main.rs`
- [Workspace UI](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/workspace.rs): `nebula_app/src/gpui_shell/workspace.rs`
- [Session restore](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/workspace/session_persistence.rs): `nebula_app/src/gpui_shell/workspace/session_persistence.rs`
- [Split layout](https://github.com/kuddev/pebrel/blob/main/nebula_split/src/lib.rs): `nebula_split/src/lib.rs`
- [Runtime API](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/runtime_api.rs): `nebula_app/src/runtime_api.rs`

### Terminal sessions

- [Terminal view](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/terminal/view.rs): `nebula_app/src/gpui_shell/terminal/view.rs`
- [Terminal session](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/terminal/session.rs): `nebula_app/src/gpui_shell/terminal/session.rs`
- [Command completion](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/display/suggest_engine.rs): `nebula_app/src/display/suggest_engine.rs`

### Remote and files

- [SSH connectivity](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/ssh.rs): `nebula_app/src/ssh.rs`
- [SFTP panel](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/display/sftp_panel.rs): `nebula_app/src/display/sftp_panel.rs`
- [File browsing](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/workspace/file_tree.rs): `nebula_app/src/gpui_shell/workspace/file_tree.rs`

### AI workflows

- [Agent activity](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/ai_agents.rs): `nebula_app/src/ai_agents.rs`
- [AI hook integration](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/ai_hook.rs): `nebula_app/src/ai_hook.rs`
- [Hook bridge](https://github.com/kuddev/pebrel/blob/main/nebula_hook/src/main.rs): `nebula_hook/src/main.rs`
- [Answer reader](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/assistant_answer.rs): `nebula_app/src/assistant_answer.rs`

### Configuration and display

- [Configuration](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/config/mod.rs): `nebula_app/src/config/mod.rs`
- [User settings](https://github.com/kuddev/pebrel/blob/main/nebula_settings/src/lib.rs): `nebula_settings/src/lib.rs`
- [Document tabs](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/gpui_shell/doc_tabs.rs): `nebula_app/src/gpui_shell/doc_tabs.rs`
- [Markdown rendering](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/markdown/mod.rs): `nebula_app/src/markdown/mod.rs`
- [Math rendering](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/math/mod.rs): `nebula_app/src/math/mod.rs`
- [GPU renderer](https://github.com/kuddev/pebrel/blob/main/nebula_app/src/renderer/mod.rs): `nebula_app/src/renderer/mod.rs`

### Other components

- **User**
- **Local shell**
- **SSH hosts**
- **Local and remote files**
- **AI CLI tools**

## Connections

- User → Application startup: opens
- Application startup → Workspace UI: starts
- Workspace UI → Session restore: restores sessions
- Workspace UI → Split layout: arranges panes
- Workspace UI → Terminal view: opens terminals
- Terminal view → Terminal session: controls
- Terminal session → Local shell: runs commands
- Terminal view → Command completion: requests suggestions
- Workspace UI → SSH connectivity: opens remote sessions
- SSH connectivity → SSH hosts: connects to
- Workspace UI → SFTP panel: opens file transfers
- Workspace UI → File browsing: browses files
- File browsing → Local and remote files: reads files
- SFTP panel → Local and remote files: transfers files
- Terminal session → AI CLI tools: runs tools
- AI CLI tools → Hook bridge: emits events
- Hook bridge → AI hook integration: forwards events
- AI hook integration → Agent activity: updates activity
- AI hook integration → Answer reader: captures answers
- Application startup → Runtime API: starts endpoint
- Workspace UI → Configuration: uses configuration
- Workspace UI → User settings: uses settings
- Workspace UI → Document tabs: opens documents
- Document tabs → Markdown rendering: renders Markdown
- Document tabs → Math rendering: renders formulas
- Workspace UI → GPU renderer: draws interface
