ATBASH Plugin — Installation Guide
This guide walks you through installing the ATBASH plugin into OpenClaw. After installation, every tool call your agent makes will pass through the ATBASH judgment layer before it runs.
What you're about to do
- Get an agent key file. The simplest path is to sign in to atbash.ai, onboard your agent, and click Download Keys — that registers the agent on-chain and gives you the key file in one step. There are also CLI fallbacks if you can't use the website.
- Install the plugin with
openclaw plugins install @atbash/atbash-openclaw. - Edit
~/.openclaw/openclaw.jsonto allow, load, and configure the plugin. - Restart the OpenClaw gateway.
Prerequisites
- Node.js v18 or later (
node --versionto check) - OpenClaw CLI installed and on your PATH (
openclaw --versionto check) - A terminal with access to your home directory
Step 1 — Get your agent key file
Your agent identifies itself to the ATBASH service with a secp256k1 keypair stored locally at ~/.config/atbash/guard-client-key — the same model SSH uses with ~/.ssh/id_rsa. The private key stays on your machine; the plugin only uses it to sign outgoing requests so ATBASH can verify they came from your agent.
There are three ways to get this file. Pick one — Path A is recommended for first-time users.
Skip this step if you already have a valid key file at
~/.config/atbash/guard-client-key(verify withgrep '^pubkey=' ~/.config/atbash/guard-client-key).
Important: Whatever path you choose, the private key inside this file is your agent's identity. Treat it like a password — keep a backup somewhere safe (password manager, secure note). If you lose it you have to onboard a new agent from scratch.
Path A — New agent via the Atbash website (recommended)
This is the fastest path because it generates the key and registers the agent on-chain in one flow. The private key never leaves your browser.
-
Go to atbash.ai and sign in your account.
-
Pick (or create) an organization.
-
In the agent onboarding wizard, choose "New agent".
-
Walk through name / purpose / risk level / policy review.
-
On the final screen ("Agent Security Keys"), click "Download Keys (.txt)". You'll get a file named something like
agent-keys-<your-agent-name>.txtin your Downloads folder. -
Move it to the location and lock down its permissions.
macOS / Linux — run each command in turn:
Create the config directory:
bashmkdir -p ~/.config/atbashMove the downloaded key file into place (replace
<your-agent-name>with the actual filename):bashmv ~/Downloads/agent-keys-<your-agent-name>.txt ~/.config/atbash/guard-client-keyLock down its permissions:
bashchmod 600 ~/.config/atbash/guard-client-keyWindows (PowerShell) — run each command in turn:
Create the config directory:
powershellNew-Item -ItemType Directory -Force -Path "$HOME\.config\atbash" | Out-NullMove the downloaded key file into place (replace
<your-agent-name>with the actual filename):powershellMove-Item "$HOME\Downloads\agent-keys-<your-agent-name>.txt" "$HOME\.config\atbash\guard-client-key"Lock down its permissions:
powershellicacls "$HOME\.config\atbash\guard-client-key" /inheritance:r /grant:r "$($env:USERNAME):(R,W)"Avoid
agent-keys-*.txthere: if more than one file matches,mv/Move-Itemtreats the destination as a directory and fails. -
Done. The agent is already registered on the Atbash blockchain.
Note: The downloaded file starts with an
Agent Name=line — that's just a label so you can tell which agent the file belongs to. The plugin only needs theprivkey=andpubkey=lines; the extra header is safely ignored.
Path B — Existing agent via the Atbash website
Use this path if you already have an agent (e.g., from a previous install or another machine) and you want to register or re-register it under your organization.
- Go to atbash.ai, connect your wallet, pick an organization.
- In the onboarding wizard, choose "Existing agent" and paste your 64-character hex private key. The website derives the public key locally and registers the agent under your org.
- No file is downloaded in this flow — you need to bring your own key file. Pick whichever option below applies to you.
B-1. Copy the key file from another machine
If the agent was originally generated via Path A on another machine, grab the exact agent-keys-<your-agent-name>.txt file from that machine, copy it across, and move it into place using the same mv / chmod commands as Path A step 6.
B-2. Reconstruct the key file locally
If you only have the raw private key (e.g., from a password manager), build the file yourself. First, copy your public key from the "Existing agent" review screen on the Atbash website — you'll need both values. Then run:
Create the config directory:
bashmkdir -p ~/.config/atbash
Write the key file (replace the two PASTE_… values with your actual keys before running, or edit afterward):
bashcat > ~/.config/atbash/guard-client-key <<'EOF' privkey=PASTE_YOUR_64_CHAR_PRIVATE_KEY_HERE pubkey=PASTE_YOUR_66_CHAR_PUBLIC_KEY_HERE EOF
Lock down its permissions:
bashchmod 600 ~/.config/atbash/guard-client-key
If you left the placeholders in place, edit the file afterward (e.g., nano ~/.config/atbash/guard-client-key) and replace the two PASTE_… values with your actual key.
Path C — Local CLI / offline keygen (no website)
Use this path if you can't reach the website right now or you want to script the install. Caveat: Path C only generates a key file — it does not register the agent on-chain. The plugin will load locally, but your tool calls won't be auditable on Atbash until you go back to atbash.ai → "Existing agent" and paste the private key from this file to finish registration.
bashnpx @atbash/cli keygen --output ~/.config/atbash/guard-client-key
This generates a secp256k1 keypair using @atbash/sdk, creates ~/.config/atbash/ if it doesn't exist, and writes the file with permissions 0600. It also stores a copy in your @atbash/cli config so other atbash commands can use it.
Alternative — without @atbash/cli
If you can't or don't want to use npx @atbash/cli, generate the same key file with Node directly:
bashnode -e " const crypto = require('crypto'); const fs = require('fs'); const os = require('os'); const path = require('path'); const privkey = crypto.randomBytes(32).toString('hex'); const ec = crypto.createECDH('secp256k1'); ec.setPrivateKey(privkey, 'hex'); const pubkey = ec.getPublicKey('hex', 'compressed'); const content = [ '#Keypair generated using secp256k1', '#' + new Date().toString(), 'privkey=' + privkey, 'pubkey=' + pubkey, ].join('\n') + '\n'; const dir = path.join(os.homedir(), '.config', 'atbash'); fs.mkdirSync(dir, { recursive: true }); fs.writeFileSync(path.join(dir, 'guard-client-key'), content, { mode: 0o600 }); process.stdout.write('pubkey=' + pubkey + '\n'); "
Verify (any path)
After completing one of the paths above, confirm the file is in place and parseable:
bashgrep '^pubkey=' ~/.config/atbash/guard-client-key
You should see one line starting with pubkey= followed by a 66-character hex string. If you used Path C, also make sure you've completed the on-chain registration on atbash.ai before moving on.
Step 2 — Install the plugin via OpenClaw
bashopenclaw plugins install @atbash/atbash-openclaw
This downloads @atbash/atbash-openclaw from npm and places it at ~/.openclaw/extensions/openclaw. It also writes a partial entry into ~/.openclaw/openclaw.json — but the install is not complete yet. You still need to finish the config in Step 3.
If you've already installed it before
OpenClaw refuses to re-install over an existing folder:
plugin already exists: /Users/<you>/.openclaw/extensions/openclaw (delete it first)
Remove the folder and re-run:
bash# macOS / Linux rm -rf ~/.openclaw/extensions/openclaw openclaw plugins install @atbash/atbash-openclaw # Windows (PowerShell) Remove-Item -Recurse -Force "$HOME\.openclaw\extensions\openclaw" openclaw plugins install @atbash/atbash-openclaw
If you see Invalid config ... plugin not found: openclaw
A previous failed install can leave a stale entry behind that blocks the next install. Open ~/.openclaw/openclaw.json in a text editor and delete the "openclaw": { ... } block under plugins.entries, then save and re-run openclaw plugins install @atbash/atbash-openclaw.
The block looks like this — remove the whole "openclaw" key and its value:
json"entries": { "openclaw": { "enabled": true } }
Known issue on Windows: spawn EINVAL
Some users on Windows hit:
[openclaw] Failed to start CLI: Error: spawn EINVAL
This is a known issue with how the OpenClaw CLI spawns npm on Windows; there is no clean workaround yet. If you hit it, please report it in the OpenClaw issue tracker so we can prioritize a fix.
Step 3 — Configure ~/.openclaw/openclaw.json
Open ~/.openclaw/openclaw.json in a text editor (VS Code, vim, etc.). Find the "plugins" block — openclaw plugins install already added part of it.
You need the plugins block to end up looking exactly like this. Diff three things against your current file:
- Add
"openclaw"toplugins.allow. - Under
pluginsadd this configuration (remember to add it correctly without erasing the existing configurations)
json{ "plugins": { "allow": [ "openclaw" ], "load": { "paths": [ "/Users/<your-username>/.openclaw/extensions/openclaw" ] }, "entries": { "openclaw": { "enabled": true, "config": { "enabled": true, "enforceDecision": true, "chromiaSecretPath": "~/.config/atbash/guard-client-key" }, "hooks": { "allowConversationAccess": true, "allowPromptInjection": true } } } } }
Note: If you already have entries in
plugins.alloworplugins.load.paths(for example"ai-guardian-plugin"), keep them — just add"openclaw"and the install path alongside what's already there.
Important: Replace
<your-username>with your actual home-directory username in bothplugins.load.pathsandplugins.installs.openclaw.installPath. ThechromiaSecretPathvalue uses~and will be expanded automatically, so leave it as~/.config/atbash/guard-client-keyunless you saved your key somewhere different in Step 1.
What each field does
| Field | Purpose |
|---|---|
plugins.allow | Whitelist of plugin ids OpenClaw is permitted to load. The plugin id is openclaw (the npm scope @atbash/ is stripped). |
plugins.load.paths | Folders OpenClaw scans for installed plugins. Point this at the install directory from Step 2. |
plugins.entries.openclaw.enabled | Master on/off switch for this plugin instance. |
plugins.entries.openclaw.config.enforceDecision | When true, ATBASH actively blocks tool calls that fail judgment. Set to false to log-only (recommended only while testing). |
plugins.entries.openclaw.config.chromiaSecretPath | Path to the keypair file from Step 1. Must match where you actually saved it. |
plugins.installs.openclaw | Bookkeeping written by openclaw plugins install — do not edit by hand. |
Save the file.
Step 4 — Restart the gateway
bashopenclaw gateway restart
Confirm the plugin is registered and enabled:
bashopenclaw plugins list
You should see openclaw in the list with enabled: true. If it doesn't appear, re-check Step 3 — the most common mistake is forgetting to add "openclaw" to plugins.allow.
That's it — every tool call your OpenClaw agent makes will now be judged by ATBASH before it runs. Open the Atbash dashboard at atbash.ai to see audit logs as your agent operates.
Final state checklist
After completing all steps, your setup should match the following:
| Field | Expected value |
|---|---|
~/.config/atbash/guard-client-key | exists, mode 0600, contains privkey= and pubkey= lines |
~/.openclaw/extensions/openclaw/ | exists (created by Step 2) |
plugins.allow | includes "openclaw" |
plugins.load.paths | includes the install path from Step 2 |
plugins.entries.openclaw.enabled | true |
plugins.entries.openclaw.config.chromiaSecretPath | matches your Step 1 path |
plugins.entries.openclaw.config.enforceDecision | true once you're ready to enforce |
openclaw plugins list | shows openclaw as enabled |
| Atbash website | shows your agent registered with the public key from Step 1 |
Troubleshooting
plugin already exists: ... (delete it first)— remove the folder under~/.openclaw/extensions/and re-runopenclaw plugins install. See Step 2.Invalid config ... plugin not found: openclaw— open~/.openclaw/openclaw.json, delete the staleplugins.entries.openclawblock, save, and re-runopenclaw plugins install. See Step 2.spawn EINVALon Windows — known OpenClaw CLI issue. Please report it upstream.- Plugin doesn't show up in
openclaw plugins list— almost always means"openclaw"is missing fromplugins.allowinopenclaw.json. See Step 3. - Plugin loads but doesn't audit calls — check that
plugins.entries.openclaw.config.enforceDecisionistrueand thatchromiaSecretPathpoints at a readable file containing validprivkey=/pubkey=lines.