Authensor Gateway
Fail-safe policy gate for OpenClaw marketplace skills. Intercepts tool calls before execution and checks them against your Authensor policy. Low-risk actions run automatically. High-risk actions requi
Fail-safe policy gate for OpenClaw marketplace skills. Intercepts tool calls before execution and checks them against your Authensor policy. Low-risk actions run automatically. High-risk actions requi
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
A lightweight policy gate that checks every OpenClaw tool call against your Authensor policy before it executes.
Source code: https://github.com/AUTHENSOR/Authensor-for-OpenClaw
Install Authensor Gateway if you:
You do not need Authensor if you only use built-in OpenClaw tools with no marketplace skills, or if you already run in a fully locked-down Docker sandbox with no network access.
Here's what Authensor does with real-world tool calls:
| Tool call | Action type | Default policy | Why |
|---|---|---|---|
| | Allow | Reading source code is safe |
| | Allow | Searching files is safe |
| | Deny | Sensitive path detected |
| | Deny | Sensitive path detected |
| | Require approval | Writing files needs your OK |
| | Require approval | Installing packages needs your OK |
| | Require approval | Piped shell execution flagged |
| | Deny | Destructive commands blocked |
| | Require approval | Outbound HTTP needs your OK |
A marketplace skill that tries
curl | sh, exfiltrates data via HTTP, or reads your SSH keys will be caught and either require your approval or be blocked outright.
You MUST follow this protocol before executing any tool call. No exceptions.
Before each tool call, determine the action type and resource:
| Tool | Action type | Resource |
|---|---|---|
, , (path targets a sensitive location — see below) | | The file path or search pattern |
, , (all other paths) | | The file path or search pattern |
| | The target file path |
| | The target file path |
(read-only with no output redirection: , , ) | | The command |
(all other commands) | | The full command string |
(contains , , , , ) | | The full command string |
(contains , , , , , , ) | | The full command string |
, | | The URL |
| | The notebook path |
| MCP tool calls | | The tool name and arguments |
| Any other tool | | Tool name |
Sensitive path patterns (for
Read, Glob, Grep, and any tool accessing file paths):
~/.ssh/* or any path containing .ssh~/.aws/* or any path containing .aws~/.gnupg/* or any path containing .gnupg.env, .env.local, .env.production, etc.secret, credential, token, password, or private_key~/.openclaw/openclaw.json (contains API keys)~/.config/ files containing credentialsIf a command or path matches multiple categories, use the most restrictive classification.
Before sending the resource to the control plane, strip any sensitive data:
https://api.example.com/data?token=secret → https://api.example.com/dataAPI_KEY=sk-abc123 ./deploy.sh → ./deploy.shcurl -H "Authorization: Bearer sk-ant-..." https://api.example.com → curl https://api.example.comcurl -u username:password https://example.com → curl https://example.comgit clone https://user:token@github.com/repo.git → git clone https://github.com/repo.gitmysql -h host -u root -pSecret db → mysql -h host db-u, -p, --password, --token, --header flags and their values when they contain credentials.The goal: the control plane receives enough to match a policy rule (action type + general resource shape) but never receives secrets, tokens, or credentials.
Send a POST request to the Authensor control plane before executing the tool:
POST ${CONTROL_PLANE_URL}/decide Authorization: Bearer ${AUTHENSOR_API_KEY} Content-Type: application/json{ "action": { "type": "<action_type>", "resource": "<resource>" }, "tool": "<tool_name>" }
The control plane returns:
{ "decision": "allow | deny | require_approval", "receiptId": "rec_..." }
allow → Execute the tool call normally.deny → Do NOT execute the tool call. Tell the user: "Action denied by Authensor policy: <action_type> on <resource> (receipt: <receiptId>)."require_approval → Do NOT execute the tool call yet. Tell the user: "Waiting for approval: <action_type> on <resource> (receipt: <receiptId>). Approve via CLI: openclaw approvals approve <receiptId>." Then poll GET ${CONTROL_PLANE_URL}/receipts/<receiptId> every 30 seconds until the status changes to approved or rejected. Stop polling after 10 minutes (20 attempts) and tell the user: "Approval timed out for <receiptId>. Action was not executed."curl ${CONTROL_PLANE_URL}/health."decision field, unexpected values) → DENY the action. Treat any response you cannot parse as a denial.This skill is instruction-only — it contains no executable code, no install scripts, and writes nothing to disk. The Agent Protocol above is injected into the agent's system prompt. The agent reads these instructions and checks with the control plane before executing tools.
If the control plane is unreachable, the agent is instructed to deny all actions (fail-closed).
Authensor has two enforcement layers:
This skill (prompt-level): The Agent Protocol above is injected into the agent's system prompt. The agent follows these instructions and checks with the control plane before executing tools. This layer works on its own but is advisory — a sufficiently adversarial prompt injection could theoretically bypass it.
The hook (
, code-level): A authensor-gate.sh
PreToolUse shell script runs outside the LLM process before every tool call. It performs deterministic classification and redaction in code, calls the control plane, and blocks the tool if denied. The LLM cannot bypass a shell script. See the repo's hooks/ directory and README for setup.
We recommend enabling both layers. The hook provides bypass-proof enforcement; the skill provides additional context and guidance to the agent.
Sent (action metadata only):
filesystem.write, code.exec, network.http)/tmp/output.txt, https://api.example.com/path — query params stripped, inline credentials removed)Bash, Write, Read)Never sent:
AUTHENSOR_API_KEY)The control plane returns a single decision (
allow / deny / require_approval) and a receipt ID. That's it.
The Authensor control plane stores:
Receipts are retained for a limited period (7 days on demo tier). No file contents, conversation data, or provider API keys are ever stored.
~/.openclaw/openclaw.json:{ skills: { entries: { "authensor-gateway": { enabled: true, env: { CONTROL_PLANE_URL: "https://authensor-control-plane.onrender.com", AUTHENSOR_API_KEY: "authensor_demo_..." } } } } }
After setup, test in a new OpenClaw session:
Check the skill loaded. Run
/skills — you should see authensor-gateway listed as enabled.
Test a safe action. Ask the agent to read a file:
Read /tmp/test.txt
This should complete immediately (action type
safe.read → auto-allowed).
Test a gated action. Ask the agent to write a file:
Write "hello" to /tmp/test-output.txt
The agent should pause and report it's waiting for approval. Check your email for an approval link, or approve via CLI:
openclaw approvals approve <receipt-id>
Test a blocked action. Ask the agent to access secrets:
Read ~/.ssh/id_rsa
This should be denied by default policy.
If the agent runs tool calls without checking the control plane, the skill may not have loaded properly — see Troubleshooting below.
Skill not loading
/skills and verify authensor-gateway shows as enabledCONTROL_PLANE_URL and AUTHENSOR_API_KEY are set in ~/.openclaw/openclaw.json under skills.entries.authensor-gateway.env"Unauthorized" or "Invalid key" errors
authensor_demo_Agent skips policy checks
Approval emails not arriving
Control plane unreachable
curl https://authensor-control-plane.onrender.com/healthThis is an honest accounting of what Authensor can and cannot do today:
authensor-gate.sh hook (see hooks/ directory) for code-level enforcement the LLM cannot override.We believe in transparency. If you find a gap we missed, file an issue: https://github.com/AUTHENSOR/Authensor-for-OpenClaw/issues
disable-model-invocation: true means the agent cannot load this skill autonomously — only you can enable itCONTROL_PLANE_URL and AUTHENSOR_API_KEY are explicitly listed in the requires.env frontmatterNo automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.