{"id":"57a9719e-8372-4b66-b929-14d4aeff1de7","entityType":"agent","slug":"clawhub-swit001-worldloops","name":"Agent Execution Guard","canonicalUrl":"https://www.xpersona.co/agent/clawhub-swit001-worldloops","canonicalPath":"/agent/clawhub-swit001-worldloops","generatedAt":"2026-10-09T22:09:18.488Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T13:52:21.106Z","emptyReason":null},"description":"Agent Execution Guard by WorldLoops — a safe-by-default responsibility layer for AI agents that turns scattered work signals into governed open loops while p...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.5K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s177k598qdpx8sgq8ng5mwwpbh86xsyr:worldloops","sourceUrl":"https://clawhub.ai/swit001/worldloops","homepage":"https://clawhub.ai/swit001/skills/worldloops","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/swit001/worldloops","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/swit001/skills/worldloops","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":68,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Agent Execution Guard technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T13:52:21.106Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T13:52:21.106Z","emptyReason":null},"stars":null,"forks":null,"downloads":2536,"packageName":null,"latestVersion":"1.13.0","tractionLabel":"2.5K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T13:52:21.105Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T13:52:21.106Z","lastCrawledAt":"2026-10-09T13:52:21.105Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T13:52:21.105Z","lastVerifiedAt":null,"highlights":[{"version":"1.13.0","createdAt":"2026-05-22T22:06:30.194Z","changelog":"Adds stateful lifecycle brief UX and language-aware rendering. WorldLoops now surfaces already tracked loops, aging open loops, recently closed loops, needs-review/escalated items, context, suppressed noise, and safe execution boundaries in the Telegram reference brief. Korean requests can render Korean section and field labels. This reinforces the core positioning: OpenClaw observes and interprets; WorldLoops adjudicates lifecycle state. externalWrite:false preserved.","fileCount":392,"zipByteSize":414714},{"version":"1.12.0","createdAt":"2026-05-22T21:06:51.147Z","changelog":"Clarifies the WorldLoops positioning: OpenClaw observes and interprets source signals, while WorldLoops adjudicates OpenClaw-authored interpreted observations into lifecycle state. Adds support for Gmail, Calendar, and Slack-derived interpreted observations in Telegram brief output. Gmail and Calendar were verified through real connector-backed observation during internal testing; Slack interpreted observation was verified through existing OpenClaw live handoff. WorldLoops does not directly connect to Gmail, Calendar, or Slack. externalWrite:false preserved.","fileCount":391,"zipByteSize":404978},{"version":"1.11.0","createdAt":"2026-05-22T18:15:58.095Z","changelog":"Adds an inbox-backed Telegram demo flow. WorldLoops now checks local OpenClaw-observed payloads from .worldloops/inbox, exposes /source for input inspection, supports /brief from Telegram, and preserves safe-by-default externalWrite:false behavior.","fileCount":388,"zipByteSize":395239},{"version":"1.10.0","createdAt":"2026-05-22T12:24:08.504Z","changelog":"Adds OpenClaw Signal Intake and WorldLoops adjudication. OpenClaw observes candidate signals; WorldLoops filters noise, suppresses no-action/promotional items, attaches related context, transitions existing loops, and persists only real open loops. Daily Brief now acts as a state-management surface showing what changed.","fileCount":383,"zipByteSize":383547},{"version":"1.9.4","createdAt":"2026-05-21T18:34:46.039Z","changelog":"Calendar time and public example polish: Calendar event times now display as human-readable local time instead of raw ISO timestamps, public README and ClawHub examples are English-first, Korean action phrase detection remains supported and tested, and externalWrite:false is preserved.","fileCount":366,"zipByteSize":354734},{"version":"1.9.3","createdAt":"2026-05-21T18:04:09.307Z","changelog":"Live Daily Brief detection polish: added Korean action phrase detection, improved Gmail no-action summaries, preserved promotional suppression, added Calendar travel/flight important context, improved Calendar zero-event output, improved Slack setup guidance, and preserved externalWrite:false.","fileCount":366,"zipByteSize":353091},{"version":"1.9.2","createdAt":"2026-05-21T17:00:20.821Z","changelog":"Attributable Compact Daily Brief: Gmail items now show sender and subject, Calendar items show event and time context, Slack items show sender and channel, no-action sources use clearer neutral wording, missing Slack gives setup guidance, and --details provides deeper source identifiers while preserving externalWrite:false.","fileCount":357,"zipByteSize":343349},{"version":"1.9.1","createdAt":"2026-05-21T15:42:21.884Z","changelog":"Daily Brief explainability and routing polish: added Why/Evidence/Action/Adjudication lines to Daily Brief items, improved Calendar no-action reasoning, changed default schedule wording to local time, shortened missing-payload onboarding, strengthened Daily Brief runtime routing, and preserved externalWrite:false.","fileCount":352,"zipByteSize":336862}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s177k598qdpx8sgq8ng5mwwpbh86xsyr:worldloops","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s177k598qdpx8sgq8ng5mwwpbh86xsyr:worldloops` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/swit001/worldloops before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-swit001-worldloops/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-swit001-worldloops/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-swit001-worldloops/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-swit001-worldloops/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-swit001-worldloops/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-swit001-worldloops/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-09T22:09:18.485Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-swit001-worldloops/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-swit001-worldloops/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-swit001-worldloops/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-swit001-worldloops/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T13:52:21.106Z","emptyReason":null},"readme":"Skill: Agent Execution Guard\n\nOwner: swit001\n\nSummary: Agent Execution Guard by WorldLoops — a safe-by-default responsibility layer for AI agents that turns scattered work signals into governed open loops while p...\n\nTags: agentic-ai:0.3.0, auditable-runtime:0.3.0, clawhub:0.3.0, executable-world:0.3.0, human-in-the-loop:0.3.0, latest:1.13.0, open-loop-management:0.3.0, open-loops:0.3.0, openclaw:0.3.0, safe-by-default:0.3.0, stateful-loop-management:0.3.0, world-model:0.3.0\n\nVersion history:\n\nv1.13.0 | 2026-05-22T22:06:30.194Z | user\n\nAdds stateful lifecycle brief UX and language-aware rendering. WorldLoops now surfaces already tracked loops, aging open loops, recently closed loops, needs-review/escalated items, context, suppressed noise, and safe execution boundaries in the Telegram reference brief. Korean requests can render Korean section and field labels. This reinforces the core positioning: OpenClaw observes and interprets; WorldLoops adjudicates lifecycle state. externalWrite:false preserved.\n\nv1.12.0 | 2026-05-22T21:06:51.147Z | user\n\nClarifies the WorldLoops positioning: OpenClaw observes and interprets source signals, while WorldLoops adjudicates OpenClaw-authored interpreted observations into lifecycle state. Adds support for Gmail, Calendar, and Slack-derived interpreted observations in Telegram brief output. Gmail and Calendar were verified through real connector-backed observation during internal testing; Slack interpreted observation was verified through existing OpenClaw live handoff. WorldLoops does not directly connect to Gmail, Calendar, or Slack. externalWrite:false preserved.\n\nv1.11.0 | 2026-05-22T18:15:58.095Z | user\n\nAdds an inbox-backed Telegram demo flow. WorldLoops now checks local OpenClaw-observed payloads from .worldloops/inbox, exposes /source for input inspection, supports /brief from Telegram, and preserves safe-by-default externalWrite:false behavior.\n\nv1.10.0 | 2026-05-22T12:24:08.504Z | user\n\nAdds OpenClaw Signal Intake and WorldLoops adjudication. OpenClaw observes candidate signals; WorldLoops filters noise, suppresses no-action/promotional items, attaches related context, transitions existing loops, and persists only real open loops. Daily Brief now acts as a state-management surface showing what changed.\n\nv1.9.4 | 2026-05-21T18:34:46.039Z | user\n\nCalendar time and public example polish: Calendar event times now display as human-readable local time instead of raw ISO timestamps, public README and ClawHub examples are English-first, Korean action phrase detection remains supported and tested, and externalWrite:false is preserved.\n\nv1.9.3 | 2026-05-21T18:04:09.307Z | user\n\nLive Daily Brief detection polish: added Korean action phrase detection, improved Gmail no-action summaries, preserved promotional suppression, added Calendar travel/flight important context, improved Calendar zero-event output, improved Slack setup guidance, and preserved externalWrite:false.\n\nv1.9.2 | 2026-05-21T17:00:20.821Z | user\n\nAttributable Compact Daily Brief: Gmail items now show sender and subject, Calendar items show event and time context, Slack items show sender and channel, no-action sources use clearer neutral wording, missing Slack gives setup guidance, and --details provides deeper source identifiers while preserving externalWrite:false.\n\nv1.9.1 | 2026-05-21T15:42:21.884Z | user\n\nDaily Brief explainability and routing polish: added Why/Evidence/Action/Adjudication lines to Daily Brief items, improved Calendar no-action reasoning, changed default schedule wording to local time, shortened missing-payload onboarding, strengthened Daily Brief runtime routing, and preserved externalWrite:false.\n\nv1.9.0 | 2026-05-21T14:59:16.959Z | user\n\nLive Handoff Daily Brief: added guard:daily and brief:daily to combine local Gmail/Calendar/Slack payloads, onboarding for missing payloads, 9 AM daily brief preferences, configurable delivery channel, delivery-ready mode, and source-safe externalWrite boundaries without adding connectors, OAuth, fetch, or external API calls.\n\nv1.8.2 | 2026-05-21T14:26:36.565Z | user\n\nRuntime instruction cleanup: removed non-English demo trigger phrases, replaced legacy brief:reconcile default runtime guidance with npm run --silent demo, clarified compact Agent Execution Guard output as the default, and preserved Gmail/Calendar/Slack handoff behavior.\n\nv1.8.1 | 2026-05-21T14:02:27.957Z | user\n\nGmail, Calendar, and Slack handoff stabilization: added source-specific local payload normalizers for gog Gmail, gog Calendar, and Slack host payloads, preserving externalWrite:false without adding connectors, OAuth, fetch, or external API calls.\n\nv1.8.0 | 2026-05-21T13:24:23.517Z | user\n\nReal OpenClaw Signal Handoff: added local .worldloops/inbox handoff convention, redacted Gmail/Calendar/Slack/GitHub payload examples, guard handoff tests, Quick Start cleanup, and preserved externalWrite:false without adding connectors or external fetches.\n\nv1.7.1 | 2026-05-21T08:39:40.060Z | user\n\nDefault demo routing cleanup: npm run demo and guard:demo now default to compact Agent Execution Guard output, and the legacy wow:mobile route was removed to prevent Telegram/OpenClaw from showing the old 6-open-loop mobile demo.\n\nv1.7.0 | 2026-05-21T07:59:24.010Z | user\n\nAgent Execution Guard adapter invocation foundation: added one-command demo paths, governed guard:adapter flow for OpenClaw-read signals, source aliases for Gmail/Calendar/Slack/GitHub, compact messenger output, ClawHub landing cleanup, and externalWrite:false safety preservation.\n\nv1.6.4 | 2026-05-21T07:08:32.853Z | user\n\nMessenger-friendly output hotfix: added concise --format messenger and brief:messenger output for real signal governance demos, suppressed raw JSON in chat/mobile surfaces, and added fast demo instructions for agent execution guard usage.\n\nv1.6.3 | 2026-05-21T06:39:44.236Z | user\n\nv1.6.3 fixes receipt/proposal reference alignment for real AdapterSignal reconciliation, adds real Gmail claim/contact and sales outreach fixtures, clarifies adapter:test local heuristic mode, and updates GitHub/ClawHub landing copy around the real governance chain: Signal → Open Loop → Severity → Proposal → Adjudication → Approval → Local Transition → Receipt. externalWrite:false remains enforced.\n\nv1.6.2 | 2026-05-21T02:19:50.665Z | user\n\nv1.6.2 adds messenger-friendly output for Telegram, Discord, and other chat-based OpenClaw channels. New commands include npm run wow:mobile and npm run doctor:mobile. Existing terminal output remains unchanged. README and ClawHub landing were also refreshed with cleaner, emoji-enhanced, mobile-friendly copy. No runtime behavior changed and externalWrite:false remains enforced.\n\nv1.6.1 | 2026-05-20T19:50:08.764Z | user\n\nv1.6.1 simplifies the GitHub README and ClawHub landing page around the current 5-Minute Wow Experience. No runtime behavior changed. The landing now focuses on what WorldLoops does, why open loops matter, how to try the demo, what makes it different from normal assistants, the safety boundary, and current useful commands.\n\nv1.6.0 | 2026-05-20T19:21:53.821Z | user\n\nv1.6.0 adds the 5-Minute Wow Experience: a friendly first-run demo that shows how scattered signals across email, calendar, chat, documents, project tools, and meeting notes become open loops with clear states. It also adds a safety doctor and developer verification command. Everything remains local, reviewable, and externalWrite:false.\n\nv1.5.0 | 2026-05-20T18:11:33.101Z | user\n\nAgent Execution Guard v1.5.0 bundles the WorldLoops Adapter SDK and local world-state safety stack. Includes AdapterSignal contract, community adapter submissions, adapter:test compatibility harness, state:check, receipts:verify, state:repair dry-run/apply, state:repair:list, and repair receipts. Adds read-only integrity diagnostics and explicit, non-destructive, receipt-backed recovery. No connectors or external writes added. externalWrite:false preserved.\n\nv1.3.0 | 2026-05-20T08:39:21.859Z | user\n\nWorldLoops v1.3.0 bundles the Adapter SDK completion path: improved adapter docs and invalid examples, community adapter submission workflow, and the new adapter:test compatibility harness. Developers can now bring their own connector output, validate it against the AdapterSignal contract, reconcile it into governed open loops and proposals, submit community adapter fixtures, and test compatibility before submission. externalWrite:false remains preserved. No connectors or external writes are added.\n\nv1.1.1 | 2026-05-20T06:44:46.285Z | user\n\nClawHub positioning patch: renamed the public-facing listing to Agent Execution Guard by WorldLoops and clarified safe-by-default execution governance, the Signals → Loops → Proposals → Decisions → Plans → Contracts chain, and externalWrite:false.\n\nv1.1.0 | 2026-05-20T06:22:58.494Z | user\n\nWorldLoops v1.1.0 introduces the Adapter SDK Foundation. Bring your own connector. WorldLoops provides the contract. Adds AdapterSignal schema, adapter:validate, brief:reconcile --adapter-signal, adapter examples, persisted adapter-derived proposals, and idempotency protection while preserving externalWrite:false.\n\nv1.0.1 | 2026-05-20T01:50:56.606Z | user\n\nDocumentation positioning patch: updated ClawHub-facing description and README/SKILL messaging for WorldLoops v1.0 Safe Execution Contracts, emphasizing safe-by-default execution governance, the Signals → Loops → Proposals → Decisions → Plans → Contracts chain, and externalWrite:false.\n\nv1.0.0 | 2026-05-20T01:35:54.767Z | user\n\nSafe Execution Contracts: added contract:create, contract:list, contract:show, and contract:review; planned execution plans can now become local safe execution contracts; contracts define boundary, preconditions, approvals, rollback availability, and audit readiness while preserving externalWrite:false.\n\nv0.9.0 | 2026-05-20T00:51:06.579Z | user\n\nExecution Plan Preview: added plan:create, plan:list, plan:show, and plan:review; approved proposals can now become local execution plans; all plan steps preserve externalWrite:false; Proposal ≠ Execution, Approval ≠ Execution, and Plan ≠ Execution are preserved.\n\nv0.8.0 | 2026-05-20T00:19:38.027Z | user\n\nProposal Review Decisions: added proposal:decide, proposal:review, and proposal:receipts; expanded proposal statuses to approved, rejected, snoozed, and escalated; added local decision receipts; preserved Proposal ≠ Execution, Approval ≠ Execution, and externalWrite:false safety posture.\n\nv0.7.0 | 2026-05-19T23:47:07.642Z | user\n\nProposal Templates Foundation: added generic local proposal templates for file writes, API calls, state transitions, human review, notification drafts, and escalation; added proposal:templates/create/list/show commands; local-only proposal storage; preserved Proposal ≠ Execution and externalWrite:false safety posture.\n\nv0.6.0 | 2026-05-19T23:04:43.559Z | user\n\nLoop Lifecycle UX: clearer loop:show inspection, governed loop:transition validation with --to and --dry-run support, new loop:review summaries, cross-session state clarity, JSON consistency, and preserved externalWrite:false safety posture.\n\nv0.5.0 | 2026-05-19T06:22:39.009Z | user\n\nLoop Inspection UX: compact loop:list output, JSON mode, status/severity filters, loop:summary, updated ClawHub-facing SKILL.md, and preserved externalWrite:false safety posture.\n\nv0.4.3 | 2026-05-19T05:44:48.885Z | user\n\nv0.4.3 adds loop:show for focused inspection of a single persisted open loop, including status, severity, adjudication, source signals, history, safety, and capability boundary. externalWrite:false remains preserved.\n\nv0.4.2 | 2026-05-19T05:30:33.678Z | user\n\nv0.4.2 narrows persisted open-loop sourceSignals by proposal source, reducing noisy local state while preserving externalWrite:false.\n\nv0.4.1 | 2026-05-19T05:15:18.367Z | user\n\nv0.4.1 removes the dotenv runtime dependency so ClawHub-installed skills can run local commands such as capability:show and loop:reconcile without npm install. externalWrite:false remains preserved throughout.\n\nv0.4.0 | 2026-05-19T05:11:54.863Z | user\n\nv0.4.0 completes the Auditable Open-Loop Runtime milestone: persistent open-loop state, capability-scoped execution boundaries, severity-based adjudication, and stuck-loop timeout reconciliation. externalWrite:false remains preserved throughout.\n\nv0.3.0 | 2026-05-18T17:21:31.463Z | auto\n\nWorldLoops v0.3.0 introduces the \"transition receipt\" system to improve auditable runtime tracking.\n\n- Added support for transition receipts with new types, storage, and scripts.\n- Implemented receipt listing functionality for auditable tracking of world transitions.\n- Added tests and example data for transition receipts.\n- Updated documentation to reflect new auditable runtime and receipt features.\n- No changes to APIs or safety boundaries; externalWrite remains false.\n\nv0.2.8 | 2026-05-18T17:07:17.764Z | auto\n\n- Updated skill metadata to include new tags for open-loop management and stateful workflows.\n- Clarified that WorldLoops manages open loops as state, not just from snapshots.\n- Added note about an upcoming auditable runtime direction (v0.3.0).\n- Minor documentation and description improvements for clarity and future direction.\n- No functional or API changes in this release.\n\nv0.2.7 | 2026-05-18T08:26:45.434Z | user\n\nv0.2.7 removes Vercel URL exposure, adds local notification preference runtime, daily brief and discovery entrypoints, duplicate suppression, and keeps smoke validation local and safe.\n\nv0.2.6 | 2026-05-18T07:47:02.449Z | user\n\nv0.2.6 improves Re/Fwd thread detection, proactive discovery and daily brief direction, local smoke validation, and OpenClaw/ClawHub metadata discoverability.\n\nv0.2.5 | 2026-05-18T00:28:00.139Z | user\n\nClawHub publish candidate with default api.worldloops.ai, gog Gmail thread detail support, OpenClaw Slack message-read envelope support, live Gmail/Calendar/Slack validation, and externalWrite:false safety boundary.\n\nArchive index:\n\nArchive v1.13.0: 392 files, 414714 bytes\n\nFiles: ADAPTER_GUIDE.md (16817b), CHANGELOG.md (41686b), CONTRIBUTING.md (4966b), dist/adapter/runAdapterTest.d.ts (471b), dist/adapter/runAdapterTest.js (6702b), dist/adapter/toWorldLoopsSignal.d.ts (177b), dist/adapter/toWorldLoopsSignal.js (611b), dist/adapter/validateAdapterSignal.d.ts (171b), dist/adapter/validateAdapterSignal.js (2481b), dist/adapters/gogCalendar.d.ts (328b), dist/adapters/gogCalendar.js (4181b), dist/adapters/gogGmail.d.ts (315b), dist/adapters/gogGmail.js (3885b), dist/adapters/gogSnapshot.d.ts (546b), dist/adapters/gogSnapshot.js (4676b), dist/adapters/openclawCalendar.d.ts (292b), dist/adapters/openclawCalendar.js (2588b), dist/adapters/openclawCommitments.d.ts (307b), dist/adapters/openclawCommitments.js (1837b), dist/adapters/openclawGmail.d.ts (339b), dist/adapters/openclawGmail.js (2527b), dist/adapters/openclawMessages.d.ts (476b), dist/adapters/openclawMessages.js (2663b), dist/adapters/slackPayload.d.ts (526b), dist/adapters/slackPayload.js (5395b), dist/adapters/threadHints.d.ts (470b), dist/adapters/threadHints.js (1554b), dist/brief.d.ts (230b), dist/brief.js (1385b), dist/dailyBriefRunner.d.ts (2128b), dist/dailyBriefRunner.js (24423b), dist/data/proposalTemplates.d.ts (128b), dist/data/proposalTemplates.js (5697b), dist/notifications/prefs.d.ts (870b), dist/notifications/prefs.js (4876b), dist/notifications/state.d.ts (222b), dist/notifications/state.js (2351b), dist/openclawIntake.d.ts (2621b), dist/openclawIntake.js (14569b), dist/output/messengerFormat.d.ts (520b), dist/output/messengerFormat.js (4000b), dist/policy/capabilityBoundary.d.ts (140b), dist/policy/capabilityBoundary.js (2530b), dist/policy/severityPolicy.d.ts (215b), dist/policy/severityPolicy.js (1552b), dist/policy/stuckLoopPolicy.d.ts (369b), dist/policy/stuckLoopPolicy.js (2998b), dist/scripts/adapterTest.d.ts (11b), dist/scripts/adapterTest.js (2326b), dist/scripts/adapterValidate.d.ts (11b), dist/scripts/adapterValidate.js (3116b), dist/scripts/briefDaily.d.ts (11b), dist/scripts/briefDaily.js (5358b), dist/scripts/briefDeliver.d.ts (11b), dist/scripts/briefDeliver.js (3086b), dist/scripts/briefMessenger.d.ts (11b), dist/scripts/briefMessenger.js (368b), dist/scripts/briefPreferences.d.ts (11b), dist/scripts/briefPreferences.js (1778b), dist/scripts/briefPreferencesSet.d.ts (11b), dist/scripts/briefPreferencesSet.js (2861b), dist/scripts/briefReconcile.d.ts (11b), dist/scripts/briefReconcile.js (10703b), dist/scripts/capabilityShow.d.ts (11b), dist/scripts/capabilityShow.js (443b), dist/scripts/contractCreate.d.ts (11b), dist/scripts/contractCreate.js (8874b), dist/scripts/contractList.d.ts (11b), dist/scripts/contractList.js (2532b), dist/scripts/contractReview.d.ts (11b), dist/scripts/contractReview.js (2989b), dist/scripts/contractShow.d.ts (11b), dist/scripts/contractShow.js (4054b), dist/scripts/demoWow.d.ts (31b), dist/scripts/demoWow.js (4080b), dist/scripts/demoWowMobile.d.ts (11b), dist/scripts/demoWowMobile.js (1055b), dist/scripts/discoveryRun.d.ts (11b), dist/scripts/discoveryRun.js (5903b), dist/scripts/doctor.d.ts (11b)\n\nFile v1.13.0:SKILL.md\n\n---\nname: worldloops\ndescription: Agent Execution Guard by WorldLoops — a safe-by-default responsibility layer for AI agents that turns scattered work signals into governed open loops while preserving externalWrite:false.\nversion: \"1.12.0\"\nhomepage: https://github.com/swit001/worldloops\nmetadata: {\"openclaw\":{\"requires\":{\"bins\":[\"node\",\"npm\"]},\"envVars\":[{\"name\":\"WORLDLOOPS_API_BASE_URL\",\"required\":false,\"description\":\"Optional WorldLoops API base URL override. Defaults to https://api.worldloops.ai.\"},{\"name\":\"WORLDLOOPS_API_KEY\",\"required\":false,\"description\":\"Optional bearer token for hosted WorldLoops API.\"}],\"emoji\":\"🌐\",\"homepage\":\"https://github.com/swit001/worldloops\",\"skillKey\":\"worldloops\",\"tags\":[\"openclaw\",\"clawhub\",\"agentic-ai\",\"world-model\",\"executable-world\",\"open-loops\",\"open-loop-management\",\"workflow\",\"human-in-the-loop\",\"safe-by-default\",\"auditable-runtime\",\"stateful-loop-management\",\"agent-execution-guard\",\"execution-governance\",\"execution-contracts\",\"proposal-engine\",\"workflow-governance\"]}}\n---\n\n# Agent Execution Guard\n\nAgent Execution Guard is a WorldLoops skill for OpenClaw.\n\nIt turns signals from tools, messages, and workflows into governed open loops:\n\nSignal → Open Loop → Proposal → Approval → Local Transition → Receipt\n\nIt helps agents avoid unsafe or premature execution by keeping action proposals inside a safe, auditable boundary.\n\n---\n\n## Why it matters\n\nMost agents answer from a snapshot.\nWorldLoops tracks what remains unresolved.\n\nWhen an email, calendar event, Slack message, or GitHub notification implies unfinished responsibility, Agent Execution Guard surfaces it as a governed open loop — not a silent side effect.\n\nEvery proposed action requires approval before any local transition is committed.\nNo external system is changed.\n`externalWrite:false` is preserved throughout.\n\n---\n\n## Quick Start\n\n```bash\nclawhub install worldloops\ncd ~/.openclaw/workspace/skills/worldloops\nnpm run demo\n```\n\n### Optional Safety Check\n\n```bash\nnpm run doctor\n```\n\n---\n\n## Example demo output\n\n```bash\nnpm run demo\n```\n\n```\n🦞 Agent Execution Guard\n\n🚨 High — Gmail callback requested\nState: open\n\nProposal:\nReview claim context and decide whether to call back or prepare a written response. This is a local planning action only — do not initiate any call, email, or external communication without an explicit decision.\n\nAdjudication:\nrequires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, call, or external change made.\n```\n\n---\n\n## Safety posture\n\nAgent Execution Guard does not send emails.\nAgent Execution Guard does not post chat messages.\nAgent Execution Guard does not create calendar events.\nAgent Execution Guard does not modify external systems.\n\n```\n✅ 0 emails sent\n✅ 0 calendar events changed\n✅ 0 chat messages posted\n✅ 0 files modified\n✅ 0 project changes made\n✅ externalWrite:false enforced\n```\n\nOpenClaw reads signals.\nWorldLoops guards execution.\n\nWorldLoops does not need to own every connector.\nIf a host agent can read a signal, it can pass it to Agent Execution Guard.\n\nOpenClaw observes and interprets source signals (Gmail, Calendar, Slack, GitHub) into `ObservedSignal[]`.\nWorldLoops reads those OpenClaw-authored interpreted observations and adjudicates their lifecycle state — into active open loops, attached context, suppression receipts, and transitions.\nWorldLoops does not connect to Gmail, Calendar, or Slack directly. `externalWrite:false` is preserved throughout.\n\n---\n\n## OpenClaw Signal Handoff\n\nOpenClaw reads. Agent Execution Guard governs.\n\nNo connectors added.\nNo OAuth added.\nNo external write.\n\nA host agent (OpenClaw, gog, or any other) reads signals from Gmail, Calendar, Slack, or GitHub.\nIt places the already-read payload as a local JSON file.\nAgent Execution Guard receives that payload, normalizes it into an `AdapterSignal`, and produces a governed receipt.\n\n```\nOpenClaw / gog reads Gmail / Calendar / Slack / GitHub\n    ↓\nalready-read payload → .worldloops/inbox/openclaw-gmail-live.json\n    ↓\nnpm run guard:gmail -- --input .worldloops/inbox/openclaw-gmail-live.json --compact\n    ↓\nAgent Execution Guard\n    ↓\ngoverned open loop → proposal → receipt\nexternalWrite:false\n```\n\n### Accepted local payload formats\n\nAgent Execution Guard can consume local payloads in these forms:\n\n- **AdapterSignal JSON** — fully normalized signal with `source`, `sourceType`, `text`, `observedAt`, `externalWrite:false`\n- **OpenClaw-style handoff payloads** — already-normalized payloads from OpenClaw host agents\n- **gog-style Gmail payloads** — `{ \"messages\": [...] }` output from gog Gmail reads\n- **gog-style Calendar payloads** — `{ \"events\": [...] }` output from gog Calendar reads\n- **Slack host/plugin payloads** — `{ \"channel\": \"...\", \"messages\": [...] }` output from Slack host tools\n\ngog and OpenClaw read Gmail, Calendar, and Slack.\nAgent Execution Guard only consumes the local JSON output they produce.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved throughout.\n\n### Local handoff directory\n\nHost agents should place payloads here:\n\n```\n.worldloops/inbox/openclaw-gmail-live.json\n.worldloops/inbox/openclaw-calendar-live.json\n.worldloops/inbox/openclaw-slack-live.json\n.worldloops/inbox/openclaw-github-live.json\n```\n\nThe `.worldloops/inbox/` directory is created automatically on first run and is gitignored by default.\n\nRedacted payload examples are in `examples/handoff/`.\n\n---\n\n## OpenClaw + WorldLoops\n\nOpenClaw is excellent at observing possible signals from user-facing queries such as \"What did I miss?\" or \"What should I do today?\"\n\nWorldLoops starts after observation.\n\nIt takes OpenClaw-observed candidate signals and adjudicates whether they are real open loops, suppressing noise such as promotional messages, FYI-only updates, duplicates, and weak evidence. Accepted signals become stateful open loops that can move through To Do, Doing, Done, Snoozed, or Escalated.\n\n### Run\n\n```bash\nnpm run openclaw:intake -- --input scripts/fixtures/openclaw-signal-intake/mixed-observations.json\n```\n\n### OpenClaw Observation Adapter contract\n\n```\nobservedBy        \"openclaw\"\nobservationIntent new_loop | state_transition | noise | related_context | evidence\nsource            gmail | slack | calendar | github | manual\nsourceId          source-unique identifier for deduplication\ntitle             human-readable signal title\ntext              full signal text\ntimestamp         ISO 8601\nactor             sender / requester (optional)\ndueAt             deadline (optional)\nevidence          source-specific fields (subject, snippet, channel, location…)\nconfidence        0.0–1.0 (optional; < 0.4 → needs_review)\nrelatedContext    null | { existingLoopKey, type, note } | { observationId, type }\n```\n\n### Adjudication verdicts\n\n```\naccepted          → open loop created (todo)\nsuppressed        → receipt saved, no loop\nattached_context  → context noted, no loop\nneeds_review      → flagged, no loop\nstate_transition  → existing loop updated (done | escalated | snoozed)\n```\n\n### Morning Brief — state-management surface\n\nThe intake run produces a morning brief showing loop lifecycle:\n\n```\n- 1 loop still open\n- 1 loop closed by new evidence\n- 1 loop escalated\n- 6 observed signals suppressed as noise\n```\n\n---\n\n## Daily Brief\n\nGet a single compact summary of Gmail, Calendar, and Slack handoff payloads in one command.\n\nOpenClaw/gog/host tools read Gmail, Calendar, and Slack.\nAgent Execution Guard reads only local payload files.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved.\n\n### How it works\n\n1. Host tools (OpenClaw, gog, or Slack plugin) read your Gmail, Calendar, and Slack.\n2. They save the already-read payloads as local JSON files in `.worldloops/inbox/`.\n3. Agent Execution Guard reads those local files and produces one compact Daily Brief.\n\n```\n.worldloops/inbox/openclaw-gmail-live.json      ← Gmail payload\n.worldloops/inbox/openclaw-calendar-live.json   ← Calendar payload\n.worldloops/inbox/openclaw-slack-live.json      ← Slack payload\n```\n\n### Run\n\n```bash\nnpm run guard:daily\nnpm run brief:daily\n```\n\n### Preferences\n\nDefault schedule: **09:00 local time**, default delivery channel: **local**.\n\nView preferences:\n\n```bash\nnpm run brief:preferences\n```\n\nChange delivery time:\n\n```bash\nnpm run brief:preferences:set -- --time 08:30\n```\n\nSet delivery channel:\n\n```bash\nnpm run brief:preferences:set -- --channel local\nnpm run brief:preferences:set -- --channel telegram\nnpm run brief:preferences:set -- --channel slack\nnpm run brief:preferences:set -- --channel discord\nnpm run brief:preferences:set -- --channel sms\nnpm run brief:preferences:set -- --channel email\n```\n\nDaily Brief delivery channels include local, Telegram, Slack, Discord, SMS, and email.\nWhen referring only to chat-style channels: messenger channels such as Telegram, Slack, and Discord.\n\n### Delivery\n\nGenerate and deliver the brief:\n\n```bash\nnpm run brief:deliver\nnpm run brief:deliver -- --dry-run\nnpm run brief:deliver -- --channel telegram\n```\n\nDelivery notes:\n- Channel `local` prints the brief to stdout.\n- Remote channels (Telegram, Slack, Discord, SMS, email) require a host scheduler or integration to be active.\n- If no integration is active, the command exits 0 with a delivery-ready message and the brief text.\n- WorldLoops does not install cron, launchd, or background daemons.\n- A host scheduler (e.g. OpenClaw) may call `npm run brief:deliver` at the configured time.\n\n### Example output — payloads connected\n\n```\n🦞 Agent Execution Guard Daily Brief\n\nSources:\n✅ Gmail\n✅ Calendar\n✅ Slack\n\nOpen loops:\n\n⚠️ Gmail — Review requested\nFrom: Test Reviewer <reviewer@example.com>\nSubject: Please review the submitted document\nWhy: review request detected\nEvidence: \"Please review the submitted document and send updates by EOD.\"\nAction: Review the submitted document or reply if needed\nAdjudication: requires_approval\n\n📅 Calendar — Important context\nEvent: Flight to Seoul (KE 24)\nWhen: May 21, 12:40 PM local time\nLocation: SFO\nReason: travel event detected, no action proposed\n\n💬 Slack — Action requested\nFrom: Dana\nChannel: #product\nWhy: review or approval request detected\nEvidence: \"Can you review this before release?\"\nAction: Review and comment\nAdjudication: requires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, calendar event, Slack message, or external change made.\n\nDaily Brief schedule: 09:00 local time — Delivery channel: local\nTo change: npm run brief:preferences:set -- --time HH:MM\n```\n\n### Example output — Gmail no-action with samples\n\nPromotional emails (airline offers, newsletters, discount campaigns, rewards updates) and messages with \"no action required\" are automatically suppressed and do not generate open loops:\n\n```\n📧 Gmail — No actionable loop detected\nChecked: 2 messages\nSample:\n- From: promotions@airline.example.com / Subject: Earn double miles this weekend — promotion\n- From: noreply@rewards.example.com / Subject: Your rewards balance: 12,450 miles\nReason: promotional or informational message; no reply, approval, review, deadline, or follow-up request detected\n```\n\nFlight and airport calendar events appear as important context without becoming approval-required tasks:\n\n```\n📅 Calendar — Important context\nEvent: Departure to ICN — Korean Air KE 24\nWhen: May 21, 12:40 PM local time\nLocation: SFO Terminal 2, Gate G1\nReason: travel event detected, no action proposed\n```\n\n### Example output — Slack not connected\n\n```\n⬜ Slack — not connected\nReason: no Slack payload found\nNext: configure OpenClaw channels.slack, then save payload to:\n.worldloops/inbox/openclaw-slack-live.json\n```\n\n### Example output — payloads not connected yet\n\n```\n🦞 Agent Execution Guard Daily Brief\n\nNo local handoff payloads found yet.\n\nAdd payloads here:\n- Gmail: .worldloops/inbox/openclaw-gmail-live.json\n- Calendar: .worldloops/inbox/openclaw-calendar-live.json\n- Slack: .worldloops/inbox/openclaw-slack-live.json\n\nThen run:\nnpm run guard:daily\n\nSource systems stay untouched.\nexternalWrite:false\n\nDaily Brief schedule: 09:00 local time — Delivery channel: local\n```\n\n---\n\n## Current commands\n\nFor everyone:\n\n```bash\nnpm run demo\nnpm run guard:demo\nnpm run wow\nnpm run doctor\n```\n\nFor Daily Brief (all sources combined):\n\n```bash\nnpm run guard:daily\nnpm run brief:daily\nnpm run guard:daily -- --details\nnpm run brief:daily -- --inbox scripts/fixtures/inbox\nnpm run brief:daily -- --inbox scripts/fixtures/inbox --details\nnpm run brief:preferences\nnpm run brief:preferences:set -- --time 08:30\nnpm run brief:preferences:set -- --channel telegram\nnpm run brief:deliver\nnpm run brief:deliver -- --dry-run\nnpm run brief:deliver -- --channel telegram\n```\n\nFor governed adapter invocation (already-read OpenClaw payloads):\n\n```bash\nnpm run guard:adapter -- --source gmail --input <payload.json>\nnpm run guard:adapter -- --source gmail --input <payload.json> --compact\nnpm run guard:gmail -- --input <payload.json>\nnpm run guard:calendar -- --input <payload.json>\nnpm run guard:slack -- --input <payload.json>\nnpm run guard:github -- --input <payload.json>\n```\n\nFor compact chat-friendly output:\n\n```bash\nnpm run doctor:mobile\n```\n\nFor developers:\n\n```bash\nnpm run wow:developer\nnpm run loop:list\nnpm run loop:transition -- <loopId> doing \"started local follow-up\"\nnpm run loop:summary\nnpm run loop:review\nnpm run proposal:list\nnpm run proposal:show -- <proposalId>\nnpm run proposal:decide -- <proposalId> approve\nnpm run plan:list\nnpm run contract:list\nnpm run state:check\nnpm run receipts:verify\nnpm run state:repair\nnpm run capability:show\n```\n\nFor adapter developers:\n\n```bash\nnpm run adapter:validate -- examples/adapters/slack-message.json\nnpm run adapter:test -- examples/adapters/slack-message.json\nnpm run brief:reconcile -- --adapter-signal examples/adapters/slack-message.json\n```\n\nAll commands preserve `externalWrite:false` and do not write to Gmail, Calendar, Slack, GitHub, or any external system.\n\n---\n\n## Updating\n\n```\nclawhub update worldloops\n```\n\nForce reinstall:\n\n```\nclawhub install worldloops --force\n```\n\n---\n\n## Agent Runtime Instructions\n\nThe following section is for OpenClaw agents, not end users.\n\n### Daily Brief routing\n\nWhen the user asks for any of the following:\n- Daily Brief\n- morning brief\n- daily summary\n- today's open loops\n- what did I miss\n- open loops today\n- Agent Execution Guard Daily Brief\n- brief me\n\nRun immediately — do not search the workspace first:\n\n```bash\nnpm run --silent guard:daily\n```\n\nReturn only the command output. Do not narrate the command unless the user asks.\nDo not show tool search steps.\nDo not inspect package.json first for Daily Brief requests.\n\nFor fixture-based Daily Brief examples:\n\n```bash\nnpm run --silent brief:daily -- --inbox scripts/fixtures/inbox\n```\n\nFor details mode (source identifiers):\n\n```bash\nnpm run --silent guard:daily -- --details\nnpm run --silent brief:daily -- --inbox scripts/fixtures/inbox --details\n```\n\nFor delivery-ready checks:\n\n```bash\nnpm run --silent brief:deliver -- --channel telegram\n```\n\n### Demo routing\n\nWhen the user asks for a demo, guard demo, execution guard demo, Agent Execution Guard demo, real signal governance demo, WorldLoops guard demo, or open-loop demo, run:\n\n```bash\nnpm run --silent demo\n```\n\nReturn only the compact Agent Execution Guard output.\n\n### Runtime invocation\n\nWhen the user asks you to run this skill, do the following:\n\n1. Change into the skill directory: `{baseDir}`\n2. Run the command with `--silent`\n3. Use provided local payload files when available\n4. If no payload files are provided, use the included fixture files\n5. Return the result directly\n6. Do not modify external systems\n\nSafe default command from the skill directory:\n\n```\nnpm run --silent demo\n```\n\nFor Daily Brief (all local inbox sources combined):\n\n```\nnpm run --silent guard:daily\nnpm run --silent brief:deliver\nnpm run --silent brief:deliver -- --dry-run\nnpm run --silent brief:deliver -- --channel telegram\n```\n\nFor Daily Brief preferences:\n\n```\nnpm run --silent brief:preferences\nnpm run --silent brief:preferences:set -- --time HH:MM\nnpm run --silent brief:preferences:set -- --channel <channel>\n```\n\nFor local payload handoff:\n\n```\nnpm run --silent guard:gmail -- --input <payload.json> --compact\nnpm run --silent guard:calendar -- --input <payload.json> --compact\nnpm run --silent guard:slack -- --input <payload.json> --compact\nnpm run --silent guard:github -- --input <payload.json> --compact\n```\n\n### OpenClaw observation write-back\n\nWhen the user asks any of the following — or anything with the same intent:\n- \"What should I do today?\"\n- \"What did I miss?\"\n- \"Any follow-ups I'm missing?\"\n- daily brief, morning brief, open loops check\n\nPerform your normal high-quality observation: read full message content, search memory for existing open loops, resolve actor identities, extract deadlines from natural language, and prioritize what matters to the user.\n\nAfter surfacing candidates, write them as `ObservedSignal[]` to:\n\n```\n.worldloops/inbox/openclaw-observations.json\n```\n\nThis is a local workspace file write only. No external system is called.\n\n**Do not tell WorldLoops to reinterpret raw Gmail, Calendar, or Slack payloads.** WorldLoops adjudicates the interpreted observations you write here — it does not re-read source inboxes.\n\n**Shape of each item (`ObservedSignal`):**\n\n```json\n{\n  \"id\": \"openclaw-<source>-<sourceId>\",\n  \"source\": \"gmail\" | \"slack\" | \"calendar\" | \"github\" | \"manual\",\n  \"sourceId\": \"<message or event ID from the source>\",\n  \"observedBy\": \"openclaw\",\n  \"userQuery\": \"<the question the user asked>\",\n  \"observationIntent\": \"new_loop\" | \"state_transition\" | \"noise\" | \"related_context\" | \"evidence\",\n  \"title\": \"<your interpreted action title — not a copy of the raw subject line>\",\n  \"text\": \"<one-sentence synthesis of why this matters to the user>\",\n  \"timestamp\": \"<ISO 8601>\",\n  \"actor\": \"<resolved name or email — not a raw Slack user ID>\",\n  \"dueAt\": \"<ISO 8601 deadline extracted from natural language, else omit>\",\n  \"evidence\": {\n    \"<raw field from source>\": \"<value>\"\n  },\n  \"confidence\": 0.0–1.0,\n  \"relatedContext\": null\n}\n```\n\nFor `state_transition` intent, set `relatedContext`:\n\n```json\n\"relatedContext\": {\n  \"existingLoopKey\": \"openclaw-<source>-<sourceId of existing loop>\",\n  \"proposedTransition\": \"done\" | \"escalated\" | \"snoozed\",\n  \"note\": \"<why this closes or escalates the loop>\"\n}\n```\n\n**What you must decide before writing — your interpretation, not shallow heuristics:**\n- `observationIntent`: classify using full message content, your memory of open loops, and conversation context\n- `title`: a human-readable action title synthesized from the full message — not a copy of the subject line\n- `text`: one sentence on why this matters to the user right now\n- `dueAt`: extract from natural language (\"by Friday\" → ISO date of that Friday at 17:00 local)\n- `actor`: resolve Slack user IDs and display names to real identities where known\n- `confidence`: your assessed certainty given full context, not field presence\n- `relatedContext.existingLoopKey`: search memory for existing open loops before marking `state_transition`\n\n**Include noise explicitly.** Promotional email, automated notifications, and informational-only items should be written with `observationIntent: \"noise\"` rather than omitted — WorldLoops records suppression receipts for them.\n\nTo write and validate observations, use the helper command from the skill directory:\n\n```bash\nnpm run observations:write -- --input <path/to/your-observations.json>\n```\n\nThis validates the `ObservedSignal[]` shape, creates `.worldloops/inbox/` if needed, and writes to `.worldloops/inbox/openclaw-observations.json`. It will refuse invalid JSON or missing required fields and exit non-zero on error.\n\nAfter writing, WorldLoops `openclaw:intake` handles all lifecycle management: deduplication, open loop creation, state transitions, suppression receipts.\n\n### Default API\n\nBy default, WorldLoops uses:\n\n```\nhttps://api.worldloops.ai\n```\n\nYou do not need to set `WORLDLOOPS_API_BASE_URL` for the default demo flow.\n\nTo use a different backend, set:\n\n```\nWORLDLOOPS_API_BASE_URL=https://your-worldloops-api.example.com\n```\n\nOptional:\n\n```\nWORLDLOOPS_API_KEY=your_api_key\n```\n\n### Output\n\nDefault output is compact, messenger-friendly Agent Execution Guard output.\nStructured JSON remains available through developer-oriented commands where supported.\n\n### Important rules\n\nDo not invent missing source data.\nDo not send messages.\nDo not send emails.\nDo not create drafts.\nDo not create or update calendar events.\nDo not write to Slack, Gmail, Calendar, GitHub, SMS, or push channels.\nDo not implement background daemons.\nDo not auto-install cron or launchd.\n\nReturn the result directly.\n\nFile v1.13.0:README.md\n\n# 🦞 WorldLoops — Agent Execution Guard\n\nAI agents can answer from a snapshot.\n\nWorldLoops tracks what remains unresolved.\n\nIt turns real work signals into governed open loops — detecting unfinished responsibility, classifying severity, proposing the next transition, adjudicating whether approval is required, recording decisions, and committing local state transitions with receipts.\n\n`externalWrite:false` is preserved throughout.\n\n**WorldLoops is an execution guard for AI agents — not a todo list.**\n\n---\n\n## Architecture\n\nOpenClaw reads signals.\nWorldLoops guards execution.\n\nWorldLoops does not need to own every connector.\nIf a host agent can read a signal, it can pass it to Agent Execution Guard.\n\nOpenClaw observes and interprets source signals (Gmail, Calendar, Slack, GitHub) into `ObservedSignal[]`.\nWorldLoops reads those OpenClaw-authored interpreted observations and adjudicates their lifecycle state — into active open loops, attached context, suppression receipts, and transitions.\nWorldLoops does not connect to Gmail, Calendar, or Slack directly. `externalWrite:false` is preserved throughout.\n\n```\nOpenClaw (reads Gmail, Calendar, Slack, GitHub)\n    ↓\nalready-read payload\n    ↓\nAgent Execution Guard (WorldLoops)\n    ↓\ngoverned open loop → proposal → approval → local transition → receipt\n```\n\n---\n\n## OpenClaw Signal Handoff\n\nOpenClaw reads. Agent Execution Guard governs.\n\nNo connectors added.\nNo OAuth added.\nNo external write.\n\nA host agent (OpenClaw, gog, or any other) places an already-read payload into `.worldloops/inbox/`.\nAgent Execution Guard consumes it locally and produces a governed receipt.\n\n```\n.worldloops/inbox/openclaw-gmail-live.json      ← host agent places this\n    ↓\nnpm run guard:gmail -- --input .worldloops/inbox/openclaw-gmail-live.json --compact\n    ↓\nAgent Execution Guard\n    ↓\ngoverned open loop → proposal → receipt\nexternalWrite:false\n```\n\n### Accepted local payload formats\n\nAgent Execution Guard can consume local payloads in these forms:\n\n- **AdapterSignal JSON** — fully normalized signal with `source`, `sourceType`, `text`, `observedAt`, `externalWrite:false`\n- **OpenClaw-style handoff payloads** — already-normalized payloads from OpenClaw host agents\n- **gog-style Gmail payloads** — `{ \"messages\": [...] }` output from gog Gmail reads\n- **gog-style Calendar payloads** — `{ \"events\": [...] }` output from gog Calendar reads\n- **Slack host/plugin payloads** — `{ \"channel\": \"...\", \"messages\": [...] }` output from Slack host tools\n\ngog and OpenClaw read Gmail, Calendar, and Slack.\nAgent Execution Guard only consumes the local JSON output they produce.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved throughout.\n\nSupported handoff paths:\n\n```\n.worldloops/inbox/openclaw-gmail-live.json\n.worldloops/inbox/openclaw-calendar-live.json\n.worldloops/inbox/openclaw-slack-live.json\n.worldloops/inbox/openclaw-github-live.json\n```\n\nRedacted payload examples: [`examples/handoff/`](./examples/handoff/)\n\n---\n\n## OpenClaw + WorldLoops\n\nOpenClaw is excellent at observing possible signals from user-facing queries such as \"What did I miss?\" or \"What should I do today?\"\n\nWorldLoops starts after observation.\n\nIt takes OpenClaw-observed candidate signals and adjudicates whether they are real open loops, suppressing noise such as promotional messages, FYI-only updates, duplicates, and weak evidence. Accepted signals become stateful open loops that can move through To Do, Doing, Done, Snoozed, or Escalated.\n\n```\nOpenClaw observes candidate signals\n    ↓\nOpenClaw Observation Intake (WorldLoops)\n    ↓\nadjudicate: accepted | suppressed | attached_context | needs_review | state_transition\n    ↓\naccepted → open loop (todo)\nstate_transition → existing loop updated (done | escalated | snoozed)\nsuppressed → receipt saved, no open loop created\n    ↓\nMorning Brief: loop lifecycle summary\nexternalWrite:false\n```\n\n### Run\n\n```bash\nnpm run openclaw:intake -- --input scripts/fixtures/openclaw-signal-intake/mixed-observations.json\n```\n\n### Example output\n\n```\nOpenClaw observed 14 candidate signals.\n\nWorldLoops adjudication:\n- 3 accepted as new open loops\n- 2 state transitions applied\n- 6 suppressed as noise / no-action / promotional\n- 2 attached as related context\n- 1 needs review\n\nOpen loops created:\n- Review MCP deck for LG partnership by Friday\n- Follow up with David Kim on MCP proposal (closed_by_new_evidence)\n- Confirm invoice extension request with Google Collections (escalated_due_to_deadline)\n\nMorning Brief:\n- 1 loop still open\n- 1 loop closed by new evidence\n- 1 loop escalated\n- 6 observed signals suppressed as noise\n\nexternalWrite:false\n```\n\n### Adjudication verdicts\n\n| Verdict | Meaning |\n|---|---|\n| `accepted` | Real open loop — created in `.worldloops/open_loop_states.json` |\n| `suppressed` | Noise — promotional, FYI-only, duplicate, or weak evidence |\n| `attached_context` | Travel event or supporting document — linked as context, no new loop |\n| `needs_review` | Low-confidence signal — flagged for human review |\n| `state_transition` | New evidence updates an existing loop's status |\n\n### OpenClaw Observation format\n\n```json\n{\n  \"id\": \"obs-001\",\n  \"source\": \"gmail\",\n  \"sourceId\": \"gmail-mcp-followup-001\",\n  \"observedBy\": \"openclaw\",\n  \"userQuery\": \"What did I miss?\",\n  \"observationIntent\": \"new_loop\",\n  \"title\": \"Follow up with David Kim on MCP proposal\",\n  \"text\": \"Can you send me the updated specs by Friday?\",\n  \"timestamp\": \"2026-05-22T09:15:00Z\",\n  \"actor\": \"david.kim@example.com\",\n  \"dueAt\": \"2026-05-24T17:00:00Z\",\n  \"evidence\": { \"subject\": \"Re: MCP Proposal\", \"snippet\": \"...\" },\n  \"confidence\": 0.92,\n  \"relatedContext\": null\n}\n```\n\n---\n\n## 📋 Daily Brief\n\nGet one compact Agent Execution Guard summary from all three local handoff sources.\n\nOpenClaw/gog/host tools read Gmail, Calendar, and Slack.\nAgent Execution Guard reads only the local payload files they produce.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved throughout.\n\nNon-English action phrases such as Korean review requests are supported by the detector.\n\n### Expected payload locations\n\n```\n.worldloops/inbox/openclaw-gmail-live.json\n.worldloops/inbox/openclaw-calendar-live.json\n.worldloops/inbox/openclaw-slack-live.json\n```\n\n### Run\n\n```bash\nnpm run guard:daily\nnpm run brief:daily\n```\n\nDefault schedule: **09:00 local time**. Default delivery channel: **local**.\n\n### Example output — payloads connected\n\n```\n🦞 Agent Execution Guard Daily Brief\n\nSources:\n✅ Gmail\n✅ Calendar\n✅ Slack\n\nOpen loops:\n\n⚠️ Gmail — Review requested\nFrom: Test Reviewer <reviewer@example.com>\nSubject: Please review the submitted document\nWhy: review request detected\nEvidence: \"Please review the submitted document and send updates by EOD.\"\nAction: Review the submitted document or reply if needed\nAdjudication: requires_approval\n\n📅 Calendar — Important context\nEvent: Flight to Seoul (KE 24)\nWhen: May 21, 12:40 PM local time\nLocation: SFO\nReason: travel event detected, no action proposed\n\n💬 Slack — Action requested\nFrom: Dana\nChannel: #product\nWhy: review or approval request detected\nEvidence: \"Can you review this before release?\"\nAction: Review and comment\nAdjudication: requires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, calendar event, Slack message, or external change made.\n\nDaily Brief schedule: 09:00 local time — Delivery channel: local\n```\n\n### Example output — Gmail no-action with samples\n\nPromotional emails (airline offers, newsletters, discount campaigns, rewards updates) and messages containing \"no action required\" are automatically suppressed. They appear as no-action with an informational reason:\n\n```\n📧 Gmail — No actionable loop detected\nChecked: 2 messages\nSample:\n- From: promotions@airline.example.com / Subject: Earn double miles this weekend — promotion\n- From: noreply@rewards.example.com / Subject: Your rewards balance: 12,450 miles\nReason: promotional or informational message; no reply, approval, review, deadline, or follow-up request detected\n```\n\nFlight, airport, and travel calendar events appear as important context without requiring approval:\n\n```\n📅 Calendar — Important context\nEvent: Departure to ICN — Korean Air KE 24\nWhen: May 21, 12:40 PM local time\nLocation: SFO Terminal 2, Gate G1\nReason: travel event detected, no action proposed\n```\n\n### Example output — Slack not connected\n\n```\n⬜ Slack — not connected\nReason: no Slack payload found\nNext: configure OpenClaw channels.slack, then save payload to:\n.worldloops/inbox/openclaw-slack-live.json\n```\n\n### Example output — payloads not connected yet\n\n```\n🦞 Agent Execution Guard Daily Brief\n\nNo local handoff payloads found yet.\n\nAdd payloads here:\n- Gmail: .worldloops/inbox/openclaw-gmail-live.json\n- Calendar: .worldloops/inbox/openclaw-calendar-live.json\n- Slack: .worldloops/inbox/openclaw-slack-live.json\n\nThen run:\nnpm run guard:daily\n\nSource systems stay untouched.\nexternalWrite:false\n\nDaily Brief schedule: 09:00 local time — Delivery channel: local\n```\n\n### Preferences\n\n```bash\nnpm run brief:preferences\nnpm run brief:preferences:set -- --time 08:30\nnpm run brief:preferences:set -- --channel telegram\nnpm run brief:preferences:set -- --channel local\n```\n\nDaily Brief delivery channels include local, Telegram, Slack, Discord, SMS, and email.\n\n### Delivery\n\n```bash\nnpm run brief:deliver\nnpm run brief:deliver -- --dry-run\nnpm run brief:deliver -- --channel telegram\n```\n\nActual delivery to remote channels (Telegram, Slack, Discord, SMS, email) requires a host scheduler or integration.\nWorldLoops does not install cron, launchd, or background daemons.\nA host scheduler (e.g. OpenClaw) may call `npm run brief:deliver` at the configured time.\n\nIf no integration is active, the command exits 0 with a delivery-ready message.\n\nIf payload files are missing, the brief shows short onboarding instructions with expected file paths.\n\n---\n\n## 🚀 Quick Start\n\n```bash\nclawhub install worldloops\ncd ~/.openclaw/workspace/skills/worldloops\nnpm run demo\n```\n\n### Optional Safety Check\n\n```bash\nnpm run doctor\n```\n\nExpected result:\n\n```\n🦞 Agent Execution Guard\n\n🚨 High — Gmail callback requested\nState: open\n\nProposal:\nReview claim context and decide whether to call back or prepare a written response. This is a local planning action only — do not initiate any call, email, or external communication without an explicit decision.\n\nAdjudication:\nrequires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, call, or external change made.\n```\n\nFor the broader open-loop showcase:\n\n```bash\nnpm run wow\n```\n\n---\n\n## 🧭 What WorldLoops does\n\nWorldLoops does not just list tasks.\n\nIt turns real work signals into governed open loops:\n\n- detects unfinished responsibility\n- classifies severity\n- proposes the next transition\n- adjudicates whether approval is required\n- records user decisions\n- commits local state transitions\n- creates receipts\n- preserves `externalWrite:false`\n\n---\n\n## 🔁 From signal to governed transition\n\n```\nSignal\n  → Open Loop\n    → Severity\n      → Proposal\n        → Adjudication\n          → User Approval\n            → Local Transition\n              → Receipt\n                → externalWrite:false\n```\n\n**Example real signal:**\n\nA Gmail message says:\n> \"Please give me a call back. It is important that we discuss your injuries and this incident. Claim No. 26-99-554236.\"\n\n**WorldLoops produces:**\n\n```\n🚨 High — Claim contact request\nState: needs_response\nProposal: prepare callback or written response plan\nAdjudication: requires_approval\nBoundary: local_proposal_only\nSafety: externalWrite:false\n```\n\nMessenger-friendly output for Telegram, Slack, Discord, WhatsApp, SMS, and mobile chat:\n\n```bash\nnpm run brief:messenger -- --adapter-signal examples/adapters/gmail-claim-contact-request.example.json\n```\n\n**After user approval:**\n\n```\nDecision receipt created.\nLoop transitioned locally.\nNo email sent.\nNo call made.\nNo external system changed.\n```\n\nThis is the key product difference.\n\nNormal assistants summarize what they see.\nWorldLoops tracks what remains unresolved, governs what should happen next, and records every safe transition.\n\n---\n\n## 🚨 Severity-aware open loops\n\nWorldLoops classifies detected open loops by severity:\n\n- **Critical / High** → escalated immediately, requires approval\n- **Medium** → surfaced for review, proposal generated\n- **Low** → tracked but not escalated\n\nHigh-severity loops (like a legal claim follow-up) trigger proposals with `adjudication: requires_approval`.\n\n---\n\n## 🧑‍⚖️ Proposals, adjudication, and approval\n\nWhen an open loop requires action, WorldLoops creates a proposal:\n\n- what action is proposed\n- why it is required\n- what checks should be performed first\n- whether approval is required (`requiredReview: true`)\n- what boundary applies (`local_proposal_only`, `read_only`, etc.)\n\nNo proposal executes automatically.\nHuman approval is required before any local transition is committed.\n\n---\n\n## 🧾 Receipts and audit trail\n\nEvery approved decision creates a receipt:\n\n- transition receipt (records the loop state change)\n- proposal decision receipt (records the approval or rejection)\n\nReceipts are verifiable with:\n\n```bash\nnpm run receipts:verify\nnpm run state:check\n```\n\n---\n\n## 🛡 Safety boundary\n\nWorldLoops does not send emails.\nWorldLoops does not post chat messages.\nWorldLoops does not create calendar events.\nWorldLoops does not modify project tools.\nWorldLoops does not silently change external systems.\n\nBy default:\n\n```\nexternalWrite:false\n```\n\nProposal is not execution.\nApproval is not external write.\nPlan is not execution.\nContract is not external write.\n\n---\n\n## 🧰 Useful commands\n\nDefault demo (Agent Execution Guard compact):\n\n```bash\nnpm run demo\nnpm run guard:demo\n```\n\nDaily Brief (all local inbox sources):\n\n```bash\nnpm run guard:daily\nnpm run brief:daily\nnpm run brief:preferences\nnpm run brief:preferences:set -- --time 08:30\nnpm run brief:preferences:set -- --channel telegram\nnpm run brief:deliver\nnpm run brief:deliver -- --dry-run\nnpm run brief:deliver -- --channel telegram\n```\n\nBroader open-loop showcase:\n\n```bash\nnpm run wow\n```\n\nDoctor and state:\n\n```bash\nnpm run doctor\nnpm run doctor:mobile\nnpm run state:check\nnpm run receipts:verify\n```\n\nDeveloper tools:\n\n```bash\nnpm run wow:developer\nnpm run loop:list\nnpm run proposal:list\n```\n\nMessenger-friendly adapter output:\n\n```bash\nnpm run brief:messenger -- --adapter-signal examples/adapters/gmail-claim-contact-request.example.json\n```\n\nFor governed adapter invocation (already-read OpenClaw payloads):\n\n```bash\nnpm run guard:adapter -- --source gmail --input examples/adapters/openclaw-gmail-claim.json\nnpm run guard:adapter -- --source gmail --input examples/adapters/openclaw-gmail-claim.json --compact\nnpm run guard:gmail -- --input examples/adapters/openclaw-gmail-claim.json\nnpm run guard:calendar -- --input examples/adapters/openclaw-calendar-prep.json\nnpm run guard:slack -- --input examples/adapters/openclaw-slack-review-request.json\nnpm run guard:github -- --input examples/adapters/openclaw-github-pr-review.json\n```\n\nFor adapter developers:\n\n```bash\nnpm run adapter:validate -- examples/adapters/slack-message.json\nnpm run adapter:test -- examples/adapters/slack-message.json\nnpm run brief:reconcile -- --adapter-signal examples/adapters/gmail-claim-contact-request.example.json\n```\n\n---\n\n## 🧑‍💻 For developers\n\nWorldLoops is a local, safe-by-default world state layer for agent execution.\n\nSignals become loops.\nLoops become proposals.\nProposals become decisions.\nDecisions become plans.\nPlans become contracts.\nExecution remains governed.\n\n---\n\n## 📚 Advanced docs\n\n- Adapter guide: [ADAPTER_GUIDE.md](./ADAPTER_GUIDE.md)\n- Community adapter guide: [CONTRIBUTING.md](./CONTRIBUTING.md)\n- Release history: GitHub Releases\n- Changelog: [CHANGELOG.md](./CHANGELOG.md)\n\n---\n\n## 🚫 What WorldLoops is not\n\nWorldLoops is not:\n\n- a chatbot\n- a todo app\n- a Zapier clone\n- an uncontrolled automation runner\n- a tool that lets agents freely write to external systems\n- a replacement for human judgment\n\nWorldLoops keeps humans in control without making them the bottleneck.\n\n---\n\n## 📱 Telegram demo wrapper\n\n`src/scripts/telegramTestBot.ts` is a local demo wrapper for testing WorldLoops adjudication over Telegram. It consumes local OpenClaw-observed JSON payloads and does **not** connect to Gmail, Slack, Calendar, GitHub, or any external API.\n\nOpenClaw observes. WorldLoops adjudicates. This wrapper bridges the two for live demo.\n\n### Input priority\n\nWhen `/brief` is sent, the bot selects its input in this order:\n\n1. `.worldloops/inbox/openclaw-observations.json` — mode: `inbox-openclaw-observations`\n2. `.worldloops/inbox/telegram-observations.json` — mode: `inbox-telegram-observations`\n3. `scripts/fixtures/openclaw-signal-intake/mixed-observations.json` — mode: `demo-fixture`\n\n### Setup\n\nIf you have an OpenClaw gateway bot using the same Telegram token, stop it first to avoid a polling conflict (409).\n\n```sh\n# Seed the demo inbox with the mixed-observations fixture\nnpm run telegram:seed-demo\n\n# Start the bot\nnpm run telegram:test\n```\n\n### Commands\n\n| Command | Description |\n|---------|-------------|\n| `/help` | List all commands and natural language examples |\n| `/status` | Bot version and status |\n| `/source` | Which input file would be used and whether it exists |\n| `/brief` | Run WorldLoops adjudication and show open loops |\n| `/worldloops` | Same as `/brief` |\n\nNatural language also triggers `/brief`:\n\n- `\"오늘 내가 할 일이 뭐야?\"`\n- `\"뭐 빠진 거 없어?\"`\n- `\"어제 열린 루프 중 닫힌 거 있어?\"`\n\n### Sample payload\n\n`scripts/fixtures/openclaw-signal-intake/demo-observations.json` is a small 3-signal sample showing one actionable loop, one follow-up, and one suppressed promotional email.\n\n---\n\n## 🔗 Links\n\n- Website: https://worldloops.ai\n- API: https://api.worldloops.ai\n- ClawHub: worldloops\n\n---\n\nGive agents a world, not just tools.\n\nClose the loop.\nKeep the world safe.\n\nFile v1.13.0:_meta.json\n\n{\n  \"ownerId\": \"kn75v4md26j4p9yzt5kh46a5ws86xec5\",\n  \"slug\": \"worldloops\",\n  \"version\": \"1.13.0\",\n  \"publishedAt\": 1779487590194\n}\n\nFile v1.13.0:scripts/fixtures/gog-calendar-events.json\n\n{\n  \"events\": [\n    {\n      \"id\": \"cal-event-001\",\n      \"summary\": \"LG pricing strategy review\",\n      \"description\": \"No agenda attached yet. Prepare pricing assumptions and promotion scenarios before the meeting.\",\n      \"start\": \"2026-05-18T17:00:00.000Z\",\n      \"end\": \"2026-05-18T18:00:00.000Z\",\n      \"location\": \"Zoom\",\n      \"htmlLink\": \"https://calendar.google.com/calendar/event?eid=example\"\n    },\n    {\n      \"id\": \"cal-event-002\",\n      \"summary\": \"Customer workshop follow-up\",\n      \"description\": \"Send recap and next-step proposal after the workshop.\",\n      \"start\": \"2026-05-19T19:00:00.000Z\",\n      \"end\": \"2026-05-19T20:00:00.000Z\"\n    }\n  ],\n  \"count\": 2\n}\n\nFile v1.13.0:scripts/fixtures/gog-gmail-messages.json\n\n{\n  \"messages\": [\n    {\n      \"id\": \"gmail-msg-001\",\n      \"threadId\": \"thread-001\",\n      \"subject\": \"Follow-up on the LG proposal\",\n      \"from\": \"Sarah Chen <sarah@example.com>\",\n      \"snippet\": \"Just checking if you had a chance to review the proposal and send next steps.\",\n      \"date\": \"2026-05-16T10:30:00.000Z\",\n      \"labelIds\": [\"INBOX\", \"IMPORTANT\"]\n    },\n    {\n      \"id\": \"gmail-msg-002\",\n      \"threadId\": \"thread-002\",\n      \"subject\": \"Deck prep before tomorrow\",\n      \"from\": \"David Kim <david@example.com>\",\n      \"snippet\": \"Can you prepare the pricing deck before tomorrow's meeting?\",\n      \"date\": \"2026-05-16T11:30:00.000Z\",\n      \"labelIds\": [\"INBOX\"]\n    }\n  ],\n  \"count\": 2\n}\n\nFile v1.13.0:scripts/fixtures/gog-gmail-re-thread.json\n\n{\n  \"messages\": [\n    {\n      \"id\": \"gmail-msg-re-001\",\n      \"threadId\": \"thread-re-001\",\n      \"subject\": \"Re: [패스트캠퍼스] 스노우 / 클로드 기반 AI Agent 과정 출강 요청드립니다\",\n      \"from\": \"recruitment@fastcampus.co.kr\",\n      \"snippet\": \"안녕하세요. 지난번에 보내드린 출강 요청 건에 대해 답변 부탁드립니다.\",\n      \"date\": \"2026-05-17T09:15:00.000Z\"\n    },\n    {\n      \"id\": \"gmail-msg-re-002\",\n      \"threadId\": \"thread-re-002\",\n      \"subject\": \"Re: Following up on the proposal review\",\n      \"from\": \"partner@external.com\",\n      \"snippet\": \"Could you please send the updated deck when you have a chance?\",\n      \"date\": \"2026-05-17T10:00:00.000Z\"\n    },\n    {\n      \"id\": \"gmail-msg-re-003\",\n      \"threadId\": \"thread-re-003\",\n      \"subject\": \"Re: Team offsite logistics\",\n      \"from\": \"alice@internal.com\",\n      \"snippet\": \"Just wanted to loop you in on the schedule change.\",\n      \"date\": \"2026-05-17T11:00:00.000Z\"\n    }\n  ],\n  \"count\": 3\n}\n\nFile v1.13.0:scripts/fixtures/inbox-airline-promo-gmail/openclaw-calendar-live.json\n\n{\n  \"events\": [\n    {\n      \"id\": \"daily-brief-test-cal-airline-promo-001\",\n      \"summary\": \"Team sync\",\n      \"description\": \"Weekly team check-in.\",\n      \"start\": \"2026-05-21T16:00:00.000Z\",\n      \"end\": \"2026-05-21T16:30:00.000Z\",\n      \"location\": \"Conference room A\"\n    }\n  ],\n  \"count\": 1\n}\n\nFile v1.13.0:scripts/fixtures/inbox-airline-promo-gmail/openclaw-gmail-live.json\n\n{\n  \"messages\": [\n    {\n      \"id\": \"daily-brief-test-airline-promo-001\",\n      \"threadId\": \"daily-brief-test-thread-airline-promo-001\",\n      \"subject\": \"Earn double miles this weekend — Tap Air promotion\",\n      \"from\": \"promotions@tapair.example.com\",\n      \"snippet\": \"Earn double miles on all flights this weekend. Limited time offer. Book now. Manage preferences | Unsubscribe\",\n      \"date\": \"2026-05-21T07:00:00.000Z\",\n      \"labelIds\": [\"INBOX\", \"CATEGORY_PROMOTIONS\"]\n    },\n    {\n      \"id\": \"daily-brief-test-airline-promo-002\",\n      \"threadId\": \"daily-brief-test-thread-airline-promo-002\",\n      \"subject\": \"Your rewards balance: 12,450 miles\",\n      \"from\": \"noreply@rewards.example.com\",\n      \"snippet\": \"Your current miles balance is 12,450. Earn bonus miles when you book before May 31.\",\n      \"date\": \"2026-05-21T06:30:00.000Z\",\n      \"labelIds\": [\"INBOX\", \"CATEGORY_PROMOTIONS\"]\n    }\n  ],\n  \"count\": 2\n}\n\nFile v1.13.0:scripts/fixtures/inbox-airline-promo-gmail/openclaw-slack-live.json\n\n{\n  \"channel\": \"#general\",\n  \"channel_id\": \"C01PROMO01\",\n  \"messages\": [\n    {\n      \"user\": \"team_member\",\n      \"text\": \"Reminder: team lunch tomorrow at noon.\",\n      \"ts\": \"1716286800.000000\"\n    }\n  ],\n  \"count\": 1\n}\n\nFile v1.13.0:scripts/fixtures/inbox-calendar-airport-event/openclaw-calendar-live.json\n\n{\n  \"events\": [\n    {\n      \"id\": \"daily-brief-test-cal-airport-001\",\n      \"summary\": \"Departure to ICN — Korean Air KE 24\",\n      \"description\": \"Check in at Terminal 2. Boarding at 11:00. Seat 12A.\",\n      \"start\": \"2026-05-21T12:40:00.000Z\",\n      \"end\": \"2026-05-22T18:00:00.000Z\",\n      \"location\": \"SFO Terminal 2, Gate G1\"\n    }\n  ],\n  \"count\": 1\n}\n\nFile v1.13.0:scripts/fixtures/inbox-calendar-airport-event/openclaw-gmail-live.json\n\n{\n  \"messages\": [\n    {\n      \"id\": \"daily-brief-test-airport-gmail-001\",\n      \"threadId\": \"daily-brief-test-thread-airport-gmail-001\",\n      \"subject\": \"Safe travels — FYI\",\n      \"from\": \"Colleague <colleague@example.com>\",\n      \"snippet\": \"Just a heads-up that you're traveling tomorrow. No action needed on your end.\",\n      \"date\": \"2026-05-21T08:00:00.000Z\",\n      \"labelIds\": [\"INBOX\"]\n    }\n  ],\n  \"count\": 1\n}\n\nFile v1.13.0:scripts/fixtures/inbox-calendar-airport-event/openclaw-slack-live.json\n\n{\n  \"channel\": \"#travel\",\n  \"channel_id\": \"C01TRAVEL1\",\n  \"messages\": [\n    {\n      \"user\": \"team_member\",\n      \"text\": \"Safe travels everyone!\",\n      \"ts\": \"1716286800.000000\"\n    }\n  ],\n  \"count\": 1\n}\n\nArchive v1.12.0: 391 files, 404978 bytes\n\nFiles: ADAPTER_GUIDE.md (16817b), CHANGELOG.md (41686b), CONTRIBUTING.md (4966b), dist/adapter/runAdapterTest.d.ts (471b), dist/adapter/runAdapterTest.js (6702b), dist/adapter/toWorldLoopsSignal.d.ts (177b), dist/adapter/toWorldLoopsSignal.js (611b), dist/adapter/validateAdapterSignal.d.ts (171b), dist/adapter/validateAdapterSignal.js (2481b), dist/adapters/gogCalendar.d.ts (328b), dist/adapters/gogCalendar.js (4181b), dist/adapters/gogGmail.d.ts (315b), dist/adapters/gogGmail.js (3885b), dist/adapters/gogSnapshot.d.ts (546b), dist/adapters/gogSnapshot.js (4676b), dist/adapters/openclawCalendar.d.ts (292b), dist/adapters/openclawCalendar.js (2588b), dist/adapters/openclawCommitments.d.ts (307b), dist/adapters/openclawCommitments.js (1837b), dist/adapters/openclawGmail.d.ts (339b), dist/adapters/openclawGmail.js (2527b), dist/adapters/openclawMessages.d.ts (476b), dist/adapters/openclawMessages.js (2663b), dist/adapters/slackPayload.d.ts (526b), dist/adapters/slackPayload.js (5395b), dist/adapters/threadHints.d.ts (470b), dist/adapters/threadHints.js (1554b), dist/brief.d.ts (230b), dist/brief.js (1385b), dist/dailyBriefRunner.d.ts (2128b), dist/dailyBriefRunner.js (24423b), dist/data/proposalTemplates.d.ts (128b), dist/data/proposalTemplates.js (5697b), dist/notifications/prefs.d.ts (870b), dist/notifications/prefs.js (4876b), dist/notifications/state.d.ts (222b), dist/notifications/state.js (2351b), dist/openclawIntake.d.ts (2621b), dist/openclawIntake.js (14569b), dist/output/messengerFormat.d.ts (520b), dist/output/messengerFormat.js (4000b), dist/policy/capabilityBoundary.d.ts (140b), dist/policy/capabilityBoundary.js (2530b), dist/policy/severityPolicy.d.ts (215b), dist/policy/severityPolicy.js (1552b), dist/policy/stuckLoopPolicy.d.ts (369b), dist/policy/stuckLoopPolicy.js (2998b), dist/scripts/adapterTest.d.ts (11b), dist/scripts/adapterTest.js (2326b), dist/scripts/adapterValidate.d.ts (11b), dist/scripts/adapterValidate.js (3116b), dist/scripts/briefDaily.d.ts (11b), dist/scripts/briefDaily.js (5358b), dist/scripts/briefDeliver.d.ts (11b), dist/scripts/briefDeliver.js (3086b), dist/scripts/briefMessenger.d.ts (11b), dist/scripts/briefMessenger.js (368b), dist/scripts/briefPreferences.d.ts (11b), dist/scripts/briefPreferences.js (1778b), dist/scripts/briefPreferencesSet.d.ts (11b), dist/scripts/briefPreferencesSet.js (2861b), dist/scripts/briefReconcile.d.ts (11b), dist/scripts/briefReconcile.js (10703b), dist/scripts/capabilityShow.d.ts (11b), dist/scripts/capabilityShow.js (443b), dist/scripts/contractCreate.d.ts (11b), dist/scripts/contractCreate.js (8874b), dist/scripts/contractList.d.ts (11b), dist/scripts/contractList.js (2532b), dist/scripts/contractReview.d.ts (11b), dist/scripts/contractReview.js (2989b), dist/scripts/contractShow.d.ts (11b), dist/scripts/contractShow.js (4054b), dist/scripts/demoWow.d.ts (31b), dist/scripts/demoWow.js (4080b), dist/scripts/demoWowMobile.d.ts (11b), dist/scripts/demoWowMobile.js (1055b), dist/scripts/discoveryRun.d.ts (11b), dist/scripts/discoveryRun.js (5903b), dist/scripts/doctor.d.ts (11b)\n\nFile v1.12.0:SKILL.md\n\n---\nname: worldloops\ndescription: Agent Execution Guard by WorldLoops — a safe-by-default responsibility layer for AI agents that turns scattered work signals into governed open loops while preserving externalWrite:false.\nversion: \"1.12.0\"\nhomepage: https://github.com/swit001/worldloops\nmetadata: {\"openclaw\":{\"requires\":{\"bins\":[\"node\",\"npm\"]},\"envVars\":[{\"name\":\"WORLDLOOPS_API_BASE_URL\",\"required\":false,\"description\":\"Optional WorldLoops API base URL override. Defaults to https://api.worldloops.ai.\"},{\"name\":\"WORLDLOOPS_API_KEY\",\"required\":false,\"description\":\"Optional bearer token for hosted WorldLoops API.\"}],\"emoji\":\"🌐\",\"homepage\":\"https://github.com/swit001/worldloops\",\"skillKey\":\"worldloops\",\"tags\":[\"openclaw\",\"clawhub\",\"agentic-ai\",\"world-model\",\"executable-world\",\"open-loops\",\"open-loop-management\",\"workflow\",\"human-in-the-loop\",\"safe-by-default\",\"auditable-runtime\",\"stateful-loop-management\",\"agent-execution-guard\",\"execution-governance\",\"execution-contracts\",\"proposal-engine\",\"workflow-governance\"]}}\n---\n\n# Agent Execution Guard\n\nAgent Execution Guard is a WorldLoops skill for OpenClaw.\n\nIt turns signals from tools, messages, and workflows into governed open loops:\n\nSignal → Open Loop → Proposal → Approval → Local Transition → Receipt\n\nIt helps agents avoid unsafe or premature execution by keeping action proposals inside a safe, auditable boundary.\n\n---\n\n## Why it matters\n\nMost agents answer from a snapshot.\nWorldLoops tracks what remains unresolved.\n\nWhen an email, calendar event, Slack message, or GitHub notification implies unfinished responsibility, Agent Execution Guard surfaces it as a governed open loop — not a silent side effect.\n\nEvery proposed action requires approval before any local transition is committed.\nNo external system is changed.\n`externalWrite:false` is preserved throughout.\n\n---\n\n## Quick Start\n\n```bash\nclawhub install worldloops\ncd ~/.openclaw/workspace/skills/worldloops\nnpm run demo\n```\n\n### Optional Safety Check\n\n```bash\nnpm run doctor\n```\n\n---\n\n## Example demo output\n\n```bash\nnpm run demo\n```\n\n```\n🦞 Agent Execution Guard\n\n🚨 High — Gmail callback requested\nState: open\n\nProposal:\nReview claim context and decide whether to call back or prepare a written response. This is a local planning action only — do not initiate any call, email, or external communication without an explicit decision.\n\nAdjudication:\nrequires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, call, or external change made.\n```\n\n---\n\n## Safety posture\n\nAgent Execution Guard does not send emails.\nAgent Execution Guard does not post chat messages.\nAgent Execution Guard does not create calendar events.\nAgent Execution Guard does not modify external systems.\n\n```\n✅ 0 emails sent\n✅ 0 calendar events changed\n✅ 0 chat messages posted\n✅ 0 files modified\n✅ 0 project changes made\n✅ externalWrite:false enforced\n```\n\nOpenClaw reads signals.\nWorldLoops guards execution.\n\nWorldLoops does not need to own every connector.\nIf a host agent can read a signal, it can pass it to Agent Execution Guard.\n\nOpenClaw observes and interprets source signals (Gmail, Calendar, Slack, GitHub) into `ObservedSignal[]`.\nWorldLoops reads those OpenClaw-authored interpreted observations and adjudicates their lifecycle state — into active open loops, attached context, suppression receipts, and transitions.\nWorldLoops does not connect to Gmail, Calendar, or Slack directly. `externalWrite:false` is preserved throughout.\n\n---\n\n## OpenClaw Signal Handoff\n\nOpenClaw reads. Agent Execution Guard governs.\n\nNo connectors added.\nNo OAuth added.\nNo external write.\n\nA host agent (OpenClaw, gog, or any other) reads signals from Gmail, Calendar, Slack, or GitHub.\nIt places the already-read payload as a local JSON file.\nAgent Execution Guard receives that payload, normalizes it into an `AdapterSignal`, and produces a governed receipt.\n\n```\nOpenClaw / gog reads Gmail / Calendar / Slack / GitHub\n    ↓\nalready-read payload → .worldloops/inbox/openclaw-gmail-live.json\n    ↓\nnpm run guard:gmail -- --input .worldloops/inbox/openclaw-gmail-live.json --compact\n    ↓\nAgent Execution Guard\n    ↓\ngoverned open loop → proposal → receipt\nexternalWrite:false\n```\n\n### Accepted local payload formats\n\nAgent Execution Guard can consume local payloads in these forms:\n\n- **AdapterSignal JSON** — fully normalized signal with `source`, `sourceType`, `text`, `observedAt`, `externalWrite:false`\n- **OpenClaw-style handoff payloads** — already-normalized payloads from OpenClaw host agents\n- **gog-style Gmail payloads** — `{ \"messages\": [...] }` output from gog Gmail reads\n- **gog-style Calendar payloads** — `{ \"events\": [...] }` output from gog Calendar reads\n- **Slack host/plugin payloads** — `{ \"channel\": \"...\", \"messages\": [...] }` output from Slack host tools\n\ngog and OpenClaw read Gmail, Calendar, and Slack.\nAgent Execution Guard only consumes the local JSON output they produce.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved throughout.\n\n### Local handoff directory\n\nHost agents should place payloads here:\n\n```\n.worldloops/inbox/openclaw-gmail-live.json\n.worldloops/inbox/openclaw-calendar-live.json\n.worldloops/inbox/openclaw-slack-live.json\n.worldloops/inbox/openclaw-github-live.json\n```\n\nThe `.worldloops/inbox/` directory is created automatically on first run and is gitignored by default.\n\nRedacted payload examples are in `examples/handoff/`.\n\n---\n\n## OpenClaw + WorldLoops\n\nOpenClaw is excellent at observing possible signals from user-facing queries such as \"What did I miss?\" or \"What should I do today?\"\n\nWorldLoops starts after observation.\n\nIt takes OpenClaw-observed candidate signals and adjudicates whether they are real open loops, suppressing noise such as promotional messages, FYI-only updates, duplicates, and weak evidence. Accepted signals become stateful open loops that can move through To Do, Doing, Done, Snoozed, or Escalated.\n\n### Run\n\n```bash\nnpm run openclaw:intake -- --input scripts/fixtures/openclaw-signal-intake/mixed-observations.json\n```\n\n### OpenClaw Observation Adapter contract\n\n```\nobservedBy        \"openclaw\"\nobservationIntent new_loop | state_transition | noise | related_context | evidence\nsource            gmail | slack | calendar | github | manual\nsourceId          source-unique identifier for deduplication\ntitle             human-readable signal title\ntext              full signal text\ntimestamp         ISO 8601\nactor             sender / requester (optional)\ndueAt             deadline (optional)\nevidence          source-specific fields (subject, snippet, channel, location…)\nconfidence        0.0–1.0 (optional; < 0.4 → needs_review)\nrelatedContext    null | { existingLoopKey, type, note } | { observationId, type }\n```\n\n### Adjudication verdicts\n\n```\naccepted          → open loop created (todo)\nsuppressed        → receipt saved, no loop\nattached_context  → context noted, no loop\nneeds_review      → flagged, no loop\nstate_transition  → existing loop updated (done | escalated | snoozed)\n```\n\n### Morning Brief — state-management surface\n\nThe intake run produces a morning brief showing loop lifecycle:\n\n```\n- 1 loop still open\n- 1 loop closed by new evidence\n- 1 loop escalated\n- 6 observed signals suppressed as noise\n```\n\n---\n\n## Daily Brief\n\nGet a single compact summary of Gmail, Calendar, and Slack handoff payloads in one command.\n\nOpenClaw/gog/host tools read Gmail, Calendar, and Slack.\nAgent Execution Guard reads only local payload files.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved.\n\n### How it works\n\n1. Host tools (OpenClaw, gog, or Slack plugin) read your Gmail, Calendar, and Slack.\n2. They save the already-read payloads as local JSON files in `.worldloops/inbox/`.\n3. Agent Execution Guard reads those local files and produces one compact Daily Brief.\n\n```\n.worldloops/inbox/openclaw-gmail-live.json      ← Gmail payload\n.worldloops/inbox/openclaw-calendar-live.json   ← Calendar payload\n.worldloops/inbox/openclaw-slack-live.json      ← Slack payload\n```\n\n### Run\n\n```bash\nnpm run guard:daily\nnpm run brief:daily\n```\n\n### Preferences\n\nDefault schedule: **09:00 local time**, default delivery channel: **local**.\n\nView preferences:\n\n```bash\nnpm run brief:preferences\n```\n\nChange delivery time:\n\n```bash\nnpm run brief:preferences:set -- --time 08:30\n```\n\nSet delivery channel:\n\n```bash\nnpm run brief:preferences:set -- --channel local\nnpm run brief:preferences:set -- --channel telegram\nnpm run brief:preferences:set -- --channel slack\nnpm run brief:preferences:set -- --channel discord\nnpm run brief:preferences:set -- --channel sms\nnpm run brief:preferences:set -- --channel email\n```\n\nDaily Brief delivery channels include local, Telegram, Slack, Discord, SMS, and email.\nWhen referring only to chat-style channels: messenger channels such as Telegram, Slack, and Discord.\n\n### Delivery\n\nGenerate and deliver the brief:\n\n```bash\nnpm run brief:deliver\nnpm run brief:deliver -- --dry-run\nnpm run brief:deliver -- --channel telegram\n```\n\nDelivery notes:\n- Channel `local` prints the brief to stdout.\n- Remote channels (Telegram, Slack, Discord, SMS, email) require a host scheduler or integration to be active.\n- If no integration is active, the command exits 0 with a delivery-ready message and the brief text.\n- WorldLoops does not install cron, launchd, or background daemons.\n- A host scheduler (e.g. OpenClaw) may call `npm run brief:deliver` at the configured time.\n\n### Example output — payloads connected\n\n```\n🦞 Agent Execution Guard Daily Brief\n\nSources:\n✅ Gmail\n✅ Calendar\n✅ Slack\n\nOpen loops:\n\n⚠️ Gmail — Review requested\nFrom: Test Reviewer <reviewer@example.com>\nSubject: Please review the submitted document\nWhy: review request detected\nEvidence: \"Please review the submitted document and send updates by EOD.\"\nAction: Review the submitted document or reply if needed\nAdjudication: requires_approval\n\n📅 Calendar — Important context\nEvent: Flight to Seoul (KE 24)\nWhen: May 21, 12:40 PM local time\nLocation: SFO\nReason: travel event detected, no action proposed\n\n💬 Slack — Action requested\nFrom: Dana\nChannel: #product\nWhy: review or approval request detected\nEvidence: \"Can you review this before release?\"\nAction: Review and comment\nAdjudication: requires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, calendar event, Slack message, or external change made.\n\nDaily Brief schedule: 09:00 local time — Delivery channel: local\nTo change: npm run brief:preferences:set -- --time HH:MM\n```\n\n### Example output — Gmail no-action with samples\n\nPromotional emails (airline offers, newsletters, discount campaigns, rewards updates) and messages with \"no action required\" are automatically suppressed and do not generate open loops:\n\n```\n📧 Gmail — No actionable loop detected\nChecked: 2 messages\nSample:\n- From: promotions@airline.example.com / Subject: Earn double miles this weekend — promotion\n- From: noreply@rewards.example.com / Subject: Your rewards balance: 12,450 miles\nReason: promotional or informational message; no reply, approval, review, deadline, or follow-up request detected\n```\n\nFlight and airport calendar events appear as important context without becoming approval-required tasks:\n\n```\n📅 Calendar — Important context\nEvent: Departure to ICN — Korean Air KE 24\nWhen: May 21, 12:40 PM local time\nLocation: SFO Terminal 2, Gate G1\nReason: travel event detected, no action proposed\n```\n\n### Example output — Slack not connected\n\n```\n⬜ Slack — not connected\nReason: no Slack payload found\nNext: configure OpenClaw channels.slack, then save payload to:\n.worldloops/inbox/openclaw-slack-live.json\n```\n\n### Example output — payloads not connected yet\n\n```\n🦞 Agent Execution Guard Daily Brief\n\nNo local handoff payloads found yet.\n\nAdd payloads here:\n- Gmail: .worldloops/inbox/openclaw-gmail-live.json\n- Calendar: .worldloops/inbox/openclaw-calendar-live.json\n- Slack: .worldloops/inbox/openclaw-slack-live.json\n\nThen run:\nnpm run guard:daily\n\nSource systems stay untouched.\nexternalWrite:false\n\nDaily Brief schedule: 09:00 local time — Delivery channel: local\n```\n\n---\n\n## Current commands\n\nFor everyone:\n\n```bash\nnpm run demo\nnpm run guard:demo\nnpm run wow\nnpm run doctor\n```\n\nFor Daily Brief (all sources combined):\n\n```bash\nnpm run guard:daily\nnpm run brief:daily\nnpm run guard:daily -- --details\nnpm run brief:daily -- --inbox scripts/fixtures/inbox\nnpm run brief:daily -- --inbox scripts/fixtures/inbox --details\nnpm run brief:preferences\nnpm run brief:preferences:set -- --time 08:30\nnpm run brief:preferences:set -- --channel telegram\nnpm run brief:deliver\nnpm run brief:deliver -- --dry-run\nnpm run brief:deliver -- --channel telegram\n```\n\nFor governed adapter invocation (already-read OpenClaw payloads):\n\n```bash\nnpm run guard:adapter -- --source gmail --input <payload.json>\nnpm run guard:adapter -- --source gmail --input <payload.json> --compact\nnpm run guard:gmail -- --input <payload.json>\nnpm run guard:calendar -- --input <payload.json>\nnpm run guard:slack -- --input <payload.json>\nnpm run guard:github -- --input <payload.json>\n```\n\nFor compact chat-friendly output:\n\n```bash\nnpm run doctor:mobile\n```\n\nFor developers:\n\n```bash\nnpm run wow:developer\nnpm run loop:list\nnpm run loop:transition -- <loopId> doing \"started local follow-up\"\nnpm run loop:summary\nnpm run loop:review\nnpm run proposal:list\nnpm run proposal:show -- <proposalId>\nnpm run proposal:decide -- <proposalId> approve\nnpm run plan:list\nnpm run contract:list\nnpm run state:check\nnpm run receipts:verify\nnpm run state:repair\nnpm run capability:show\n```\n\nFor adapter developers:\n\n```bash\nnpm run adapter:validate -- examples/adapters/slack-message.json\nnpm run adapter:test -- examples/adapters/slack-message.json\nnpm run brief:reconcile -- --adapter-signal examples/adapters/slack-message.json\n```\n\nAll commands preserve `externalWrite:false` and do not write to Gmail, Calendar, Slack, GitHub, or any external system.\n\n---\n\n## Updating\n\n```\nclawhub update worldloops\n```\n\nForce reinstall:\n\n```\nclawhub install worldloops --force\n```\n\n---\n\n## Agent Runtime Instructions\n\nThe following section is for OpenClaw agents, not end users.\n\n### Daily Brief routing\n\nWhen the user asks for any of the following:\n- Daily Brief\n- morning brief\n- daily summary\n- today's open loops\n- what did I miss\n- open loops today\n- Agent Execution Guard Daily Brief\n- brief me\n\nRun immediately — do not search the workspace first:\n\n```bash\nnpm run --silent guard:daily\n```\n\nReturn only the command output. Do not narrate the command unless the user asks.\nDo not show tool search steps.\nDo not inspect package.json first for Daily Brief requests.\n\nFor fixture-based Daily Brief examples:\n\n```bash\nnpm run --silent brief:daily -- --inbox scripts/fixtures/inbox\n```\n\nFor details mode (source identifiers):\n\n```bash\nnpm run --silent guard:daily -- --details\nnpm run --silent brief:daily -- --inbox scripts/fixtures/inbox --details\n```\n\nFor delivery-ready checks:\n\n```bash\nnpm run --silent brief:deliver -- --channel telegram\n```\n\n### Demo routing\n\nWhen the user asks for a demo, guard demo, execution guard demo, Agent Execution Guard demo, real signal governance demo, WorldLoops guard demo, or open-loop demo, run:\n\n```bash\nnpm run --silent demo\n```\n\nReturn only the compact Agent Execution Guard output.\n\n### Runtime invocation\n\nWhen the user asks you to run this skill, do the following:\n\n1. Change into the skill directory: `{baseDir}`\n2. Run the command with `--silent`\n3. Use provided local payload files when available\n4. If no payload files are provided, use the included fixture files\n5. Return the result directly\n6. Do not modify external systems\n\nSafe default command from the skill directory:\n\n```\nnpm run --silent demo\n```\n\nFor Daily Brief (all local inbox sources combined):\n\n```\nnpm run --silent guard:daily\nnpm run --silent brief:deliver\nnpm run --silent brief:deliver -- --dry-run\nnpm run --silent brief:deliver -- --channel telegram\n```\n\nFor Daily Brief preferences:\n\n```\nnpm run --silent brief:preferences\nnpm run --silent brief:preferences:set -- --time HH:MM\nnpm run --silent brief:preferences:set -- --channel <channel>\n```\n\nFor local payload handoff:\n\n```\nnpm run --silent guard:gmail -- --input <payload.json> --compact\nnpm run --silent guard:calendar -- --input <payload.json> --compact\nnpm run --silent guard:slack -- --input <payload.json> --compact\nnpm run --silent guard:github -- --input <payload.json> --compact\n```\n\n### OpenClaw observation write-back\n\nWhen the user asks any of the following — or anything with the same intent:\n- \"What should I do today?\"\n- \"What did I miss?\"\n- \"Any follow-ups I'm missing?\"\n- daily brief, morning brief, open loops check\n\nPerform your normal high-quality observation: read full message content, search memory for existing open loops, resolve actor identities, extract deadlines from natural language, and prioritize what matters to the user.\n\nAfter surfacing candidates, write them as `ObservedSignal[]` to:\n\n```\n.worldloops/inbox/openclaw-observations.json\n```\n\nThis is a local workspace file write only. No external system is called.\n\n**Do not tell WorldLoops to reinterpret raw Gmail, Calendar, or Slack payloads.** WorldLoops adjudicates the interpreted observations you write here — it does not re-read source inboxes.\n\n**Shape of each item (`ObservedSignal`):**\n\n```json\n{\n  \"id\": \"openclaw-<source>-<sourceId>\",\n  \"source\": \"gmail\" | \"slack\" | \"calendar\" | \"github\" | \"manual\",\n  \"sourceId\": \"<message or event ID from the source>\",\n  \"observedBy\": \"openclaw\",\n  \"userQuery\": \"<the question the user asked>\",\n  \"observationIntent\": \"new_loop\" | \"state_transition\" | \"noise\" | \"related_context\" | \"evidence\",\n  \"title\": \"<your interpreted action title — not a copy of the raw subject line>\",\n  \"text\": \"<one-sentence synthesis of why this matters to the user>\",\n  \"timestamp\": \"<ISO 8601>\",\n  \"actor\": \"<resolved name or email — not a raw Slack user ID>\",\n  \"dueAt\": \"<ISO 8601 deadline extracted from natural language, else omit>\",\n  \"evidence\": {\n    \"<raw field from source>\": \"<value>\"\n  },\n  \"confidence\": 0.0–1.0,\n  \"relatedContext\": null\n}\n```\n\nFor `state_transition` intent, set `relatedContext`:\n\n```json\n\"relatedContext\": {\n  \"existingLoopKey\": \"openclaw-<source>-<sourceId of existing loop>\",\n  \"proposedTransition\": \"done\" | \"escalated\" | \"snoozed\",\n  \"note\": \"<why this closes or escalates the loop>\"\n}\n```\n\n**What you must decide before writing — your interpretation, not shallow heuristics:**\n- `observationIntent`: classify using full message content, your memory of open loops, and conversation context\n- `title`: a human-readable action title synthesized from the full message — not a copy of the subject line\n- `text`: one sentence on why this matters to the user right now\n- `dueAt`: extract from natural language (\"by Friday\" → ISO date of that Friday at 17:00 local)\n- `actor`: resolve Slack user IDs and display names to real identities where known\n- `confidence`: your assessed certainty given full context, not field presence\n- `relatedContext.existingLoopKey`: search memory for existing open loops before marking `state_transition`\n\n**Include noise explicitly.** Promotional email, automated notifications, and informational-only items should be written with `observationIntent: \"noise\"` rather than omitted — WorldLoops records suppression receipts for them.\n\nTo write and validate observations, use the helper command from the skill directory:\n\n```bash\nnpm run observations:write -- --input <path/to/your-observations.json>\n```\n\nThis validates the `ObservedSignal[]` shape, creates `.worldloops/inbox/` if needed, and writes to `.worldloops/inbox/openclaw-observations.json`. It will refuse invalid JSON or missing required fields and exit non-zero on error.\n\nAfter writing, WorldLoops `openclaw:intake` handles all lifecycle management: deduplication, open loop creation, state transitions, suppression receipts.\n\n### Default API\n\nBy default, WorldLoops uses:\n\n```\nhttps://api.worldloops.ai\n```\n\nYou do not need to set `WORLDLOOPS_API_BASE_URL` for the default demo flow.\n\nTo use a different backend, set:\n\n```\nWORLDLOOPS_API_BASE_URL=https://your-worldloops-api.example.com\n```\n\nOptional:\n\n```\nWORLDLOOPS_API_KEY=your_api_key\n```\n\n### Output\n\nDefault output is compact, messenger-friendly Agent Execution Guard output.\nStructured JSON remains available through developer-oriented commands where supported.\n\n### Important rules\n\nDo not invent missing source data.\nDo not send messages.\nDo not send emails.\nDo not create drafts.\nDo not create or update calendar events.\nDo not write to Slack, Gmail, Calendar, GitHub, SMS, or push channels.\nDo not implement background daemons.\nDo not auto-install cron or launchd.\n\nReturn the result directly.\n\nFile v1.12.0:README.md\n\n# 🦞 WorldLoops — Agent Execution Guard\n\nAI agents can answer from a snapshot.\n\nWorldLoops tracks what remains unresolved.\n\nIt turns real work signals into governed open loops — detecting unfinished responsibility, classifying severity, proposing the next transition, adjudicating whether approval is required, recording decisions, and committing local state transitions with receipts.\n\n`externalWrite:false` is preserved throughout.\n\n**WorldLoops is an execution guard for AI agents — not a todo list.**\n\n---\n\n## Architecture\n\nOpenClaw reads signals.\nWorldLoops guards execution.\n\nWorldLoops does not need to own every connector.\nIf a host agent can read a signal, it can pass it to Agent Execution Guard.\n\nOpenClaw observes and interprets source signals (Gmail, Calendar, Slack, GitHub) into `ObservedSignal[]`.\nWorldLoops reads those OpenClaw-authored interpreted observations and adjudicates their lifecycle state — into active open loops, attached context, suppression receipts, and transitions.\nWorldLoops does not connect to Gmail, Calendar, or Slack directly. `externalWrite:false` is preserved throughout.\n\n```\nOpenClaw (reads Gmail, Calendar, Slack, GitHub)\n    ↓\nalready-read payload\n    ↓\nAgent Execution Guard (WorldLoops)\n    ↓\ngoverned open loop → proposal → approval → local transition → receipt\n```\n\n---\n\n## OpenClaw Signal Handoff\n\nOpenClaw reads. Agent Execution Guard governs.\n\nNo connectors added.\nNo OAuth added.\nNo external write.\n\nA host agent (OpenClaw, gog, or any other) places an already-read payload into `.worldloops/inbox/`.\nAgent Execution Guard consumes it locally and produces a governed receipt.\n\n```\n.worldloops/inbox/openclaw-gmail-live.json      ← host agent places this\n    ↓\nnpm run guard:gmail -- --input .worldloops/inbox/openclaw-gmail-live.json --compact\n    ↓\nAgent Execution Guard\n    ↓\ngoverned open loop → proposal → receipt\nexternalWrite:false\n```\n\n### Accepted local payload formats\n\nAgent Execution Guard can consume local payloads in these forms:\n\n- **AdapterSignal JSON** — fully normalized signal with `source`, `sourceType`, `text`, `observedAt`, `externalWrite:false`\n- **OpenClaw-style handoff payloads** — already-normalized payloads from OpenClaw host agents\n- **gog-style Gmail payloads** — `{ \"messages\": [...] }` output from gog Gmail reads\n- **gog-style Calendar payloads** — `{ \"events\": [...] }` output from gog Calendar reads\n- **Slack host/plugin payloads** — `{ \"channel\": \"...\", \"messages\": [...] }` output from Slack host tools\n\ngog and OpenClaw read Gmail, Calendar, and Slack.\nAgent Execution Guard only consumes the local JSON output they produce.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved throughout.\n\nSupported handoff paths:\n\n```\n.worldloops/inbox/openclaw-gmail-live.json\n.worldloops/inbox/openclaw-calendar-live.json\n.worldloops/inbox/openclaw-slack-live.json\n.worldloops/inbox/openclaw-github-live.json\n```\n\nRedacted payload examples: [`examples/handoff/`](./examples/handoff/)\n\n---\n\n## OpenClaw + WorldLoops\n\nOpenClaw is excellent at observing possible signals from user-facing queries such as \"What did I miss?\" or \"What should I do today?\"\n\nWorldLoops starts after observation.\n\nIt takes OpenClaw-observed candidate signals and adjudicates whether they are real open loops, suppressing noise such as promotional messages, FYI-only updates, duplicates, and weak evidence. Accepted signals become stateful open loops that can move through To Do, Doing, Done, Snoozed, or Escalated.\n\n```\nOpenClaw observes candidate signals\n    ↓\nOpenClaw Observation Intake (WorldLoops)\n    ↓\nadjudicate: accepted | suppressed | attached_context | needs_review | state_transition\n    ↓\naccepted → open loop (todo)\nstate_transition → existing loop updated (done | escalated | snoozed)\nsuppressed → receipt saved, no open loop created\n    ↓\nMorning Brief: loop lifecycle summary\nexternalWrite:false\n```\n\n### Run\n\n```bash\nnpm run openclaw:intake -- --input scripts/fixtures/openclaw-signal-intake/mixed-observations.json\n```\n\n### Example output\n\n```\nOpenClaw observed 14 candidate signals.\n\nWorldLoops adjudication:\n- 3 accepted as new open loops\n- 2 state transitions applied\n- 6 suppressed as noise / no-action / promotional\n- 2 attached as related context\n- 1 needs review\n\nOpen loops created:\n- Review MCP deck for LG partnership by Friday\n- Follow up with David Kim on MCP proposal (closed_by_new_evidence)\n- Confirm invoice extension request with Google Collections (escalated_due_to_deadline)\n\nMorning Brief:\n- 1 loop still open\n- 1 loop closed by new evidence\n- 1 loop escalated\n- 6 observed signals suppressed as noise\n\nexternalWrite:false\n```\n\n### Adjudication verdicts\n\n| Verdict | Meaning |\n|---|---|\n| `accepted` | Real open loop — created in `.worldloops/open_loop_states.json` |\n| `suppressed` | Noise — promotional, FYI-only, duplicate, or weak evidence |\n| `attached_context` | Travel event or supporting document — linked as context, no new loop |\n| `needs_review` | Low-confidence signal — flagged for human review |\n| `state_transition` | New evidence updates an existing loop's status |\n\n### OpenClaw Observation format\n\n```json\n{\n  \"id\": \"obs-001\",\n  \"source\": \"gmail\",\n  \"sourceId\": \"gmail-mcp-followup-001\",\n  \"observedBy\": \"openclaw\",\n  \"userQuery\": \"What did I miss?\",\n  \"observationIntent\": \"new_loop\",\n  \"title\": \"Follow up with David Kim on MCP proposal\",\n  \"text\": \"Can you send me the updated specs by Friday?\",\n  \"timestamp\": \"2026-05-22T09:15:00Z\",\n  \"actor\": \"david.kim@example.com\",\n  \"dueAt\": \"2026-05-24T17:00:00Z\",\n  \"evidence\": { \"subject\": \"Re: MCP Proposal\", \"snippet\": \"...\" },\n  \"confidence\": 0.92,\n  \"relatedContext\": null\n}\n```\n\n---\n\n## 📋 Daily Brief\n\nGet one compact Agent Execution Guard summary from all three local handoff sources.\n\nOpenClaw/gog/host tools read Gmail, Calendar, and Slack.\nAgent Execution Guard reads only the local payload files they produce.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved throughout.\n\nNon-English action phrases such as Korean review requests are supported by the detector.\n\n### Expected payload locations\n\n```\n.worldloops/inbox/openclaw-gmail-live.json\n.worldloops/inbox/openclaw-calendar-live.json\n.worldloops/inbox/openclaw-slack-live.json\n```\n\n### Run\n\n```bash\nnpm run guard:daily\nnpm run brief:daily\n```\n\nDefault schedule: **09:00 local time**. Default delivery channel: **local**.\n\n### Example output — payloads connected\n\n```\n🦞 Agent Execution Guard Daily Brief\n\nSources:\n✅ Gmail\n✅ Calendar\n✅ Slack\n\nOpen loops:\n\n⚠️ Gmail — Review requested\nFrom: Test Reviewer <reviewer@example.com>\nSubject: Please review the submitted document\nWhy: review request detected\nEvidence: \"Please review the submitted document and send updates by EOD.\"\nAction: Review the submitted document or reply if needed\nAdjudication: requires_approval\n\n📅 Calendar — Important context\nEvent: Flight to Seoul (KE 24)\nWhen: May 21, 12:40 PM local time\nLocation: SFO\nReason: travel event detected, no action proposed\n\n💬 Slack — Action requested\nFrom: Dana\nChannel: #product\nWhy: review or approval request detected\nEvidence: \"Can you review this before release?\"\nAction: Review and comment\nAdjudication: requires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, calendar event, Slack message, or external change made.\n\nDaily Brief schedule: 09:00 local time — Delivery channel: local\n```\n\n### Example output — Gmail no-action with samples\n\nPromotional emails (airline offers, newsletters, discount campaigns, rewards updates) and messages containing \"no action required\" are automatically suppressed. They appear as no-action with an informational reason:\n\n```\n📧 Gmail — No actionable loop detected\nChecked: 2 messages\nSample:\n- From: promotions@airline.example.com / Subject: Earn double miles this weekend — promotion\n- From: noreply@rewards.example.com / Subject: Your rewards balance: 12,450 miles\nReason: promotional or informational message; no reply, approval, review, deadline, or follow-up request detected\n```\n\nFlight, airport, and travel calendar events appear as important context without requiring approval:\n\n```\n📅 Calendar — Important context\nEvent: Departure to ICN — Korean Air KE 24\nWhen: May 21, 12:40 PM local time\nLocation: SFO Terminal 2, Gate G1\nReason: travel event detected, no action proposed\n```\n\n### Example output — Slack not connected\n\n```\n⬜ Slack — not connected\nReason: no Slack payload found\nNext: configure OpenClaw channels.slack, then save payload to:\n.worldloops/inbox/openclaw-slack-live.json\n```\n\n### Example output — payloads not connected yet\n\n```\n🦞 Agent Execution Guard Daily Brief\n\nNo local handoff payloads found yet.\n\nAdd payloads here:\n- Gmail: .worldloops/inbox/openclaw-gmail-live.json\n- Calendar: .worldloops/inbox/openclaw-calendar-live.json\n- Slack: .worldloops/inbox/openclaw-slack-live.json\n\nThen run:\nnpm run guard:daily\n\nSource systems stay untouched.\nexternalWrite:false\n\nDaily Brief schedule: 09:00 local time — Delivery channel: local\n```\n\n### Preferences\n\n```bash\nnpm run brief:preferences\nnpm run brief:preferences:set -- --time 08:30\nnpm run brief:preferences:set -- --channel telegram\nnpm run brief:preferences:set -- --channel local\n```\n\nDaily Brief delivery channels include local, Telegram, Slack, Discord, SMS, and email.\n\n### Delivery\n\n```bash\nnpm run brief:deliver\nnpm run brief:deliver -- --dry-run\nnpm run brief:deliver -- --channel telegram\n```\n\nActual delivery to remote channels (Telegram, Slack, Discord, SMS, email) requires a host scheduler or integration.\nWorldLoops does not install cron, launchd, or background daemons.\nA host scheduler (e.g. OpenClaw) may call `npm run brief:deliver` at the configured time.\n\nIf no integration is active, the command exits 0 with a delivery-ready message.\n\nIf payload files are missing, the brief shows short onboarding instructions with expected file paths.\n\n---\n\n## 🚀 Quick Start\n\n```bash\nclawhub install worldloops\ncd ~/.openclaw/workspace/skills/worldloops\nnpm run demo\n```\n\n### Optional Safety Check\n\n```bash\nnpm run doctor\n```\n\nExpected result:\n\n```\n🦞 Agent Execution Guard\n\n🚨 High — Gmail callback requested\nState: open\n\nProposal:\nReview claim context and decide whether to call back or prepare a written response. This is a local planning action only — do not initiate any call, email, or external communication without an explicit decision.\n\nAdjudication:\nrequires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, call, or external change made.\n```\n\nFor the broader open-loop showcase:\n\n```bash\nnpm run wow\n```\n\n---\n\n## 🧭 What WorldLoops does\n\nWorldLoops does not just list tasks.\n\nIt turns real work signals into governed open loops:\n\n- detects unfinished responsibility\n- classifies severity\n- proposes the next transition\n- adjudicates whether approval is required\n- records user decisions\n- commits local state transitions\n- creates receipts\n- preserves `externalWrite:false`\n\n---\n\n## 🔁 From signal to governed transition\n\n```\nSignal\n  → Open Loop\n    → Severity\n      → Proposal\n        → Adjudication\n          → User Approval\n            → Local Transition\n              → Receipt\n                → externalWrite:false\n```\n\n**Example real signal:**\n\nA Gmail message says:\n> \"Please give me a call back. It is important that we discuss your injuries and this incident. Claim No. 26-99-554236.\"\n\n**WorldLoops produces:**\n\n```\n🚨 High — Claim contact request\nState: needs_response\nProposal: prepare callback or written response plan\nAdjudication: requires_approval\nBoundary: local_proposal_only\nSafety: externalWrite:false\n```\n\nMessenger-friendly output for Telegram, Slack, Discord, WhatsApp, SMS, and mobile chat:\n\n```bash\nnpm run brief:messenger -- --adapter-signal examples/adapters/gmail-claim-contact-request.example.json\n```\n\n**After user approval:**\n\n```\nDecision receipt created.\nLoop transitioned locally.\nNo email sent.\nNo call made.\nNo external system changed.\n```\n\nThis is the key product difference.\n\nNormal assistants summarize what they see.\nWorldLoops tracks what remains unresolved, governs what should happen next, and records every safe transition.\n\n---\n\n## 🚨 Severity-aware open loops\n\nWorldLoops classifies detected open loops by severity:\n\n- **Critical / High** → escalated immediately, requires approval\n- **Medium** → surfaced for review, proposal generated\n- **Low** → tracked but not escalated\n\nHigh-severity loops (like a legal claim follow-up) trigger proposals with `adjudication: requires_approval`.\n\n---\n\n## 🧑‍⚖️ Proposals, adjudication, and approval\n\nWhen an open loop requires action, WorldLoops creates a proposal:\n\n- what action is proposed\n- why it is required\n- what checks should be performed first\n- whether approval is required (`requiredReview: true`)\n- what boundary applies (`local_proposal_only`, `read_only`, etc.)\n\nNo proposal executes automatically.\nHuman approval is required before any local transition is committed.\n\n---\n\n## 🧾 Receipts and audit trail\n\nEvery approved decision creates a receipt:\n\n- transition receipt (records the loop state change)\n- proposal decision receipt (records the approval or rejection)\n\nReceipts are verifiable with:\n\n```bash\nnpm run receipts:verify\nnpm run state:check\n```\n\n---\n\n## 🛡 Safety boundary\n\nWorldLoops does not send emails.\nWorldLoops does not post chat messages.\nWorldLoops does not create calendar events.\nWorldLoops does not modify project tools.\nWorldLoops does not silently change external systems.\n\nBy default:\n\n```\nexternalWrite:false\n```\n\nProposal is not execution.\nApproval is not external write.\nPlan is not execution.\nContract is not external write.\n\n---\n\n## 🧰 Useful commands\n\nDefault demo (Agent Execution Guard compact):\n\n```bash\nnpm run demo\nnpm run guard:demo\n```\n\nDaily Brief (all local inbox sources):\n\n```bash\nnpm run guard:daily\nnpm run brief:daily\nnpm run brief:preferences\nnpm run brief:preferences:set -- --time 08:30\nnpm run brief:preferences:set -- --channel telegram\nnpm run brief:deliver\nnpm run brief:deliver -- --dry-run\nnpm run brief:deliver -- --channel telegram\n```\n\nBroader open-loop showcase:\n\n```bash\nnpm run wow\n```\n\nDoctor and state:\n\n```bash\nnpm run doctor\nnpm run doctor:mobile\nnpm run state:check\nnpm run receipts:verify\n```\n\nDeveloper tools:\n\n```bash\nnpm run wow:developer\nnpm run loop:list\nnpm run proposal:list\n```\n\nMessenger-friendly adapter output:\n\n```bash\nnpm run brief:messenger -- --adapter-signal examples/adapters/gmail-claim-contact-request.example.json\n```\n\nFor governed adapter invocation (already-read OpenClaw payloads):\n\n```bash\nnpm run guard:adapter -- --source gmail --input examples/adapters/openclaw-gmail-claim.json\nnpm run guard:adapter -- --source gmail --input examples/adapters/openclaw-gmail-claim.json --compact\nnpm run guard:gmail -- --input examples/adapters/openclaw-gmail-claim.json\nnpm run guard:calendar -- --input examples/adapters/openclaw-calendar-prep.json\nnpm run guard:slack -- --input examples/adapters/openclaw-slack-review-request.json\nnpm run guard:github -- --input examples/adapters/openclaw-github-pr-review.json\n```\n\nFor adapter developers:\n\n```bash\nnpm run adapter:validate -- examples/adapters/slack-message.json\nnpm run adapter:test -- examples/adapters/slack-message.json\nnpm run brief:reconcile -- --adapter-signal examples/adapters/gmail-claim-contact-request.example.json\n```\n\n---\n\n## 🧑‍💻 For developers\n\nWorldLoops is a local, safe-by-default world state layer for agent execution.\n\nSignals become loops.\nLoops become proposals.\nProposals become decisions.\nDecisions become plans.\nPlans become contracts.\nExecution remains governed.\n\n---\n\n## 📚 Advanced docs\n\n- Adapter guide: [ADAPTER_GUIDE.md](./ADAPTER_GUIDE.md)\n- Community adapter guide: [CONTRIBUTING.md](./CONTRIBUTING.md)\n- Release history: GitHub Releases\n- Changelog: [CHANGELOG.md](./CHANGELOG.md)\n\n---\n\n## 🚫 What WorldLoops is not\n\nWorldLoops is not:\n\n- a chatbot\n- a todo app\n- a Zapier clone\n- an uncontrolled automation runner\n- a tool that lets agents freely write to external systems\n- a replacement for human judgment\n\nWorldLoops keeps humans in control without making them the bottleneck.\n\n---\n\n## 📱 Telegram demo wrapper\n\n`src/scripts/telegramTestBot.ts` is a local demo wrapper for testing WorldLoops adjudication over Telegram. It consumes local OpenClaw-observed JSON payloads and does **not** connect to Gmail, Slack, Calendar, GitHub, or any external API.\n\nOpenClaw observes. WorldLoops adjudicates. This wrapper bridges the two for live demo.\n\n### Input priority\n\nWhen `/brief` is sent, the bot selects its input in this order:\n\n1. `.worldloops/inbox/openclaw-observations.json` — mode: `inbox-openclaw-observations`\n2. `.worldloops/inbox/telegram-observations.json` — mode: `inbox-telegram-observations`\n3. `scripts/fixtures/openclaw-signal-intake/mixed-observations.json` — mode: `demo-fixture`\n\n### Setup\n\nIf you have an OpenClaw gateway bot using the same Telegram token, stop it first to avoid a polling conflict (409).\n\n```sh\n# Seed the demo inbox with the mixed-observations fixture\nnpm run telegram:seed-demo\n\n# Start the bot\nnpm run telegram:test\n```\n\n### Commands\n\n| Command | Description |\n|---------|-------------|\n| `/help` | List all commands and natural language examples |\n| `/status` | Bot version and status |\n| `/source` | Which input file would be used and whether it exists |\n| `/brief` | Run WorldLoops adjudication and show open loops |\n| `/worldloops` | Same as `/brief` |\n\nNatural language also triggers `/brief`:\n\n- `\"오늘 내가 할 일이 뭐야?\"`\n- `\"뭐 빠진 거 없어?\"`\n- `\"어제 열린 루프 중 닫힌 거 있어?\"`\n\n### Sample payload\n\n`scripts/fixtures/openclaw-signal-intake/demo-observations.json` is a small 3-signal sample showing one actionable loop, one follow-up, and one suppressed promotional email.\n\n---\n\n## 🔗 Links\n\n- Website: https://worldloops.ai\n- API: https://api.worldloops.ai\n- ClawHub: worldloops\n\n---\n\nGive agents a world, not just tools.\n\nClose the loop.\nKeep the world safe.\n\nFile v1.12.0:_meta.json\n\n{\n  \"ownerId\": \"kn75v4md26j4p9yzt5kh46a5ws86xec5\",\n  \"slug\": \"worldloops\",\n  \"version\": \"1.12.0\",\n  \"publishedAt\": 1779484011147\n}\n\nFile v1.12.0:scripts/fixtures/gog-calendar-events.json\n\n{\n  \"events\": [\n    {\n      \"id\": \"cal-event-001\",\n      \"summary\": \"LG pricing strategy review\",\n      \"description\": \"No agenda attached yet. Prepare pricing assumptions and promotion scenarios before the meeting.\",\n      \"start\": \"2026-05-18T17:00:00.000Z\",\n      \"end\": \"2026-05-18T18:00:00.000Z\",\n      \"location\": \"Zoom\",\n      \"htmlLink\": \"https://calendar.google.com/calendar/event?eid=example\"\n    },\n    {\n      \"id\": \"cal-event-002\",\n      \"summary\": \"Customer workshop follow-up\",\n      \"description\": \"Send recap and next-step proposal after the workshop.\",\n      \"start\": \"2026-05-19T19:00:00.000Z\",\n      \"end\": \"2026-05-19T20:00:00.000Z\"\n    }\n  ],\n  \"count\": 2\n}\n\nFile v1.12.0:scripts/fixtures/gog-gmail-messages.json\n\n{\n  \"messages\": [\n    {\n      \"id\": \"gmail-msg-001\",\n      \"threadId\": \"thread-001\",\n      \"subject\": \"Follow-up on the LG proposal\",\n      \"from\": \"Sarah Chen <sarah@example.com>\",\n      \"snippet\": \"Just checking if you had a chance to review the proposal and send next steps.\",\n      \"date\": \"2026-05-16T10:30:00.000Z\",\n      \"labelIds\": [\"INBOX\", \"IMPORTANT\"]\n    },\n    {\n      \"id\": \"gmail-msg-002\",\n      \"threadId\": \"thread-002\",\n      \"subject\": \"Deck prep before tomorrow\",\n      \"from\": \"David Kim <david@example.com>\",\n      \"snippet\": \"Can you prepare the pricing deck before tomorrow's meeting?\",\n      \"date\": \"2026-05-16T11:30:00.000Z\",\n      \"labelIds\": [\"INBOX\"]\n    }\n  ],\n  \"count\": 2\n}\n\nFile v1.12.0:scripts/fixtures/gog-gmail-re-thread.json\n\n{\n  \"messages\": [\n    {\n      \"id\": \"gmail-msg-re-001\",\n      \"threadId\": \"thread-re-001\",\n      \"subject\": \"Re: [패스트캠퍼스] 스노우 / 클로드 기반 AI Agent 과정 출강 요청드립니다\",\n      \"from\": \"recruitment@fastcampus.co.kr\",\n      \"snippet\": \"안녕하세요. 지난번에 보내드린 출강 요청 건에 대해 답변 부탁드립니다.\",\n      \"date\": \"2026-05-17T09:15:00.000Z\"\n    },\n    {\n      \"id\": \"gmail-msg-re-002\",\n      \"threadId\": \"thread-re-002\",\n      \"subject\": \"Re: Following up on the proposal review\",\n      \"from\": \"partner@external.com\",\n      \"snippet\": \"Could you please send the updated deck when you have a chance?\",\n      \"date\": \"2026-05-17T10:00:00.000Z\"\n    },\n    {\n      \"id\": \"gmail-msg-re-003\",\n      \"threadId\": \"thread-re-003\",\n      \"subject\": \"Re: Team offsite logistics\",\n      \"from\": \"alice@internal.com\",\n      \"snippet\": \"Just wanted to loop you in on the schedule change.\",\n      \"date\": \"2026-05-17T11:00:00.000Z\"\n    }\n  ],\n  \"count\": 3\n}\n\nFile v1.12.0:scripts/fixtures/inbox-airline-promo-gmail/openclaw-calendar-live.json\n\n{\n  \"events\": [\n    {\n      \"id\": \"daily-brief-test-cal-airline-promo-001\",\n      \"summary\": \"Team sync\",\n      \"description\": \"Weekly team check-in.\",\n      \"start\": \"2026-05-21T16:00:00.000Z\",\n      \"end\": \"2026-05-21T16:30:00.000Z\",\n      \"location\": \"Conference room A\"\n    }\n  ],\n  \"count\": 1\n}\n\nFile v1.12.0:scripts/fixtures/inbox-airline-promo-gmail/openclaw-gmail-live.json\n\n{\n  \"messages\": [\n    {\n      \"id\": \"daily-brief-test-airline-promo-001\",\n      \"threadId\": \"daily-brief-test-thread-airline-promo-001\",\n      \"subject\": \"Earn double miles this weekend — Tap Air promotion\",\n      \"from\": \"promotions@tapair.example.com\",\n      \"snippet\": \"Earn double miles on all flights this weekend. Limited time offer. Book now. Manage preferences | Unsubscribe\",\n      \"date\": \"2026-05-21T07:00:00.000Z\",\n      \"labelIds\": [\"INBOX\", \"CATEGORY_PROMOTIONS\"]\n    },\n    {\n      \"id\": \"daily-brief-test-airline-promo-002\",\n      \"threadId\": \"daily-brief-test-thread-airline-promo-002\",\n      \"subject\": \"Your rewards balance: 12,450 miles\",\n      \"from\": \"noreply@rewards.example.com\",\n      \"snippet\": \"Your current miles balance is 12,450. Earn bonus miles when you book before May 31.\",\n      \"date\": \"2026-05-21T06:30:00.000Z\",\n      \"labelIds\": [\"INBOX\", \"CATEGORY_PROMOTIONS\"]\n    }\n  ],\n  \"count\": 2\n}\n\nFile v1.12.0:scripts/fixtures/inbox-airline-promo-gmail/openclaw-slack-live.json\n\n{\n  \"channel\": \"#general\",\n  \"channel_id\": \"C01PROMO01\",\n  \"messages\": [\n    {\n      \"user\": \"team_member\",\n      \"text\": \"Reminder: team lunch tomorrow at noon.\",\n      \"ts\": \"1716286800.000000\"\n    }\n  ],\n  \"count\": 1\n}\n\nFile v1.12.0:scripts/fixtures/inbox-calendar-airport-event/openclaw-calendar-live.json\n\n{\n  \"events\": [\n    {\n      \"id\": \"daily-brief-test-cal-airport-001\",\n      \"summary\": \"Departure to ICN — Korean Air KE 24\",\n      \"description\": \"Check in at Terminal 2. Boarding at 11:00. Seat 12A.\",\n      \"start\": \"2026-05-21T12:40:00.000Z\",\n      \"end\": \"2026-05-22T18:00:00.000Z\",\n      \"location\": \"SFO Terminal 2, Gate G1\"\n    }\n  ],\n  \"count\": 1\n}\n\nFile v1.12.0:scripts/fixtures/inbox-calendar-airport-event/openclaw-gmail-live.json\n\n{\n  \"messages\": [\n    {\n      \"id\": \"daily-brief-test-airport-gmail-001\",\n      \"threadId\": \"daily-brief-test-thread-airport-gmail-001\",\n      \"subject\": \"Safe travels — FYI\",\n      \"from\": \"Colleague <colleague@example.com>\",\n      \"snippet\": \"Just a heads-up that you're traveling tomorrow. No action needed on your end.\",\n      \"date\": \"2026-05-21T08:00:00.000Z\",\n      \"labelIds\": [\"INBOX\"]\n    }\n  ],\n  \"count\": 1\n}\n\nFile v1.12.0:scripts/fixtures/inbox-calendar-airport-event/openclaw-slack-live.json\n\n{\n  \"channel\": \"#travel\",\n  \"channel_id\": \"C01TRAVEL1\",\n  \"messages\": [\n    {\n      \"user\": \"team_member\",\n      \"text\": \"Safe travels everyone!\",\n      \"ts\": \"1716286800.000000\"\n    }\n  ],\n  \"count\": 1\n}\n\nArchive v1.11.0: 388 files, 395239 bytes\n\nFiles: ADAPTER_GUIDE.md (16817b), CHANGELOG.md (39143b), CONTRIBUTING.md (4966b), dist/adapter/runAdapterTest.d.ts (471b), dist/adapter/runAdapterTest.js (6702b), dist/adapter/toWorldLoopsSignal.d.ts (177b), dist/adapter/toWorldLoopsSignal.js (611b), dist/adapter/validateAdapterSignal.d.ts (171b), dist/adapter/validateAdapterSignal.js (2481b), dist/adapters/gogCalendar.d.ts (328b), dist/adapters/gogCalendar.js (4181b), dist/adapters/gogGmail.d.ts (315b), dist/adapters/gogGmail.js (3885b), dist/adapters/gogSnapshot.d.ts (546b), dist/adapters/gogSnapshot.js (4676b), dist/adapters/openclawCalendar.d.ts (292b), dist/adapters/openclawCalendar.js (2588b), dist/adapters/openclawCommitments.d.ts (307b), dist/adapters/openclawCommitments.js (1837b), dist/adapters/openclawGmail.d.ts (339b), dist/adapters/openclawGmail.js (2527b), dist/adapters/openclawMessages.d.ts (476b), dist/adapters/openclawMessages.js (2663b), dist/adapters/slackPayload.d.ts (526b), dist/adapters/slackPayload.js (5395b), dist/adapters/threadHints.d.ts (470b), dist/adapters/threadHints.js (1554b), dist/brief.d.ts (230b), dist/brief.js (1385b), dist/dailyBriefRunner.d.ts (2128b), dist/dailyBriefRunner.js (24423b), dist/data/proposalTemplates.d.ts (128b), dist/data/proposalTemplates.js (5697b), dist/notifications/prefs.d.ts (870b), dist/notifications/prefs.js (4876b), dist/notifications/state.d.ts (222b), dist/notifications/state.js (2351b), dist/openclawIntake.d.ts (2621b), dist/openclawIntake.js (13517b), dist/output/messengerFormat.d.ts (520b), dist/output/messengerFormat.js (4000b), dist/policy/capabilityBoundary.d.ts (140b), dist/policy/capabilityBoundary.js (2530b), dist/policy/severityPolicy.d.ts (215b), dist/policy/severityPolicy.js (1552b), dist/policy/stuckLoopPolicy.d.ts (369b), dist/policy/stuckLoopPolicy.js (2998b), dist/scripts/adapterTest.d.ts (11b), dist/scripts/adapterTest.js (2326b), dist/scripts/adapterValidate.d.ts (11b), dist/scripts/adapterValidate.js (3116b), dist/scripts/briefDaily.d.ts (11b), dist/scripts/briefDaily.js (5358b), dist/scripts/briefDeliver.d.ts (11b), dist/scripts/briefDeliver.js (3086b), dist/scripts/briefMessenger.d.ts (11b), dist/scripts/briefMessenger.js (368b), dist/scripts/briefPreferences.d.ts (11b), dist/scripts/briefPreferences.js (1778b), dist/scripts/briefPreferencesSet.d.ts (11b), dist/scripts/briefPreferencesSet.js (2861b), dist/scripts/briefReconcile.d.ts (11b), dist/scripts/briefReconcile.js (10703b), dist/scripts/capabilityShow.d.ts (11b), dist/scripts/capabilityShow.js (443b), dist/scripts/contractCreate.d.ts (11b), dist/scripts/contractCreate.js (8874b), dist/scripts/contractList.d.ts (11b), dist/scripts/contractList.js (2532b), dist/scripts/contractReview.d.ts (11b), dist/scripts/contractReview.js (2989b), dist/scripts/contractShow.d.ts (11b), dist/scripts/contractShow.js (4054b), dist/scripts/demoWow.d.ts (31b), dist/scripts/demoWow.js (4080b), dist/scripts/demoWowMobile.d.ts (11b), dist/scripts/demoWowMobile.js (1055b), dist/scripts/discoveryRun.d.ts (11b), dist/scripts/discoveryRun.js (5903b), dist/scripts/doctor.d.ts (11b)\n\nFile v1.11.0:SKILL.md\n\n---\nname: worldloops\ndescription: Agent Execution Guard by WorldLoops — a safe-by-default responsibility layer for AI agents that turns scattered work signals into governed open loops while preserving externalWrite:false.\nversion: \"1.11.0\"\nhomepage: https://github.com/swit001/worldloops\nmetadata: {\"openclaw\":{\"requires\":{\"bins\":[\"node\",\"npm\"]},\"envVars\":[{\"name\":\"WORLDLOOPS_API_BASE_URL\",\"required\":false,\"description\":\"Optional WorldLoops API base URL override. Defaults to https://api.worldloops.ai.\"},{\"name\":\"WORLDLOOPS_API_KEY\",\"required\":false,\"description\":\"Optional bearer token for hosted WorldLoops API.\"}],\"emoji\":\"🌐\",\"homepage\":\"https://github.com/swit001/worldloops\",\"skillKey\":\"worldloops\",\"tags\":[\"openclaw\",\"clawhub\",\"agentic-ai\",\"world-model\",\"executable-world\",\"open-loops\",\"open-loop-management\",\"workflow\",\"human-in-the-loop\",\"safe-by-default\",\"auditable-runtime\",\"stateful-loop-management\",\"agent-execution-guard\",\"execution-governance\",\"execution-contracts\",\"proposal-engine\",\"workflow-governance\"]}}\n---\n\n# Agent Execution Guard\n\nAgent Execution Guard is a WorldLoops skill for OpenClaw.\n\nIt turns signals from tools, messages, and workflows into governed open loops:\n\nSignal → Open Loop → Proposal → Approval → Local Transition → Receipt\n\nIt helps agents avoid unsafe or premature execution by keeping action proposals inside a safe, auditable boundary.\n\n---\n\n## Why it matters\n\nMost agents answer from a snapshot.\nWorldLoops tracks what remains unresolved.\n\nWhen an email, calendar event, Slack message, or GitHub notification implies unfinished responsibility, Agent Execution Guard surfaces it as a governed open loop — not a silent side effect.\n\nEvery proposed action requires approval before any local transition is committed.\nNo external system is changed.\n`externalWrite:false` is preserved throughout.\n\n---\n\n## Quick Start\n\n```bash\nclawhub install worldloops\ncd ~/.openclaw/workspace/skills/worldloops\nnpm run demo\n```\n\n### Optional Safety Check\n\n```bash\nnpm run doctor\n```\n\n---\n\n## Example demo output\n\n```bash\nnpm run demo\n```\n\n```\n🦞 Agent Execution Guard\n\n🚨 High — Gmail callback requested\nState: open\n\nProposal:\nReview claim context and decide whether to call back or prepare a written response. This is a local planning action only — do not initiate any call, email, or external communication without an explicit decision.\n\nAdjudication:\nrequires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, call, or external change made.\n```\n\n---\n\n## Safety posture\n\nAgent Execution Guard does not send emails.\nAgent Execution Guard does not post chat messages.\nAgent Execution Guard does not create calendar events.\nAgent Execution Guard does not modify external systems.\n\n```\n✅ 0 emails sent\n✅ 0 calendar events changed\n✅ 0 chat messages posted\n✅ 0 files modified\n✅ 0 project changes made\n✅ externalWrite:false enforced\n```\n\nOpenClaw reads signals.\nWorldLoops guards execution.\n\nWorldLoops does not need to own every connector.\nIf a host agent can read a signal, it can pass it to Agent Execution Guard.\n\n---\n\n## OpenClaw Signal Handoff\n\nOpenClaw reads. Agent Execution Guard governs.\n\nNo connectors added.\nNo OAuth added.\nNo external write.\n\nA host agent (OpenClaw, gog, or any other) reads signals from Gmail, Calendar, Slack, or GitHub.\nIt places the already-read payload as a local JSON file.\nAgent Execution Guard receives that payload, normalizes it into an `AdapterSignal`, and produces a governed receipt.\n\n```\nOpenClaw / gog reads Gmail / Calendar / Slack / GitHub\n    ↓\nalready-read payload → .worldloops/inbox/openclaw-gmail-live.json\n    ↓\nnpm run guard:gmail -- --input .worldloops/inbox/openclaw-gmail-live.json --compact\n    ↓\nAgent Execution Guard\n    ↓\ngoverned open loop → proposal → receipt\nexternalWrite:false\n```\n\n### Accepted local payload formats\n\nAgent Execution Guard can consume local payloads in these forms:\n\n- **AdapterSignal JSON** — fully normalized signal with `source`, `sourceType`, `text`, `observedAt`, `externalWrite:false`\n- **OpenClaw-style handoff payloads** — already-normalized payloads from OpenClaw host agents\n- **gog-style Gmail payloads** — `{ \"messages\": [...] }` output from gog Gmail reads\n- **gog-style Calendar payloads** — `{ \"events\": [...] }` output from gog Calendar reads\n- **Slack host/plugin payloads** — `{ \"channel\": \"...\", \"messages\": [...] }` output from Slack host tools\n\ngog and OpenClaw read Gmail, Calendar, and Slack.\nAgent Execution Guard only consumes the local JSON output they produce.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved throughout.\n\n### Local handoff directory\n\nHost agents should place payloads here:\n\n```\n.worldloops/inbox/openclaw-gmail-live.json\n.worldloops/inbox/openclaw-calendar-live.json\n.worldloops/inbox/openclaw-slack-live.json\n.worldloops/inbox/openclaw-github-live.json\n```\n\nThe `.worldloops/inbox/` directory is created automatically on first run and is gitignored by default.\n\nRedacted payload examples are in `examples/handoff/`.\n\n---\n\n## OpenClaw + WorldLoops\n\nOpenClaw is excellent at observing possible signals from user-facing queries such as \"What did I miss?\" or \"What should I do today?\"\n\nWorldLoops starts after observation.\n\nIt takes OpenClaw-observed candidate signals and adjudicates whether they are real open loops, suppressing noise such as promotional messages, FYI-only updates, duplicates, and weak evidence. Accepted signals become stateful open loops that can move through To Do, Doing, Done, Snoozed, or Escalated.\n\n### Run\n\n```bash\nnpm run openclaw:intake -- --input scripts/fixtures/openclaw-signal-intake/mixed-observations.json\n```\n\n### OpenClaw Observation Adapter contract\n\n```\nobservedBy        \"openclaw\"\nobservationIntent new_loop | state_transition | noise | related_context | evidence\nsource            gmail | slack | calendar | github | manual\nsourceId          source-unique identifier for deduplication\ntitle             human-readable signal title\ntext              full signal text\ntimestamp         ISO 8601\nactor             sender / requester (optional)\ndueAt             deadline (optional)\nevidence          source-specific fields (subject, snippet, channel, location…)\nconfidence        0.0–1.0 (optional; < 0.4 → needs_review)\nrelatedContext    null | { existingLoopKey, type, note } | { observationId, type }\n```\n\n### Adjudication verdicts\n\n```\naccepted          → open loop created (todo)\nsuppressed        → receipt saved, no loop\nattached_context  → context noted, no loop\nneeds_review      → flagged, no loop\nstate_transition  → existing loop updated (done | escalated | snoozed)\n```\n\n### Morning Brief — state-management surface\n\nThe intake run produces a morning brief showing loop lifecycle:\n\n```\n- 1 loop still open\n- 1 loop closed by new evidence\n- 1 loop escalated\n- 6 observed signals suppressed as noise\n```\n\n---\n\n## Daily Brief\n\nGet a single compact summary of Gmail, Calendar, and Slack handoff payloads in one command.\n\nOpenClaw/gog/host tools read Gmail, Calendar, and Slack.\nAgent Execution Guard reads only local payload files.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved.\n\n### How it works\n\n1. Host tools (OpenClaw, gog, or Slack plugin) read your Gmail, Calendar, and Slack.\n2. They save the already-read payloads as local JSON files in `.worldloops/inbox/`.\n3. Agent Execution Guard reads those local files and produces one compact Daily Brief.\n\n```\n.worldloops/inbox/openclaw-gmail-live.json      ← Gmail payload\n.worldloops/inbox/openclaw-calendar-live.json   ← Calendar payload\n.worldloops/inbox/openclaw-slack-live.json      ← Slack payload\n```\n\n### Run\n\n```bash\nnpm run guard:daily\nnpm run brief:daily\n```\n\n### Preferences\n\nDefault schedule: **09:00 local time**, default delivery channel: **local**.\n\nView preferences:\n\n```bash\nnpm run brief:preferences\n```\n\nChange delivery time:\n\n```bash\nnpm run brief:preferences:set -- --time 08:30\n```\n\nSet delivery channel:\n\n```bash\nnpm run brief:preferences:set -- --channel local\nnpm run brief:preferences:set -- --channel telegram\nnpm run brief:preferences:set -- --channel slack\nnpm run brief:preferences:set -- --channel discord\nnpm run brief:preferences:set -- --channel sms\nnpm run brief:preferences:set -- --channel email\n```\n\nDaily Brief delivery channels include local, Telegram, Slack, Discord, SMS, and email.\nWhen referring only to chat-style channels: messenger channels such as Telegram, Slack, and Discord.\n\n### Delivery\n\nGenerate and deliver the brief:\n\n```bash\nnpm run brief:deliver\nnpm run brief:deliver -- --dry-run\nnpm run brief:deliver -- --channel telegram\n```\n\nDelivery notes:\n- Channel `local` prints the brief to stdout.\n- Remote channels (Telegram, Slack, Discord, SMS, email) require a host scheduler or integration to be active.\n- If no integration is active, the command exits 0 with a delivery-ready message and the brief text.\n- WorldLoops does not install cron, launchd, or background daemons.\n- A host scheduler (e.g. OpenClaw) may call `npm run brief:deliver` at the configured time.\n\n### Example output — payloads connected\n\n```\n🦞 Agent Execution Guard Daily Brief\n\nSources:\n✅ Gmail\n✅ Calendar\n✅ Slack\n\nOpen loops:\n\n⚠️ Gmail — Review requested\nFrom: Test Reviewer <reviewer@example.com>\nSubject: Please review the submitted document\nWhy: review request detected\nEvidence: \"Please review the submitted document and send updates by EOD.\"\nAction: Review the submitted document or reply if needed\nAdjudication: requires_approval\n\n📅 Calendar — Important context\nEvent: Flight to Seoul (KE 24)\nWhen: May 21, 12:40 PM local time\nLocation: SFO\nReason: travel event detected, no action proposed\n\n💬 Slack — Action requested\nFrom: Dana\nChannel: #product\nWhy: review or approval request detected\nEvidence: \"Can you review this before release?\"\nAction: Review and comment\nAdjudication: requires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, calendar event, Slack message, or external change made.\n\nDaily Brief schedule: 09:00 local time — Delivery channel: local\nTo change: npm run brief:preferences:set -- --time HH:MM\n```\n\n### Example output — Gmail no-action with samples\n\nPromotional emails (airline offers, newsletters, discount campaigns, rewards updates) and messages with \"no action required\" are automatically suppressed and do not generate open loops:\n\n```\n📧 Gmail — No actionable loop detected\nChecked: 2 messages\nSample:\n- From: promotions@airline.example.com / Subject: Earn double miles this weekend — promotion\n- From: noreply@rewards.example.com / Subject: Your rewards balance: 12,450 miles\nReason: promotional or informational message; no reply, approval, review, deadline, or follow-up request detected\n```\n\nFlight and airport calendar events appear as important context without becoming approval-required tasks:\n\n```\n📅 Calendar — Important context\nEvent: Departure to ICN — Korean Air KE 24\nWhen: May 21, 12:40 PM local time\nLocation: SFO Terminal 2, Gate G1\nReason: travel event detected, no action proposed\n```\n\n### Example output — Slack not connected\n\n```\n⬜ Slack — not connected\nReason: no Slack payload found\nNext: configure OpenClaw channels.slack, then save payload to:\n.worldloops/inbox/openclaw-slack-live.json\n```\n\n### Example output — payloads not connected yet\n\n```\n🦞 Agent Execution Guard Daily Brief\n\nNo local handoff payloads found yet.\n\nAdd payloads here:\n- Gmail: .worldloops/inbox/openclaw-gmail-live.json\n- Calendar: .worldloops/inbox/openclaw-calendar-live.json\n- Slack: .worldloops/inbox/openclaw-slack-live.json\n\nThen run:\nnpm run guard:daily\n\nSource systems stay untouched.\nexternalWrite:false\n\nDaily Brief schedule: 09:00 local time — Delivery channel: local\n```\n\n---\n\n## Current commands\n\nFor everyone:\n\n```bash\nnpm run demo\nnpm run guard:demo\nnpm run wow\nnpm run doctor\n```\n\nFor Daily Brief (all sources combined):\n\n```bash\nnpm run guard:daily\nnpm run brief:daily\nnpm run guard:daily -- --details\nnpm run brief:daily -- --inbox scripts/fixtures/inbox\nnpm run brief:daily -- --inbox scripts/fixtures/inbox --details\nnpm run brief:preferences\nnpm run brief:preferences:set -- --time 08:30\nnpm run brief:preferences:set -- --channel telegram\nnpm run brief:deliver\nnpm run brief:deliver -- --dry-run\nnpm run brief:deliver -- --channel telegram\n```\n\nFor governed adapter invocation (already-read OpenClaw payloads):\n\n```bash\nnpm run guard:adapter -- --source gmail --input <payload.json>\nnpm run guard:adapter -- --source gmail --input <payload.json> --compact\nnpm run guard:gmail -- --input <payload.json>\nnpm run guard:calendar -- --input <payload.json>\nnpm run guard:slack -- --input <payload.json>\nnpm run guard:github -- --input <payload.json>\n```\n\nFor compact chat-friendly output:\n\n```bash\nnpm run doctor:mobile\n```\n\nFor developers:\n\n```bash\nnpm run wow:developer\nnpm run loop:list\nnpm run loop:transition -- <loopId> doing \"started local follow-up\"\nnpm run loop:summary\nnpm run loop:review\nnpm run proposal:list\nnpm run proposal:show -- <proposalId>\nnpm run proposal:decide -- <proposalId> approve\nnpm run plan:list\nnpm run contract:list\nnpm run state:check\nnpm run receipts:verify\nnpm run state:repair\nnpm run capability:show\n```\n\nFor adapter developers:\n\n```bash\nnpm run adapter:validate -- examples/adapters/slack-message.json\nnpm run adapter:test -- examples/adapters/slack-message.json\nnpm run brief:reconcile -- --adapter-signal examples/adapters/slack-message.json\n```\n\nAll commands preserve `externalWrite:false` and do not write to Gmail, Calendar, Slack, GitHub, or any external system.\n\n---\n\n## Updating\n\n```\nclawhub update worldloops\n```\n\nForce reinstall:\n\n```\nclawhub install worldloops --force\n```\n\n---\n\n## Agent Runtime Instructions\n\nThe following section is for OpenClaw agents, not end users.\n\n### Daily Brief routing\n\nWhen the user asks for any of the following:\n- Daily Brief\n- morning brief\n- daily summary\n- today's open loops\n- what did I miss\n- open loops today\n- Agent Execution Guard Daily Brief\n- brief me\n\nRun immediately — do not search the workspace first:\n\n```bash\nnpm run --silent guard:daily\n```\n\nReturn only the command output. Do not narrate the command unless the user asks.\nDo not show tool search steps.\nDo not inspect package.json first for Daily Brief requests.\n\nFor fixture-based Daily Brief examples:\n\n```bash\nnpm run --silent brief:daily -- --inbox scripts/fixtures/inbox\n```\n\nFor details mode (source identifiers):\n\n```bash\nnpm run --silent guard:daily -- --details\nnpm run --silent brief:daily -- --inbox scripts/fixtures/inbox --details\n```\n\nFor delivery-ready checks:\n\n```bash\nnpm run --silent brief:deliver -- --channel telegram\n```\n\n### Demo routing\n\nWhen the user asks for a demo, guard demo, execution guard demo, Agent Execution Guard demo, real signal governance demo, WorldLoops guard demo, or open-loop demo, run:\n\n```bash\nnpm run --silent demo\n```\n\nReturn only the compact Agent Execution Guard output.\n\n### Runtime invocation\n\nWhen the user asks you to run this skill, do the following:\n\n1. Change into the skill directory: `{baseDir}`\n2. Run the command with `--silent`\n3. Use provided local payload files when available\n4. If no payload files are provided, use the included fixture files\n5. Return the result directly\n6. Do not modify external systems\n\nSafe default command from the skill directory:\n\n```\nnpm run --silent demo\n```\n\nFor Daily Brief (all local inbox sources combined):\n\n```\nnpm run --silent guard:daily\nnpm run --silent brief:deliver\nnpm run --silent brief:deliver -- --dry-run\nnpm run --silent brief:deliver -- --channel telegram\n```\n\nFor Daily Brief preferences:\n\n```\nnpm run --silent brief:preferences\nnpm run --silent brief:preferences:set -- --time HH:MM\nnpm run --silent brief:preferences:set -- --channel <channel>\n```\n\nFor local payload handoff:\n\n```\nnpm run --silent guard:gmail -- --input <payload.json> --compact\nnpm run --silent guard:calendar -- --input <payload.json> --compact\nnpm run --silent guard:slack -- --input <payload.json> --compact\nnpm run --silent guard:github -- --input <payload.json> --compact\n```\n\n### Default API\n\nBy default, WorldLoops uses:\n\n```\nhttps://api.worldloops.ai\n```\n\nYou do not need to set `WORLDLOOPS_API_BASE_URL` for the default demo flow.\n\nTo use a different backend, set:\n\n```\nWORLDLOOPS_API_BASE_URL=https://your-worldloops-api.example.com\n```\n\nOptional:\n\n```\nWORLDLOOPS_API_KEY=your_api_key\n```\n\n### Output\n\nDefault output is compact, messenger-friendly Agent Execution Guard output.\nStructured JSON remains available through developer-oriented commands where supported.\n\n### Important rules\n\nDo not invent missing source data.\nDo not send messages.\nDo not send emails.\nDo not create drafts.\nDo not create or update calendar events.\nDo not write to Slack, Gmail, Calendar, GitHub, SMS, or push channels.\nDo not implement background daemons.\nDo not auto-install cron or launchd.\n\nReturn the result directly.\n\nFile v1.11.0:README.md\n\n# 🦞 WorldLoops — Agent Execution Guard\n\nAI agents can answer from a snapshot.\n\nWorldLoops tracks what remains unresolved.\n\nIt turns real work signals into governed open loops — detecting unfinished responsibility, classifying severity, proposing the next transition, adjudicating whether approval is required, recording decisions, and committing local state transitions with receipts.\n\n`externalWrite:false` is preserved throughout.\n\n**WorldLoops is an execution guard for AI agents — not a todo list.**\n\n---\n\n## Architecture\n\nOpenClaw reads signals.\nWorldLoops guards execution.\n\nWorldLoops does not need to own every connector.\nIf a host agent can read a signal, it can pass it to Agent Execution Guard.\n\n```\nOpenClaw (reads Gmail, Calendar, Slack, GitHub)\n    ↓\nalready-read payload\n    ↓\nAgent Execution Guard (WorldLoops)\n    ↓\ngoverned open loop → proposal → approval → local transition → receipt\n```\n\n---\n\n## OpenClaw Signal Handoff\n\nOpenClaw reads. Agent Execution Guard governs.\n\nNo connectors added.\nNo OAuth added.\nNo external write.\n\nA host agent (OpenClaw, gog, or any other) places an already-read payload into `.worldloops/inbox/`.\nAgent Execution Guard consumes it locally and produces a governed receipt.\n\n```\n.worldloops/inbox/openclaw-gmail-live.json      ← host agent places this\n    ↓\nnpm run guard:gmail -- --input .worldloops/inbox/openclaw-gmail-live.json --compact\n    ↓\nAgent Execution Guard\n    ↓\ngoverned open loop → proposal → receipt\nexternalWrite:false\n```\n\n### Accepted local payload formats\n\nAgent Execution Guard can consume local payloads in these forms:\n\n- **AdapterSignal JSON** — fully normalized signal with `source`, `sourceType`, `text`, `observedAt`, `externalWrite:false`\n- **OpenClaw-style handoff payloads** — already-normalized payloads from OpenClaw host agents\n- **gog-style Gmail payloads** — `{ \"messages\": [...] }` output from gog Gmail reads\n- **gog-style Calendar payloads** — `{ \"events\": [...] }` output from gog Calendar reads\n- **Slack host/plugin payloads** — `{ \"channel\": \"...\", \"messages\": [...] }` output from Slack host tools\n\ngog and OpenClaw read Gmail, Calendar, and Slack.\nAgent Execution Guard only consumes the local JSON output they produce.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved throughout.\n\nSupported handoff paths:\n\n```\n.worldloops/inbox/openclaw-gmail-live.json\n.worldloops/inbox/openclaw-calendar-live.json\n.worldloops/inbox/openclaw-slack-live.json\n.worldloops/inbox/openclaw-github-live.json\n```\n\nRedacted payload examples: [`examples/handoff/`](./examples/handoff/)\n\n---\n\n## OpenClaw + WorldLoops\n\nOpenClaw is excellent at observing possible signals from user-facing queries such as \"What did I miss?\" or \"What should I do today?\"\n\nWorldLoops starts after observation.\n\nIt takes OpenClaw-observed candidate signals and adjudicates whether they are real open loops, suppressing noise such as promotional messages, FYI-only updates, duplicates, and weak evidence. Accepted signals become stateful open loops that can move through To Do, Doing, Done, Snoozed, or Escalated.\n\n```\nOpenClaw observes candidate signals\n    ↓\nOpenClaw Observation Intake (WorldLoops)\n    ↓\nadjudicate: accepted | suppressed | attached_context | needs_review | state_transition\n    ↓\naccepted → open loop (todo)\nstate_transition → existing loop updated (done | escalated | snoozed)\nsuppressed → receipt saved, no open loop created\n    ↓\nMorning Brief: loop lifecycle summary\nexternalWrite:false\n```\n\n### Run\n\n```bash\nnpm run openclaw:intake -- --input scripts/fixtures/openclaw-signal-intake/mixed-observations.json\n```\n\n### Example output\n\n```\nOpenClaw observed 14 candidate signals.\n\nWorldLoops adjudication:\n- 3 accepted as new open loops\n- 2 state transitions applied\n- 6 suppressed as noise / no-action / promotional\n- 2 attached as related context\n- 1 needs review\n\nOpen loops created:\n- Review MCP deck for LG partnership by Friday\n- Follow up with David Kim on MCP proposal (closed_by_new_evidence)\n- Confirm invoice extension request with Google Collections (escalated_due_to_deadline)\n\nMorning Brief:\n- 1 loop still open\n- 1 loop closed by new evidence\n- 1 loop escalated\n- 6 observed signals suppressed as noise\n\nexternalWrite:false\n```\n\n### Adjudication verdicts\n\n| Verdict | Meaning |\n|---|---|\n| `accepted` | Real open loop — created in `.worldloops/open_loop_states.json` |\n| `suppressed` | Noise — promotional, FYI-only, duplicate, or weak evidence |\n| `attached_context` | Travel event or supporting document — linked as context, no new loop |\n| `needs_review` | Low-confidence signal — flagged for human review |\n| `state_transition` | New evidence updates an existing loop's status |\n\n### OpenClaw Observation format\n\n```json\n{\n  \"id\": \"obs-001\",\n  \"source\": \"gmail\",\n  \"sourceId\": \"gmail-mcp-followup-001\",\n  \"observedBy\": \"openclaw\",\n  \"userQuery\": \"What did I miss?\",\n  \"observationIntent\": \"new_loop\",\n  \"title\": \"Follow up with David Kim on MCP proposal\",\n  \"text\": \"Can you send me the updated specs by Friday?\",\n  \"timestamp\": \"2026-05-22T09:15:00Z\",\n  \"actor\": \"david.kim@example.com\",\n  \"dueAt\": \"2026-05-24T17:00:00Z\",\n  \"evidence\": { \"subject\": \"Re: MCP Proposal\", \"snippet\": \"...\" },\n  \"confidence\": 0.92,\n  \"relatedContext\": null\n}\n```\n\n---\n\n## 📋 Daily Brief\n\nGet one compact Agent Execution Guard summary from all three local handoff sources.\n\nOpenClaw/gog/host tools read Gmail, Calendar, and Slack.\nAgent Execution Guard reads only the local payload files they produce.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved throughout.\n\nNon-English action phrases such as Korean review requests are supported by the detector.\n\n### Expected payload locations\n\n```\n.worldloops/inbox/openclaw-gmail-live.json\n.worldloops/inbox/openclaw-calendar-live.json\n.worldloops/inbox/openclaw-slack-live.json\n```\n\n### Run\n\n```bash\nnpm run guard:daily\nnpm run brief:daily\n```\n\nDefault schedule: **09:00 local time**. Default delivery channel: **local**.\n\n### Example output — payloads connected\n\n```\n🦞 Agent Execution Guard Daily Brief\n\nSources:\n✅ Gmail\n✅ Calendar\n✅ Slack\n\nOpen loops:\n\n⚠️ Gmail — Review requested\nFrom: Test Reviewer <reviewer@example.com>\nSubject: Please review the submitted document\nWhy: review request detected\nEvidence: \"Please review the submitted document and send updates by EOD.\"\nAction: Review the submitted document or reply if needed\nAdjudication: requires_approval\n\n📅 Calendar — Important context\nEvent: Flight to Seoul (KE 24)\nWhen: May 21, 12:40 PM local time\nLocation: SFO\nReason: travel event detected, no action proposed\n\n💬 Slack — Action requested\nFrom: Dana\nChannel: #product\nWhy: review or approval request detected\nEvidence: \"Can you review this before release?\"\nAction: Review and comment\nAdjudication: requires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, calendar event, Slack message, or external change made.\n\nDaily Brief schedule: 09:00 local time — Delivery channel: local\n```\n\n### Example output — Gmail no-action with samples\n\nPromotional emails (airline offers, newsletters, discount campaigns, rewards updates) and messages containing \"no action required\" are automatically suppressed. They appear as no-action with an informational reason:\n\n```\n📧 Gmail — No actionable loop detected\nChecked: 2 messages\nSample:\n- From: promotions@airline.example.com / Subject: Earn double miles this weekend — promotion\n- From: noreply@rewards.example.com / Subject: Your rewards balance: 12,450 miles\nReason: promotional or informational message; no reply, approval, review, deadline, or follow-up request detected\n```\n\nFlight, airport, and travel calendar events appear as important context without requiring approval:\n\n```\n📅 Calendar — Important context\nEvent: Departure to ICN — Korean Air KE 24\nWhen: May 21, 12:40 PM local time\nLocation: SFO Terminal 2, Gate G1\nReason: travel event detected, no action proposed\n```\n\n### Example output — Slack not connected\n\n```\n⬜ Slack — not connected\nReason: no Slack payload found\nNext: configure OpenClaw channels.slack, then save payload to:\n.worldloops/inbox/openclaw-slack-live.json\n```\n\n### Example output — payloads not connected yet\n\n```\n🦞 Agent Execution Guard Daily Brief\n\nNo local handoff payloads found yet.\n\nAdd payloads here:\n- Gmail: .worldloops/inbox/openclaw-gmail-live.json\n- Calendar: .worldloops/inbox/openclaw-calendar-live.json\n- Slack: .worldloops/inbox/openclaw-slack-live.json\n\nThen run:\nnpm run guard:daily\n\nSource systems stay untouched.\nexternalWrite:false\n\nDaily Brief schedule: 09:00 local time — Delivery channel: local\n```\n\n### Preferences\n\n```bash\nnpm run brief:preferences\nnpm run brief:preferences:set -- --time 08:30\nnpm run brief:preferences:set -- --channel telegram\nnpm run brief:preferences:set -- --channel local\n```\n\nDaily Brief delivery channels include local, Telegram, Slack, Discord, SMS, and email.\n\n### Delivery\n\n```bash\nnpm run brief:deliver\nnpm run brief:deliver -- --dry-run\nnpm run brief:deliver -- --channel telegram\n```\n\nActual delivery to remote channels (Telegram, Slack, Discord, SMS, email) requires a host scheduler or integration.\nWorldLoops does not install cron, launchd, or background daemons.\nA host scheduler (e.g. OpenClaw) may call `npm run brief:deliver` at the configured time.\n\nIf no integration is active, the command exits 0 with a delivery-ready message.\n\nIf payload files are missing, the brief shows short onboarding instructions with expected file paths.\n\n---\n\n## 🚀 Quick Start\n\n```bash\nclawhub install worldloops\ncd ~/.openclaw/workspace/skills/worldloops\nnpm run demo\n```\n\n### Optional Safety Check\n\n```bash\nnpm run doctor\n```\n\nExpected result:\n\n```\n🦞 Agent Execution Guard\n\n🚨 High — Gmail callback requested\nState: open\n\nProposal:\nReview claim context and decide whether to call back or prepare a written response. This is a local planning action only — do not initiate any call, email, or external communication without an explicit decision.\n\nAdjudication:\nrequires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, call, or external change made.\n```\n\nFor the broader open-loop showcase:\n\n```bash\nnpm run wow\n```\n\n---\n\n## 🧭 What WorldLoops does\n\nWorldLoops does not just list tasks.\n\nIt turns real work signals into governed open loops:\n\n- detects unfinished responsibility\n- classifies severity\n- proposes the next transition\n- adjudicates whether approval is required\n- records user decisions\n- commits local state transitions\n- creates receipts\n- preserves `externalWrite:false`\n\n---\n\n## 🔁 From signal to governed transition\n\n```\nSignal\n  → Open Loop\n    → Severity\n      → Proposal\n        → Adjudication\n          → User Approval\n            → Local Transition\n              → Receipt\n                → externalWrite:false\n```\n\n**Example real signal:**\n\nA Gmail message says:\n> \"Please give me a call back. It is important that we discuss your injuries and this incident. Claim No. 26-99-554236.\"\n\n**WorldLoops produces:**\n\n```\n🚨 High — Claim contact request\nState: needs_response\nProposal: prepare callback or written response plan\nAdjudication: requires_approval\nBoundary: local_proposal_only\nSafety: externalWrite:false\n```\n\nMessenger-friendly output for Telegram, Slack, Discord, WhatsApp, SMS, and mobile chat:\n\n```bash\nnpm run brief:messenger -- --adapter-signal examples/adapters/gmail-claim-contact-request.example.json\n```\n\n**After user approval:**\n\n```\nDecision receipt created.\nLoop transitioned locally.\nNo email sent.\nNo call made.\nNo external system changed.\n```\n\nThis is the key product difference.\n\nNormal assistants summarize what they see.\nWorldLoops tracks what remains unresolved, governs what should happen next, and records every safe transition.\n\n---\n\n## 🚨 Severity-aware open loops\n\nWorldLoops classifies detected open loops by severity:\n\n- **Critical / High** → escalated immediately, requires approval\n- **Medium** → surfaced for review, proposal generated\n- **Low** → tracked but not escalated\n\nHigh-severity loops (like a legal claim follow-up) trigger proposals with `adjudication: requires_approval`.\n\n---\n\n## 🧑‍⚖️ Proposals, adjudication, and approval\n\nWhen an open loop requires action, WorldLoops creates a proposal:\n\n- what action is proposed\n- why it is required\n- what checks should be performed first\n- whether approval is required (`requiredReview: true`)\n- what boundary applies (`local_proposal_only`, `read_only`, etc.)\n\nNo proposal executes automatically.\nHuman approval is required before any local transition is committed.\n\n---\n\n## 🧾 Receipts and audit trail\n\nEvery approved decision creates a receipt:\n\n- transition receipt (records the loop state change)\n- proposal decision receipt (records the approval or rejection)\n\nReceipts are verifiable with:\n\n```bash\nnpm run receipts:verify\nnpm run state:check\n```\n\n---\n\n## 🛡 Safety boundary\n\nWorldLoops does not send emails.\nWorldLoops does not post chat messages.\nWorldLoops does not create calendar events.\nWorldLoops does not modify project tools.\nWorldLoops does not silently change external systems.\n\nBy default:\n\n```\nexternalWrite:false\n```\n\nProposal is not execution.\nApproval is not external write.\nPlan is not execution.\nContract is not external write.\n\n---\n\n## 🧰 Useful commands\n\nDefault demo (Agent Execution Guard compact):\n\n```bash\nnpm run demo\nnpm run guard:demo\n```\n\nDaily Brief (all local inbox sources):\n\n```bash\nnpm run guard:daily\nnpm run brief:daily\nnpm run brief:preferences\nnpm run brief:preferences:set -- --time 08:30\nnpm run brief:preferences:set -- --channel telegram\nnpm run brief:deliver\nnpm run brief:deliver -- --dry-run\nnpm run brief:deliver -- --channel telegram\n```\n\nBroader open-loop showcase:\n\n```bash\nnpm run wow\n```\n\nDoctor and state:\n\n```bash\nnpm run doctor\nnpm run doctor:mobile\nnpm run state:check\nnpm run receipts:verify\n```\n\nDeveloper tools:\n\n```bash\nnpm run wow:developer\nnpm run loop:list\nnpm run proposal:list\n```\n\nMessenger-friendly adapter output:\n\n```bash\nnpm run brief:messenger -- --adapter-signal examples/adapters/gmail-claim-contact-request.example.json\n```\n\nFor governed adapter invocation (already-read OpenClaw payloads):\n\n```bash\nnpm run guard:adapter -- --source gmail --input examples/adapters/openclaw-gmail-claim.json\nnpm run guard:adapter -- --source gmail --input examples/adapters/openclaw-gmail-claim.json --compact\nnpm run guard:gmail -- --input examples/adapters/openclaw-gmail-claim.json\nnpm run guard:calendar -- --input examples/adapters/openclaw-calendar-prep.json\nnpm run guard:slack -- --input examples/adapters/openclaw-slack-review-request.json\nnpm run guard:github -- --input examples/adapters/openclaw-github-pr-review.json\n```\n\nFor adapter developers:\n\n```bash\nnpm run adapter:validate -- examples/adapters/slack-message.json\nnpm run adapter:test -- examples/adapters/slack-message.json\nnpm run brief:reconcile -- --adapter-signal examples/adapters/gmail-claim-contact-request.example.json\n```\n\n---\n\n## 🧑‍💻 For developers\n\nWorldLoops is a local, safe-by-default world state layer for agent execution.\n\nSignals become loops.\nLoops become proposals.\nProposals become decisions.\nDecisions become plans.\nPlans become contracts.\nExecution remains governed.\n\n---\n\n## 📚 Advanced docs\n\n- Adapter guide: [ADAPTER_GUIDE.md](./ADAPTER_GUIDE.md)\n- Community adapter guide: [CONTRIBUTING.md](./CONTRIBUTING.md)\n- Release history: GitHub Releases\n- Changelog: [CHANGELOG.md](./CHANGELOG.md)\n\n---\n\n## 🚫 What WorldLoops is not\n\nWorldLoops is not:\n\n- a chatbot\n- a todo app\n- a Zapier clone\n- an uncontrolled automation runner\n- a tool that lets agents freely write to external systems\n- a replacement for human judgment\n\nWorldLoops keeps humans in control without making them the bottleneck.\n\n---\n\n## 📱 Telegram demo wrapper\n\n`src/scripts/telegramTestBot.ts` is a local demo wrapper for testing WorldLoops adjudication over Telegram. It consumes local OpenClaw-observed JSON payloads and does **not** connect to Gmail, Slack, Calendar, GitHub, or any external API.\n\nOpenClaw observes. WorldLoops adjudicates. This wrapper bridges the two for live demo.\n\n### Input priority\n\nWhen `/brief` is sent, the bot selects its input in this order:\n\n1. `.worldloops/inbox/openclaw-observations.json` — mode: `inbox-openclaw-observations`\n2. `.worldloops/inbox/telegram-observations.json` — mode: `inbox-telegram-observations`\n3. `scripts/fixtures/openclaw-signal-intake/mixed-observations.json` — mode: `demo-fixture`\n\n### Setup\n\nIf you have an OpenClaw gateway bot using the same Telegram token, stop it first to avoid a polling conflict (409).\n\n```sh\n# Seed the demo inbox with the mixed-observations fixture\nnpm run telegram:seed-demo\n\n# Start the bot\nnpm run telegram:test\n```\n\n### Commands\n\n| Command | Description |\n|---------|-------------|\n| `/help` | List all commands and natural language examples |\n| `/status` | Bot version and status |\n| `/source` | Which input file would be used and whether it exists |\n| `/brief` | Run WorldLoops adjudication and show open loops |\n| `/worldloops` | Same as `/brief` |\n\nNatural language also triggers `/brief`:\n\n- `\"오늘 내가 할 일이 뭐야?\"`\n- `\"뭐 빠진 거 없어?\"`\n- `\"어제 열린 루프 중 닫힌 거 있어?\"`\n\n### Sample payload\n\n`scripts/fixtures/openclaw-signal-intake/demo-observations.json` is a small 3-signal sample showing one actionable loop, one follow-up, and one suppressed promotional email.\n\n---\n\n## 🔗 Links\n\n- Website: https://worldloops.ai\n- API: https://api.worldloops.ai\n- ClawHub: worldloops\n\n---\n\nGive agents a world, not just tools.\n\nClose the loop.\nKeep the world safe.\n\nFile v1.11.0:_meta.json\n\n{\n  \"ownerId\": \"kn75v4md26j4p9yzt5kh46a5ws86xec5\",\n  \"slug\": \"worldloops\",\n  \"version\": \"1.11.0\",\n  \"publishedAt\": 1779473758095\n}\n\nFile v1.11.0:scripts/fixtures/gog-calendar-events.json\n\n{\n  \"events\": [\n    {\n      \"id\": \"cal-event-001\",\n      \"summary\": \"LG pricing strategy review\",\n      \"description\": \"No agenda attached yet. Prepare pricing assumptions and promotion scenarios before the meeting.\",\n      \"start\": \"2026-05-18T17:00:00.000Z\",\n      \"end\": \"2026-05-18T18:00:00.000Z\",\n      \"location\": \"Zoom\",\n      \"htmlLink\": \"https://calendar.google.com/calendar/event?eid=example\"\n    },\n    {\n      \"id\": \"cal-event-002\",\n      \"summary\": \"Customer workshop follow-up\",\n      \"description\": \"Send recap and next-step proposal after the workshop.\",\n      \"start\": \"2026-05-19T19:00:00.000Z\",\n      \"end\": \"2026-05-19T20:00:00.000Z\"\n    }\n  ],\n  \"count\": 2\n}\n\nFile v1.11.0:scripts/fixtures/gog-gmail-messages.json\n\n{\n  \"messages\": [\n    {\n      \"id\": \"gmail-msg-001\",\n      \"threadId\": \"thread-001\",\n      \"subject\": \"Follow-up on the LG proposal\",\n      \"from\": \"Sarah Chen <sarah@example.com>\",\n      \"snippet\": \"Just checking if you had a chance to review the proposal and send next steps.\",\n      \"date\": \"2026-05-16T10:30:00.000Z\",\n      \"labelIds\": [\"INBOX\", \"IMPORTANT\"]\n    },\n    {\n      \"id\": \"gmail-msg-002\",\n      \"threadId\": \"thread-002\",\n      \"subject\": \"Deck prep before tomorrow\",\n      \"from\": \"David Kim <david@example.com>\",\n      \"snippet\": \"Can you prepare the pricing deck before tomorrow's meeting?\",\n      \"date\": \"2026-05-16T11:30:00.000Z\",\n      \"labelIds\": [\"INBOX\"]\n    }\n  ],\n  \"count\": 2\n}\n\nFile v1.11.0:scripts/fixtures/gog-gmail-re-thread.json\n\n{\n  \"messages\": [\n    {\n      \"id\": \"gmail-msg-re-001\",\n      \"threadId\": \"thread-re-001\",\n      \"subject\": \"Re: [패스트캠퍼스] 스노우 / 클로드 기반 AI Agent 과정 출강 요청드립니다\",\n      \"from\": \"recruitment@fastcampus.co.kr\",\n      \"snippet\": \"안녕하세요. 지난번에 보내드린 출강 요청 건에 대해 답변 부탁드립니다.\",\n      \"date\": \"2026-05-17T09:15:00.000Z\"\n    },\n    {\n      \"id\": \"gmail-msg-re-002\",\n      \"threadId\": \"thread-re-002\",\n      \"subject\": \"Re: Following up on the proposal review\",\n      \"from\": \"partner@external.com\",\n      \"snippet\": \"Could you please send the updated deck when you have a chance?\",\n      \"date\": \"2026-05-17T10:00:00.000Z\"\n    },\n    {\n      \"id\": \"gmail-msg-re-003\",\n      \"threadId\": \"thread-re-003\",\n      \"subject\": \"Re: Team offsite logistics\",\n      \"from\": \"alice@internal.com\",\n      \"snippet\": \"Just wanted to loop you in on the schedule change.\",\n      \"date\": \"2026-05-17T11:00:00.000Z\"\n    }\n  ],\n  \"count\": 3\n}\n\nFile v1.11.0:scripts/fixtures/inbox-airline-promo-gmail/openclaw-calendar-live.json\n\n{\n  \"events\": [\n    {\n      \"id\": \"daily-brief-test-cal-airline-promo-001\",\n      \"summary\": \"Team sync\",\n      \"description\": \"Weekly team check-in.\",\n      \"start\": \"2026-05-21T16:00:00.000Z\",\n      \"end\": \"2026-05-21T16:30:00.000Z\",\n      \"location\": \"Conference room A\"\n    }\n  ],\n  \"count\": 1\n}\n\nFile v1.11.0:scripts/fixtures/inbox-airline-promo-gmail/openclaw-gmail-live.json\n\n{\n  \"messages\": [\n    {\n      \"id\": \"daily-brief-test-airline-promo-001\",\n      \"threadId\": \"daily-brief-test-thread-airline-promo-001\",\n      \"subject\": \"Earn double miles this weekend — Tap Air promotion\",\n      \"from\": \"promotions@tapair.example.com\",\n      \"snippet\": \"Earn double miles on all flights this weekend. Limited time offer. Book now. Manage preferences | Unsubscribe\",\n      \"date\": \"2026-05-21T07:00:00.000Z\",\n      \"labelIds\": [\"INBOX\", \"CATEGORY_PROMOTIONS\"]\n    },\n    {\n      \"id\": \"daily-brief-test-airline-promo-002\",\n      \"threadId\": \"daily-brief-test-thread-airline-promo-002\",\n      \"subject\": \"Your rewards balance: 12,450 miles\",\n      \"from\": \"noreply@rewards.example.com\",\n      \"snippet\": \"Your current miles balance is 12,450. Earn bonus miles when you book before May 31.\",\n      \"date\": \"2026-05-21T06:30:00.000Z\",\n      \"labelIds\": [\"INBOX\", \"CATEGORY_PROMOTIONS\"]\n    }\n  ],\n  \"count\": 2\n}\n\nFile v1.11.0:scripts/fixtures/inbox-airline-promo-gmail/openclaw-slack-live.json\n\n{\n  \"channel\": \"#general\",\n  \"channel_id\": \"C01PROMO01\",\n  \"messages\": [\n    {\n      \"user\": \"team_member\",\n      \"text\": \"Reminder: team lunch tomorrow at noon.\",\n      \"ts\": \"1716286800.000000\"\n    }\n  ],\n  \"count\": 1\n}\n\nFile v1.11.0:scripts/fixtures/inbox-calendar-airport-event/openclaw-calendar-live.json\n\n{\n  \"events\": [\n    {\n      \"id\": \"daily-brief-test-cal-airport-001\",\n      \"summary\": \"Departure to ICN — Korean Air KE 24\",\n      \"description\": \"Check in at Terminal 2. Boarding at 11:00. Seat 12A.\",\n      \"start\": \"2026-05-21T12:40:00.000Z\",\n      \"end\": \"2026-05-22T18:00:00.000Z\",\n      \"location\": \"SFO Terminal 2, Gate G1\"\n    }\n  ],\n  \"count\": 1\n}\n\nFile v1.11.0:scripts/fixtures/inbox-calendar-airport-event/openclaw-gmail-live.json\n\n{\n  \"messages\": [\n    {\n      \"id\": \"daily-brief-test-airport-gmail-001\",\n      \"threadId\": \"daily-brief-test-thread-airport-gmail-001\",\n      \"subject\": \"Safe travels — FYI\",\n      \"from\": \"Colleague <colleague@example.com>\",\n      \"snippet\": \"Just a heads-up that you're traveling tomorrow. No action needed on your end.\",\n      \"date\": \"2026-05-21T08:00:00.000Z\",\n      \"labelIds\": [\"INBOX\"]\n    }\n  ],\n  \"count\": 1\n}\n\nFile v1.11.0:scripts/fixtures/inbox-calendar-airport-event/openclaw-slack-live.json\n\n{\n  \"channel\": \"#travel\",\n  \"channel_id\": \"C01TRAVEL1\",\n  \"messages\": [\n    {\n      \"user\": \"team_member\",\n      \"text\": \"Safe travels everyone!\",\n      \"ts\": \"1716286800.000000\"\n    }\n  ],\n  \"count\": 1\n}\n\nArchive v1.10.0: 383 files, 383547 bytes\n\nFiles: ADAPTER_GUIDE.md (16817b), CHANGELOG.md (36656b), CONTRIBUTING.md (4966b), dist/adapter/runAdapterTest.d.ts (471b), dist/adapter/runAdapterTest.js (6702b), dist/adapter/toWorldLoopsSignal.d.ts (177b), dist/adapter/toWorldLoopsSignal.js (611b), dist/adapter/validateAdapterSignal.d.ts (171b), dist/adapter/validateAdapterSignal.js (2481b), dist/adapters/gogCalendar.d.ts (328b), dist/adapters/gogCalendar.js (4181b), dist/adapters/gogGmail.d.ts (315b), dist/adapters/gogGmail.js (3885b), dist/adapters/gogSnapshot.d.ts (546b), dist/adapters/gogSnapshot.js (4676b), dist/adapters/openclawCalendar.d.ts (292b), dist/adapters/openclawCalendar.js (2588b), dist/adapters/openclawCommitments.d.ts (307b), dist/adapters/openclawCommitments.js (1837b), dist/adapters/openclawGmail.d.ts (339b), dist/adapters/openclawGmail.js (2527b), dist/adapters/openclawMessages.d.ts (476b), dist/adapters/openclawMessages.js (2663b), dist/adapters/slackPayload.d.ts (526b), dist/adapters/slackPayload.js (5395b), dist/adapters/threadHints.d.ts (470b), dist/adapters/threadHints.js (1554b), dist/brief.d.ts (230b), dist/brief.js (1385b), dist/dailyBriefRunner.d.ts (2128b), dist/dailyBriefRunner.js (24423b), dist/data/proposalTemplates.d.ts (128b), dist/data/proposalTemplates.js (5697b), dist/notifications/prefs.d.ts (870b), dist/notifications/prefs.js (4876b), dist/notifications/state.d.ts (222b), dist/notifications/state.js (2351b), dist/openclawIntake.d.ts (2621b), dist/openclawIntake.js (13517b), dist/output/messengerFormat.d.ts (520b), dist/output/messengerFormat.js (4000b), dist/policy/capabilityBoundary.d.ts (140b), dist/policy/capabilityBoundary.js (2530b), dist/policy/severityPolicy.d.ts (215b), dist/policy/severityPolicy.js (1552b), dist/policy/stuckLoopPolicy.d.ts (369b), dist/policy/stuckLoopPolicy.js (2998b), dist/scripts/adapterTest.d.ts (11b), dist/scripts/adapterTest.js (2326b), dist/scripts/adapterValidate.d.ts (11b), dist/scripts/adapterValidate.js (3116b), dist/scripts/briefDaily.d.ts (11b), dist/scripts/briefDaily.js (5358b), dist/scripts/briefDeliver.d.ts (11b), dist/scripts/briefDeliver.js (3086b), dist/scripts/briefMessenger.d.ts (11b), dist/scripts/briefMessenger.js (368b), dist/scripts/briefPreferences.d.ts (11b), dist/scripts/briefPreferences.js (1778b), dist/scripts/briefPreferencesSet.d.ts (11b), dist/scripts/briefPreferencesSet.js (2861b), dist/scripts/briefReconcile.d.ts (11b), dist/scripts/briefReconcile.js (10703b), dist/scripts/capabilityShow.d.ts (11b), dist/scripts/capabilityShow.js (443b), dist/scripts/contractCreate.d.ts (11b), dist/scripts/contractCreate.js (8874b), dist/scripts/contractList.d.ts (11b), dist/scripts/contractList.js (2532b), dist/scripts/contractReview.d.ts (11b), dist/scripts/contractReview.js (2989b), dist/scripts/contractShow.d.ts (11b), dist/scripts/contractShow.js (4054b), dist/scripts/demoWow.d.ts (31b), dist/scripts/demoWow.js (4080b), dist/scripts/demoWowMobile.d.ts (11b), dist/scripts/demoWowMobile.js (1055b), dist/scripts/discoveryRun.d.ts (11b), dist/scripts/discoveryRun.js (5903b), dist/scripts/doctor.d.ts (11b)\n\nFile v1.10.0:SKILL.md\n\n---\nname: worldloops\ndescription: Agent Execution Guard by WorldLoops — a safe-by-default responsibility layer for AI agents that turns scattered work signals into governed open loops while preserving externalWrite:false.\nversion: \"1.10.0\"\nhomepage: https://github.com/swit001/worldloops\nmetadata: {\"openclaw\":{\"requires\":{\"bins\":[\"node\",\"npm\"]},\"envVars\":[{\"name\":\"WORLDLOOPS_API_BASE_URL\",\"required\":false,\"description\":\"Optional WorldLoops API base URL override. Defaults to https://api.worldloops.ai.\"},{\"name\":\"WORLDLOOPS_API_KEY\",\"required\":false,\"description\":\"Optional bearer token for hosted WorldLoops API.\"}],\"emoji\":\"🌐\",\"homepage\":\"https://github.com/swit001/worldloops\",\"skillKey\":\"worldloops\",\"tags\":[\"openclaw\",\"clawhub\",\"agentic-ai\",\"world-model\",\"executable-world\",\"open-loops\",\"open-loop-management\",\"workflow\",\"human-in-the-loop\",\"safe-by-default\",\"auditable-runtime\",\"stateful-loop-management\",\"agent-execution-guard\",\"execution-governance\",\"execution-contracts\",\"proposal-engine\",\"workflow-governance\"]}}\n---\n\n# Agent Execution Guard\n\nAgent Execution Guard is a WorldLoops skill for OpenClaw.\n\nIt turns signals from tools, messages, and workflows into governed open loops:\n\nSignal → Open Loop → Proposal → Approval → Local Transition → Receipt\n\nIt helps agents avoid unsafe or premature execution by keeping action proposals inside a safe, auditable boundary.\n\n---\n\n## Why it matters\n\nMost agents answer from a snapshot.\nWorldLoops tracks what remains unresolved.\n\nWhen an email, calendar event, Slack message, or GitHub notification implies unfinished responsibility, Agent Execution Guard surfaces it as a governed open loop — not a silent side effect.\n\nEvery proposed action requires approval before any local transition is committed.\nNo external system is changed.\n`externalWrite:false` is preserved throughout.\n\n---\n\n## Quick Start\n\n```bash\nclawhub install worldloops\ncd ~/.openclaw/workspace/skills/worldloops\nnpm run demo\n```\n\n### Optional Safety Check\n\n```bash\nnpm run doctor\n```\n\n---\n\n## Example demo output\n\n```bash\nnpm run demo\n```\n\n```\n🦞 Agent Execution Guard\n\n🚨 High — Gmail callback requested\nState: open\n\nProposal:\nReview claim context and decide whether to call back or prepare a written response. This is a local planning action only — do not initiate any call, email, or external communication without an explicit decision.\n\nAdjudication:\nrequires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, call, or external change made.\n```\n\n---\n\n## Safety posture\n\nAgent Execution Guard does not send emails.\nAgent Execution Guard does not post chat messages.\nAgent Execution Guard does not create calendar events.\nAgent Execution Guard does not modify external systems.\n\n```\n✅ 0 emails sent\n✅ 0 calendar events changed\n✅ 0 chat messages posted\n✅ 0 files modified\n✅ 0 project changes made\n✅ externalWrite:false enforced\n```\n\nOpenClaw reads signals.\nWorldLoops guards execution.\n\nWorldLoops does not need to own every connector.\nIf a host agent can read a signal, it can pass it to Agent Execution Guard.\n\n---\n\n## OpenClaw Signal Handoff\n\nOpenClaw reads. Agent Execution Guard governs.\n\nNo connectors added.\nNo OAuth added.\nNo external write.\n\nA host agent (OpenClaw, gog, or any other) reads signals from Gmail, Calendar, Slack, or GitHub.\nIt places the already-read payload as a local JSON file.\nAgent Execution Guard receives that payload, normalizes it into an `AdapterSignal`, and produces a governed receipt.\n\n```\nOpenClaw / gog reads Gmail / Calendar / Slack / GitHub\n    ↓\nalready-read payload → .worldloops/inbox/openclaw-gmail-live.json\n    ↓\nnpm run guard:gmail -- --input .worldloops/inbox/openclaw-gmail-live.json --compact\n    ↓\nAgent Execution Guard\n    ↓\ngoverned open loop → proposal → receipt\nexternalWrite:false\n```\n\n### Accepted local payload formats\n\nAgent Execution Guard can consume local payloads in these forms:\n\n- **AdapterSignal JSON** — fully normalized signal with `source`, `sourceType`, `text`, `observedAt`, `externalWrite:false`\n- **OpenClaw-style handoff payloads** — already-normalized payloads from OpenClaw host agents\n- **gog-style Gmail payloads** — `{ \"messages\": [...] }` output from gog Gmail reads\n- **gog-style Calendar payloads** — `{ \"events\": [...] }` output from gog Calendar reads\n- **Slack host/plugin payloads** — `{ \"channel\": \"...\", \"messages\": [...] }` output from Slack host tools\n\ngog and OpenClaw read Gmail, Calendar, and Slack.\nAgent Execution Guard only consumes the local JSON output they produce.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved throughout.\n\n### Local handoff directory\n\nHost agents should place payloads here:\n\n```\n.worldloops/inbox/openclaw-gmail-live.json\n.worldloops/inbox/openclaw-calendar-live.json\n.worldloops/inbox/openclaw-slack-live.json\n.worldloops/inbox/openclaw-github-live...","readmeExcerpt":"Skill: Agent Execution Guard Owner: swit001 Summary: Agent Execution Guard by WorldLoops — a safe-by-default responsibility layer for AI agents that turns scattered work signals into governed open loops while p... Tags: agentic-ai:0.3.0, auditable-runtime:0.3.0, clawhub:0.3.0, executable-world:0.3.0, human-in-the-loop:0.3.0, latest:1.13.0, open-loop-management:0.3.0, open-loops:0.3.0, openclaw:0.3.0, safe-by-default:","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"clawhub install worldloops\ncd ~/.openclaw/workspace/skills/worldloops\nnpm run demo"},{"language":"bash","snippet":"npm run doctor"},{"language":"bash","snippet":"npm run demo"},{"language":"text","snippet":"🦞 Agent Execution Guard\n\n🚨 High — Gmail callback requested\nState: open\n\nProposal:\nReview claim context and decide whether to call back or prepare a written response. This is a local planning action only — do not initiate any call, email, or external communication without an explicit decision.\n\nAdjudication:\nrequires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, call, or external change made."},{"language":"text","snippet":"✅ 0 emails sent\n✅ 0 calendar events changed\n✅ 0 chat messages posted\n✅ 0 files modified\n✅ 0 project changes made\n✅ externalWrite:false enforced"},{"language":"text","snippet":"OpenClaw / gog reads Gmail / Calendar / Slack / GitHub\n    ↓\nalready-read payload → .worldloops/inbox/openclaw-gmail-live.json\n    ↓\nnpm run guard:gmail -- --input .worldloops/inbox/openclaw-gmail-live.json --compact\n    ↓\nAgent Execution Guard\n    ↓\ngoverned open loop → proposal → receipt\nexternalWrite:false"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: worldloops\ndescription: Agent Execution Guard by WorldLoops — a safe-by-default responsibility layer for AI agents that turns scattered work signals into governed open loops while preserving externalWrite:false.\nversion: \"1.12.0\"\nhomepage: https://github.com/swit001/worldloops\nmetadata: {\"openclaw\":{\"requires\":{\"bins\":[\"node\",\"npm\"]},\"envVars\":[{\"name\":\"WORLDLOOPS_API_BASE_URL\",\"required\":false,\"description\":\"Optional WorldLoops API base URL override. Defaults to https://api.worldloops.ai.\"},{\"name\":\"WORLDLOOPS_API_KEY\",\"required\":false,\"description\":\"Optional bearer token for hosted WorldLoops API.\"}],\"emoji\":\"🌐\",\"homepage\":\"https://github.com/swit001/worldloops\",\"skillKey\":\"worldloops\",\"tags\":[\"openclaw\",\"clawhub\",\"agentic-ai\",\"world-model\",\"executable-world\",\"open-loops\",\"open-loop-management\",\"workflow\",\"human-in-the-loop\",\"safe-by-default\",\"auditable-runtime\",\"stateful-loop-management\",\"agent-execution-guard\",\"execution-governance\",\"execution-contracts\",\"proposal-engine\",\"workflow-governance\"]}}\n---\n\n# Agent Execution Guard\n\nAgent Execution Guard is a WorldLoops skill for OpenClaw.\n\nIt turns signals from tools, messages, and workflows into governed open loops:\n\nSignal → Open Loop → Proposal → Approval → Local Transition → Receipt\n\nIt helps agents avoid unsafe or premature execution by keeping action proposals inside a safe, auditable boundary.\n\n---\n\n## Why it matters\n\nMost agents answer from a snapshot.\nWorldLoops tracks what remains unresolved.\n\nWhen an email, calendar event, Slack message, or GitHub notification implies unfinished responsibility, Agent Execution Guard surfaces it as a governed open loop — not a silent side effect.\n\nEvery proposed action requires approval before any local transition is committed.\nNo external system is changed.\n`externalWrite:false` is preserved throughout.\n\n---\n\n## Quick Start\n\n```bash\nclawhub install worldloops\ncd ~/.openclaw/workspace/skills/worldloops\nnpm run demo\n```\n\n### Optional Safety Check\n\n```bash\nnpm run doctor\n```\n\n---\n\n## Example demo output\n\n```bash\nnpm run demo\n```\n\n```\n🦞 Agent Execution Guard\n\n🚨 High — Gmail callback requested\nState: open\n\nProposal:\nReview claim context and decide whether to call back or prepare a written response. This is a local planning action only — do not initiate any call, email, or external communication without an explicit decision.\n\nAdjudication:\nrequires_approval\n\n✅ Safe\nexternalWrite:false\nNo email, draft, call, or external change made.\n```\n\n---\n\n## Safety posture\n\nAgent Execution Guard does not send emails.\nAgent Execution Guard does not post chat messages.\nAgent Execution Guard does not create calendar events.\nAgent Execution Guard does not modify external systems.\n\n```\n✅ 0 emails sent\n✅ 0 calendar events changed\n✅ 0 chat messages posted\n✅ 0 files modified\n✅ 0 project changes made\n✅ externalWrite:false enforced\n```\n\nOpenClaw reads signals.\nWorldLoops guards execution.\n\nWorldLoops does not need to own every connector.\nIf a host agent can read a signal"},{"path":"README.md","content":"# 🦞 WorldLoops — Agent Execution Guard\n\nAI agents can answer from a snapshot.\n\nWorldLoops tracks what remains unresolved.\n\nIt turns real work signals into governed open loops — detecting unfinished responsibility, classifying severity, proposing the next transition, adjudicating whether approval is required, recording decisions, and committing local state transitions with receipts.\n\n`externalWrite:false` is preserved throughout.\n\n**WorldLoops is an execution guard for AI agents — not a todo list.**\n\n---\n\n## Architecture\n\nOpenClaw reads signals.\nWorldLoops guards execution.\n\nWorldLoops does not need to own every connector.\nIf a host agent can read a signal, it can pass it to Agent Execution Guard.\n\nOpenClaw observes and interprets source signals (Gmail, Calendar, Slack, GitHub) into `ObservedSignal[]`.\nWorldLoops reads those OpenClaw-authored interpreted observations and adjudicates their lifecycle state — into active open loops, attached context, suppression receipts, and transitions.\nWorldLoops does not connect to Gmail, Calendar, or Slack directly. `externalWrite:false` is preserved throughout.\n\n```\nOpenClaw (reads Gmail, Calendar, Slack, GitHub)\n    ↓\nalready-read payload\n    ↓\nAgent Execution Guard (WorldLoops)\n    ↓\ngoverned open loop → proposal → approval → local transition → receipt\n```\n\n---\n\n## OpenClaw Signal Handoff\n\nOpenClaw reads. Agent Execution Guard governs.\n\nNo connectors added.\nNo OAuth added.\nNo external write.\n\nA host agent (OpenClaw, gog, or any other) places an already-read payload into `.worldloops/inbox/`.\nAgent Execution Guard consumes it locally and produces a governed receipt.\n\n```\n.worldloops/inbox/openclaw-gmail-live.json      ← host agent places this\n    ↓\nnpm run guard:gmail -- --input .worldloops/inbox/openclaw-gmail-live.json --compact\n    ↓\nAgent Execution Guard\n    ↓\ngoverned open loop → proposal → receipt\nexternalWrite:false\n```\n\n### Accepted local payload formats\n\nAgent Execution Guard can consume local payloads in these forms:\n\n- **AdapterSignal JSON** — fully normalized signal with `source`, `sourceType`, `text`, `observedAt`, `externalWrite:false`\n- **OpenClaw-style handoff payloads** — already-normalized payloads from OpenClaw host agents\n- **gog-style Gmail payloads** — `{ \"messages\": [...] }` output from gog Gmail reads\n- **gog-style Calendar payloads** — `{ \"events\": [...] }` output from gog Calendar reads\n- **Slack host/plugin payloads** — `{ \"channel\": \"...\", \"messages\": [...] }` output from Slack host tools\n\ngog and OpenClaw read Gmail, Calendar, and Slack.\nAgent Execution Guard only consumes the local JSON output they produce.\nNo Gmail, Calendar, or Slack API call is made by WorldLoops.\n`externalWrite:false` is preserved throughout.\n\nSupported handoff paths:\n\n```\n.worldloops/inbox/openclaw-gmail-live.json\n.worldloops/inbox/openclaw-calendar-live.json\n.worldloops/inbox/openclaw-slack-live.json\n.worldloops/inbox/openclaw-github-live.json\n```\n\nRedacted payload examples: [`examples/handoff/`](./examples"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75v4md26j4p9yzt5kh46a5ws86xec5\",\n  \"slug\": \"worldloops\",\n  \"version\": \"1.13.0\",\n  \"publishedAt\": 1779487590194\n}"},{"path":"scripts/fixtures/gog-calendar-events.json","content":"{\n  \"events\": [\n    {\n      \"id\": \"cal-event-001\",\n      \"summary\": \"LG pricing strategy review\",\n      \"description\": \"No agenda attached yet. Prepare pricing assumptions and promotion scenarios before the meeting.\",\n      \"start\": \"2026-05-18T17:00:00.000Z\",\n      \"end\": \"2026-05-18T18:00:00.000Z\",\n      \"location\": \"Zoom\",\n      \"htmlLink\": \"https://calendar.google.com/calendar/event?eid=example\"\n    },\n    {\n      \"id\": \"cal-event-002\",\n      \"summary\": \"Customer workshop follow-up\",\n      \"description\": \"Send recap and next-step proposal after the workshop.\",\n      \"start\": \"2026-05-19T19:00:00.000Z\",\n      \"end\": \"2026-05-19T20:00:00.000Z\"\n    }\n  ],\n  \"count\": 2\n}"},{"path":"scripts/fixtures/gog-gmail-messages.json","content":"{\n  \"messages\": [\n    {\n      \"id\": \"gmail-msg-001\",\n      \"threadId\": \"thread-001\",\n      \"subject\": \"Follow-up on the LG proposal\",\n      \"from\": \"Sarah Chen <sarah@example.com>\",\n      \"snippet\": \"Just checking if you had a chance to review the proposal and send next steps.\",\n      \"date\": \"2026-05-16T10:30:00.000Z\",\n      \"labelIds\": [\"INBOX\", \"IMPORTANT\"]\n    },\n    {\n      \"id\": \"gmail-msg-002\",\n      \"threadId\": \"thread-002\",\n      \"subject\": \"Deck prep before tomorrow\",\n      \"from\": \"David Kim <david@example.com>\",\n      \"snippet\": \"Can you prepare the pricing deck before tomorrow's meeting?\",\n      \"date\": \"2026-05-16T11:30:00.000Z\",\n      \"labelIds\": [\"INBOX\"]\n    }\n  ],\n  \"count\": 2\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1541,"uniquenessScore":43,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T13:52:21.106Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T13:52:21.106Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T22:09:18.488Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}