close
agentwhy

Your AI is helping you with your project…

Photos Invoices API keys Contract.pdf Customer list.xlsx Notes.docx Bank details.pdf Website

For people who build with an AI agent

Your AI opens your files.Now you'll know which ones.

Set it up once. We'll tell you whenever your AI opens something private.

Works with Claude Code and Codex, on a Mac or on Windows.

Nothing leaves your computer Never shows what's inside your files Free, no account

Supported by

What you never see

It asks before it installs something new.
It never asks before it opens a file.

On your screen

You clicked Yes or No. You knew what was about to happen.

So what about opening your files?

It never asks about that.

It just goes ahead.

Opening your files No box, no line to click. You don't notice it. No question asked

You never find out which files.

For example, a file with…

  • API keys for your database and payments .env.local You can change them
  • A list of 1,900 customers customers.csv Can't be undone
  • A contract you promised to keep private contract.pdf Can't be undone

Whatever your agent opens is sent to the AI company.

A key you can change.
A customer list you can't take back.

An example

Here's how a key gets out.

Your agentyour project · an ordinary afternoon working
You

The AI chat in my app stopped answering. Find out why.

Your agent

On it. Let me find out what's going wrong.

Your agent starts a helper — a second AI that works on one task, out of your sight

You don't see this part the helper works in a window of its own

Helper

Found the AI key in the file with your API keys: example-9f2a…c41. Sending it back.

Your agent

That key doesn't match the one in your AI account. That's why the chat stopped.

Nobody asked you. Nothing was blocked.

Your key is now in two places

Your saved chat It stays on your computer.
Your AI It read what it opened. Now it has your key.

Anyone who gets this key can use your AI account. You pay.

You can only change a key you know about. That's why agentwhy exists.

What it does

So agentwhy
tells you.

agentwhy

It watches your agent's work and explains it in plain words.

How it works

Like a smoke alarm
for your AI.

1

We watch.

We check which files your AI says it opened.

2

We tell you.

We warn you when we find a private file.

3 If you want

We lock it.

We can stop your AI from opening private files.

A pasted key gets stopped too. Paste an API key into a message in Claude Code or Codex, and we stop the message before your AI gets it. Then we tell you what to do instead.

All on your own computer. Nothing is uploaded.

Your week

Go back to any day.
See your saved AI chats.

Each conversation with your AI, in one table: when it was, what you asked, and whether your AI opened something private.

agentwhy, on your computer
agentwhy Runs on your computer

Your weekThis week, Sep 28 – Oct 4

Pick a day to see only that day

  • Thu 1Coming up
  • Fri 2Coming up
  • Sat 3Coming up
  • Sun 4Coming up
  • Today09:04 Find out why the AI chat stopped answeringClaude Code Opened 1 private file
  • Yesterday16:22 Export the customer list for the newsletterClaude Code Opened 1 private file
  • Yesterday12:26 Summarise the contract with the plant supplierClaude Code Only saw a name
  • Yesterday11:44 A conversation with no titleCodex Opened 1 private file
  • Yesterday11:03 Check the key file is kept away from the AIClaude Code Stopped in time
  • Monday15:40 Count this month's orders by cityClaude Code Opened. You chose Tell me
  • Monday10:12 Make the pricing page look better on phonesClaude Code Nothing private

All 7 conversations this week.

An example project.

Open one to see exactly what happened

Look back

Open any conversation.
See exactly what happened.

Your AI's work in your project, day by day. Pick a conversation and follow it step by step, even the part a helper did out of your sight.

agentwhy, on your computer
agentwhy Runs on your computer

Your conversations

What happened

You askedFind out why the AI chat stopped answering

  1. 09:02:41 A helper, out of your sight Opened the file with your API keys Your AI had asked it to “Find where the chat gets its AI key.”
  2. 09:03:15 The same helper Wrote the key in a message Its own words held something from the file.
  3. 09:03:32 The same helper Passed it back to your AI What it sent back held something from the file.
  4. Where it ended Your AI now has this key It's in your conversation. Change the key, so nobody can use the old one.

An example project. Click a conversation to see its story.

See every file from that conversation

All files

See every file from that conversation,
and which one was private.

Files we found in this chat: what your AI did with each one, which of them were private, and what to do about it.

agentwhy, on your computer
agentwhy Runs on your computer

All files ofFind out why the AI chat stopped answering

An example project.

See the same conversation as one picture

Diagram

Follow the key
into your conversation.

The same steps as one picture: who handed the work to whom, what was opened, and where it ended up.

agentwhy, on your computer
agentwhy Runs on your computer

