Agent Noir — A private eye for your coding agents
A private eye for your coding agents.
Agent Noir is a local-first investigation tool for Claude Code and Codex sessions. It turns coding-agent histories into searchable cases with prompts, files, commands, errors, project paths, and handoff exports.
No cloud. No account. No alibi.
Sessions become cases.
- Session
- Case
- Timeline
- Trail
- Files / commands / errors
- Evidence
- Export
- Case file
- Continuation context
- Handoff
Reads local. Writes local. Goes nowhere.
Source logs are read from your machine. The SQLite index is stored
locally under ~/.agent-noir/noir.sqlite unless overridden
with AGENT_NOIR_DB_PATH. No data is uploaded. No account
is required. The local UI binds to 127.0.0.1 and makes no
external network calls.
The redactor is best-effort. Review exports before sharing.
Packaged for private alpha.
Distributed via bunx and an npm alpha tag. Real Claude
and Codex logs already produce useful evidence: file activity, shell
commands, errors, and project paths.
Try Agent Noir
Agent Noir runs with Bun. Try the alpha package:
bunx @jean/noir@alpha The first run scans your local Claude Code and Codex histories, builds a local SQLite index, and prints next commands.
Requirements
- Bun ≥ 1.3
- macOS or Linux (tested first)
- Claude Code and/or Codex CLI histories on the machine, for real data
What it investigates
Agent Noir extracts a trail of evidence from Claude Code and Codex histories: prompts, assistant messages, file reads, file edits, shell commands, errors, project paths, and handoff-ready exports.
The vocabulary is deliberate. A session is a case. Its timeline is a trail. Files, commands, and errors are evidence. An export is a case file. Continuation context is a handoff.
Local log UI
Agent Noir ships an experimental local log inspector: a three-column case desk for browsing the same SQLite index the CLI uses — sessions, trace, and actions.
noir serve
noir serve --port 6647
noir serve --open
noir serve --scan
The server binds to 127.0.0.1 by default and is not exposed
to the network. It reads from the local SQLite index, does not upload
data, and makes no external network calls. If no index exists yet, the
UI shows an empty state pointing to noir scan.
The UI is experimental. Feedback is wanted.
Common commands
Try
bunx @jean/noir@alpha Inspect
bunx @jean/noir@alpha list
bunx @jean/noir@alpha show <case-id> Search
bunx @jean/noir@alpha search "auth" Export
bunx @jean/noir@alpha export <case-id> --format handoff Diagnose
bunx @jean/noir@alpha doctor --json --redact Local UI
bunx @jean/noir@alpha serve
bunx @jean/noir@alpha serve --scan --open Alpha limitations
- Parser coverage is best-effort across Claude Code and Codex log shapes.
- Redaction is best-effort. Review exports before sharing.
- Bun is required for now — npx is not supported in this slice.
- The local log UI is experimental. Feedback is wanted.
- No MCP server yet. No AI summaries yet. No project-metadata extraction yet.
- Cursor, Aider, and Goose are not supported yet.
Bug reports
For bug reports, run doctor with JSON and redaction enabled. Redaction masks secrets and home directory paths.
bunx @jean/noir@alpha doctor --json --redact Share redacted doctor output first. Do not paste raw Claude or Codex logs, private JSONL histories, local SQLite databases, or unreviewed exports into public issues.
Source & development
git clone https://github.com/jeanlucaslima/noir
cd noir
bun install
bun run dev --help Source: github.com/jeanlucaslima/noir.