# nodarisai/coding-agent_harness architecture

> Architecture diagram of the GitHub repository nodarisai/coding-agent_harness, 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/nodarisai/coding-agent_harness
- Repository: https://github.com/nodarisai/coding-agent_harness

## Overview

Nodaris is a coding-agent harness: hooks inspect actions, apply safety policy, and add task procedures and remembered context; end-of-turn checks and receipts help prove the work. Its CLI also exposes setup, privacy, security, monitoring, learning, and team-sync capabilities. The graph follows documented behavior and SOURCE INDEX references; unsampled subsystems are represented by their exact source paths, and their internal wiring is not inferred.

Main entry points: [`engine/nodaris_harness/dispatch.py`](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/dispatch.py) (Event dispatch), [`engine/nodaris_harness/cli.py`](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/cli.py) (Harness CLI), [`engine/nodaris_harness/learner.py`](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/learner.py) (Background learner), [`engine/nodaris_harness/sync.py`](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/sync.py) (Team sync)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_integration["Agent integration"]
  node_hook["Harness hooks<br/>[hlib.py]"]
  node_dispatch["Event dispatch<br/>[dispatch.py]"]
  node_cli["Harness CLI<br/>[cli.py]"]
end

subgraph group_workflow["Task workflow"]
  node_router["Request router<br/>[router.py]"]
  node_jev["Jev decision model<br/>[jev.py]"]
  node_graph["Code graph<br/>[graph.py]"]
end

subgraph group_safety["Safety and proof"]
  node_gates["Turn gates<br/>[gates.py]"]
  node_policy["Action policy<br/>[policy.py]"]
  node_redact["Data redaction<br/>[redact.py]"]
  node_phi["PHI detection<br/>[phi_guard.py]"]
  node_security["Security checks<br/>[security.py]"]
  node_ready["Readiness checks<br/>[ready.py]"]
  node_trash["Reversible trash<br/>[trash.py]"]
end

subgraph group_learning["Memory and learning"]
  node_profile["Learned profile<br/>[profile.py]"]
  node_memory["Lesson memory<br/>[memory.py]"]
  node_learner["Background learner<br/>[learner.py]"]
  node_trajectory["Session trajectory<br/>[trajectory.py]"]
  node_sync["Team sync<br/>[sync.py]"]
end

subgraph group_operations["Setup and operations"]
  node_hosts["Agent host setup<br/>[hosts.py]"]
  node_onboard["Onboarding<br/>[onboard.py]"]
  node_tui["Terminal interface<br/>[tui.py]"]
  node_monitor["Live monitor<br/>[monitor.py]"]
  node_status["Status line<br/>[statusline.py]"]
end

node_person(("User"))
node_agent["Coding agent"]
node_vault[("Team memory vault")]

node_person -->|"requests work"| node_agent
node_agent -->|"runs action hooks"| node_hook
node_hook -->|"reports events"| node_dispatch
node_dispatch -->|"routes requests"| node_router
node_router -->|"consults keywords"| node_profile
node_dispatch -->|"checks turn"| node_gates
node_dispatch -->|"classifies actions"| node_policy
node_dispatch -->|"recalls lessons"| node_memory
node_dispatch -->|"updates learning"| node_learner
node_dispatch -->|"records session"| node_trajectory
node_dispatch -.->|"adds decision context"| node_jev
node_dispatch -.->|"redacts data"| node_redact
node_cli -->|"dispatches events"| node_dispatch
node_cli -->|"runs assessment"| node_security
node_cli -->|"runs readiness"| node_ready
node_cli -->|"manages deletion"| node_trash
node_cli -->|"runs sync"| node_sync
node_cli -.->|"starts monitor"| node_monitor
node_cli -->|"queries code graph"| node_graph
node_cli -.->|"prints status"| node_status
node_cli -->|"starts onboarding"| node_onboard
node_onboard -->|"presents prompts"| node_tui
node_onboard -->|"configures setup"| node_hosts
node_hosts -->|"installs hooks"| node_agent
node_gates -->|"requires proof"| node_agent
node_policy -->|"requests approval"| node_person
node_redact -->|"detects identifiers"| node_phi
node_learner -->|"uses lessons"| node_memory
node_learner -->|"adapts profile"| node_profile
node_sync -->|"shares lessons"| node_memory
node_sync -->|"syncs opted-in data"| node_vault
node_jev -->|"screens prompts"| node_redact

