{"id":"3cbd1792-9d13-4a10-8be4-2a95615bf657","entityType":"agent","slug":"clawhub-madebydia-nag","name":"Nag","canonicalUrl":"https://www.xpersona.co/agent/clawhub-madebydia-nag","canonicalPath":"/agent/clawhub-madebydia-nag","generatedAt":"2026-10-10T17:35:37.581Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T14:17:45.066Z","emptyReason":null},"description":"Persistent reminder system that keeps bugging you until you confirm completion. Use when setting up recurring reminders, nag schedules, or any task that need... Skill: Nag Owner: madebydia Summary: Persistent reminder system that keeps bugging you until you confirm completion. Use when setting up recurring reminders, nag schedules, or any task that need... Tags: latest:1.0.4 Version history: v1.0.4 | 2026-06-07T03:31:49.101Z | user Refresh publisher identity and metadata for madebydia v1.0.3 | 2026-03-24T12:31:29.912Z | auto Version 1.0.3 of the nag skill - No file changes d","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.4K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s176b3312npmthbt2chf2mccw183grfh:nag","sourceUrl":"https://clawhub.ai/madebydia/nag","homepage":"https://clawhub.ai/madebydia/skills/nag","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/madebydia/nag","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/madebydia/skills/nag","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":44,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Persistent reminder system that keeps bugging you until you confirm completion. Use when setting up recurring reminders, nag schedules, or any task that need..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T14:17:45.066Z","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-10T14:17:45.066Z","emptyReason":null},"stars":null,"forks":null,"downloads":1391,"packageName":null,"latestVersion":"1.0.4","tractionLabel":"1.4K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T14:17:45.066Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T14:17:45.066Z","lastCrawledAt":"2026-10-10T14:17:45.066Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T14:17:45.066Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.4","createdAt":"2026-06-07T03:31:49.101Z","changelog":"Refresh publisher identity and metadata for madebydia","fileCount":6,"zipByteSize":5973},{"version":"1.0.3","createdAt":"2026-03-24T12:31:29.912Z","changelog":"Version 1.0.3 of the nag skill - No file changes detected in this release. - No updates to user-facing behavior or documentation. - All existing functionality, setup, and configuration remain unchanged.","fileCount":6,"zipByteSize":6026},{"version":"1.0.0","createdAt":"2026-02-15T22:02:22.960Z","changelog":"Initial release of the persistent \"nag\" reminder system. - Introduces configurable, recurring reminders that persist until user confirmation. - Supports daily automatic resets and optional restrictions by day of week. - Features customizable nag windows, escalating urgency after repeated ignores, and natural-language confirmation matching. - Allows flexible message generation based on tone and nag count, including creative escalation. - Not for one-shot or immediate-action reminders—use cron for those scenarios.","fileCount":5,"zipByteSize":4696}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s176b3312npmthbt2chf2mccw183grfh:nag","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"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-madebydia-nag/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-nag/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-nag/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-nag/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-nag/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-nag/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-10T17:35:37.580Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-nag/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-nag/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-nag/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-nag/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":"high","updatedAt":"2026-10-10T14:17:45.066Z","emptyReason":null},"readme":"Skill: Nag\n\nOwner: madebydia\n\nSummary: Persistent reminder system that keeps bugging you until you confirm completion. Use when setting up recurring reminders, nag schedules, or any task that need...\n\nTags: latest:1.0.4\n\nVersion history:\n\nv1.0.4 | 2026-06-07T03:31:49.101Z | user\n\nRefresh publisher identity and metadata for madebydia\n\nv1.0.3 | 2026-03-24T12:31:29.912Z | auto\n\nVersion 1.0.3 of the nag skill\n\n- No file changes detected in this release.\n- No updates to user-facing behavior or documentation.\n- All existing functionality, setup, and configuration remain unchanged.\n\nv1.0.0 | 2026-02-15T22:02:22.960Z | user\n\nInitial release of the persistent \"nag\" reminder system.\n\n- Introduces configurable, recurring reminders that persist until user confirmation.\n- Supports daily automatic resets and optional restrictions by day of week.\n- Features customizable nag windows, escalating urgency after repeated ignores, and natural-language confirmation matching.\n- Allows flexible message generation based on tone and nag count, including creative escalation.\n- Not for one-shot or immediate-action reminders—use cron for those scenarios.\n\nArchive index:\n\nArchive v1.0.4: 6 files, 5973 bytes\n\nFiles: README.md (1722b), references/config-examples.md (1133b), scripts/migrate-heartbeat.sh (800b), skill-card.md (2063b), SKILL.md (4995b), _meta.json (122b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: nag\ndescription: Persistent reminder system that keeps bugging you until you confirm completion. Use when setting up recurring reminders, nag schedules, or any task that needs follow-up until acknowledged. Handles daily resets, configurable nag windows, escalating urgency, and natural-language confirmation matching. Do NOT use for one-shot reminders (use cron instead) or time-sensitive alerts that need immediate action (use cron with wakeMode now).\n---\n\n# Nag — Persistent Reminders\n\nNag manages reminders that don't give up. Each reminder has a first-fire time, a nag window, and resets daily.\n\n## When to Use\n\n- Recurring daily habits (supplements, workouts, practice)\n- Tasks that get ignored/forgotten without follow-up\n- Anything where \"remind me once\" isn't enough\n\n## When NOT to Use\n\n- One-shot reminders (\"remind me in 20 minutes\") — use a cron job with `schedule.kind: \"at\"`\n- Time-critical alerts that can't wait for a heartbeat cycle\n- Reminders that don't need confirmation (informational only)\n\n## Setup\n\n### 1. State File\n\nCreate `memory/nag-state.json` in the workspace:\n\n```json\n{\n  \"date\": \"2026-02-15\",\n  \"reminders\": {}\n}\n```\n\nThe date field triggers automatic daily resets — when today's date differs from the stored date, all reminders reset to unconfirmed.\n\n### 2. Reminder Config\n\nCreate `nag-config.json` in the workspace root:\n\n```json\n{\n  \"reminders\": [\n    {\n      \"id\": \"morning-supplements\",\n      \"label\": \"morning supplements\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"took them\", \"did it\", \"yes\"],\n      \"tone\": \"friendly but persistent, escalate to ALL CAPS drama after 3 nags\",\n      \"messages\": {\n        \"first\": \"Time for morning supplements!\"\n      }\n    }\n  ]\n}\n```\n\n**Fields:**\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `id` | yes | Unique identifier, used as key in state file |\n| `label` | yes | Human-readable name for display |\n| `cronFirst` | yes | Cron expression for initial reminder (create a cron job for this) |\n| `nagAfter` | yes | Time (HH:MM, 24h) after which heartbeat nags begin |\n| `confirmPatterns` | yes | Array of phrases that mark the reminder as done (case-insensitive, substring match) |\n| `tone` | no | Personality guidance for generating nag messages. If absent, use a neutral friendly tone. The model has creative liberty to vary the wording each nag. |\n| `messages.first` | no | Text sent by the cron job for the initial reminder. If absent, generate from label + tone. |\n| `messages.nag` | no | Suggested nag text. If absent, generate contextually from label + tone + nagCount. |\n| `messages.escalate` | no | Suggested text after 3+ ignored nags. If absent, generate with increased urgency from tone. |\n| `days` | no | Array of weekday names to restrict when this reminder fires (e.g. `[\"monday\", \"wednesday\", \"friday\"]`). Omit for every day. |\n\nFor more examples, see [references/config-examples.md](references/config-examples.md).\n\n**Message generation:** When `messages.nag` or `messages.escalate` are absent, generate them on the fly using the `label` and `tone` fields. Vary the wording each time — don't repeat the same nag verbatim. Use nagCount to calibrate urgency: low count = gentle, 3+ = escalated.\n\n### 3. Wire Up Cron + Heartbeat\n\n**For each reminder**, create a cron job that fires `messages.first` at the `cronFirst` schedule.\n\n**In HEARTBEAT.md**, add a nag check block:\n\n```\n## Nag Check\nRead nag-config.json and memory/nag-state.json.\nFor each reminder in nag-config.json:\n- If date in state differs from today, reset all reminders (set confirmed: false, nagCount: 0).\n- Skip if today's weekday isn't in the reminder's `days` array (if specified).\n- If current time is after `nagAfter` and confirmed is false: send a nag message to the user.\n  - Generate the message from the reminder's label and tone (or use messages.nag if provided).\n  - If nagCount >= 3, escalate urgency (use messages.escalate if provided, otherwise generate with more intensity).\n  - Increment nagCount in state.\n- Do NOT nag before the nagAfter time.\n```\n\n### 4. Confirmation Handling\n\nWhen the user sends a message matching any `confirmPatterns` for a reminder, update `memory/nag-state.json`:\n\n```json\n{\n  \"date\": \"2026-02-15\",\n  \"reminders\": {\n    \"morning-supplements\": {\n      \"confirmed\": true,\n      \"confirmedAt\": \"09:06\",\n      \"nagCount\": 1\n    }\n  }\n}\n```\n\nMatch confirmation by checking if any pattern appears as a substring (case-insensitive) in the user's message. When ambiguous (multiple reminders could match), match the one currently in its nag window.\n\n## Adding a New Reminder\n\n1. Add entry to `nag-config.json`\n2. Create a cron job for the `cronFirst` schedule\n3. The heartbeat nag block handles everything else automatically\n\n## Removing a Reminder\n\n1. Remove entry from `nag-config.json`\n2. Remove or disable the corresponding cron job\n3. Optionally clean up its key from `memory/nag-state.json`\n\nFile v1.0.4:README.md\n\n# nag\n\n\nBuilt by [@madebydia](https://x.com/madebydia)\n\n[![ClawHub](https://img.shields.io/badge/ClawHub-nag-blue)](https://clawhub.ai/madebydia/nag)\n\nAn OpenClaw skill for persistent reminders that won't shut up until you confirm.\n\nMost reminder tools fire once and forget. Nag keeps bugging you — with escalating urgency — until you actually do the thing.\n\n## How it works\n\n1. **Cron job** fires the initial reminder at a scheduled time\n2. **Heartbeat** checks if you've confirmed — if not, nags you\n3. **Escalation** kicks in after 3 ignored nags\n4. **Daily reset** — everything starts fresh each day\n\n## Features\n\n- **Config-driven** — define reminders in one JSON file\n- **Tone field** — give the model creative liberty to vary nag messages, or provide exact wording\n- **Natural-language confirmation** — \"took them\", \"done\", \"yes\" all work\n- **Day filtering** — restrict reminders to specific weekdays\n- **Escalation** — messages get more urgent the longer you ignore them\n\n## Setup\n\nSee [SKILL.md](SKILL.md) for full setup instructions.\n\nQuick version:\n1. Create `nag-config.json` with your reminders\n2. Create `memory/nag-state.json` for tracking\n3. Add the nag check block to your `HEARTBEAT.md`\n4. Create cron jobs for each reminder's first fire\n\n## Example config\n\n```json\n{\n  \"reminders\": [\n    {\n      \"id\": \"morning-vitamins\",\n      \"label\": \"morning vitamins\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"did it\"],\n      \"tone\": \"friendly but persistent, get dramatic after 3 nags\"\n    }\n  ]\n}\n```\n\n## Install\n\n```bash\nopenclaw skills install nag\n```\n\nOr browse it on [ClawHub](https://clawhub.ai/madebydia/nag).\n\n## License\n\nMIT\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn711gxkbyw34qye3faaqw24yn8163fm\",\n  \"slug\": \"nag\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1780803109101\n}\n\nFile v1.0.4:references/config-examples.md\n\n# Nag Config Examples\n\n## Daily habit with tone-based messages\n\n```json\n{\n  \"reminders\": [\n    {\n      \"id\": \"morning-vitamins\",\n      \"label\": \"morning vitamins\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"took them\", \"did it\"],\n      \"tone\": \"friendly but persistent, get dramatic after 3 nags\",\n      \"messages\": {\n        \"first\": \"Morning vitamins!\"\n      }\n    }\n  ]\n}\n```\n\n## Workout reminder with hardcoded messages\n\n```json\n{\n  \"id\": \"daily-workout\",\n  \"label\": \"workout\",\n  \"cronFirst\": \"0 10 * * *\",\n  \"nagAfter\": \"14:00\",\n  \"confirmPatterns\": [\"worked out\", \"lifted\", \"trained\", \"exercised\", \"ran\"],\n  \"tone\": \"coach energy\",\n  \"messages\": {\n    \"first\": \"Workout today?\",\n    \"nag\": \"Have you worked out yet today?\",\n    \"escalate\": \"The iron isn't going to lift itself\"\n  }\n}\n```\n\n## Weekly reminder (specific days)\n\n```json\n{\n  \"id\": \"grocery-list\",\n  \"label\": \"weekly grocery list\",\n  \"cronFirst\": \"0 9 * * 0\",\n  \"nagAfter\": \"11:00\",\n  \"days\": [\"sunday\"],\n  \"confirmPatterns\": [\"ordered\", \"list done\", \"groceries ordered\"],\n  \"tone\": \"matter-of-fact\"\n}\n```\n\nFile v1.0.4:skill-card.md\n\n## Description:\n\nPersistent reminder system that keeps bugging you until you confirm completion.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[madebydia](https://clawhub.ai/user/madebydia)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agent users use Nag to set up recurring reminders that continue through cron and heartbeat checks until the user confirms completion.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Persistent cron jobs and heartbeat checks can keep reminding the user across sessions after the reminder is no longer wanted.\n\nMitigation: Review each schedule before installing and remove the related cron job plus nag-config and state entries when the reminder should stop.\n\nRisk: Broad confirmation phrases may mark the wrong reminder as complete when multiple reminders are active.\n\nMitigation: Use specific confirmation patterns and resolve ambiguous matches against reminders that are currently in their nag window.\n\nRisk: Tone-based escalation can generate messages that are more forceful than intended.\n\nMitigation: Set explicit message text or conservative tone guidance for reminders where wording matters.\n\n## Reference(s):\n\n- [Nag Config Examples](references/config-examples.md)\n- [ClawHub Nag Skill Page](https://clawhub.ai/madebydia/skills/nag)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration]\n\n**Output Format:** [Markdown instructions with JSON configuration examples and shell script output]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces reminder setup guidance, heartbeat instructions, cron scheduling guidance, and state/configuration examples.]\n\n## Skill Version(s):\n\n1.0.4 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.3: 6 files, 6026 bytes\n\nFiles: README.md (1463b), references/config-examples.md (1133b), scripts/migrate-heartbeat.sh (800b), skill-card.md (2646b), SKILL.md (4995b), _meta.json (122b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: nag\ndescription: Persistent reminder system that keeps bugging you until you confirm completion. Use when setting up recurring reminders, nag schedules, or any task that needs follow-up until acknowledged. Handles daily resets, configurable nag windows, escalating urgency, and natural-language confirmation matching. Do NOT use for one-shot reminders (use cron instead) or time-sensitive alerts that need immediate action (use cron with wakeMode now).\n---\n\n# Nag — Persistent Reminders\n\nNag manages reminders that don't give up. Each reminder has a first-fire time, a nag window, and resets daily.\n\n## When to Use\n\n- Recurring daily habits (supplements, workouts, practice)\n- Tasks that get ignored/forgotten without follow-up\n- Anything where \"remind me once\" isn't enough\n\n## When NOT to Use\n\n- One-shot reminders (\"remind me in 20 minutes\") — use a cron job with `schedule.kind: \"at\"`\n- Time-critical alerts that can't wait for a heartbeat cycle\n- Reminders that don't need confirmation (informational only)\n\n## Setup\n\n### 1. State File\n\nCreate `memory/nag-state.json` in the workspace:\n\n```json\n{\n  \"date\": \"2026-02-15\",\n  \"reminders\": {}\n}\n```\n\nThe date field triggers automatic daily resets — when today's date differs from the stored date, all reminders reset to unconfirmed.\n\n### 2. Reminder Config\n\nCreate `nag-config.json` in the workspace root:\n\n```json\n{\n  \"reminders\": [\n    {\n      \"id\": \"morning-supplements\",\n      \"label\": \"morning supplements\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"took them\", \"did it\", \"yes\"],\n      \"tone\": \"friendly but persistent, escalate to ALL CAPS drama after 3 nags\",\n      \"messages\": {\n        \"first\": \"Time for morning supplements!\"\n      }\n    }\n  ]\n}\n```\n\n**Fields:**\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `id` | yes | Unique identifier, used as key in state file |\n| `label` | yes | Human-readable name for display |\n| `cronFirst` | yes | Cron expression for initial reminder (create a cron job for this) |\n| `nagAfter` | yes | Time (HH:MM, 24h) after which heartbeat nags begin |\n| `confirmPatterns` | yes | Array of phrases that mark the reminder as done (case-insensitive, substring match) |\n| `tone` | no | Personality guidance for generating nag messages. If absent, use a neutral friendly tone. The model has creative liberty to vary the wording each nag. |\n| `messages.first` | no | Text sent by the cron job for the initial reminder. If absent, generate from label + tone. |\n| `messages.nag` | no | Suggested nag text. If absent, generate contextually from label + tone + nagCount. |\n| `messages.escalate` | no | Suggested text after 3+ ignored nags. If absent, generate with increased urgency from tone. |\n| `days` | no | Array of weekday names to restrict when this reminder fires (e.g. `[\"monday\", \"wednesday\", \"friday\"]`). Omit for every day. |\n\nFor more examples, see [references/config-examples.md](references/config-examples.md).\n\n**Message generation:** When `messages.nag` or `messages.escalate` are absent, generate them on the fly using the `label` and `tone` fields. Vary the wording each time — don't repeat the same nag verbatim. Use nagCount to calibrate urgency: low count = gentle, 3+ = escalated.\n\n### 3. Wire Up Cron + Heartbeat\n\n**For each reminder**, create a cron job that fires `messages.first` at the `cronFirst` schedule.\n\n**In HEARTBEAT.md**, add a nag check block:\n\n```\n## Nag Check\nRead nag-config.json and memory/nag-state.json.\nFor each reminder in nag-config.json:\n- If date in state differs from today, reset all reminders (set confirmed: false, nagCount: 0).\n- Skip if today's weekday isn't in the reminder's `days` array (if specified).\n- If current time is after `nagAfter` and confirmed is false: send a nag message to the user.\n  - Generate the message from the reminder's label and tone (or use messages.nag if provided).\n  - If nagCount >= 3, escalate urgency (use messages.escalate if provided, otherwise generate with more intensity).\n  - Increment nagCount in state.\n- Do NOT nag before the nagAfter time.\n```\n\n### 4. Confirmation Handling\n\nWhen the user sends a message matching any `confirmPatterns` for a reminder, update `memory/nag-state.json`:\n\n```json\n{\n  \"date\": \"2026-02-15\",\n  \"reminders\": {\n    \"morning-supplements\": {\n      \"confirmed\": true,\n      \"confirmedAt\": \"09:06\",\n      \"nagCount\": 1\n    }\n  }\n}\n```\n\nMatch confirmation by checking if any pattern appears as a substring (case-insensitive) in the user's message. When ambiguous (multiple reminders could match), match the one currently in its nag window.\n\n## Adding a New Reminder\n\n1. Add entry to `nag-config.json`\n2. Create a cron job for the `cronFirst` schedule\n3. The heartbeat nag block handles everything else automatically\n\n## Removing a Reminder\n\n1. Remove entry from `nag-config.json`\n2. Remove or disable the corresponding cron job\n3. Optionally clean up its key from `memory/nag-state.json`\n\nFile v1.0.3:README.md\n\n# nag\n\nAn OpenClaw skill for persistent reminders that won't shut up until you confirm.\n\nMost reminder tools fire once and forget. Nag keeps bugging you — with escalating urgency — until you actually do the thing.\n\n## How it works\n\n1. **Cron job** fires the initial reminder at a scheduled time\n2. **Heartbeat** checks if you've confirmed — if not, nags you\n3. **Escalation** kicks in after 3 ignored nags\n4. **Daily reset** — everything starts fresh each day\n\n## Features\n\n- **Config-driven** — define reminders in one JSON file\n- **Tone field** — give the model creative liberty to vary nag messages, or provide exact wording\n- **Natural-language confirmation** — \"took them\", \"done\", \"yes\" all work\n- **Day filtering** — restrict reminders to specific weekdays\n- **Escalation** — messages get more urgent the longer you ignore them\n\n## Setup\n\nSee [SKILL.md](SKILL.md) for full setup instructions.\n\nQuick version:\n1. Create `nag-config.json` with your reminders\n2. Create `memory/nag-state.json` for tracking\n3. Add the nag check block to your `HEARTBEAT.md`\n4. Create cron jobs for each reminder's first fire\n\n## Example config\n\n```json\n{\n  \"reminders\": [\n    {\n      \"id\": \"morning-vitamins\",\n      \"label\": \"morning vitamins\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"did it\"],\n      \"tone\": \"friendly but persistent, get dramatic after 3 nags\"\n    }\n  ]\n}\n```\n\n## License\n\nMIT\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn711gxkbyw34qye3faaqw24yn8163fm\",\n  \"slug\": \"nag\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1774355489912\n}\n\nFile v1.0.3:references/config-examples.md\n\n# Nag Config Examples\n\n## Daily habit with tone-based messages\n\n```json\n{\n  \"reminders\": [\n    {\n      \"id\": \"morning-vitamins\",\n      \"label\": \"morning vitamins\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"took them\", \"did it\"],\n      \"tone\": \"friendly but persistent, get dramatic after 3 nags\",\n      \"messages\": {\n        \"first\": \"Morning vitamins!\"\n      }\n    }\n  ]\n}\n```\n\n## Workout reminder with hardcoded messages\n\n```json\n{\n  \"id\": \"daily-workout\",\n  \"label\": \"workout\",\n  \"cronFirst\": \"0 10 * * *\",\n  \"nagAfter\": \"14:00\",\n  \"confirmPatterns\": [\"worked out\", \"lifted\", \"trained\", \"exercised\", \"ran\"],\n  \"tone\": \"coach energy\",\n  \"messages\": {\n    \"first\": \"Workout today?\",\n    \"nag\": \"Have you worked out yet today?\",\n    \"escalate\": \"The iron isn't going to lift itself\"\n  }\n}\n```\n\n## Weekly reminder (specific days)\n\n```json\n{\n  \"id\": \"grocery-list\",\n  \"label\": \"weekly grocery list\",\n  \"cronFirst\": \"0 9 * * 0\",\n  \"nagAfter\": \"11:00\",\n  \"days\": [\"sunday\"],\n  \"confirmPatterns\": [\"ordered\", \"list done\", \"groceries ordered\"],\n  \"tone\": \"matter-of-fact\"\n}\n```\n\nFile v1.0.3:skill-card.md\n\n## Description: <br>\nPersistent reminder system that keeps bugging you until you confirm completion. Use when setting up recurring reminders, nag schedules, or any task that needs follow-up until acknowledged. Handles daily resets, configurable nag windows, escalating urgency, and natural-language confirmation matching. Do NOT use for one-shot reminders (use cron instead) or time-sensitive alerts that need immediate action (use cron with wakeMode now). <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[meimakes](https://clawhub.ai/user/meimakes) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agent users use Nag to set up recurring reminders that persist through cron and heartbeat checks until the user confirms completion. It is suited for daily habits and follow-up tasks that need repeated prompting, not one-shot reminders or time-critical alerts. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Persistent heartbeat reminders can create unwanted repeated prompts if the reminder window, stop conditions, or frequency are too broad. <br>\nMitigation: Review and set reminder frequency, stop conditions, quiet hours, and nagAfter windows before enabling the skill. <br>\nRisk: The skill stores reminder status in local configuration and state files. <br>\nMitigation: Confirm where nag-config.json and memory/nag-state.json will be stored and avoid putting sensitive task details in those files. <br>\nRisk: It is not designed for one-shot reminders or time-critical alerts that require immediate delivery. <br>\nMitigation: Use cron or an immediate alert mechanism for one-shot reminders and time-sensitive alerts. <br>\n\n\n## Reference(s): <br>\n- [Nag configuration examples](references/config-examples.md) <br>\n- [ClawHub skill page](https://clawhub.ai/meimakes/nag) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, configuration, shell commands, markdown] <br>\n**Output Format:** [Markdown with JSON configuration examples and shell command guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces reminder setup instructions, HEARTBEAT.md guidance, nag-config.json examples, and local state file guidance.] <br>\n\n## Skill Version(s): <br>\n1.0.3 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.0: 5 files, 4696 bytes\n\nFiles: README.md (1463b), references/config-examples.md (1133b), scripts/migrate-heartbeat.sh (800b), SKILL.md (4995b), _meta.json (122b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: nag\ndescription: Persistent reminder system that keeps bugging you until you confirm completion. Use when setting up recurring reminders, nag schedules, or any task that needs follow-up until acknowledged. Handles daily resets, configurable nag windows, escalating urgency, and natural-language confirmation matching. Do NOT use for one-shot reminders (use cron instead) or time-sensitive alerts that need immediate action (use cron with wakeMode now).\n---\n\n# Nag — Persistent Reminders\n\nNag manages reminders that don't give up. Each reminder has a first-fire time, a nag window, and resets daily.\n\n## When to Use\n\n- Recurring daily habits (supplements, workouts, practice)\n- Tasks that get ignored/forgotten without follow-up\n- Anything where \"remind me once\" isn't enough\n\n## When NOT to Use\n\n- One-shot reminders (\"remind me in 20 minutes\") — use a cron job with `schedule.kind: \"at\"`\n- Time-critical alerts that can't wait for a heartbeat cycle\n- Reminders that don't need confirmation (informational only)\n\n## Setup\n\n### 1. State File\n\nCreate `memory/nag-state.json` in the workspace:\n\n```json\n{\n  \"date\": \"2026-02-15\",\n  \"reminders\": {}\n}\n```\n\nThe date field triggers automatic daily resets — when today's date differs from the stored date, all reminders reset to unconfirmed.\n\n### 2. Reminder Config\n\nCreate `nag-config.json` in the workspace root:\n\n```json\n{\n  \"reminders\": [\n    {\n      \"id\": \"morning-supplements\",\n      \"label\": \"morning supplements\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"took them\", \"did it\", \"yes\"],\n      \"tone\": \"friendly but persistent, escalate to ALL CAPS drama after 3 nags\",\n      \"messages\": {\n        \"first\": \"Time for morning supplements!\"\n      }\n    }\n  ]\n}\n```\n\n**Fields:**\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `id` | yes | Unique identifier, used as key in state file |\n| `label` | yes | Human-readable name for display |\n| `cronFirst` | yes | Cron expression for initial reminder (create a cron job for this) |\n| `nagAfter` | yes | Time (HH:MM, 24h) after which heartbeat nags begin |\n| `confirmPatterns` | yes | Array of phrases that mark the reminder as done (case-insensitive, substring match) |\n| `tone` | no | Personality guidance for generating nag messages. If absent, use a neutral friendly tone. The model has creative liberty to vary the wording each nag. |\n| `messages.first` | no | Text sent by the cron job for the initial reminder. If absent, generate from label + tone. |\n| `messages.nag` | no | Suggested nag text. If absent, generate contextually from label + tone + nagCount. |\n| `messages.escalate` | no | Suggested text after 3+ ignored nags. If absent, generate with increased urgency from tone. |\n| `days` | no | Array of weekday names to restrict when this reminder fires (e.g. `[\"monday\", \"wednesday\", \"friday\"]`). Omit for every day. |\n\nFor more examples, see [references/config-examples.md](references/config-examples.md).\n\n**Message generation:** When `messages.nag` or `messages.escalate` are absent, generate them on the fly using the `label` and `tone` fields. Vary the wording each time — don't repeat the same nag verbatim. Use nagCount to calibrate urgency: low count = gentle, 3+ = escalated.\n\n### 3. Wire Up Cron + Heartbeat\n\n**For each reminder**, create a cron job that fires `messages.first` at the `cronFirst` schedule.\n\n**In HEARTBEAT.md**, add a nag check block:\n\n```\n## Nag Check\nRead nag-config.json and memory/nag-state.json.\nFor each reminder in nag-config.json:\n- If date in state differs from today, reset all reminders (set confirmed: false, nagCount: 0).\n- Skip if today's weekday isn't in the reminder's `days` array (if specified).\n- If current time is after `nagAfter` and confirmed is false: send a nag message to the user.\n  - Generate the message from the reminder's label and tone (or use messages.nag if provided).\n  - If nagCount >= 3, escalate urgency (use messages.escalate if provided, otherwise generate with more intensity).\n  - Increment nagCount in state.\n- Do NOT nag before the nagAfter time.\n```\n\n### 4. Confirmation Handling\n\nWhen the user sends a message matching any `confirmPatterns` for a reminder, update `memory/nag-state.json`:\n\n```json\n{\n  \"date\": \"2026-02-15\",\n  \"reminders\": {\n    \"morning-supplements\": {\n      \"confirmed\": true,\n      \"confirmedAt\": \"09:06\",\n      \"nagCount\": 1\n    }\n  }\n}\n```\n\nMatch confirmation by checking if any pattern appears as a substring (case-insensitive) in the user's message. When ambiguous (multiple reminders could match), match the one currently in its nag window.\n\n## Adding a New Reminder\n\n1. Add entry to `nag-config.json`\n2. Create a cron job for the `cronFirst` schedule\n3. The heartbeat nag block handles everything else automatically\n\n## Removing a Reminder\n\n1. Remove entry from `nag-config.json`\n2. Remove or disable the corresponding cron job\n3. Optionally clean up its key from `memory/nag-state.json`\n\nFile v1.0.0:README.md\n\n# nag\n\nAn OpenClaw skill for persistent reminders that won't shut up until you confirm.\n\nMost reminder tools fire once and forget. Nag keeps bugging you — with escalating urgency — until you actually do the thing.\n\n## How it works\n\n1. **Cron job** fires the initial reminder at a scheduled time\n2. **Heartbeat** checks if you've confirmed — if not, nags you\n3. **Escalation** kicks in after 3 ignored nags\n4. **Daily reset** — everything starts fresh each day\n\n## Features\n\n- **Config-driven** — define reminders in one JSON file\n- **Tone field** — give the model creative liberty to vary nag messages, or provide exact wording\n- **Natural-language confirmation** — \"took them\", \"done\", \"yes\" all work\n- **Day filtering** — restrict reminders to specific weekdays\n- **Escalation** — messages get more urgent the longer you ignore them\n\n## Setup\n\nSee [SKILL.md](SKILL.md) for full setup instructions.\n\nQuick version:\n1. Create `nag-config.json` with your reminders\n2. Create `memory/nag-state.json` for tracking\n3. Add the nag check block to your `HEARTBEAT.md`\n4. Create cron jobs for each reminder's first fire\n\n## Example config\n\n```json\n{\n  \"reminders\": [\n    {\n      \"id\": \"morning-vitamins\",\n      \"label\": \"morning vitamins\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"did it\"],\n      \"tone\": \"friendly but persistent, get dramatic after 3 nags\"\n    }\n  ]\n}\n```\n\n## License\n\nMIT\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn711gxkbyw34qye3faaqw24yn8163fm\",\n  \"slug\": \"nag\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1771192942960\n}\n\nFile v1.0.0:references/config-examples.md\n\n# Nag Config Examples\n\n## Daily habit with tone-based messages\n\n```json\n{\n  \"reminders\": [\n    {\n      \"id\": \"morning-vitamins\",\n      \"label\": \"morning vitamins\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"took them\", \"did it\"],\n      \"tone\": \"friendly but persistent, get dramatic after 3 nags\",\n      \"messages\": {\n        \"first\": \"Morning vitamins!\"\n      }\n    }\n  ]\n}\n```\n\n## Workout reminder with hardcoded messages\n\n```json\n{\n  \"id\": \"daily-workout\",\n  \"label\": \"workout\",\n  \"cronFirst\": \"0 10 * * *\",\n  \"nagAfter\": \"14:00\",\n  \"confirmPatterns\": [\"worked out\", \"lifted\", \"trained\", \"exercised\", \"ran\"],\n  \"tone\": \"coach energy\",\n  \"messages\": {\n    \"first\": \"Workout today?\",\n    \"nag\": \"Have you worked out yet today?\",\n    \"escalate\": \"The iron isn't going to lift itself\"\n  }\n}\n```\n\n## Weekly reminder (specific days)\n\n```json\n{\n  \"id\": \"grocery-list\",\n  \"label\": \"weekly grocery list\",\n  \"cronFirst\": \"0 9 * * 0\",\n  \"nagAfter\": \"11:00\",\n  \"days\": [\"sunday\"],\n  \"confirmPatterns\": [\"ordered\", \"list done\", \"groceries ordered\"],\n  \"tone\": \"matter-of-fact\"\n}\n```","readmeExcerpt":"Skill: Nag Owner: madebydia Summary: Persistent reminder system that keeps bugging you until you confirm completion. Use when setting up recurring reminders, nag schedules, or any task that need... Tags: latest:1.0.4 Version history: v1.0.4 | 2026-06-07T03:31:49.101Z | user Refresh publisher identity and metadata for madebydia v1.0.3 | 2026-03-24T12:31:29.912Z | auto Version 1.0.3 of the nag skill - No file changes d","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"date\": \"2026-02-15\",\n  \"reminders\": {}\n}"},{"language":"json","snippet":"{\n  \"reminders\": [\n    {\n      \"id\": \"morning-supplements\",\n      \"label\": \"morning supplements\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"took them\", \"did it\", \"yes\"],\n      \"tone\": \"friendly but persistent, escalate to ALL CAPS drama after 3 nags\",\n      \"messages\": {\n        \"first\": \"Time for morning supplements!\"\n      }\n    }\n  ]\n}"},{"language":"text","snippet":"## Nag Check\nRead nag-config.json and memory/nag-state.json.\nFor each reminder in nag-config.json:\n- If date in state differs from today, reset all reminders (set confirmed: false, nagCount: 0).\n- Skip if today's weekday isn't in the reminder's `days` array (if specified).\n- If current time is after `nagAfter` and confirmed is false: send a nag message to the user.\n  - Generate the message from the reminder's label and tone (or use messages.nag if provided).\n  - If nagCount >= 3, escalate urgency (use messages.escalate if provided, otherwise generate with more intensity).\n  - Increment nagCount in state.\n- Do NOT nag before the nagAfter time."},{"language":"json","snippet":"{\n  \"date\": \"2026-02-15\",\n  \"reminders\": {\n    \"morning-supplements\": {\n      \"confirmed\": true,\n      \"confirmedAt\": \"09:06\",\n      \"nagCount\": 1\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"reminders\": [\n    {\n      \"id\": \"morning-vitamins\",\n      \"label\": \"morning vitamins\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"did it\"],\n      \"tone\": \"friendly but persistent, get dramatic after 3 nags\"\n    }\n  ]\n}"},{"language":"bash","snippet":"openclaw skills install nag"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: nag\ndescription: Persistent reminder system that keeps bugging you until you confirm completion. Use when setting up recurring reminders, nag schedules, or any task that needs follow-up until acknowledged. Handles daily resets, configurable nag windows, escalating urgency, and natural-language confirmation matching. Do NOT use for one-shot reminders (use cron instead) or time-sensitive alerts that need immediate action (use cron with wakeMode now).\n---\n\n# Nag — Persistent Reminders\n\nNag manages reminders that don't give up. Each reminder has a first-fire time, a nag window, and resets daily.\n\n## When to Use\n\n- Recurring daily habits (supplements, workouts, practice)\n- Tasks that get ignored/forgotten without follow-up\n- Anything where \"remind me once\" isn't enough\n\n## When NOT to Use\n\n- One-shot reminders (\"remind me in 20 minutes\") — use a cron job with `schedule.kind: \"at\"`\n- Time-critical alerts that can't wait for a heartbeat cycle\n- Reminders that don't need confirmation (informational only)\n\n## Setup\n\n### 1. State File\n\nCreate `memory/nag-state.json` in the workspace:\n\n```json\n{\n  \"date\": \"2026-02-15\",\n  \"reminders\": {}\n}\n```\n\nThe date field triggers automatic daily resets — when today's date differs from the stored date, all reminders reset to unconfirmed.\n\n### 2. Reminder Config\n\nCreate `nag-config.json` in the workspace root:\n\n```json\n{\n  \"reminders\": [\n    {\n      \"id\": \"morning-supplements\",\n      \"label\": \"morning supplements\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"took them\", \"did it\", \"yes\"],\n      \"tone\": \"friendly but persistent, escalate to ALL CAPS drama after 3 nags\",\n      \"messages\": {\n        \"first\": \"Time for morning supplements!\"\n      }\n    }\n  ]\n}\n```\n\n**Fields:**\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `id` | yes | Unique identifier, used as key in state file |\n| `label` | yes | Human-readable name for display |\n| `cronFirst` | yes | Cron expression for initial reminder (create a cron job for this) |\n| `nagAfter` | yes | Time (HH:MM, 24h) after which heartbeat nags begin |\n| `confirmPatterns` | yes | Array of phrases that mark the reminder as done (case-insensitive, substring match) |\n| `tone` | no | Personality guidance for generating nag messages. If absent, use a neutral friendly tone. The model has creative liberty to vary the wording each nag. |\n| `messages.first` | no | Text sent by the cron job for the initial reminder. If absent, generate from label + tone. |\n| `messages.nag` | no | Suggested nag text. If absent, generate contextually from label + tone + nagCount. |\n| `messages.escalate` | no | Suggested text after 3+ ignored nags. If absent, generate with increased urgency from tone. |\n| `days` | no | Array of weekday names to restrict when this reminder fires (e.g. `[\"monday\", \"wednesday\", \"friday\"]`). Omit for every day. |\n\nFor more examples, see [references/config-examples.md](references/config-exampl"},{"path":"README.md","content":"# nag\n\n\nBuilt by [@madebydia](https://x.com/madebydia)\n\n[![ClawHub](https://img.shields.io/badge/ClawHub-nag-blue)](https://clawhub.ai/madebydia/nag)\n\nAn OpenClaw skill for persistent reminders that won't shut up until you confirm.\n\nMost reminder tools fire once and forget. Nag keeps bugging you — with escalating urgency — until you actually do the thing.\n\n## How it works\n\n1. **Cron job** fires the initial reminder at a scheduled time\n2. **Heartbeat** checks if you've confirmed — if not, nags you\n3. **Escalation** kicks in after 3 ignored nags\n4. **Daily reset** — everything starts fresh each day\n\n## Features\n\n- **Config-driven** — define reminders in one JSON file\n- **Tone field** — give the model creative liberty to vary nag messages, or provide exact wording\n- **Natural-language confirmation** — \"took them\", \"done\", \"yes\" all work\n- **Day filtering** — restrict reminders to specific weekdays\n- **Escalation** — messages get more urgent the longer you ignore them\n\n## Setup\n\nSee [SKILL.md](SKILL.md) for full setup instructions.\n\nQuick version:\n1. Create `nag-config.json` with your reminders\n2. Create `memory/nag-state.json` for tracking\n3. Add the nag check block to your `HEARTBEAT.md`\n4. Create cron jobs for each reminder's first fire\n\n## Example config\n\n```json\n{\n  \"reminders\": [\n    {\n      \"id\": \"morning-vitamins\",\n      \"label\": \"morning vitamins\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"did it\"],\n      \"tone\": \"friendly but persistent, get dramatic after 3 nags\"\n    }\n  ]\n}\n```\n\n## Install\n\n```bash\nopenclaw skills install nag\n```\n\nOr browse it on [ClawHub](https://clawhub.ai/madebydia/nag).\n\n## License\n\nMIT"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn711gxkbyw34qye3faaqw24yn8163fm\",\n  \"slug\": \"nag\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1780803109101\n}"},{"path":"references/config-examples.md","content":"# Nag Config Examples\n\n## Daily habit with tone-based messages\n\n```json\n{\n  \"reminders\": [\n    {\n      \"id\": \"morning-vitamins\",\n      \"label\": \"morning vitamins\",\n      \"cronFirst\": \"0 8 * * *\",\n      \"nagAfter\": \"09:00\",\n      \"confirmPatterns\": [\"taken\", \"done\", \"took them\", \"did it\"],\n      \"tone\": \"friendly but persistent, get dramatic after 3 nags\",\n      \"messages\": {\n        \"first\": \"Morning vitamins!\"\n      }\n    }\n  ]\n}\n```\n\n## Workout reminder with hardcoded messages\n\n```json\n{\n  \"id\": \"daily-workout\",\n  \"label\": \"workout\",\n  \"cronFirst\": \"0 10 * * *\",\n  \"nagAfter\": \"14:00\",\n  \"confirmPatterns\": [\"worked out\", \"lifted\", \"trained\", \"exercised\", \"ran\"],\n  \"tone\": \"coach energy\",\n  \"messages\": {\n    \"first\": \"Workout today?\",\n    \"nag\": \"Have you worked out yet today?\",\n    \"escalate\": \"The iron isn't going to lift itself\"\n  }\n}\n```\n\n## Weekly reminder (specific days)\n\n```json\n{\n  \"id\": \"grocery-list\",\n  \"label\": \"weekly grocery list\",\n  \"cronFirst\": \"0 9 * * 0\",\n  \"nagAfter\": \"11:00\",\n  \"days\": [\"sunday\"],\n  \"confirmPatterns\": [\"ordered\", \"list done\", \"groceries ordered\"],\n  \"tone\": \"matter-of-fact\"\n}\n```"},{"path":"skill-card.md","content":"## Description:\n\nPersistent reminder system that keeps bugging you until you confirm completion.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[madebydia](https://clawhub.ai/user/madebydia)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agent users use Nag to set up recurring reminders that continue through cron and heartbeat checks until the user confirms completion.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Persistent cron jobs and heartbeat checks can keep reminding the user across sessions after the reminder is no longer wanted.\n\nMitigation: Review each schedule before installing and remove the related cron job plus nag-config and state entries when the reminder should stop.\n\nRisk: Broad confirmation phrases may mark the wrong reminder as complete when multiple reminders are active.\n\nMitigation: Use specific confirmation patterns and resolve ambiguous matches against reminders that are currently in their nag window.\n\nRisk: Tone-based escalation can generate messages that are more forceful than intended.\n\nMitigation: Set explicit message text or conservative tone guidance for reminders where wording matters.\n\n## Reference(s):\n\n- [Nag Config Examples](references/config-examples.md)\n- [ClawHub Nag Skill Page](https://clawhub.ai/madebydia/skills/nag)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration]\n\n**Output Format:** [Markdown instructions with JSON configuration examples and shell script output]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces reminder setup guidance, heartbeat instructions, cron scheduling guidance, and state/configuration examples.]\n\n## Skill Version(s):\n\n1.0.4 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Persistent reminder system that keeps bugging you until you confirm completion. Use when setting up recurring reminders, nag schedules, or any task that need... Skill: Nag Owner: madebydia Summary: Persistent reminder system that keeps bugging you until you confirm completion. Use when setting up recurring reminders, nag schedules, or any task that need... Tags: latest:1.0.4 Version history: v1.0.4 | 2026-06-07T03:31:49.101Z | user Refresh publisher identity and metadata for madebydia v1.0.3 | 2026-03-24T12:31:29.912Z | auto Version 1.0.3 of the nag skill - No file changes d","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1283,"uniquenessScore":48,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T14:17:45.066Z","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-10T14:17:45.066Z","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-10T17:35:37.581Z","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"}]}}}