geiger README

The project's README from github.com/Atomburstofficial/geiger. As one markdown file: README.md.

geiger

CI npm license: MIT node ≥18 dependencies: 0

A Geiger counter for AI agents.

One read-only command that inventories every AI agent, harness, MCP server, plugin, and AI extension on a machine — and tells you, in plain language, what each one can touch.

npx geiger-scan

No install. No account. No telemetry. Reads configs and directories, writes nothing (unless you ask for --json yourfile.json).

A geiger scan: findings grouped by ecosystem with exposure labels, a redacted credential, and plain-language fixes

Why this exists

In August 2026, an open-source agent harness went from zero to 200,000+ GitHub stars in three weeks. Its plugin ecosystem passed 13,000 repositories in the same window. One-click desktop clients appeared the same day it launched. Instagram carousels now teach office workers to install all of it.

Every one of those installs is a program that can execute commands, read files, and hold credentials — configured in dotfiles nobody looks at twice. Ask yourself the question this tool answers: what is actually running on this machine, and what can it reach? Most people cannot answer it. Now it's one command.

What a scan looks like

  GEIGER  ·  a Geiger counter for AI agents
  machine dev-laptop  ·  2026-09-06 12:24 UTC  ·  read-only · no telemetry
  ──────────────────────────────────────────────────────────────

  9 findings across 3 ecosystems  ·  7 can execute code  ·  1 credential in config files

  claude-code  (6)
    Claude Code  agent
      [EXECUTES] [BROAD-FILESYSTEM] [NETWORK]
      origin: registry · @anthropic-ai/claude-code
    magic (Claude Code · global)  MCP server
      [EXECUTES] [HOLDS-SECRETS] [BROAD-FILESYSTEM]
      origin: registry · @21st-dev/magic@latest
      credential: "API_KEY" — opaque value under a credential-named key · ~/.claude.json
      note: wrapped by a policy agent (domainguard-agent.exe) — enforcement layer in front of the server
    hooks: UserPromptSubmit, PreToolUse  hook
      [EXECUTES]
      note: hooks execute without a prompt each time their event fires
  ...

Real output from a real machine (values redacted — see below).

What it detects

Ecosystem What geiger reads
Claude Code global + per-project MCP servers, hooks, plugins, skills, subagents, apiKeyHelper
MCP hosts MCP servers configured in Claude Desktop, Cursor, Windsurf, VS Code (user + project), Cline, Roo Code, Continue, Zed
AI apps & IDEs Cursor, Windsurf, Zed, Claude Desktop, ChatGPT Desktop, Codex desktop app — reported by presence, so an installed client with zero MCP servers still shows up
Other agents Codex CLI, Gemini CLI, Kilo CLI, Grok Build, Aider, OpenCode, Qwen Code, DeepSeek Harness, Continue, GitHub Copilot CLI, Goose, JetBrains Junie, Open Interpreter, LM Studio, Ollama
Hooks Claude Code (settings), Cursor (hooks.json), Codex (notify in config.toml), Gemini CLI (settings) — the commands are listed, because hooks run with no prompt
Git hooks live hooks in .git/hooks (samples ignored), core.hooksPath redirects, and merge drivers — git runs these itself, and agent tooling installs itself here
Skill & subagent text what a skill actually says: its description, instruction text that tries to override the agent or hide work from you, commands with a hostile shape, and credential shapes — a name in a directory listing tells you nothing
Editor extensions AI extensions in VS Code / Insiders / Cursor
JetBrains IDEs AI Assistant / MCP settings presence per product (the settings live inside the IDE — geiger points you at the right screen)
Global CLIs agent packages in global npm roots (read directly — npm is never executed)
AI browsers Comet, Dia, ChatGPT Atlas — the browser is the agent, so its presence is a finding
Browser extensions AI extensions in Chrome / Edge / Brave / Vivaldi / Arc / Comet / Dia / Atlas / Firefox profiles, with their granted permissions

Every finding gets: what it is, where it came from (registry, store, git, local script, remote server — or UNKNOWN-ORIGIN), what it can do (EXECUTES, HOLDS-SECRETS, BROAD-FILESYSTEM, BROAD-WEB, NETWORK), and the evidence path so you can verify by hand.

Geiger also recognizes policy wrappers (agents that put an enforcement layer in front of MCP servers) and reports both layers instead of hiding the real server behind the wrapper.

