Source of truth for Peter's moderation and email-triage policy.
Primary rules:
Also includes restore docs/templates for the current OpenClaw cron setup:
- shared clawblocker workspace templates:
openclaw/clawblocker - daily block digest templates:
openclaw/blockdigest
There are 4 related automations:
- X mention moderation
- X reply-opportunity triage
- Gmail triage
- Daily X block digest email
The first 3 share one OpenClaw agent/workspace:
- agent id:
clawblocker - one workspace
- one repo checkout inside that workspace
- three runbooks
- separate state/audit files per cron
- twitter moderation also doubles as the
birdclawmention-cache warmer every 10 minutes; no second cache cron needed
The block digest stays separate because it is a simple daily mailer over the moderation audit log.
Target layout:
~/.openclaw/
workspace-clawblocker/
AGENTS.md
triage/ # checkout of this repo
jobs/
twitter-moderation.md
twitter-replies.md
email-triage.md
skills/
bird-twitter-moderation/
SKILL.md
state/
twitter.json
twitter-replies.json
email.json
audit/
twitter/
twitter-replies/
email/
agents/
clawblocker/
agent/
models.json
sessions/
sessions.json
Source-of-truth rule checkout:
- only one checkout:
~/.openclaw/workspace-clawblocker/triage - runtime should read rules from that checkout
- runtime should not read
~/triagedirectly
- schedule: every 10 minutes
- agent:
clawblocker - model:
openai/gpt-5.4 - thinking:
high - timeout:
360s - delivery:
none - runbook:
jobs/twitter-moderation.md - also warms
birdclawmention cache before triage and records verified block/mute actions back into local SQLite
Message:
Run one clawblocker pass now using ~/.openclaw/workspace-clawblocker/jobs/twitter-moderation.md. Follow it exactly.
- schedule:
17 */6 * * * - timezone:
Europe/London - agent:
clawblocker - model:
openai/gpt-5.4 - thinking:
low - timeout:
300s - delivery:
none - runbook:
jobs/twitter-replies.md - warms
birdclawmention cache, runs a deeperxurlbackfill, then surfaces only high-signal unreplied mentions worth Peter's time
Message:
Run one clawblocker pass now using ~/.openclaw/workspace-clawblocker/jobs/twitter-replies.md. Follow it exactly.
- schedule:
5 */3 * * * - timezone:
Europe/London - agent:
clawblocker - model:
openai/gpt-5.4 - thinking:
low - delivery:
none - runbook:
jobs/email-triage.md
Message:
Run one clawblocker pass now using ~/.openclaw/workspace-clawblocker/jobs/email-triage.md. Follow it exactly.
- schedule:
0 9 * * * - timezone:
Europe/London - agent:
blockdigest - model:
openai/gpt-5.4 - thinking:
low - timeout:
180s - delivery:
none - source audit:
~/.openclaw/workspace-clawblocker/audit/twitter/*.md
birdclawbird- optional fallback:
bird-gui - active auth/cookies for X
Expected binary path in templates:
$HOME/Projects/birdclaw
$HOME/Projects/bird/birdExpected runtime for birdclaw CLI today:
fnm exec --using 25.8.1 pnpm cli ...gog- authenticated Gmail account
Expected default account:
steipete@gmail.com
- Clone this repo somewhere convenient, for example:
git clone https://github.com/steipete/triage.git ~/triage- Create the shared OpenClaw agent:
node ~/clawdbot/dist/index.js agents add clawblocker --workspace ~/.openclaw/workspace-clawblocker --non-interactive- Put this repo inside the workspace as the only runtime checkout:
git clone https://github.com/steipete/triage.git ~/.openclaw/workspace-clawblocker/triage- Copy template files from this repo into the live workspace:
openclaw/clawblocker/AGENTS.mdopenclaw/clawblocker/jobs/twitter-moderation.mdopenclaw/clawblocker/jobs/twitter-replies.mdopenclaw/clawblocker/jobs/email-triage.mdopenclaw/clawblocker/skills/bird-twitter-moderation/SKILL.mdopenclaw/clawblocker/state/twitter.json.exampleopenclaw/clawblocker/state/twitter-replies.json.exampleopenclaw/clawblocker/state/email.json.example
-
Create the block digest workspace/agent from the templates in
openclaw/blockdigest. -
Add the cron jobs with the settings above.
-
Verify:
- twitter run reads
jobs/twitter-moderation.md - reply triage run reads
jobs/twitter-replies.md - email run reads
jobs/email-triage.md - both use
agentId: clawblocker - only one triage checkout exists under cron workspaces
- block digest reads
~/.openclaw/workspace-clawblocker/audit/twitter
- Rule edits belong in this repo first.
- After changing rules, pull the workspace checkout.
- State and audit logs are runtime data; do not store them in this repo.
- Email triage may auto-archive only exact Rule 1 / Rule 2 junk. Everything else remains observe-first.