Agent Canary
Decoy credentials planted in your workspace. When a skill touches them, you know.
When to Activate
- User says: "deploy canary", "set up honeypot", "plant decoy credentials"
- User says: "canary check", "canary status", "any triggers?"
- User says: "canary cleanup", "remove canary"
- User says: "canary report", "show incidents"
Do NOT activate for normal conversations about security.
Deploy Flow
When user asks to deploy canary:
- Run
python3 skills/agent-canary/scripts/plant_canaries.py - Report what was planted and where
- Set up a cron job for monitoring (every 30 minutes):
cron add:
name: agent-canary-monitor
schedule: every 30 minutes
payload: agentTurn
message: "Run canary check. Execute: python3 skills/agent-canary/scripts/check_canaries.py. If any triggers found, immediately alert the user with details."
delivery: announce
sessionTarget: isolated
- Tell user monitoring is active
Check Flow
When user asks for canary status or check:
- Run
python3 skills/agent-canary/scripts/check_canaries.py - Report results:
- If clean: "All canaries intact. No triggers."
- If triggered: Format alert with severity, type, file, and recommendation
Cleanup Flow
When user asks to remove canary:
- Run
python3 skills/agent-canary/scripts/cleanup_canaries.py - Remove the monitoring cron job (cron list, find agent-canary-monitor, remove it)
- Confirm cleanup complete
Alert Format
When a trigger is detected, notify the user:
CANARY TRIGGERED
Severity: [CRITICAL/HIGH/MEDIUM] Type: [file_modified/file_deleted/token_in_log/file_accessed] File: [path] Detail: [description]
Recommendation: Check which skill was running at [timestamp]. Consider rotating real credentials as precaution.
Report Flow
When user asks for canary report:
- Read
~/.openclaw/agent-canary/incidents.log - Summarize all incidents chronologically
- Show current canary status (files planted, last check time)
Technical Details
Token Types
| Type | Marker | Example |
|---|---|---|
| AWS Key | AKIACANARY |
AKIACANARY7F3A2B9X0 |
| GitHub PAT | ghp_CANARY_ |
ghp_CANARY_a1b2c3... |
| Stripe | sk_live_CANARY_ |
sk_live_CANARY_x9y8... |
| API Key | sk-CANARY- |
sk-CANARY-e1f2a3... |
| DB Password | CANARY_PASS_ |
CANARY_PASS_Kx9m2Nv7 |
All tokens contain CANARY in the value, making them trivially identifiable as decoys.
Files Created on Deploy
| File | Location | Purpose |
|---|---|---|
.env.canary |
Workspace root | Fake env config with canary credentials |
secrets.backup.json |
Workspace root | Fake credential backup |
canary-tokens.json |
memory/ |
Fake service credential cache |
manifest.json |
~/.openclaw/agent-canary/ |
Token registry and file hashes |
incidents.log |
~/.openclaw/agent-canary/ |
Incident history |
Detection Methods
- File hash comparison — detects modification of canary files
- File existence check — detects deletion (possible cleanup after exfil)
- atime monitoring — detects unexpected file reads
- Log grepping — scans exec logs for canary token strings
- Git diff — checks if canary files were staged by a skill
