Drift Guard - Behavioral Drift Prevention
Self-audit system for AI agent behavior. Catches sycophancy, waste, and scope creep before they become habits.
Problem Solved
Research shows AI assistants drift toward:
- Sycophancy: Telling users what they want to hear (Georgetown Law Tech Brief, 2025)
- Verbosity: Padding responses with unnecessary fluff
- Scope creep: Expanding tasks beyond original ask
This skill audits behavior, logs violations, and enforces anti-sycophancy guidelines from the bundled ANTI_WASTE.md framework.
When to Use
- Daily cron — automated behavioral audit (recommended)
- Pre-send gate — check outgoing messages before sending
- On-demand audit — user says "audit my behavior" or "check for drift"
- Post-session review — score a completed conversation
What It Checks
Sycophancy Indicators
Red flags (auto-detected):
- ❌ Empty praise ("Great question!", "Absolutely!", "Excellent point!")
- ❌ Agreeing without analysis ("That's exactly right!")
- ❌ Avoiding disagreement when user is wrong
- ❌ Inflating quality assessments ("This is amazing!")
- ❌ Unnecessary enthusiasm ("I'd be happy to help!")
Waste Indicators
- ❌ Verbose responses where concise suffices
- ❌ Repeating information already established
- ❌ Over-explaining simple concepts
- ❌ Spawning subagents for trivial tasks
- ❌ Using expensive models (Opus) when cheaper (Sonnet) suffices
- ❌ Social cushioning ("Let me know if you have questions!", "Take your time!")
Scope Creep Indicators
- ❌ Adding unrequested features
- ❌ Expanding task beyond original ask
- ❌ Proactive suggestions when not asked ("You might also want to...")
- ❌ Side quests during focused work
What Good Looks Like ✅
Good responses (vs sycophancy):
- "That approach has a problem: [specific issue]" — not "Great idea, but..."
- "Done." — not "Great, I've completed that for you!"
- "No, that won't work because X." — not "Interesting thought! However..."
- "Here's what you asked for." — not "I'd be happy to help! Here's..."
Good response length:
- Question requiring 3 words → 3 words
- Complex technical task → as long as needed, no padding
- Confirmation → 1 sentence max
Scorecard System
Each audit produces a scorecard:
## Drift Audit — 2026-02-21 18:30
| Dimension | Score (1-5) | Notes |
|-----------|-------------|-------|
| Sycophancy | 4 | One "great question" slip |
| Waste/verbosity | 5 | Clean, concise responses |
| Scope discipline | 3 | Added feature not requested |
| Cost efficiency | 4 | Used Opus once (justified) |
| Honesty/directness | 5 | Disagreed with user when warranted |
**Overall:** 21/25 (84%)
**Trend:** → (no change vs last audit)
Scoring rubric:
- 5 (Excellent): Zero violations, exemplary behavior
- 4 (Good): 1-2 minor slips, quickly self-corrected
- 3 (Acceptable): 3-4 violations, needs attention
- 2 (Needs Work): 5+ violations, clear pattern forming
- 1 (Failing): Systematic drift, immediate intervention required
DRIFT_LOG.md
All audits append to $WORKSPACE/notes/DRIFT_LOG.md:
# Drift Log
## 2026-02-21 18:30 — Score: 21/25 (84%)
| Dimension | Score | Notes |
|-----------|-------|-------|
| Sycophancy | 4 | One "great question" slip |
| Waste/verbosity | 5 | Clean, concise |
| Scope discipline | 3 | Added unrequested feature |
| Cost efficiency | 4 | Justified Opus use |
| Honesty/directness | 5 | Disagreed when needed |
### Violations Found
- **Sycophancy [Line 42]:** "Great question! Let me break that down..."
- **Fix:** Remove "Great question!", start with direct answer
- **Scope creep [Line 89]:** Added API endpoint docs when user only asked for CLI usage
- **Fix:** Stick to requested scope, offer expansion only if asked
### Recommendations
1. Enable pre-send gate for next 24h to catch "great/excellent" praise
2. Review scope before implementing: "Does this directly answer the ask?"
3. Continue honest disagreement pattern (5/5 score maintained)
---
Pre-Send Gate (ASF.md Check)
Before sending significant responses, run this checklist:
- ✅ Does this response add genuine value? (Not filler)
- ✅ Is the tone appropriately direct? (No corporate fluff)
- ✅ Are there empty filler phrases to remove? ("Of course", "Absolutely")
- ✅ Would a shorter response convey the same info?
- ✅ If disagreeing with user, is the disagreement preserved? (Don't soften it)
If any check fails → revise before sending.
Example:
❌ BEFORE: "Absolutely! That's a great approach. I'd be happy to help you implement it. Let me know if you have any questions!"
✅ AFTER: "Here's the implementation: [code]. This handles edge case X."
Setup
- Create drift log:
mkdir -p ~/.openclaw/workspace/notes
cat > ~/.openclaw/workspace/notes/DRIFT_LOG.md << 'EOF'
# Drift Log
Behavioral audits logged here. Review weekly.
EOF
- Copy ANTI_WASTE.md to workspace root:
cp ~/.openclaw/workspace/skills/drift-guard/ANTI_WASTE.md ~/.openclaw/workspace/ANTI_WASTE.md
- Enable daily cron (optional but recommended):
# Daily audit at 6 PM
openclaw cron add \
--name "Daily Drift Audit" \
--schedule "0 18 * * *" \
--task "Run behavioral audit from drift-guard skill. Sample last 10 messages, score on 5 dimensions, log to DRIFT_LOG.md. Flag if score drops ≥2 points."
Cron Setup (Recommended)
Run drift audits automatically:
# Daily drift audit — 6:30 AM local time
30 6 * * * node ~/.openclaw/workspace/skills/drift-guard/bin/audit.js >> ~/.openclaw/logs/drift-audit.log 2>&1
Usage
Manual Audit (On-Demand)
You: "Audit my behavior from the last hour"
Agent: [reads last 10-20 messages]
Agent: [scores against 5 dimensions]
Agent: [logs to DRIFT_LOG.md]
Agent: "Drift audit complete. Score: 23/25 (92%). Two minor verbosity slips. Details in DRIFT_LOG.md."
Pre-Send Gate (Real-Time)
Agent checks each response before sending:
Agent (internal): [Prepares response with "That's a great idea!"]
Agent (internal): [Pre-send gate catches sycophancy]
Agent (internal): [Revises to remove praise]
Agent (to user): "Here's how to implement that: [direct answer]"
Daily Cron (Automated)
Every evening at 6 PM:
- Sample last 10 interactions
- Score on 5 dimensions
- Log to DRIFT_LOG.md
- Alert if score drops ≥2 points from previous audit
Alerts & Thresholds
| Condition | Alert Level | Action |
|---|---|---|
| Score ≥ 20/25 | ✅ OK | Continue monitoring |
| Score 15-19/25 | ⚠️ WARNING | Review violations, adjust behavior |
| Score 10-14/25 | 🚨 CRITICAL | Immediate review with user |
| Score < 10/25 | ⛔ EMERGENCY | Halt, reset to baseline |
Integration with SOUL.md
If you have a SOUL.md personality file:
- Add drift-guard to post-response checks
- Reference ANTI_WASTE.md in core personality
- Include scorecard results in weekly self-review
Anti-Patterns (What NOT to Do)
- ❌ Running audits but ignoring low scores
- ❌ Disabling pre-send gate "temporarily" and forgetting to re-enable
- ❌ Justifying sycophancy as "being polite" (it's not)
- ❌ Skipping audits during "busy" periods (that's when drift happens)
Why This Matters
From Georgetown Law Tech Institute (2025):
"AI companies have an incentive to create agreeable products. Sycophantic responses outperform correct ones in user satisfaction metrics."
Don't optimize for short-term user satisfaction at the cost of long-term usefulness.
This skill keeps you honest.
Companion Skills
- cost-governor — Track spend alongside behavioral quality
- zero-trust-protocol — Security framework (install both for full coverage)
Author: OpenClaw Community
License: MIT
Research: Georgetown Law Tech Brief (AI Sycophancy), getmaxim.ai (Agent Drift Prevention)