click node_hook "https://github.com/nodarisai/coding-agent_harness/blob/main/packs/core/hooks/hlib.py"
click node_dispatch "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/dispatch.py"
click node_cli "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/cli.py"
click node_router "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/router.py"
click node_profile "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/profile.py"
click node_gates "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/gates.py"
click node_policy "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/policy.py"
click node_redact "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/redact.py"
click node_phi "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/phi_guard.py"
click node_security "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/security.py"
click node_ready "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/ready.py"
click node_memory "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/memory.py"
click node_learner "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/learner.py"
click node_trajectory "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/trajectory.py"
click node_sync "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/sync.py"
click node_hosts "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/hosts.py"
click node_onboard "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/onboard.py"
click node_tui "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/tui.py"
click node_jev "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/jev.py"
click node_monitor "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/monitor.py"
click node_graph "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/graph.py"
click node_trash "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/trash.py"
click node_status "https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/statusline.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_hook,node_dispatch,node_cli,node_person toneBlue
class node_router,node_jev,node_graph,node_vault toneAmber
class node_gates,node_policy,node_redact,node_phi,node_security,node_ready,node_trash toneMint
class node_profile,node_memory,node_learner,node_trajectory,node_sync toneRose
class node_hosts,node_onboard,node_tui,node_monitor,node_status,node_agent toneIndigo
```

## Components

### Agent integration

- [Harness hooks](https://github.com/nodarisai/coding-agent_harness/blob/main/packs/core/hooks/hlib.py): `packs/core/hooks/hlib.py`
- [Event dispatch](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/dispatch.py): `engine/nodaris_harness/dispatch.py`
- [Harness CLI](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/cli.py): `engine/nodaris_harness/cli.py`

### Task workflow

- [Request router](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/router.py): `engine/nodaris_harness/router.py`
- [Jev decision model](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/jev.py): `engine/nodaris_harness/jev.py`
- [Code graph](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/graph.py): `engine/nodaris_harness/graph.py`

### Safety and proof

- [Turn gates](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/gates.py): `engine/nodaris_harness/gates.py`
- [Action policy](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/policy.py): `engine/nodaris_harness/policy.py`
- [Data redaction](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/redact.py): `engine/nodaris_harness/redact.py`
- [PHI detection](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/phi_guard.py): `engine/nodaris_harness/phi_guard.py`
- [Security checks](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/security.py): `engine/nodaris_harness/security.py`
- [Readiness checks](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/ready.py): `engine/nodaris_harness/ready.py`
- [Reversible trash](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/trash.py): `engine/nodaris_harness/trash.py`

### Memory and learning

- [Learned profile](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/profile.py): `engine/nodaris_harness/profile.py`
- [Lesson memory](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/memory.py): `engine/nodaris_harness/memory.py`
- [Background learner](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/learner.py): `engine/nodaris_harness/learner.py`
- [Session trajectory](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/trajectory.py): `engine/nodaris_harness/trajectory.py`
- [Team sync](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/sync.py): `engine/nodaris_harness/sync.py`

### Setup and operations

- [Agent host setup](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/hosts.py): `engine/nodaris_harness/hosts.py`
- [Onboarding](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/onboard.py): `engine/nodaris_harness/onboard.py`
- [Terminal interface](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/tui.py): `engine/nodaris_harness/tui.py`
- [Live monitor](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/monitor.py): `engine/nodaris_harness/monitor.py`
- [Status line](https://github.com/nodarisai/coding-agent_harness/blob/main/engine/nodaris_harness/statusline.py): `engine/nodaris_harness/statusline.py`

### Other components

- **User**
- **Coding agent**
- **Team memory vault**

## Connections

- User → Coding agent: requests work (evidence: `README.md`)
- Coding agent → Harness hooks: runs action hooks (evidence: `README.md`)
- Harness hooks → Event dispatch: reports events (evidence: `packs/core/hooks/hlib.py`)
- Event dispatch → Request router: routes requests (evidence: `engine/nodaris_harness/dispatch.py`)
- Request router → Learned profile: consults keywords (evidence: `engine/nodaris_harness/router.py`)
- Event dispatch → Turn gates: checks turn (evidence: `engine/nodaris_harness/dispatch.py`)
- Event dispatch → Action policy: classifies actions (evidence: `engine/nodaris_harness/dispatch.py`)
- Event dispatch → Lesson memory: recalls lessons (evidence: `engine/nodaris_harness/dispatch.py`)
- Event dispatch → Background learner: updates learning (evidence: `engine/nodaris_harness/dispatch.py`)
- Event dispatch → Session trajectory: records session (evidence: `engine/nodaris_harness/dispatch.py`)
- Event dispatch → Jev decision model: adds decision context (evidence: `engine/nodaris_harness/dispatch.py`)
- Event dispatch → Data redaction: redacts data (evidence: `engine/nodaris_harness/dispatch.py`)
- Harness CLI → Event dispatch: dispatches events (evidence: `engine/nodaris_harness/cli.py`)
- Harness CLI → Security checks: runs assessment (evidence: `engine/nodaris_harness/cli.py`)
- Harness CLI → Readiness checks: runs readiness (evidence: `engine/nodaris_harness/cli.py`)
- Harness CLI → Reversible trash: manages deletion (evidence: `engine/nodaris_harness/cli.py`)
- Harness CLI → Team sync: runs sync (evidence: `engine/nodaris_harness/cli.py`)
- Harness CLI → Live monitor: starts monitor
- Harness CLI → Code graph: queries code graph (evidence: `engine/nodaris_harness/cli.py`)
- Harness CLI → Status line: prints status
- Harness CLI → Onboarding: starts onboarding (evidence: `engine/nodaris_harness/cli.py`)
- Onboarding → Terminal interface: presents prompts (evidence: `engine/nodaris_harness/onboard.py`)
- Onboarding → Agent host setup: configures setup (evidence: `README.md`)
- Agent host setup → Coding agent: installs hooks (evidence: `engine/nodaris_harness/hosts.py`)
- Turn gates → Coding agent: requires proof (evidence: `README.md`)
- Action policy → User: requests approval (evidence: `README.md`)
- Data redaction → PHI detection: detects identifiers (evidence: `engine/nodaris_harness/redact.py`)
- Background learner → Lesson memory: uses lessons (evidence: `engine/nodaris_harness/learner.py`)
- Background learner → Learned profile: adapts profile (evidence: `engine/nodaris_harness/learner.py`)
- Team sync → Lesson memory: shares lessons (evidence: `engine/nodaris_harness/sync.py`)
- Team sync → Team memory vault: syncs opted-in data (evidence: `engine/nodaris_harness/sync.py`)
- Jev decision model → Data redaction: screens prompts (evidence: `engine/nodaris_harness/jev.py`)