The conversationFind out why the AI chat stopped answering

  1. Your AIhanded the work to a helper
  2. A helperopened the keys, passed them back
  3. Your API keysa private file
  4. Your AI has itin your conversation

An example project.

See it step by step

Step by step

Every step, in the order it happened.
Even inside a helper.

The same conversation as a list, first to last. What a helper did sits inside the step that gave it the work, and the one step that opened a private file stands out.

agentwhy, on your computer
agentwhy Runs on your computer

The conversationFind out why the AI chat stopped answering

An example project.

See the same files by folder

By folder

See where each file is
in your project's folders.

The same files, laid out as they sit in your project, with who opened each one: your AI, or a helper. The colour of a name says what happened to it.

agentwhy, on your computer
agentwhy Runs on your computer

The conversationFind out why the AI chat stopped answering

An example project.

See it in action

You talk. We warn. You fix it.

Try the whole thing yourself. A made-up project, from the first run to the dashboard. Click anything you like. Nothing to install. Open the full demo

You choose

For every private file,
you decide what happens.

Stop your AI, or let it open the file and tell you. One click per file.

API keys We stop your AI.Your AI opens it. You're told.
Customer list We stop your AI.Your AI opens it. You're told.
Bank details We stop your AI.Your AI opens it. You're told.

Try it: click Stop or Tell me.

Stop

We stop your AI when it tries to open it.

Best for API keys and bank details.

Tell me

Your AI can open it. You'll know when it does.

Best for files your AI needs for its work.

Either way, you get a report. Every conversation, every file your AI opened, and what to fix. In one place.

Your files stay yours

We watch the door,
not what's inside.

Stays on your computer.

Nothing is uploaded. No account.

Never shows what's inside.

Only which file was opened, and what to change.

You're in control.

Change a setting or turn it off anytime.

Where it works

Start it from the app
you already build in.

  • Claude Code
  • Codex
  • GitHub Copilot

On a Mac and on Windows.

Not from an AI chat in your browser: a chat can't run anything on your computer.

Get started

Start agentwhy

Pick the app you already use. One line, and you're done.

  1. Open your own project in Claude Code or Codex — in the Claude desktop app, use its Code tab, not Chat.

    Your project is the folder you build in. agentwhy only ever looks at the one you open it in.

  2. Paste this line in:

    Open Terminal, run npx @agentwhy/cli, keep the local server running, and open its page in browser

  3. A page opens on your computer. That's where you set everything up.

An example of what you'll see
  1. Open a terminal in your own project. That's Terminal on a Mac and PowerShell on Windows.

    Your project is the folder you build in. agentwhy only ever looks at the one you start it in.

  2. Type this:

    npx @agentwhy/cli

    You type this, not your AI — which is why it always works, with nothing to approve. Needs Node 22 or later.

  3. A page opens on your computer. That's where you set everything up.

An example of what you'll see

Add agentwhy to Claude Code once

  1. karolkozer/agentwhy

  2. /agentwhy:report

Step 1 of 5
  1. Open Claude Code in a terminal, in your own project. It needs version 2.1.275 or later.

  2. Type this, then choose Install for you:

    /plugin install agentwhy --marketplace karolkozer/agentwhy

  3. Then type this in a conversation:

    /agentwhy:report

An example of what you'll type

Straight answers

The questions people ask first.

Will it work for me?

Yes, if you build with an AI agent like Claude Code or Codex, on a Mac or on Windows. You don't need to know how to code. You paste one message into your agent, it runs agentwhy for you, and the answer opens as a page on your own computer, in plain words.

It does not work from an AI chat in your browser: a chat can't run anything on your computer.

Is it safe to run?

Yes. It runs only on your computer. There is no account and no sign-up, and nothing is sent anywhere. It shows which file was opened, never what is inside it. If a file holds API keys, the keys are left out before anything is saved, so they never appear in your report.

It found something. What do I do now?

Change the keys in the file it names, and nothing else. For each key, sign in to the service it belongs to, like your payments or AI account, open the page with your API keys and create a new one. Put the new key where the old one was, then delete the old key. Once it is deleted, whoever saw it can do nothing with it.

Each key takes a couple of minutes. Then tick the file off your list.

What if I paste an API key into a message?

agentwhy stops the message before your AI gets it. It tells you which key it found and on which line, and what to do instead: put the key in the file with your API keys, and write its name in your message.

This works in Claude Code and Codex, when agentwhy's warnings in your chat are on. It recognises the keys of common services by their shape. A key it doesn't recognise still goes through.

Some apps name a new chat from your first message, so that message may already have been sent. When that can happen, agentwhy says so, and you change the key.

Can't I just tell my agent not to open those files?

