Coding agents & harnesses
Claude Code, Codex CLI, Gemini CLI, Kilo CLI, Grok Build, Copilot CLI, Aider, Goose, DeepSeek Harness, and more — with their hooks, skills, and subagents.
One read-only command 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. Zero dependencies. No account. No telemetry.
$ npx geiger-scanGEIGER · a Geiger counter for AI agents machine dev-laptop · read-only · no telemetry ────────────────────────────────────────────── 10 findings across 3 ecosystems 8 can execute code · 1 credential in config files claude-code (6) magic MCP server [EXECUTES] [HOLDS-SECRETS] [BROAD-FILESYSTEM] origin: registry · @21st-dev/magic@latest credential: "API_KEY" — value never shown fix: pin an exact version, rotate the key hooks: PreToolUse hook [EXECUTES] note: runs without a prompt on every event
Agents live in dotfiles nobody reads twice. Geiger reads them all — configs and directories only, never executing anything it finds:
Claude Code, Codex CLI, Gemini CLI, Kilo CLI, Grok Build, Copilot CLI, Aider, Goose, DeepSeek Harness, and more — with their hooks, skills, and subagents.
Claude Desktop, Cursor, Windsurf, VS Code, Cline, Roo Code, Continue, Zed — global and per-project, including wrapped and remote servers.
Agent plugins, AI settings in VS Code, Cursor, and JetBrains IDEs, and AI browser extensions — Chrome, Edge, Brave, Firefox — with their actual granted permissions.
Registry, store, git, local script, or remote server — and an honest UNKNOWN-ORIGIN flag when the answer is "we can't tell".
API keys sitting in plaintext config files, reported by shape and key name only — the value itself is never printed. Enforced by test.
Every finding that warrants action carries plain-language remediation — in the terminal, and as "What to do" blocks in the HTML report.
No CVSS theater. Each finding gets the labels its position earns:
Zero runtime dependencies, no build step — the source you read is the code that runs.
The only write Geiger ever performs is the report file you explicitly name. It reads configs and directories; it never executes what it finds.
Nothing leaves your machine. There is no endpoint to send anything to — which also means we can't count our own users. A trade we're happy with.
Credential-shaped values are reported by key name, file, and shape — never any part of the value. A redaction pass runs on all output, and the test suite enforces it.
npx geiger-scan --json per machine, collect the files, and diff over time. The JSON schema is versioned and stable. MSPs and IT teams: this pairs naturally with Access Review & Evidence for the "prove it" half.You cannot secure a surface you haven't inventoried. Run it now — it reads, it reports, it leaves.
npx geiger-scan · MIT · zero dependencies · no telemetry