# atomburstofficial/geiger architecture

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

## Overview

Geiger is a read-only Node.js inventory and exposure-reporting tool for AI agents, MCP servers, hooks, skills, and related extensions. The principal workflow is CLI invocation → detector dispatch → finding normalization and risk assessment → terminal and optional HTML/JSON output; optional baseline comparison adds drift reporting. The README documents broader ecosystem coverage than the sampled implementation excerpts, so detector branches are represented from the registry and README. Some internal detector-to-helper relationships are supported only by the SOURCE INDEX; unsampled behavior is not inferred.

Main entry points: [`src/detectors/index.js`](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/index.js) (Detector registry), [`src/platform.js`](https://github.com/atomburstofficial/geiger/blob/main/src/platform.js) (Platform paths), [`bin/geiger.js`](https://github.com/atomburstofficial/geiger/blob/main/bin/geiger.js) (Geiger CLI), [`src/detectors/claude-code.js`](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/claude-code.js) (Claude Code)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["CLI and reports"]
  node_cli["Geiger CLI<br/>[geiger.js]"]
  node_terminal["Terminal report<br/>[terminal.js]"]
  node_html["HTML report<br/>[html.js]"]
end

subgraph group_detection["Ecosystem detection"]
  node_registry["Detector registry<br/>[index.js]"]
  node_claude["Claude Code<br/>[claude-code.js]"]
  node_mcp["MCP hosts<br/>[mcp-hosts.js]"]
  node_apps["AI apps<br/>[ai-apps.js]"]
  node_agents["Other agents<br/>[other-agents.js]"]
  node_hooks["Agent hooks<br/>[hooks.js]"]
  node_git["Git hooks<br/>[git-hooks.js]"]
  node_vscode["VS Code extensions"]
  node_npm["Global CLIs<br/>[npm-global.js]"]
  node_browsers["AI browsers<br/>[ai-browsers.js]"]
  node_browserext["Browser extensions"]
  node_jetbrains["JetBrains IDEs<br/>[jetbrains.js]"]
end

subgraph group_analysis["Finding analysis"]
  node_engine["Finding engine<br/>[engine.js]"]
  node_common["MCP config parsing<br/>[common.js]"]
  node_skills["Skill inspection<br/>[skill-scan.js]"]
  node_patterns["Risk patterns<br/>[patterns.js]"]
  node_redact["Secret detection<br/>[redact.js]"]
  node_diff["Baseline diff<br/>[diff.js]"]
end

subgraph group_runtime["Shared runtime"]
  node_platform["Platform paths<br/>[platform.js]"]
  node_fsx["Filesystem reads<br/>[fsx.js]"]
end

node_user(("Operator"))

node_user -->|"invokes"| node_cli
node_cli -->|"loads detectors"| node_registry
node_cli -->|"runs scan"| node_engine
node_engine -.->|"dispatches"| node_registry
node_registry -->|"registers"| node_claude
node_registry -->|"registers"| node_mcp
node_registry -->|"registers"| node_apps
node_registry -->|"registers"| node_agents
node_registry -->|"registers"| node_hooks
node_registry -->|"registers"| node_git
node_registry -->|"registers"| node_vscode
node_registry -->|"registers"| node_npm
node_registry -->|"registers"| node_browsers
node_registry -->|"registers"| node_browserext
node_registry -->|"registers"| node_jetbrains
node_claude -->|"uses"| node_common
node_claude -->|"assesses servers"| node_engine
node_claude -->|"inspects skills"| node_skills
node_mcp -->|"uses"| node_common
node_common -->|"assesses servers"| node_engine
node_git -->|"checks commands"| node_patterns
node_git -->|"scans secrets"| node_redact
node_skills -->|"checks text"| node_patterns
node_skills -->|"scans secrets"| node_redact
node_cli -->|"renders"| node_terminal
node_cli -->|"renders"| node_html
node_cli -->|"redacts output"| node_redact
node_html -->|"uses actions"| node_engine
node_html -->|"redacts fields"| node_redact
node_terminal -->|"redacts output"| node_redact
node_cli -->|"compares baseline"| node_diff
node_claude -->|"resolves paths"| node_platform
node_claude -->|"reads configs"| node_fsx
node_git -->|"reads hooks"| node_fsx
node_platform -->|"joins paths"| node_fsx
node_apps -->|"resolves paths"| node_platform
node_browserext -->|"resolves paths"| node_platform
node_mcp -->|"resolves paths"| node_platform
node_hooks -->|"resolves paths"| node_platform
node_agents -->|"resolves paths"| node_platform
node_vscode -->|"resolves paths"| node_platform
node_npm -->|"resolves paths"| node_platform
node_browsers -->|"resolves paths"| node_platform
node_jetbrains -->|"resolves paths"| node_platform

click node_cli "https://github.com/atomburstofficial/geiger/blob/main/bin/geiger.js"
click node_registry "https://github.com/atomburstofficial/geiger/blob/main/src/detectors/index.js"
click node_claude "https://github.com/atomburstofficial/geiger/blob/main/src/detectors/claude-code.js"
click node_mcp "https://github.com/atomburstofficial/geiger/blob/main/src/detectors/mcp-hosts.js"
click node_apps "https://github.com/atomburstofficial/geiger/blob/main/src/detectors/ai-apps.js"
click node_agents "https://github.com/atomburstofficial/geiger/blob/main/src/detectors/other-agents.js"
click node_hooks "https://github.com/atomburstofficial/geiger/blob/main/src/detectors/hooks.js"
click node_git "https://github.com/atomburstofficial/geiger/blob/main/src/detectors/git-hooks.js"
click node_vscode "https://github.com/atomburstofficial/geiger/blob/main/src/detectors/vscode-extensions.js"
click node_npm "https://github.com/atomburstofficial/geiger/blob/main/src/detectors/npm-global.js"
click node_browsers "https://github.com/atomburstofficial/geiger/blob/main/src/detectors/ai-browsers.js"
click node_browserext "https://github.com/atomburstofficial/geiger/blob/main/src/detectors/browser-extensions.js"
click node_jetbrains "https://github.com/atomburstofficial/geiger/blob/main/src/detectors/jetbrains.js"
click node_engine "https://github.com/atomburstofficial/geiger/blob/main/src/engine.js"
click node_common "https://github.com/atomburstofficial/geiger/blob/main/src/detectors/common.js"
click node_skills "https://github.com/atomburstofficial/geiger/blob/main/src/skill-scan.js"
click node_patterns "https://github.com/atomburstofficial/geiger/blob/main/src/patterns.js"
click node_redact "https://github.com/atomburstofficial/geiger/blob/main/src/redact.js"
click node_diff "https://github.com/atomburstofficial/geiger/blob/main/src/diff.js"
click node_terminal "https://github.com/atomburstofficial/geiger/blob/main/src/report/terminal.js"
click node_html "https://github.com/atomburstofficial/geiger/blob/main/src/report/html.js"
click node_platform "https://github.com/atomburstofficial/geiger/blob/main/src/platform.js"
click node_fsx "https://github.com/atomburstofficial/geiger/blob/main/src/util/fsx.js"

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_terminal,node_html toneBlue
class node_registry,node_claude,node_mcp,node_apps,node_agents,node_hooks,node_git,node_vscode,node_npm,node_browsers,node_browserext,node_jetbrains toneAmber
class node_engine,node_common,node_skills,node_patterns,node_redact,node_diff toneMint
class node_platform,node_fsx toneRose
class node_user toneIndigo
```

## Components

### CLI and reports

- [Geiger CLI](https://github.com/atomburstofficial/geiger/blob/main/bin/geiger.js): `bin/geiger.js`
- [Terminal report](https://github.com/atomburstofficial/geiger/blob/main/src/report/terminal.js): `src/report/terminal.js`
- [HTML report](https://github.com/atomburstofficial/geiger/blob/main/src/report/html.js): `src/report/html.js`

### Ecosystem detection

- [Detector registry](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/index.js): `src/detectors/index.js`
- [Claude Code](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/claude-code.js): `src/detectors/claude-code.js`
- [MCP hosts](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/mcp-hosts.js): `src/detectors/mcp-hosts.js`
- [AI apps](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/ai-apps.js): `src/detectors/ai-apps.js`
- [Other agents](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/other-agents.js): `src/detectors/other-agents.js`
- [Agent hooks](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/hooks.js): `src/detectors/hooks.js`
- [Git hooks](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/git-hooks.js): `src/detectors/git-hooks.js`
- [VS Code extensions](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/vscode-extensions.js): `src/detectors/vscode-extensions.js`
- [Global CLIs](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/npm-global.js): `src/detectors/npm-global.js`
- [AI browsers](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/ai-browsers.js): `src/detectors/ai-browsers.js`
- [Browser extensions](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/browser-extensions.js): `src/detectors/browser-extensions.js`
- [JetBrains IDEs](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/jetbrains.js): `src/detectors/jetbrains.js`

### Finding analysis

- [Finding engine](https://github.com/atomburstofficial/geiger/blob/main/src/engine.js): `src/engine.js`
- [MCP config parsing](https://github.com/atomburstofficial/geiger/blob/main/src/detectors/common.js): `src/detectors/common.js`
- [Skill inspection](https://github.com/atomburstofficial/geiger/blob/main/src/skill-scan.js): `src/skill-scan.js`
- [Risk patterns](https://github.com/atomburstofficial/geiger/blob/main/src/patterns.js): `src/patterns.js`
- [Secret detection](https://github.com/atomburstofficial/geiger/blob/main/src/redact.js): `src/redact.js`
- [Baseline diff](https://github.com/atomburstofficial/geiger/blob/main/src/diff.js): `src/diff.js`

### Shared runtime

- [Platform paths](https://github.com/atomburstofficial/geiger/blob/main/src/platform.js): `src/platform.js`
- [Filesystem reads](https://github.com/atomburstofficial/geiger/blob/main/src/util/fsx.js): `src/util/fsx.js`

### Other components

- **Operator**

## Connections

- Operator → Geiger CLI: invokes (evidence: `README.md`)
- Geiger CLI → Detector registry: loads detectors (evidence: `bin/geiger.js`)
- Geiger CLI → Finding engine: runs scan (evidence: `bin/geiger.js`)
- Finding engine → Detector registry: dispatches
- Detector registry → Claude Code: registers (evidence: `src/detectors/index.js`)
- Detector registry → MCP hosts: registers (evidence: `src/detectors/index.js`)
- Detector registry → AI apps: registers (evidence: `src/detectors/index.js`)
- Detector registry → Other agents: registers (evidence: `src/detectors/index.js`)
- Detector registry → Agent hooks: registers (evidence: `src/detectors/index.js`)
- Detector registry → Git hooks: registers (evidence: `src/detectors/index.js`)
- Detector registry → VS Code extensions: registers (evidence: `src/detectors/index.js`)
- Detector registry → Global CLIs: registers (evidence: `src/detectors/index.js`)
- Detector registry → AI browsers: registers (evidence: `src/detectors/index.js`)
- Detector registry → Browser extensions: registers (evidence: `src/detectors/index.js`)
- Detector registry → JetBrains IDEs: registers (evidence: `src/detectors/index.js`)
- Claude Code → MCP config parsing: uses (evidence: `src/detectors/claude-code.js`)
- Claude Code → Finding engine: assesses servers (evidence: `src/detectors/claude-code.js`)
- Claude Code → Skill inspection: inspects skills (evidence: `src/detectors/claude-code.js`)
- MCP hosts → MCP config parsing: uses (evidence: `src/detectors/mcp-hosts.js`)
- MCP config parsing → Finding engine: assesses servers (evidence: `src/detectors/common.js`)
- Git hooks → Risk patterns: checks commands (evidence: `src/detectors/git-hooks.js`)
- Git hooks → Secret detection: scans secrets (evidence: `src/detectors/git-hooks.js`)
- Skill inspection → Risk patterns: checks text (evidence: `src/skill-scan.js`)
- Skill inspection → Secret detection: scans secrets (evidence: `src/skill-scan.js`)
- Geiger CLI → Terminal report: renders (evidence: `bin/geiger.js`)
- Geiger CLI → HTML report: renders (evidence: `bin/geiger.js`)
- Geiger CLI → Secret detection: redacts output (evidence: `bin/geiger.js`)
- HTML report → Finding engine: uses actions (evidence: `src/report/html.js`)
- HTML report → Secret detection: redacts fields (evidence: `src/report/html.js`)
- Terminal report → Secret detection: redacts output (evidence: `src/report/terminal.js`)
- Geiger CLI → Baseline diff: compares baseline (evidence: `bin/geiger.js`)
- Claude Code → Platform paths: resolves paths (evidence: `src/detectors/claude-code.js`)
- Claude Code → Filesystem reads: reads configs (evidence: `src/detectors/claude-code.js`)
- Git hooks → Filesystem reads: reads hooks (evidence: `src/detectors/git-hooks.js`)
- Platform paths → Filesystem reads: joins paths (evidence: `src/platform.js`)
- AI apps → Platform paths: resolves paths (evidence: `src/detectors/ai-apps.js`)
- Browser extensions → Platform paths: resolves paths (evidence: `src/detectors/browser-extensions.js`)
- MCP hosts → Platform paths: resolves paths (evidence: `src/detectors/mcp-hosts.js`)
- Agent hooks → Platform paths: resolves paths (evidence: `src/detectors/hooks.js`)
- Other agents → Platform paths: resolves paths (evidence: `src/detectors/other-agents.js`)
- VS Code extensions → Platform paths: resolves paths (evidence: `src/detectors/vscode-extensions.js`)
- Global CLIs → Platform paths: resolves paths (evidence: `src/detectors/npm-global.js`)
- AI browsers → Platform paths: resolves paths (evidence: `src/detectors/ai-browsers.js`)
- JetBrains IDEs → Platform paths: resolves paths (evidence: `src/detectors/jetbrains.js`)