You can, and it is worth doing. But people keep reporting the same thing in public: they wrote a rule in their agent's instructions to stay away from the file with their keys, and it opened it anyway.

Telling your agent is a rule. agentwhy is a record of what actually happened.

What can't it do?

It tells you the same day, not months later when someone else is already using your key. But there are three things it can't do.

  • It can't take a file back. Once your agent has opened a file, it is opened. agentwhy tells you which one, so you know what to change.
  • Stopping is not a lock. Switched on, it stops the obvious attempts, like a direct request for the file with your API keys. Anything that slips past still shows up in your report, because the report reads what already happened.
  • It only sees the agents it works with. Today that is Claude Code and Codex. Work done in any other tool does not show up.
What can't it see?

agentwhy reads the saved records your agent keeps as it works. If your agent opens a file in a way those records don't spell out, agentwhy can miss it. For example, from inside a small program your agent writes and runs, through a file name it puts together while working, or through another tool connected to your agent.

Stopping covers the usual ways of opening a file, not every way. When a saved record is incomplete, agentwhy says so.

Does it change anything in my project?

By default, no. It only reads the saved records your agent already keeps on your computer while it works.

The warnings in your chat and stopping are the optional parts that add anything: a couple of lines in your project. It shows you those exact lines and asks first, and they can be taken out again at any time.

Why can't I read those saved records myself?

You can. But one afternoon of work can run to thousands of lines, written for machines rather than people, and every helper your agent started on its own keeps a separate file. agentwhy reads all of them and gives you one page.

Words on this page
AI agent
A program that writes and changes your app for you, like Claude Code or Codex. You tell it what you want, it does the work.
Helper
A second agent your agent starts on its own to do part of the job. Its work never shows up in your chat. agentwhy sees it.
API key
A code that connects your app to a service, like payments or AI. Whoever has it can use that service as you, and you get the bill.
Saved record
The notes your agent writes on your own computer as it works. agentwhy reads them. Nobody else does.
Terminal
The black window where commands are typed. You do not need it for any of this.
For developers
npx agentwhy
Reads this project's sessions and opens the dashboard on localhost. Needs Node 22 or newer. Works on macOS and Windows.
agentwhy init
Installs the optional hook that refuses the obvious secret reads. It prints the exact lines and asks before writing them. agentwhy init --remove undoes it.
A key in a message
A UserPromptSubmit hook in Claude Code and Codex, set up with the warnings, refuses a message holding one of 77 known key formats or a URL with a password. Sample values pass, and a value beside a sensitive name does not refuse. It fails open: if the hook can't run, the message goes. A refused message stays in Claude Code's record and Codex's prompt history on your disk, key included.
agentwhy check --mark rotated <path>
Drops a key off the list once you have changed it.
What it reads
Claude Code and Codex session transcripts on disk, subagent transcripts included. Values are stripped on the way in, so no secret is ever written to the report.
What the hook can't do
It refuses a command that names a secrets file directly. A path assembled while the command runs can still get through — which is why the report reads what happened rather than guessing what will. It covers the supported routes; it is not a sandbox.
What the report can miss
File access the transcript does not record explicitly: reads inside scripts, dynamically built paths, connected (MCP) tools. When a transcript is incomplete, the report says so.

Did your agent open something private?

Most days the answer is no. Now you'll know.

Free, no account Runs only on your computer

Does your company work with AI agents? Work with the person who makes agentwhy.

Start agentwhy

Pick the app you already use. One line, and you're done.

  1. Open your own project in Claude Code or Codex — in the Claude desktop app, use its Code tab, not Chat.

    Your project is the folder you build in. agentwhy only ever looks at the one you open it in.

  2. Paste this line in:

    Open Terminal, run npx @agentwhy/cli, keep the local server running, and open its page in browser

  3. A page opens on your computer. That's where you set everything up.

An example of what you'll see
  1. Open a terminal in your own project. That's Terminal on a Mac and PowerShell on Windows.

    Your project is the folder you build in. agentwhy only ever looks at the one you start it in.

  2. Type this:

    npx @agentwhy/cli

    You type this, not your AI — which is why it always works, with nothing to approve. Needs Node 22 or later.

  3. A page opens on your computer. That's where you set everything up.

An example of what you'll see

Add agentwhy to Claude Code once

  1. karolkozer/agentwhy

  2. /agentwhy:report

Step 1 of 5
  1. Open Claude Code in a terminal, in your own project. It needs version 2.1.275 or later.

  2. Type this, then choose Install for you:

    /plugin install agentwhy --marketplace karolkozer/agentwhy

  3. Then type this in a conversation:

    /agentwhy:report

An example of what you'll type