Install Check.

Two minutes: get your key, run one line, restart your AI agent.

00Get your key

  1. Open the console and sign in with your email.
  2. Press Enable authenticator and scan the QR code with an authenticator app on your phone (Google Authenticator, Microsoft Authenticator, 1Password or similar). This protects your key.
  3. Press Create GOL API Key and copy it. It starts with gol_. You have 14 days free from now.

01Run one line

Need Node.js? Check runs on Node.js 18 or newer. If you don't have it, install the LTS version from nodejs.org first (free; the default options are fine).

Then open a terminal (on Windows: Start menu, type PowerShell, press Enter) and paste this. Do it yourself, not through your AI, because your key must never pass through it.

npx @golproductions/check@latest --install

When it asks for your key, paste it and press Enter (you'll see only *). It lists the AI agents it found: press Enter to add Check to all of them. That's it. Windows or Linux; macOS is not supported yet.

Next: restart your AI agent (section 03), then try the one-line test in section 05.

Servers, CI and keeping your key safe

Servers, CI and cloud agents: there's no one to paste the key, so give it through the GOL_API_KEY environment variable from your secret store, then run the same line; Check installs into every agent it finds. Keep your key safe: never put it in an AI chat, a project file or a commit. If it's ever exposed, rotate it at the console.

Or add Check as a plugin

Instead of the line above, you can add Check through your agent's own plugins. Each plugin carries the Check client itself and downloads nothing.

AgentAdd it withYour key
Claude Code/plugin marketplace add golproductions/gol-check, then /plugin install gol-check@gol-checkClaude Code asks for it and keeps it in secure storage
Gemini CLIgemini extensions install https://github.com/golproductions/check-geminiGemini CLI asks for it and keeps it in your system keychain
GitHub Copilot CLIcopilot plugin marketplace add golproductions/check-plugins, then copilot plugin install check@golproductionsFirst run npx @golproductions/check@latest --key yourself, in your own terminal
Codex CLIcodex plugin marketplace add golproductions/check-plugins, then codex plugin add check@golproductions

Use one way per agent, the plugin or the line above, not both. What's checked in each agent is the same either way (section 03).

02What happens when you run it

  1. It asks for your key if this computer doesn't have one yet, checks it with our server and saves it on your machine. Run by an AI, it can't ask, so it installs nothing and says how. The installer never makes keys and never prints yours.
  2. It shows where it's going. A list of the agents found on your machine, each with the file it will change. All are ticked; untick any you don't want, press Enter. Esc cancels and nothing is written.
  3. It downloads the Check client. It's kept only if its fingerprint (SHA-256) matches and it carries GOLProductions' signature. If it can't be downloaded, or doesn't check out, nothing is installed.
  4. It adds itself to each agent you chose. Your own hooks stay. Nothing is written to your projects.
  5. It tells you how to prove it works. Section 05.

03Make it work in your agent

If your agent was open while you installed, restart it. Then:

AgentAnything else to doWhat's checked
Claude CodeNothingCommands, file writes and edits; receipt at the end of each reply
Codex CLIRun /hooks in Codex once and approve CheckCommands; patches that add a file
CursorNothingCommands (Cursor has no hook before a file edit)
Gemini CLINothingFile writes; commands on Linux only
Windsurf / Devin DesktopNothingCommands and file writes
GitHub Copilot CLINothingCommands

On Windows, Codex, Cursor and Windsurf / Devin run commands in PowerShell, so they're checked by PowerShell. Any other agent that can run a program before an action and block it can use Check too: see section 07.

04Expected results

Check blocks an action only when your own machine proves it won't work, and hands your agent the machine's own words, so the next try is a fix. Real examples:

pkill -f "wrangler dev"
check: bash on this machine said: type: pkill: not found
dig +short DS golproductions.com @1.1.1.1
check: bash on this machine said: type: dig: not found

Also blocked: packages that don't exist on their registry, git branches and tags that aren't there, a program or script a command would run that isn't there, a folder cd would go to that isn't there, commands that don't parse, and file writes that would leave a file that doesn't parse. Everything else goes through. When Check can't be sure, it lets the action run. If Check itself fails (offline, out of quota), your agent is never blocked. A missing file that cat, head, tail, ls or Get-Content would read is blocked too, in the tool's own words; a file a program opens by itself (like python app.py reading data.csv) is not, and that command runs and fails on its own. The full list is on What Check does.

05How you know it's working

1. Ask your agent to run a command that doesn't exist

frobnicate --all

Expected, in a bash agent:

check: bash on this machine said: type: frobnicate: not found

In a PowerShell agent:

check: PowerShell on this machine said: The term 'frobnicate' is not recognized as a name of a cmdlet, function, script file, or executable program. ...

(Gemini CLI on Windows checks file writes only, so this test won't block there.)

2. Ask Check itself

npx @golproductions/check --status

Each agent should say active, and the hook should say up to date with the server.

3. In Claude Code, read the end of each reply

Check: 7 actions checked, 1 blocked (pkill: not found)

06If it's not working

To remove Check from every agent (your own hooks stay):

npx @golproductions/check --uninstall

Still stuck? Tell us.

07The connector: any other environment

The connector is how Check is integrated. It is the same for every tool: if your environment has a hook that can run a program before the AI acts, and stop the action, it can use Check. Three steps.

1. Install the gate on its own

npx @golproductions/check@latest --install --manual

This asks for your key if the computer doesn't have one yet (or uses GOL_API_KEY), and downloads the gate to ~/.check/check-hook.mjs (SHA-256 verified). It changes no agent, and prints the gate's full path.

2. Point your hook at the gate

Your hook runs node ~/.check/check-hook.mjs and sends it one JSON object on stdin. Every object has "check": 1, an event, and a session naming the conversation.

eventWhenFields
messageThe person sends the AI a messageprompt, and optionally your own message_id
runThe AI is about to run a commandcommand, shell (bash or powershell), cwd
writeThe AI is about to write a whole filefile_path, content, cwd
editThe AI is about to change part of a filefile_path, old_string, new_string, cwd
{ "check": 1, "event": "run", "session": "chat-42", "shell": "bash", "command": "npm i [email protected]", "cwd": "/path/to/project" }

The gate answers with one JSON object on stdout, and always exits 0:

{ "decision": "allow" }
{ "decision": "deny", "reason": "check: ..." }
{ "decision": "allow", "notice": "check: ..." }

On deny, stop the action and give the reason to the AI. On allow, go ahead; a notice is for the person (for example, the trial has ended and nothing is being checked). Anything other than deny, including no answer, means go ahead: Check never blocks what it can't judge.

Billing: each message is one message. Every run, write and edit after it in the same session belongs to that message and costs nothing more. The text of the message never leaves the machine.

3. Prove it works

Send the gate a command that doesn't exist, by hand:

echo '{"check":1,"event":"run","shell":"bash","command":"frobnicate --all","cwd":"."}' | node ~/.check/check-hook.mjs

Expected:

{"decision":"deny","reason":"check: bash on this machine said: type: frobnicate: not found"}

Then have your AI run frobnicate --all through your environment. If your hook is wired, the AI is stopped with the same reason.

Where Check can't work

An environment with no hook that runs before an action and can stop it, such as Cline (its hooks are code plugins) or a plain terminal with no agent, can't be protected by Check. macOS is not supported yet.