watchdog-discord-route
Portable OpenClaw skill bundle for the watchdog-b owner-facing Discord route.
This repo packages the scripts, env example, systemd user units, and skill documentation needed to install, verify, and repair the path:
watchdog-b -> notify_watchdog_b.py -> owner_report_producer.py -> owner_report_driver.py -> OpenClaw Discord send -> sent archive
What this is for
Use this bundle when you need to:
- install watchdog-b on another OpenClaw host
- verify end-to-end owner-facing Discord delivery
- repair broken
owner_report_*routing - refresh the live bundle under
scripts/watchdog-b/ - enable the
systemd --usertimer for watchdog-b
What is included
Skill docs
SKILL.md
Scripts
scripts/check_openclaw_state.shscripts/run_watchdog_b.shscripts/notify_watchdog_b.pyscripts/verify_watchdog_b_e2e.shscripts/owner_report_consumer.pyscripts/owner_report_producer.pyscripts/owner_report_driver.pyscripts/install_watchdog_bundle.shscripts/bootstrap_watchdog_bundle.shscripts/openclaw_runtime_probe.pyscripts/watchdog-b.env.example
systemd --user units
scripts/openclaw-watchdog-b.servicescripts/openclaw-watchdog-b.timer
References
references/watchdog-b-readme.mdreferences/owner-reporting-system.mdreferences/owner-report-operator-manual.md
Recommended install order
Run from inside this repo:
./scripts/install_watchdog_bundle.sh --install-env-example
mkdir -p ~/.config/openclaw
cp ~/.config/openclaw/watchdog-b.env.example ~/.config/openclaw/watchdog-b.env
Then edit at least:
WATCHDOG_B_OWNER_REPORT_TARGET=channel:YOUR_DISCORD_CHANNEL_ID
Then validate:
./scripts/bootstrap_watchdog_bundle.sh
Only after bootstrap passes:
systemctl --user daemon-reload
systemctl --user enable --now openclaw-watchdog-b.timer
Quick update / refresh on a host
If you already have the repo or bundle and just want to refresh the live install:
./scripts/install_watchdog_bundle.sh --install-env-example --force
./scripts/bootstrap_watchdog_bundle.sh
End-to-end verification
Run:
cd ~/.openclaw/workspace/scripts/watchdog-b
./verify_watchdog_b_e2e.sh
Minimum success evidence:
- pending owner report created
- report moved to
~/.clawteam/owner-reports/sent/ - Discord send returns success / message id
- artifacts written under
state/watchdog-b-verify-e2e/<run-id>/
Useful verification files:
verify.logrun-output.txtqueue-before.txtqueue-after.txtsent-head.txtstate/notify-state.json
Important config
Expected live config lives in:
~/.config/openclaw/watchdog-b.env
Typical minimum values:
WATCHDOG_B_NOTIFY_DRY_RUN=0
WATCHDOG_B_RUNNING_REPORT_MODE=enqueue-and-drain
WATCHDOG_B_OWNER_DELIVERY_MODE=direct-discord
WATCHDOG_B_OWNER_REPORT_CHANNEL=discord
WATCHDOG_B_OWNER_REPORT_TARGET=channel:YOUR_DISCORD_CHANNEL_ID
Optional if the host really has a valid OpenClaw agent id:
WATCHDOG_B_MAIN_AGENT_ID=backend
If this is unset, stalled/idle paths skip main-agent nudge instead of failing on Unknown agent id.
Known pitfalls fixed in this bundle
This bundle already includes fixes for these previously observed issues:
-
Wrong producer path
- bad:
.../workspace/scripts/scripts/owner_report_producer.py - fixed:
.../workspace/scripts/watchdog-b/owner_report_producer.py
- bad:
-
Missing consumer in portable bundle
owner_report_consumer.pyis included and installed to the live bundle
-
Bootstrap wrongly required old live owner-reporting-system tree
- bootstrap now validates the installed live bundle under
scripts/watchdog-b/
- bootstrap now validates the installed live bundle under
-
Invalid hard-coded
mainagent nudge- nudge now uses
WATCHDOG_B_MAIN_AGENT_IDonly when configured
- nudge now uses
Evidence standard
When claiming success, distinguish these clearly:
- transport accepted: send returned success / message id
- channel-readable: message can be read back from the target Discord channel
- human-confirmed: the user confirms they saw it
Do not collapse them into one claim.
Safety / cleanup rules
- Do not delete
~/.clawteam/owner-reports/sent/history unless explicitly asked - Do not delete live
state/watchdog-b/notify-state.jsonunless explicitly doing a hard reset - Prefer archiving old test residue under
state/archive/<timestamp>/
Repo purpose
This repo is meant to be a reusable, host-portable source of truth for the watchdog-b Discord delivery path, not just a local one-off workspace patch.