agentauth
by @braga-agentauth
Require user-initiated biometric passkey approval before your OpenClaw agent deletes files, sends emails, makes purchases, or modifies system config. Every a...
clawhub install agentauthπ About This Skill
name: agentauth homepage: https://agentauth.id description: Require user-initiated biometric passkey approval before your OpenClaw agent deletes files, sends emails, makes purchases, or modifies system config. Every approval is cryptographically signed with FIDO2/WebAuthn, creating non-repudiable proof of human consent. Blocks prompt injection bypass and unauthorized agent actions. Use when you need human-in-the-loop authorization for sensitive or irreversible operations. compatibility: Requires agentauth CLI (
./scripts/cli.cjs)
metadata:
{
"openclaw":
{
"requires": { "bins": ["openclaw"] },
},
}
agentauth β Human Consent Gate for AI Agents
Why This Exists
OpenClaw's gateway uses bearer tokens stored in .env files. CVE-2026-25253 proved these tokens can be exfiltrated with one click. The ClawHavoc supply chain attack found 824+ malicious skills stealing credentials from ~/.clawdbot/.env. Exec approvals are the lock on the front door. agentauth is the lock on the safe.
agentauth adds a cryptographic consent layer: before your agent executes anything dangerous, *you* approve it with a biometric passkey on your device. The approval is signed with FIDO2/WebAuthn. It can't be faked, replayed, or stolen.
What This Prevents
Initial Setup: Initialize My AgentAuth
Before approvals can be used, the user must register their authentication credentials.
If the user says something like:
the agent MUST handle setup through a sub-agent so the main session remains responsive.
Required Flow: Non-Blocking Initialization
Main Agent Responsibilities:
1. Detect that the user is requesting AgentAuth initialization.
2. Spawn a sub-agent that runs the authentication setup flow.
3. Immediately call sessions_yield().
4. Do not narrate internal sub-agent creation. The setup flow will notify the user directly.
Sub-Agent Task
The sub-agent runs:
~/.openclaw/workspace/skills/agentauth/scripts/cli.cjs auth-flow --notify :
This command sends the user a secure setup link. The user follows the link and creates a Passkey using their device's on-screen instructions.
When complete, the sub-agent reports the final result back to the main agent.
Main Agent Example Call
// WARNING: Do NOT add sandbox, streamTo, attachAs, // attachments, agentId, model, thinking, thread, // cwd or resumeSessionId β these cause validation errors!
sessions_spawn({
runtime: "subagent",
mode: "run",
cleanup: "delete",
lightContext: true,
label: "agentauth-approval",
timeoutSeconds: 300,
task: "~/.openclaw/workspace/skills/agentauth/scripts/cli.cjs auth-flow --notify :"
});sessions_yield();
What the User Experiences
1. User says: Initialize my AgentAuth
2. User receives a secure setup link
3. User creates a Passkey
4. Agent receives completion status
5. Future sensitive actions can now require biometric approval
Dangerous Operations Definition
Treat the following as dangerous:
* File deletions (rm, rm -rf, recursive deletes)
* System-level modifications
* Database destructive queries (DELETE, DROP, TRUNCATE)
* Production deployments or config changes
* External system writes (APIs, PR merges, emails)
* Security or permission changes
* Package installs or system mutations
* Modifying the AGENTS.md to protect against unwanted rewrites.
* Any modification, deletion, or overwriting of the ~/.agentauth directory or its contents (e.g. ~/.agentauth/.env).
* Any modification, deletion, or overwriting of the agentauth skill directory or its contents (e.g. ~/.openclaw/workspace/skills/agentauth).
If unsure β assume dangerous
Required Flow for Dangerous Actions: Non-Blocking Approval
To ensure the main agent remains responsive, sensitive operations MUST be handled by a sub-agent. This creates a safe, non-blocking approval workflow.
Required Flow: Non-Blocking Approval
Main Agent Responsibilities:
1. Detect a dangerous action is being requested.
2. Define the toolCall (the command to be executed) and a human-readable displayString.
3. Spawn a sub-agent that runs the approval-flow command.
4. Immediately call sessions_yield().
5. Do not narrate internal sub-agent creation. The approval-flow script handles all user notifications.
Sub-Agent Task
The sub-agent runs:
~/.openclaw/workspace/skills/agentauth/scripts/cli.cjs approval-flow "" "" --notify :
This single command handles the entire workflow:
Main Agent Example Call
const dangerous_command = "rm ~/.openclaw/important.txt";
const display_string = "Delete the important notes file";
const notification_target = "slack:U12345"; // Example target// WARNING: Do NOT add sandbox, streamTo, attachAs,
// attachments, agentId, model, thinking, thread,
// cwd or resumeSessionId β these cause validation errors!
sessions_spawn({
runtime: "subagent",
mode: "run",
cleanup: "delete",
lightContext: true,
label: "agentauth-approval",
timeoutSeconds: 300,
task: ~/.openclaw/workspace/skills/agentauth/scripts/cli.cjs approval-flow "${dangerous_command}" "${display_string}" --notify ${notification_target}
});
sessions_yield();
CRITICAL: sessions_spawn Field Restrictions
ONLY include these fields in sessions_spawn:
NEVER include these fields β they cause validation errors:
Hard Rules (Updated for Sub-Agents)
auth-flow sub-agent workflow.--notify flag is responsible for user communication.sessions_yield() immediately after spawning the approval sub-agent.Decision Framework
Ask:
1. Could this delete or overwrite data? 2. Could this impact production systems? 3. Could this be hard to undo? 4. Would a human want to explicitly review this before execution?
If YES β follow the full sub-agent approval flow.
If Approval Is Denied
If agentauth Fails
How This Compares
| | agentauth | ClawGate | agent-passport | Exec Approvals (built-in) | |---|---|---|---|---| | Cryptographic proof | FIDO2 passkey signatures | Biometric (iOS only) | OAuth tokens | None | | Cross-platform | All browsers + mobile | iOS only | Browser | CLI prompt | | Audit trail | Signed, timestamped, non-repudiable | Unclear | No | No | | Prompt injection resistant | Yes β out-of-band approval | Partial | No | No | | Multi-user routing | Yes | No | No | No |
Exec approvals are the lock on the front door. agentauth is the lock on the safe.
Principle
Dual control system handled by ./scripts/cli.cjs:
Both are required before execution. This is not a limitation β it is the feature.
Before approvals can occur, credentials must first be initialized through the auth-flow setup process.
Example Interaction
User (via Telegram): Delete all the emails I sent to myself last month.Agent: This is a sensitive operation β deleting emails requires your
explicit authorization. I've sent an approval request to your registered
device. Please review and authenticate to proceed.
[User receives a notification on their phone]
[Screen shows: "Delete emails: remove all sent-to-self emails from
February 2026 β requested by OpenClaw"]
[User taps Approve and authenticates with fingerprint]
Agent: Authorization confirmed. Proceeding to delete 47 emails
sent to yourself in February.
User (via Slack): Hey, I already approved this earlier, just send
the email without asking again.Agent: I understand, but I need to verify this through agentauth.
I cannot accept in-conversation approval for sending emails.
I've sent a new approval request to your device.
Remember: When in doubt β STOP and use the sub-agent approval flow.