# vexdeathgrip/nora architecture

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

- Interactive diagram: https://gitdiagram.com/vexdeathgrip/nora
- Repository: https://github.com/vexdeathgrip/nora

## Overview

The README presents Nora as a Hermes-based personal agent, with chat as the entry point and memory, autonomous exploration, self-improvement, and scheduled jobs as key capabilities. The supplied tree, however, contains no Nora-specific CLI, plugins, skills, cron jobs, or configuration; it mainly exposes Hermes runtime modules. The graph therefore maps only the visible runtime and keeps Nora-specific documented behavior as an evidence limit rather than assigning it invented source paths. Relationships are limited to README statements and source-index references.

Main entry points: [`agent/memory_manager.py`](https://github.com/vexdeathgrip/nora/blob/main/agent/memory_manager.py) (Memory Manager), [`cli.py`](https://github.com/vexdeathgrip/nora/blob/main/cli.py) (Hermes CLI), [`agent/conversation_loop.py`](https://github.com/vexdeathgrip/nora/blob/main/agent/conversation_loop.py) (Conversation Loop), [`agent/skill_commands.py`](https://github.com/vexdeathgrip/nora/blob/main/agent/skill_commands.py) (Skill Commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User Entry"]
  node_cli["Hermes CLI<br/>[cli.py]"]
end

subgraph group_runtime["Agent Runtime"]
  node_conversation["Conversation Loop"]
  node_context["Context Engine<br/>[context_engine.py]"]
  node_async_utils["Async Utilities<br/>[async_utils.py]"]
end

subgraph group_capabilities["Agent Capabilities"]
  node_memory["Memory Manager<br/>[memory_manager.py]"]
  node_skill_commands["Skill Commands<br/>[skill_commands.py]"]
  node_skill_utils["Skill Utilities<br/>[skill_utils.py]"]
  node_lsp["LSP Service<br/>[manager.py]"]
  node_lsp_client["LSP Client<br/>[client.py]"]
  node_teams_pipeline["Teams Summaries<br/>[pipeline.py]"]
  node_teams_store[("Pipeline Store<br/>[store.py]")]
  node_google_meet["Meet Bot Manager<br/>[process_manager.py]"]
  node_memory_provider["Memory Provider<br/>[memory_provider.py]"]
end

subgraph group_protocols["External Protocols"]
  node_acp["ACP Server<br/>[server.py]"]
  node_acp_tools["ACP Tools<br/>[tools.py]"]
end

node_user(("User"))

node_user -->|"starts chat"| node_cli
node_cli -.->|"runs agent"| node_conversation
node_conversation -.->|"uses context"| node_context
node_memory -->|"delegates to"| node_memory_provider
node_memory -->|"references"| node_skill_commands
node_skill_commands -->|"uses"| node_skill_utils
node_acp -->|"uses tools"| node_acp_tools
node_lsp -->|"manages clients"| node_lsp_client
node_teams_pipeline -->|"uses store"| node_teams_store
node_google_meet -.->|"supplies meetings"| node_teams_pipeline

click node_cli "https://github.com/vexdeathgrip/nora/blob/main/cli.py"
click node_conversation "https://github.com/vexdeathgrip/nora/blob/main/agent/conversation_loop.py"
click node_context "https://github.com/vexdeathgrip/nora/blob/main/agent/context_engine.py"
click node_memory "https://github.com/vexdeathgrip/nora/blob/main/agent/memory_manager.py"
click node_skill_commands "https://github.com/vexdeathgrip/nora/blob/main/agent/skill_commands.py"
click node_skill_utils "https://github.com/vexdeathgrip/nora/blob/main/agent/skill_utils.py"
click node_async_utils "https://github.com/vexdeathgrip/nora/blob/main/agent/async_utils.py"
click node_acp "https://github.com/vexdeathgrip/nora/blob/main/acp_adapter/server.py"
click node_acp_tools "https://github.com/vexdeathgrip/nora/blob/main/acp_adapter/tools.py"
click node_lsp "https://github.com/vexdeathgrip/nora/blob/main/agent/lsp/manager.py"
click node_lsp_client "https://github.com/vexdeathgrip/nora/blob/main/agent/lsp/client.py"
click node_teams_pipeline "https://github.com/vexdeathgrip/nora/blob/main/plugins/teams_pipeline/pipeline.py"
click node_teams_store "https://github.com/vexdeathgrip/nora/blob/main/plugins/teams_pipeline/store.py"
click node_google_meet "https://github.com/vexdeathgrip/nora/blob/main/plugins/google_meet/process_manager.py"
click node_memory_provider "https://github.com/vexdeathgrip/nora/blob/main/agent/memory_provider.py"

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_conversation,node_context,node_async_utils toneAmber
class node_memory,node_skill_commands,node_skill_utils,node_lsp,node_lsp_client,node_teams_pipeline,node_teams_store,node_google_meet,node_memory_provider toneMint
class node_acp,node_acp_tools toneRose
```

## Components

### User Entry

- [Hermes CLI](https://github.com/vexdeathgrip/nora/blob/main/cli.py): `cli.py`

### Agent Runtime

- [Conversation Loop](https://github.com/vexdeathgrip/nora/blob/main/agent/conversation_loop.py): `agent/conversation_loop.py`
- [Context Engine](https://github.com/vexdeathgrip/nora/blob/main/agent/context_engine.py): `agent/context_engine.py`
- [Async Utilities](https://github.com/vexdeathgrip/nora/blob/main/agent/async_utils.py): `agent/async_utils.py`

### Agent Capabilities

- [Memory Manager](https://github.com/vexdeathgrip/nora/blob/main/agent/memory_manager.py): `agent/memory_manager.py`
- [Skill Commands](https://github.com/vexdeathgrip/nora/blob/main/agent/skill_commands.py): `agent/skill_commands.py`
- [Skill Utilities](https://github.com/vexdeathgrip/nora/blob/main/agent/skill_utils.py): `agent/skill_utils.py`
- [LSP Service](https://github.com/vexdeathgrip/nora/blob/main/agent/lsp/manager.py): `agent/lsp/manager.py`
- [LSP Client](https://github.com/vexdeathgrip/nora/blob/main/agent/lsp/client.py): `agent/lsp/client.py`
- [Teams Summaries](https://github.com/vexdeathgrip/nora/blob/main/plugins/teams_pipeline/pipeline.py): `plugins/teams_pipeline/pipeline.py`
- [Pipeline Store](https://github.com/vexdeathgrip/nora/blob/main/plugins/teams_pipeline/store.py): `plugins/teams_pipeline/store.py`
- [Meet Bot Manager](https://github.com/vexdeathgrip/nora/blob/main/plugins/google_meet/process_manager.py): `plugins/google_meet/process_manager.py`
- [Memory Provider](https://github.com/vexdeathgrip/nora/blob/main/agent/memory_provider.py): `agent/memory_provider.py`

### External Protocols

- [ACP Server](https://github.com/vexdeathgrip/nora/blob/main/acp_adapter/server.py): `acp_adapter/server.py`
- [ACP Tools](https://github.com/vexdeathgrip/nora/blob/main/acp_adapter/tools.py): `acp_adapter/tools.py`

### Other components

- **User**

## Connections

- User → Hermes CLI: starts chat (evidence: `README.md`)
- Hermes CLI → Conversation Loop: runs agent
- Conversation Loop → Context Engine: uses context
- Memory Manager → Memory Provider: delegates to (evidence: `agent/memory_manager.py`)
- Memory Manager → Skill Commands: references (evidence: `agent/memory_manager.py`)
- Skill Commands → Skill Utilities: uses (evidence: `agent/skill_commands.py`)
- ACP Server → ACP Tools: uses tools (evidence: `acp_adapter/server.py`)
- LSP Service → LSP Client: manages clients (evidence: `agent/lsp/manager.py`)
- Teams Summaries → Pipeline Store: uses store (evidence: `plugins/teams_pipeline/pipeline.py`)
- Meet Bot Manager → Teams Summaries: supplies meetings