The three promises

  1. Read-only. The only write geiger ever performs is the --json file you explicitly name.
  2. No telemetry. Nothing leaves your machine. There is no endpoint to send anything to. (This also means we have no idea how many people use this — a trade we're happy with.)
  3. Secrets by shape only. When a credential-shaped value is found in a config, geiger reports the key name, the file, and what kind of secret it looks like — never any part of the value. A redaction pass runs on all output as defense-in-depth, and the test suite enforces it.

Requirements

Node.js 18 or newer. That's it. Node ships with npm and npx, and geiger has zero dependencies, so nothing else gets installed. No global install, no admin rights, no account.

If Node isn't on the machine yet, it's one command with the package manager you already have — then open a new terminal so npx is on the path:

winget install OpenJS.NodeJS.LTS      # Windows
brew install node                     # macOS (Homebrew)
sudo apt install nodejs npm           # Debian / Ubuntu

Other platforms and version managers (nvm, fnm): https://nodejs.org/en/download

Usage

npx geiger-scan                        scan, print the report
npx geiger-scan --html report.html     self-contained HTML report with per-finding
                                       "what to do" remediation guidance
npx geiger-scan --json out.json        machine-readable findings (schemaVersion 1)
npx geiger-scan --path D:\repo1 --path E:\repo2
                                       also scan these project directories for
                                       project-level agent and MCP configs
npx geiger-scan --home C:\Users\other  scan a different home root (another user
                                       profile, a mounted image)
npx geiger-scan --strict               exit 2 if anything can execute code or
                                       holds secrets
npx geiger-scan --diff baseline.json   compare against an earlier --json
                                       snapshot: what appeared, disappeared,
                                       or escalated since then

Drift alarm: once you've reviewed a machine, save a baseline (--json baseline.json) and put geiger-scan --strict --diff baseline.json in cron or CI. It exits 2 only when something new can execute code or hold secrets — the standing, already-reviewed inventory stays quiet. Same mental model as a lockfile: accept what's there, alarm on change.

Registry blocked, or want the unreleased main? npx github:Atomburstofficial/geiger runs straight from this repo (still needs Node — see Requirements).

What the reports look like

Before running anything, see exactly what you'd get: a sample HTML report and a sample JSON output live in this repo, generated from the test fixture — synthetic data, generic paths, credentials shown by shape only (as always). The HTML report:

The HTML report: summary tiles, exposure chips, credential shapes, and

Every finding that warrants action carries plain-language remediation — as fix: lines in the terminal and "What to do" blocks in the HTML report.

Fleet pattern (MSPs, IT): run with --json per machine on a schedule (an RMM task or login script writing %COMPUTERNAME%.json to a share), keep each machine's baseline, and let --diff report per-machine drift. The schema is versioned and stable. Geiger never phones home — the JSON files travel only where you put them.

Limitations

Stated up front, because a scanner you overtrust is worse than no scanner:

FAQ

Is this a security audit? No. It's an inventory with honest exposure labels — the thing you need before any audit means anything.

Why should I trust a security company's free scanner? Read it. It's a few hundred lines of dependency-free JavaScript, and what's published is what runs — releases are published from GitHub Actions with npm provenance, so the npm page carries a signed link to the exact public commit each version was built from.

What do I do about what it finds? Individually: remove what you don't recognize, rotate credentials that shouldn't be sitting in configs. At a company: that's policy enforcement, which is a different product — DomainGuard is how organizations put a policy layer in front of this surface. Geiger stays free and standalone either way.

License

MIT · built by Atomburst · zero runtime dependencies, no build step — the source you read is the code that runs.

geiger (Atomburstofficial/geiger)

Searching Database…

166 ·GitHub
这是什么东西?Geiger 是一款只读的 AI 工具扫描器:一条命令就能盘点出电脑上所有的 AI agent、运行框架、MCP 服务器、插件和 AI 扩展,并用通俗易懂的语言说明每一项能访问哪些内容。
这是需要注册的云服务,还是运行在我自己电脑上的程序?它是一个本地命令行工具,不是服务。它只读取配置文件和目录,不写入任何内容,除非你主动要求保存一份 --json 文件。
怎么运行它?我的电脑需要满足什么条件?用 npx 运行即可——不需要全局安装,不需要管理员权限,也不需要账号。唯一的要求是 Node.js 18 或更高版本;如果 npm 仓库被屏蔽,可以用 npx github:Atomburstofficial/geiger 直接从这个仓库运行。
它有哪些盲区?它只读取已知的配置位置,所以安装在非标准路径、其他用户账户、容器或 WSL 里的 agent 它是看不到的。它读取的也只是配置而非实际运行行为,而且无法判断一个包是否是恶意的——只能告诉你它来自哪里。
它实际能发现哪些东西?Claude Desktop、Cursor、Windsurf、VS Code、Cline 和 Zed 中的 MCP 服务器;Claude Code 的插件、hooks 和 skills;git hooks;JetBrains AI 设置;Comet 和 Dia 这类 AI 浏览器;以及 AI 浏览器扩展及其被授予的权限。
对于找到的每一项,它会告诉我什么?每一条发现都会标注来源(registry、商店、git、本地脚本、远程服务器,或 UNKNOWN-ORIGIN),并给出能力标签,比如 EXECUTES 或 HOLDS-SECRETS,还会附上证据路径,方便你亲自核实一切。
扫描时会有任何信息离开我的电脑吗?不会。它没有任何遥测功能,也不存在用来发送数据的任何端点——作为交换,作者甚至不去了解有多少人在使用这个工具。
我把 API 密钥存在 agent 配置里,它们会出现在报告中吗?不会——geiger 只报告密钥名称、所在文件以及它看起来属于哪类密钥,绝不会泄露值的任何部分。所有输出都会经过一道脱敏处理,作为纵深防御,并由测试套件来保障。
安全公司出的免费扫描器,我为什么要信它?自己看代码:总共只有几百行,零依赖的 JavaScript,而且发行版是通过 GitHub Actions 发布的,带有 npm provenance,所以 npm 页面上有一条签名链接,指向每个版本构建时对应的公开 commit。geiger 读取的任何内容都不会被执行。
这是一次安全审计吗?对它发现的东西我该怎么做?不是——FAQ 把它称为一份带有诚实暴露标签的清单,是任何审计真正开始之前你需要的东西。实际操作建议:删掉你不认识的东西,轮换那些不该留在配置里的凭据;组织范围的策略管控是另一个产品(DomainGuard)的职责,geiger 则保持免费、独立运行。
IT 团队能把它部署到很多台电脑上吗?可以——在每台机器上用 --json 定时运行(比如通过 RMM 任务或登录脚本,把 %COMPUTERNAME%.json 写入共享目录),保留每台机器的基线,再用 --diff 报告每台机器的变动。数据结构(schema)有版本控制且保持稳定,文件只会出现在你指定的地方。
Size
0.3 MB
Stars
166
Age
1mo
Commits · 90 Days