Goal stewardship — audit playbook
Use this when you need to explain what happened to a goal, or why stewardship behaved a certain way.
Sources of truth
- Goal JSON —
OPENCLAW_WORKSPACE+goalStewardship.goalsDir(defaultstate/goals/<uuid>.json). Each file hashistory[]with timestamps, actors, and actions. - CLI
openclaw hybrid-mem goals list/status <id>— current state.openclaw hybrid-mem goals audit— JSON snapshot (add--jsonlfor one line per goal).openclaw hybrid-mem goals stewardship-run— one deterministic health pass (watchdog logic).
- ACTIVE-TASKS.md — If
heartbeatRefreshActiveTaskis on, the ## Active Goals section is a mirror refreshed on heartbeat; do not edit by hand. - Plugin logs — Look for
memory-hybrid: goal stewardshipandACTIVE-TASKS.md mirror refreshed. - Event log (when configured) — May contain
goal.*events from tools and watchdog.
Typical questions
| Question | Where to look |
|---|---|
| Why was a goal blocked? | status + currentBlockers + history in goal JSON; health check actions from stewardship-run. |
| Why no stewardship this heartbeat? | Last user message must match a heartbeat pattern (defaults include “heartbeat”, “scheduled ping”). Check goalStewardship.heartbeatPatterns. |
| Why only some goals in the prepend? | Multi-goal cap (multiGoalMaxChars, multiGoalMaxGoals), cooldown per goal, weights (attentionWeights), round-robin cursor file _stewardship_rr.json in goals dir. |
| Why confirm on register? | confirmationPolicy.requireRegisterAckForPriorities — use confirmed: true on goal_register after user approval. |
Automation
Pipe goals audit --jsonl into your log stack or CI artifact store for long-term correlation with gateway logs.