🧪 Skills
Instruction Anchor Guard
Preserve user-critical instructions across long sessions and context compaction. Use when users mark constraints as important/must/always/never/highest-prior...
v1.0.0
Description
name: instruction-anchor-guard version: 1.1.0 description: Preserve user-critical instructions across long sessions and context compaction. Use when users mark constraints as important/must/always/never/highest-priority/rules, and enforce anchor checks before and after compaction to prevent plan drift. metadata: openclaw: emoji: "[ANCHOR]" category: resilience
Instruction Anchor Guard
Prevent loss or drift of user-critical constraints during compaction, session restart, or long multi-turn tasks.
When To Trigger
Trigger when any of these appear:
- User marks an instruction as important, critical, must, always, never, highest priority, rule, or constraint
- A task has more than 3 steps and spans multiple turns
- Compaction happened (or is likely) and the task has non-negotiable requirements
- Agent behavior shows possible drift from prior explicit user constraints
Anchor Ledger Schema
Store anchors in first available path:
memory/anchors.mdmemory/instruction-anchors.md.anchors.md(workspace root fallback only)
Entry schema (append-only, one section per anchor):
## Anchor: <id>
- **source**: <session-id|message-id|user>
- **instruction**: <canonical instruction text>
- **verbatim**: <short quote from user>
- **priority**: P0 | P1 | P2
- **scope**: global | session | task:<id> | channel:<id>
- **createdAt**: <ISO-8601 timestamp>
- **expiresAt**: <ISO-8601 timestamp or "never">
- **status**: active | paused | expired | superseded
- **signature**: <stable hash of canonical instruction>
- **supersedes**: <anchor-id or none>
Workflow
1) Capture
- Parse latest user message for candidate anchor statements
- Keep only instruction/constraint content; remove examples/chatter
- Assign default values:
- priority: P1 (unless user says critical/highest -> P0)
- scope: session (unless user explicitly asks global/task scope)
- expiresAt: session end (unless user explicitly sets never/date)
2) Confirm for Broad Anchors
- If scope is
globalor priority isP0, ask a one-line confirmation before persisting - Do not auto-promote P2/P1 to P0 without explicit user intent
3) Persist
- Append anchor entry to ledger
- If new anchor conflicts with old same-scope anchor, mark old one
superseded - Never rewrite history silently; keep audit trail
4) Rehydrate (each turn and after compaction)
- Load active anchors (status=active and not expired)
- Build an in-memory
ANCHOR_SETsorted by priority and recency - Inject
ANCHOR_SETinto planning phase before tool execution
5) Drift Check (before final answer and before destructive actions)
- Compare current plan against active anchors
- On conflict:
- P0 conflict: stop and correct plan immediately
- P1 conflict: auto-correct and note adjustment
- P2 conflict: continue only if no user-level contradiction
- Emit
DRIFT_CHECKblock in response
Conflict Resolution
Priority order:
- System and safety policy
- User anchors (P0 > P1 > P2)
- Current-turn temporary preferences
Tie-breakers:
- More specific scope wins (
task>session>global) if same priority - Newer anchor wins if same priority and same scope
- Explicit user override wins only when safety is not violated
Output Template
When anchors exist, include this compact block:
ANCHORS_ACTIVE
| ID | P | Scope | Expires | Instruction |
|----|---|-------|---------|-------------|
| anchor-001 | P0 | global | never | Never perform destructive data deletion without confirmation |
PLAN_GUARD
- Current action: <action>
- Conflicts: none | <anchor ids>
- Decision: clear | corrected | paused-awaiting-user
DRIFT_CHECK
- Last anchor sync: <timestamp>
- Drift: no | yes
- Fix applied: <none|what changed>
Safety Boundaries
- Never store tokens, API keys, passwords, cookies, or auth headers
- Never store raw personal data unless strictly required by user instruction
- Redact sensitive literals as
[REDACTED] - Store constraints, not datasets
- Do not execute destructive commands solely because an anchor exists; still require explicit confirmation for destructive actions
Expiry and Maintenance
- Mark
expiredwhenexpiresAt < now - Support control intents:
/anchors list/anchors pause <id>/anchors resume <id>/anchors delete <id>/anchors pin <id> never
- Rotate ledger when > 200 entries into
memory/anchors-archive-YYYY-MM.md
Integration Notes
- Pair with
memory-self-healfor retry/fallback after drift correction - Pair with
task-execution-guardto enforce anchor checks at each milestone - Keep this skill deterministic and concise; avoid free-form interpretation when conflict exists
Reviews (0)
Sign in to write a review.
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!