{"id":"55e79d03-c64e-48f4-983e-fec58b1b9587","entityType":"agent","slug":"clawhub-534422530-laosi-scheduler","name":"Scheduler Pro","canonicalUrl":"https://www.xpersona.co/agent/clawhub-534422530-laosi-scheduler","canonicalPath":"/agent/clawhub-534422530-laosi-scheduler","generatedAt":"2026-10-11T16:04:12.266Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T13:36:26.548Z","emptyReason":null},"description":"任务调度 - 定时任务/周期性任务/一次性提醒，cron语法支持，持久化存储，下次执行时间自动计算 Skill: Scheduler Pro Owner: 534422530 Summary: 任务调度 - 定时任务/周期性任务/一次性提醒，cron语法支持，持久化存储，下次执行时间自动计算 Tags: automation:2.0.0, cron:2.0.0, latest:2.0.0, pro:2.0.0, reminder:1.0.0, scheduler:2.0.0, task:2.0.0 Version history: v2.0.0 | 2026-05-29T23:31:25.261Z | auto - Version updated to 2.0.0, marking a major release. - Added new file: hub.json. - Introduced \"badge: premium\" to indicate premium status. - Various documentati","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s170k9770tgh0506hw0dwtb6pd83kwyq:laosi-scheduler","sourceUrl":"https://clawhub.ai/534422530/laosi-scheduler","homepage":"https://clawhub.ai/534422530/skills/laosi-scheduler","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/534422530/laosi-scheduler","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/534422530/skills/laosi-scheduler","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"任务调度 - 定时任务/周期性任务/一次性提醒，cron语法支持，持久化存储，下次执行时间自动计算 Skill: Scheduler Pro Owner: 534422530 Summary: 任务调度 - 定时任务/周期性任务/一次性提醒，cron语法支持，持久化存储，下次执行时间自动计算 Tags: automat"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T13:36:26.548Z","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-11T13:36:26.548Z","emptyReason":null},"stars":null,"forks":null,"downloads":1056,"packageName":null,"latestVersion":"2.0.0","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T13:36:26.534Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T13:36:26.548Z","lastCrawledAt":"2026-10-11T13:36:26.534Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T13:36:26.534Z","lastVerifiedAt":null,"highlights":[{"version":"2.0.0","createdAt":"2026-05-29T23:31:25.261Z","changelog":"- Version updated to 2.0.0, marking a major release. - Added new file: hub.json. - Introduced \"badge: premium\" to indicate premium status. - Various documentation updates in SKILL.md, including version, formatting, and some content changes. - No core logic or feature changes detected in the provided code sample.","fileCount":4,"zipByteSize":4855},{"version":"1.0.0","createdAt":"2026-05-29T00:47:25.774Z","changelog":"Initial release of laosi-scheduler. - Supports creating scheduled, recurring, and one-time tasks using cron syntax. - Persists tasks with automatic calculation of the next execution time. - Enables viewing, enabling/disabling, and removing tasks. - Allows tracking run history and task summaries. - No external dependencies; implemented in pure Python 3.8+.","fileCount":3,"zipByteSize":4463}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s170k9770tgh0506hw0dwtb6pd83kwyq:laosi-scheduler","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-534422530-laosi-scheduler/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-534422530-laosi-scheduler/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-534422530-laosi-scheduler/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-534422530-laosi-scheduler/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-534422530-laosi-scheduler/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-534422530-laosi-scheduler/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-11T16:04:12.266Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-534422530-laosi-scheduler/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-534422530-laosi-scheduler/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-534422530-laosi-scheduler/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-534422530-laosi-scheduler/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-11T13:36:26.548Z","emptyReason":null},"readme":"Skill: Scheduler Pro\n\nOwner: 534422530\n\nSummary: 任务调度 - 定时任务/周期性任务/一次性提醒，cron语法支持，持久化存储，下次执行时间自动计算\n\nTags: automation:2.0.0, cron:2.0.0, latest:2.0.0, pro:2.0.0, reminder:1.0.0, scheduler:2.0.0, task:2.0.0\n\nVersion history:\n\nv2.0.0 | 2026-05-29T23:31:25.261Z | auto\n\n- Version updated to 2.0.0, marking a major release.\n- Added new file: hub.json.\n- Introduced \"badge: premium\" to indicate premium status.\n- Various documentation updates in SKILL.md, including version, formatting, and some content changes.\n- No core logic or feature changes detected in the provided code sample.\n\nv1.0.0 | 2026-05-29T00:47:25.774Z | auto\n\nInitial release of laosi-scheduler.\n\n- Supports creating scheduled, recurring, and one-time tasks using cron syntax.\n- Persists tasks with automatic calculation of the next execution time.\n- Enables viewing, enabling/disabling, and removing tasks.\n- Allows tracking run history and task summaries.\n- No external dependencies; implemented in pure Python 3.8+.\n\nArchive index:\n\nArchive v2.0.0: 4 files, 4855 bytes\n\nFiles: hub.json (574b), skill-card.md (2166b), SKILL.md (7807b), _meta.json (134b)\n\nFile v2.0.0:SKILL.md\n\n---\nbadge: premium\nname: scheduler\nversion: 2.0.0\ndescription: 任务调度 - 定时任务/周期性任�?一次性提醒，cron语法支持，持久化存储，下次执行时间自动计�?tags: [scheduler, cron, task, reminder, automation, productivity]\nauthor: laosi\nsource: original\n---\n\n# Scheduler - 任务调度�?\n> 激活词: 调度 / 定时任务 / 提醒 / schedule\n\n## 功能\n\n- 创建定时任务（cron表达式）\n- 一次性提醒（指定时间�?- 周期性任务（每天/每周/每月�?- 任务列表和状态管�?- 下次执行时间自动计算\n- 持久化存�?\n## Python 实现\n\n```python\nimport os, json, re\nfrom datetime import datetime, timedelta\nfrom typing import List, Optional, Dict\nfrom dataclasses import dataclass, field, asdict\n\nSCHEDULE_FILE = os.path.join(os.path.dirname(__file__), \"scheduled_tasks.json\")\n\n@dataclass\nclass ScheduledTask:\n    name: str\n    schedule: str  # cron表达�? \"minute hour day month weekday\"\n    description: str = \"\"\n    enabled: bool = True\n    last_run: Optional[str] = None\n    next_run: Optional[str] = None\n    created: str = \"\"\n    run_count: int = 0\n    tags: List[str] = field(default_factory=list)\n\nclass Scheduler:\n    def __init__(self):\n        os.makedirs(os.path.dirname(SCHEDULE_FILE), exist_ok=True)\n        self.tasks: List[ScheduledTask] = []\n        self._load()\n    \n    def _load(self):\n        if os.path.exists(SCHEDULE_FILE):\n            with open(SCHEDULE_FILE, encoding=\"utf-8\") as f:\n                data = json.load(f)\n                self.tasks = [ScheduledTask(**t) for t in data]\n    \n    def _save(self):\n        with open(SCHEDULE_FILE, \"w\", encoding=\"utf-8\") as f:\n            json.dump([asdict(t) for t in self.tasks], f,\n                      ensure_ascii=False, indent=2)\n    \n    def add_task(self, name: str, schedule: str,\n                 description: str = \"\", tags: list = None) -> ScheduledTask:\n        \"\"\"添加定时任务\"\"\"\n        task = ScheduledTask(\n            name=name,\n            schedule=schedule,\n            description=description,\n            enabled=True,\n            created=datetime.now().isoformat(),\n            next_run=self._calc_next_run(schedule),\n            tags=tags or []\n        )\n        self.tasks.append(task)\n        self._save()\n        return task\n    \n    def _calc_next_run(self, cron_expr: str) -> str:\n        \"\"\"计算下次执行时间（简化实现）\"\"\"\n        parts = cron_expr.strip().split()\n        if len(parts) != 5:\n            return datetime.now().isoformat()\n        \n        minute, hour, day, month, weekday = parts\n        now = datetime.now()\n        \n        # 简单解析：如果只有小时和分钟指�?        if minute == \"*\" and hour == \"*\":\n            # 每分钟：下一分钟\n            next_time = now + timedelta(minutes=1)\n        elif minute != \"*\" and hour == \"*\":\n            # 每小时的指定分钟\n            m = int(minute)\n            next_time = now.replace(minute=m, second=0, microsecond=0)\n            if next_time <= now:\n                next_time += timedelta(hours=1)\n        elif minute != \"*\" and hour != \"*\":\n            # 每天的指定时�?            h, m = int(hour), int(minute)\n            next_time = now.replace(hour=h, minute=m, second=0, microsecond=0)\n            if next_time <= now:\n                next_time += timedelta(days=1)\n        else:\n            # 默认�?小时�?            next_time = now + timedelta(hours=1)\n        \n        return next_time.isoformat()\n    \n    def remove_task(self, task_id: int) -> bool:\n        \"\"\"删除任务\"\"\"\n        if 0 <= task_id < len(self.tasks):\n            self.tasks.pop(task_id)\n            self._save()\n            return True\n        return False\n    \n    def toggle(self, task_id: int) -> Optional[bool]:\n        \"\"\"启用/禁用任务\"\"\"\n        if 0 <= task_id < len(self.tasks):\n            self.tasks[task_id].enabled = not self.tasks[task_id].enabled\n            self._save()\n            return self.tasks[task_id].enabled\n        return None\n    \n    def mark_run(self, task_id: int):\n        \"\"\"标记任务已执�?\"\"\n        if 0 <= task_id < len(self.tasks):\n            task = self.tasks[task_id]\n            task.last_run = datetime.now().isoformat()\n            task.run_count += 1\n            task.next_run = self._calc_next_run(task.schedule)\n            self._save()\n    \n    def due_tasks(self) -> List[ScheduledTask]:\n        \"\"\"获取到期的任�?\"\"\n        now = datetime.now()\n        return [\n            t for t in self.tasks\n            if t.enabled and t.next_run and datetime.fromisoformat(t.next_run) <= now\n        ]\n    \n    def list_tasks(self, enabled_only: bool = False) -> List[Dict]:\n        \"\"\"列出所有任�?\"\"\n        tasks = [t for t in self.tasks if not enabled_only or t.enabled]\n        return [\n            {\n                \"id\": i,\n                \"name\": t.name,\n                \"schedule\": t.schedule,\n                \"enabled\": t.enabled,\n                \"next_run\": t.next_run,\n                \"last_run\": t.last_run or \"never\",\n                \"run_count\": t.run_count,\n                \"tags\": t.tags,\n            }\n            for i, t in enumerate(tasks)\n        ]\n    \n    def summary(self) -> Dict:\n        \"\"\"调度器概�?\"\"\n        total = len(self.tasks)\n        enabled = sum(1 for t in self.tasks if t.enabled)\n        due_now = len(self.due_tasks())\n        return {\n            \"total\": total,\n            \"enabled\": enabled,\n            \"disabled\": total - enabled,\n            \"due_now\": due_now,\n            \"file\": SCHEDULE_FILE\n        }\n\n# 使用示例\nsched = Scheduler()\n\n# 添加定时任务\nsched.add_task(\n    name=\"daily backup\",\n    schedule=\"0 2 * * *\",      # 每天凌晨2�?    description=\"Run daily database backup\",\n    tags=[\"system\", \"backup\"]\n)\n\nsched.add_task(\n    name=\"health check\",\n    schedule=\"*/5 * * * *\",    # �?分钟\n    description=\"Ping all services\",\n    tags=[\"monitoring\"]\n)\n\nsched.add_task(\n    name=\"weekly report\",\n    schedule=\"0 9 * * 1\",      # 每周一9�?    description=\"Generate and email weekly report\",\n    tags=[\"report\", \"email\"]\n)\n\nsched.add_task(\n    name=\"standup reminder\",\n    schedule=\"0 10 * * 1-5\",   # 工作�?0�?    description=\"Remind team for daily standup\",\n    tags=[\"team\", \"meeting\"]\n)\n\n# 查看所有任�?print(\"任务列表:\")\nfor t in sched.list_tasks():\n    status = \"🟢\" if t[\"enabled\"] else \"🔴\"\n    print(f\"  {status} [{t['id']}] {t['name']} ({t['schedule']})\")\n    print(f\"      Next: {t['next_run']}\")\n\n# 调度器概�?stats = sched.summary()\nprint(f\"\\n调度�? {stats['enabled']}/{stats['total']} 启用, {stats['due_now']} 个待执行\")\n\n# 检查到期任�?due = sched.due_tasks()\nif due:\n    print(f\"\\n到期任务 ({len(due)}):\")\n    for t in due:\n        print(f\"  �?{t.name} - 应在 {t.next_run} 执行\")\n        # 执行并标�?        sched.mark_run(self.tasks.index(t))\n```\n\n## Cron语法速查\n\n```\n* * * * *\n�?�?�?�?�?�?�?�?�?└── 星期 (0-7, 0�?=周日)\n�?�?�?└──── 月份 (1-12)\n�?�?└────── 日期 (1-31)\n�?└──────── 小时 (0-23)\n└────────── 分钟 (0-59)\n```\n\n| 示例 | 含义 |\n|------|------|\n| `0 2 * * *` | 每天凌晨2�?|\n| `*/5 * * * *` | �?分钟 |\n| `0 9 * * 1` | 每周一9�?|\n| `0 9-17 * * 1-5` | 工作�?点到17点每小时 |\n| `0 0 1 * *` | 每月1�?�?|\n| `30 8 * * *` | 每天8:30 |\n\n## 使用场景\n\n1. **系统维护**: 定时备份、日志清理、缓存刷�?2. **监控告警**: 定期健康检查，异常自动告警\n3. **报告生成**: 自动生成日报/周报并发�?4. **个人提醒**: 喝水/站立/休息的定时提�?5. **工作�?*: 定时触发数据同步/ETL任务\n\n## 依赖\n\n- Python 3.8+\n- 无第三方依赖\n\nFile v2.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn71pk44ca87scz3pstt90r66n80xhaa\",\n  \"slug\": \"laosi-scheduler\",\n  \"version\": \"2.0.0\",\n  \"publishedAt\": 1780097485261\n}\n\nFile v2.0.0:skill-card.md\n\n## Description:\n\nScheduler Pro helps agents define and manage local scheduled tasks, reminders, recurring jobs, cron-style schedules, and next-run calculations with persistent JSON storage.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[534422530](https://clawhub.ai/user/534422530)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agent users can use this skill to maintain a lightweight local registry of scheduled tasks, reminders, system maintenance jobs, monitoring checks, reports, and workflow triggers. It is suited to simple scheduling support rather than acting as a full cron executor.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill is a simple local task registry and may be mistaken for a full cron executor.\n\nMitigation: Use it for lightweight reminders and schedule tracking, and rely on a production scheduler when exact execution semantics are required.\n\nRisk: Task names, reminder text, and operational details may be stored in local plaintext JSON.\n\nMitigation: Avoid storing sensitive content unless local plaintext storage is acceptable for the deployment environment.\n\nRisk: Deleting or toggling tasks changes the local schedule registry.\n\nMitigation: Confirm destructive or state-changing mutations before applying them.\n\n## Reference(s):\n\n- [Scheduler Pro ClawHub listing](https://clawhub.ai/534422530/skills/laosi-scheduler)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Configuration, Guidance]\n\n**Output Format:** [Markdown with Python code examples and cron schedule tables]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces local scheduling guidance and sample Python code; persisted task data is stored in local JSON when the implementation is used.]\n\n## Skill Version(s):\n\n2.0.0 (source: server release evidence and artifact metadata)\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\nFile v2.0.0:hub.json\n\n{\r\n    \"description\":  \"Premium version with full implementation, examples, and enterprise support\",\r\n    \"minOpenClawVersion\":  \"1.2.0\",\r\n    \"version\":  \"2.0.0\",\r\n    \"tags\":  [\r\n                 \"scheduler\",\r\n                 \"cron\",\r\n                 \"task\",\r\n                 \"automation\",\r\n                 \"pro\"\r\n             ],\r\n    \"author\":  \"laosi\",\r\n    \"name\":  \"scheduler\",\r\n    \"pricing\":  {\r\n                    \"price\":  1900,\r\n                    \"model\":  \"one-time\"\r\n                },\r\n    \"license\":  \"MIT\",\r\n    \"displayName\":  \"Scheduler Pro\"\r\n}\n\nArchive v1.0.0: 3 files, 4463 bytes\n\nFiles: skill-card.md (2199b), SKILL.md (7845b), _meta.json (134b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: scheduler\nversion: 1.0.0\ndescription: 任务调度 - 定时任务/周期性任务/一次性提醒，cron语法支持，持久化存储，下次执行时间自动计算\ntags: [scheduler, cron, task, reminder, automation, productivity]\nauthor: laosi\nsource: original\n---\n\n# Scheduler - 任务调度器\n\n> 激活词: 调度 / 定时任务 / 提醒 / schedule\n\n## 功能\n\n- 创建定时任务（cron表达式）\n- 一次性提醒（指定时间）\n- 周期性任务（每天/每周/每月）\n- 任务列表和状态管理\n- 下次执行时间自动计算\n- 持久化存储\n\n## Python 实现\n\n```python\nimport os, json, re\nfrom datetime import datetime, timedelta\nfrom typing import List, Optional, Dict\nfrom dataclasses import dataclass, field, asdict\n\nSCHEDULE_FILE = os.path.join(os.path.dirname(__file__), \"scheduled_tasks.json\")\n\n@dataclass\nclass ScheduledTask:\n    name: str\n    schedule: str  # cron表达式: \"minute hour day month weekday\"\n    description: str = \"\"\n    enabled: bool = True\n    last_run: Optional[str] = None\n    next_run: Optional[str] = None\n    created: str = \"\"\n    run_count: int = 0\n    tags: List[str] = field(default_factory=list)\n\nclass Scheduler:\n    def __init__(self):\n        os.makedirs(os.path.dirname(SCHEDULE_FILE), exist_ok=True)\n        self.tasks: List[ScheduledTask] = []\n        self._load()\n    \n    def _load(self):\n        if os.path.exists(SCHEDULE_FILE):\n            with open(SCHEDULE_FILE, encoding=\"utf-8\") as f:\n                data = json.load(f)\n                self.tasks = [ScheduledTask(**t) for t in data]\n    \n    def _save(self):\n        with open(SCHEDULE_FILE, \"w\", encoding=\"utf-8\") as f:\n            json.dump([asdict(t) for t in self.tasks], f,\n                      ensure_ascii=False, indent=2)\n    \n    def add_task(self, name: str, schedule: str,\n                 description: str = \"\", tags: list = None) -> ScheduledTask:\n        \"\"\"添加定时任务\"\"\"\n        task = ScheduledTask(\n            name=name,\n            schedule=schedule,\n            description=description,\n            enabled=True,\n            created=datetime.now().isoformat(),\n            next_run=self._calc_next_run(schedule),\n            tags=tags or []\n        )\n        self.tasks.append(task)\n        self._save()\n        return task\n    \n    def _calc_next_run(self, cron_expr: str) -> str:\n        \"\"\"计算下次执行时间（简化实现）\"\"\"\n        parts = cron_expr.strip().split()\n        if len(parts) != 5:\n            return datetime.now().isoformat()\n        \n        minute, hour, day, month, weekday = parts\n        now = datetime.now()\n        \n        # 简单解析：如果只有小时和分钟指定\n        if minute == \"*\" and hour == \"*\":\n            # 每分钟：下一分钟\n            next_time = now + timedelta(minutes=1)\n        elif minute != \"*\" and hour == \"*\":\n            # 每小时的指定分钟\n            m = int(minute)\n            next_time = now.replace(minute=m, second=0, microsecond=0)\n            if next_time <= now:\n                next_time += timedelta(hours=1)\n        elif minute != \"*\" and hour != \"*\":\n            # 每天的指定时间\n            h, m = int(hour), int(minute)\n            next_time = now.replace(hour=h, minute=m, second=0, microsecond=0)\n            if next_time <= now:\n                next_time += timedelta(days=1)\n        else:\n            # 默认：1小时后\n            next_time = now + timedelta(hours=1)\n        \n        return next_time.isoformat()\n    \n    def remove_task(self, task_id: int) -> bool:\n        \"\"\"删除任务\"\"\"\n        if 0 <= task_id < len(self.tasks):\n            self.tasks.pop(task_id)\n            self._save()\n            return True\n        return False\n    \n    def toggle(self, task_id: int) -> Optional[bool]:\n        \"\"\"启用/禁用任务\"\"\"\n        if 0 <= task_id < len(self.tasks):\n            self.tasks[task_id].enabled = not self.tasks[task_id].enabled\n            self._save()\n            return self.tasks[task_id].enabled\n        return None\n    \n    def mark_run(self, task_id: int):\n        \"\"\"标记任务已执行\"\"\"\n        if 0 <= task_id < len(self.tasks):\n            task = self.tasks[task_id]\n            task.last_run = datetime.now().isoformat()\n            task.run_count += 1\n            task.next_run = self._calc_next_run(task.schedule)\n            self._save()\n    \n    def due_tasks(self) -> List[ScheduledTask]:\n        \"\"\"获取到期的任务\"\"\"\n        now = datetime.now()\n        return [\n            t for t in self.tasks\n            if t.enabled and t.next_run and datetime.fromisoformat(t.next_run) <= now\n        ]\n    \n    def list_tasks(self, enabled_only: bool = False) -> List[Dict]:\n        \"\"\"列出所有任务\"\"\"\n        tasks = [t for t in self.tasks if not enabled_only or t.enabled]\n        return [\n            {\n                \"id\": i,\n                \"name\": t.name,\n                \"schedule\": t.schedule,\n                \"enabled\": t.enabled,\n                \"next_run\": t.next_run,\n                \"last_run\": t.last_run or \"never\",\n                \"run_count\": t.run_count,\n                \"tags\": t.tags,\n            }\n            for i, t in enumerate(tasks)\n        ]\n    \n    def summary(self) -> Dict:\n        \"\"\"调度器概览\"\"\"\n        total = len(self.tasks)\n        enabled = sum(1 for t in self.tasks if t.enabled)\n        due_now = len(self.due_tasks())\n        return {\n            \"total\": total,\n            \"enabled\": enabled,\n            \"disabled\": total - enabled,\n            \"due_now\": due_now,\n            \"file\": SCHEDULE_FILE\n        }\n\n# 使用示例\nsched = Scheduler()\n\n# 添加定时任务\nsched.add_task(\n    name=\"daily backup\",\n    schedule=\"0 2 * * *\",      # 每天凌晨2点\n    description=\"Run daily database backup\",\n    tags=[\"system\", \"backup\"]\n)\n\nsched.add_task(\n    name=\"health check\",\n    schedule=\"*/5 * * * *\",    # 每5分钟\n    description=\"Ping all services\",\n    tags=[\"monitoring\"]\n)\n\nsched.add_task(\n    name=\"weekly report\",\n    schedule=\"0 9 * * 1\",      # 每周一9点\n    description=\"Generate and email weekly report\",\n    tags=[\"report\", \"email\"]\n)\n\nsched.add_task(\n    name=\"standup reminder\",\n    schedule=\"0 10 * * 1-5\",   # 工作日10点\n    description=\"Remind team for daily standup\",\n    tags=[\"team\", \"meeting\"]\n)\n\n# 查看所有任务\nprint(\"任务列表:\")\nfor t in sched.list_tasks():\n    status = \"🟢\" if t[\"enabled\"] else \"🔴\"\n    print(f\"  {status} [{t['id']}] {t['name']} ({t['schedule']})\")\n    print(f\"      Next: {t['next_run']}\")\n\n# 调度器概览\nstats = sched.summary()\nprint(f\"\\n调度器: {stats['enabled']}/{stats['total']} 启用, {stats['due_now']} 个待执行\")\n\n# 检查到期任务\ndue = sched.due_tasks()\nif due:\n    print(f\"\\n到期任务 ({len(due)}):\")\n    for t in due:\n        print(f\"  ⏰ {t.name} - 应在 {t.next_run} 执行\")\n        # 执行并标记\n        sched.mark_run(self.tasks.index(t))\n```\n\n## Cron语法速查\n\n```\n* * * * *\n│ │ │ │ │\n│ │ │ │ └── 星期 (0-7, 0和7=周日)\n│ │ │ └──── 月份 (1-12)\n│ │ └────── 日期 (1-31)\n│ └──────── 小时 (0-23)\n└────────── 分钟 (0-59)\n```\n\n| 示例 | 含义 |\n|------|------|\n| `0 2 * * *` | 每天凌晨2点 |\n| `*/5 * * * *` | 每5分钟 |\n| `0 9 * * 1` | 每周一9点 |\n| `0 9-17 * * 1-5` | 工作日9点到17点每小时 |\n| `0 0 1 * *` | 每月1日0点 |\n| `30 8 * * *` | 每天8:30 |\n\n## 使用场景\n\n1. **系统维护**: 定时备份、日志清理、缓存刷新\n2. **监控告警**: 定期健康检查，异常自动告警\n3. **报告生成**: 自动生成日报/周报并发送\n4. **个人提醒**: 喝水/站立/休息的定时提醒\n5. **工作流**: 定时触发数据同步/ETL任务\n\n## 依赖\n\n- Python 3.8+\n- 无第三方依赖\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn71pk44ca87scz3pstt90r66n80xhaa\",\n  \"slug\": \"laosi-scheduler\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1780015645774\n}\n\nFile v1.0.0:skill-card.md\n\n## Description: <br>\nScheduler Pro helps an agent create, store, list, enable, disable, and track scheduled tasks, recurring jobs, one-time reminders, and cron-style next-run times. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[534422530](https://clawhub.ai/user/534422530) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, operators, and productivity-focused users can use this skill to manage local task and reminder metadata, including cron-style recurring tasks, one-time reminders, task status, and run history. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can create, delete, or disable local reminder and task metadata. <br>\nMitigation: Ask the agent to confirm before creating, deleting, disabling, or modifying scheduled tasks. <br>\nRisk: Broad activation terms such as reminder or schedule may trigger the skill depending on the host matching behavior. <br>\nMitigation: Review the task intent before using the scheduler and confirm that the requested action is a scheduling or reminder action. <br>\nRisk: The included cron next-run calculation is simplified and may not fully handle every cron expression shown in examples. <br>\nMitigation: Review computed next-run times before relying on them for operational workflows. <br>\n\n\n## Reference(s): <br>\n- [ClawHub release page](https://clawhub.ai/534422530/laosi-scheduler) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Code, Configuration, Guidance] <br>\n**Output Format:** [Markdown with Python code examples and task metadata summaries] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Stores local scheduled task metadata in JSON; no external dependencies are described.] <br>\n\n## Skill Version(s): <br>\n1.0.0 (source: server release metadata and SKILL.md frontmatter) <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>","readmeExcerpt":"Skill: Scheduler Pro Owner: 534422530 Summary: 任务调度 - 定时任务/周期性任务/一次性提醒，cron语法支持，持久化存储，下次执行时间自动计算 Tags: automation:2.0.0, cron:2.0.0, latest:2.0.0, pro:2.0.0, reminder:1.0.0, scheduler:2.0.0, task:2.0.0 Version history: v2.0.0 | 2026-05-29T23:31:25.261Z | auto - Version updated to 2.0.0, marking a major release. - Added new file: hub.json. - Introduced \"badge: premium\" to indicate premium status. - Various documentati","codeSnippets":[],"executableExamples":[{"language":"python","snippet":"import os, json, re\nfrom datetime import datetime, timedelta\nfrom typing import List, Optional, Dict\nfrom dataclasses import dataclass, field, asdict\n\nSCHEDULE_FILE = os.path.join(os.path.dirname(__file__), \"scheduled_tasks.json\")\n\n@dataclass\nclass ScheduledTask:\n    name: str\n    schedule: str  # cron表达�? \"minute hour day month weekday\"\n    description: str = \"\"\n    enabled: bool = True\n    last_run: Optional[str] = None\n    next_run: Optional[str] = None\n    created: str = \"\"\n    run_count: int = 0\n    tags: List[str] = field(default_factory=list)\n\nclass Scheduler:\n    def __init__(self):\n        os.makedirs(os.path.dirname(SCHEDULE_FILE), exist_ok=True)\n        self.tasks: List[ScheduledTask] = []\n        self._load()\n    \n    def _load(self):\n        if os.path.exists(SCHEDULE_FILE):\n            with open(SCHEDULE_FILE, encoding=\"utf-8\") as f:\n                data = json.load(f)\n                self.tasks = [ScheduledTask(**t) for t in data]\n    \n    def _save(self):\n        with open(SCHEDULE_FILE, \"w\", encoding=\"utf-8\") as f:\n            json.dump([asdict(t) for t in self.tasks], f,\n                      ensure_ascii=False, indent=2)\n    \n    def add_task(self, name: str, schedule: str,\n                 description: str = \"\", tags: list = None) -> ScheduledTask:\n        \"\"\"添加定时任务\"\"\"\n        task = ScheduledTask(\n            name=name,\n            schedule=schedule,\n            description=description,\n            enabled=True,\n            created=datetime.now().isoformat(),\n            next_run=self._calc_next_run(schedule),\n            tags=tags or []\n        )\n        self.tasks.append(task)\n        self._save()\n        return task\n    \n    def _calc_next_run(self, cron_expr: str) -> str:\n        \"\"\"计算下次执行时间（简化实现）\"\"\"\n        parts = cron_expr.strip().split()\n        if len(parts) != 5:\n            return datetime.now().isoformat()\n        \n        minute, hour, day, month, weekday = parts\n        now = datetime.now()\n        \n        # 简单解析：如果只有小时和分钟指�?     "},{"language":"text","snippet":"* * * * *\n�?�?�?�?�?�?�?�?�?└── 星期 (0-7, 0�?=周日)\n�?�?�?└──── 月份 (1-12)\n�?�?└────── 日期 (1-31)\n�?└──────── 小时 (0-23)\n└────────── 分钟 (0-59)"},{"language":"python","snippet":"import os, json, re\nfrom datetime import datetime, timedelta\nfrom typing import List, Optional, Dict\nfrom dataclasses import dataclass, field, asdict\n\nSCHEDULE_FILE = os.path.join(os.path.dirname(__file__), \"scheduled_tasks.json\")\n\n@dataclass\nclass ScheduledTask:\n    name: str\n    schedule: str  # cron表达式: \"minute hour day month weekday\"\n    description: str = \"\"\n    enabled: bool = True\n    last_run: Optional[str] = None\n    next_run: Optional[str] = None\n    created: str = \"\"\n    run_count: int = 0\n    tags: List[str] = field(default_factory=list)\n\nclass Scheduler:\n    def __init__(self):\n        os.makedirs(os.path.dirname(SCHEDULE_FILE), exist_ok=True)\n        self.tasks: List[ScheduledTask] = []\n        self._load()\n    \n    def _load(self):\n        if os.path.exists(SCHEDULE_FILE):\n            with open(SCHEDULE_FILE, encoding=\"utf-8\") as f:\n                data = json.load(f)\n                self.tasks = [ScheduledTask(**t) for t in data]\n    \n    def _save(self):\n        with open(SCHEDULE_FILE, \"w\", encoding=\"utf-8\") as f:\n            json.dump([asdict(t) for t in self.tasks], f,\n                      ensure_ascii=False, indent=2)\n    \n    def add_task(self, name: str, schedule: str,\n                 description: str = \"\", tags: list = None) -> ScheduledTask:\n        \"\"\"添加定时任务\"\"\"\n        task = ScheduledTask(\n            name=name,\n            schedule=schedule,\n            description=description,\n            enabled=True,\n            created=datetime.now().isoformat(),\n            next_run=self._calc_next_run(schedule),\n            tags=tags or []\n        )\n        self.tasks.append(task)\n        self._save()\n        return task\n    \n    def _calc_next_run(self, cron_expr: str) -> str:\n        \"\"\"计算下次执行时间（简化实现）\"\"\"\n        parts = cron_expr.strip().split()\n        if len(parts) != 5:\n            return datetime.now().isoformat()\n        \n        minute, hour, day, month, weekday = parts\n        now = datetime.now()\n        \n        # 简单解析：如果只有小时和分钟指定\n     "},{"language":"text","snippet":"* * * * *\n│ │ │ │ │\n│ │ │ │ └── 星期 (0-7, 0和7=周日)\n│ │ │ └──── 月份 (1-12)\n│ │ └────── 日期 (1-31)\n│ └──────── 小时 (0-23)\n└────────── 分钟 (0-59)"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nbadge: premium\nname: scheduler\nversion: 2.0.0\ndescription: 任务调度 - 定时任务/周期性任�?一次性提醒，cron语法支持，持久化存储，下次执行时间自动计�?tags: [scheduler, cron, task, reminder, automation, productivity]\nauthor: laosi\nsource: original\n---\n\n# Scheduler - 任务调度�?\n> 激活词: 调度 / 定时任务 / 提醒 / schedule\n\n## 功能\n\n- 创建定时任务（cron表达式）\n- 一次性提醒（指定时间�?- 周期性任务（每天/每周/每月�?- 任务列表和状态管�?- 下次执行时间自动计算\n- 持久化存�?\n## Python 实现\n\n```python\nimport os, json, re\nfrom datetime import datetime, timedelta\nfrom typing import List, Optional, Dict\nfrom dataclasses import dataclass, field, asdict\n\nSCHEDULE_FILE = os.path.join(os.path.dirname(__file__), \"scheduled_tasks.json\")\n\n@dataclass\nclass ScheduledTask:\n    name: str\n    schedule: str  # cron表达�? \"minute hour day month weekday\"\n    description: str = \"\"\n    enabled: bool = True\n    last_run: Optional[str] = None\n    next_run: Optional[str] = None\n    created: str = \"\"\n    run_count: int = 0\n    tags: List[str] = field(default_factory=list)\n\nclass Scheduler:\n    def __init__(self):\n        os.makedirs(os.path.dirname(SCHEDULE_FILE), exist_ok=True)\n        self.tasks: List[ScheduledTask] = []\n        self._load()\n    \n    def _load(self):\n        if os.path.exists(SCHEDULE_FILE):\n            with open(SCHEDULE_FILE, encoding=\"utf-8\") as f:\n                data = json.load(f)\n                self.tasks = [ScheduledTask(**t) for t in data]\n    \n    def _save(self):\n        with open(SCHEDULE_FILE, \"w\", encoding=\"utf-8\") as f:\n            json.dump([asdict(t) for t in self.tasks], f,\n                      ensure_ascii=False, indent=2)\n    \n    def add_task(self, name: str, schedule: str,\n                 description: str = \"\", tags: list = None) -> ScheduledTask:\n        \"\"\"添加定时任务\"\"\"\n        task = ScheduledTask(\n            name=name,\n            schedule=schedule,\n            description=description,\n            enabled=True,\n            created=datetime.now().isoformat(),\n            next_run=self._calc_next_run(schedule),\n            tags=tags or []\n        )\n        self.tasks.append(task)\n        self._save()\n        return task\n    \n    def _calc_next_run(self, cron_expr: str) -> str:\n        \"\"\"计算下次执行时间（简化实现）\"\"\"\n        parts = cron_expr.strip().split()\n        if len(parts) != 5:\n            return datetime.now().isoformat()\n        \n        minute, hour, day, month, weekday = parts\n        now = datetime.now()\n        \n        # 简单解析：如果只有小时和分钟指�?        if minute == \"*\" and hour == \"*\":\n            # 每分钟：下一分钟\n            next_time = now + timedelta(minutes=1)\n        elif minute != \"*\" and hour == \"*\":\n            # 每小时的指定分钟\n            m = int(minute)\n            next_time = now.replace(minute=m, second=0, microsecond=0)\n            if next_time <= now:\n                next_time += timedelta(hours=1)\n        elif minute != \"*\" and hour != \"*\":\n            # 每天的指定时�?            h, m = int(hour), int(minute)\n            next_time = now.replace(hour=h, minute=m, second=0, microsecond=0)\n            if next_time <= now:\n                next_time += timedelt"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn71pk44ca87scz3pstt90r66n80xhaa\",\n  \"slug\": \"laosi-scheduler\",\n  \"version\": \"2.0.0\",\n  \"publishedAt\": 1780097485261\n}"},{"path":"skill-card.md","content":"## Description:\n\nScheduler Pro helps agents define and manage local scheduled tasks, reminders, recurring jobs, cron-style schedules, and next-run calculations with persistent JSON storage.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[534422530](https://clawhub.ai/user/534422530)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agent users can use this skill to maintain a lightweight local registry of scheduled tasks, reminders, system maintenance jobs, monitoring checks, reports, and workflow triggers. It is suited to simple scheduling support rather than acting as a full cron executor.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill is a simple local task registry and may be mistaken for a full cron executor.\n\nMitigation: Use it for lightweight reminders and schedule tracking, and rely on a production scheduler when exact execution semantics are required.\n\nRisk: Task names, reminder text, and operational details may be stored in local plaintext JSON.\n\nMitigation: Avoid storing sensitive content unless local plaintext storage is acceptable for the deployment environment.\n\nRisk: Deleting or toggling tasks changes the local schedule registry.\n\nMitigation: Confirm destructive or state-changing mutations before applying them.\n\n## Reference(s):\n\n- [Scheduler Pro ClawHub listing](https://clawhub.ai/534422530/skills/laosi-scheduler)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Configuration, Guidance]\n\n**Output Format:** [Markdown with Python code examples and cron schedule tables]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces local scheduling guidance and sample Python code; persisted task data is stored in local JSON when the implementation is used.]\n\n## Skill Version(s):\n\n2.0.0 (source: server release evidence and artifact metadata)\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."},{"path":"hub.json","content":"{\r\n    \"description\":  \"Premium version with full implementation, examples, and enterprise support\",\r\n    \"minOpenClawVersion\":  \"1.2.0\",\r\n    \"version\":  \"2.0.0\",\r\n    \"tags\":  [\r\n                 \"scheduler\",\r\n                 \"cron\",\r\n                 \"task\",\r\n                 \"automation\",\r\n                 \"pro\"\r\n             ],\r\n    \"author\":  \"laosi\",\r\n    \"name\":  \"scheduler\",\r\n    \"pricing\":  {\r\n                    \"price\":  1900,\r\n                    \"model\":  \"one-time\"\r\n                },\r\n    \"license\":  \"MIT\",\r\n    \"displayName\":  \"Scheduler Pro\"\r\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"任务调度 - 定时任务/周期性任务/一次性提醒，cron语法支持，持久化存储，下次执行时间自动计算 Skill: Scheduler Pro Owner: 534422530 Summary: 任务调度 - 定时任务/周期性任务/一次性提醒，cron语法支持，持久化存储，下次执行时间自动计算 Tags: automation:2.0.0, cron:2.0.0, latest:2.0.0, pro:2.0.0, reminder:1.0.0, scheduler:2.0.0, task:2.0.0 Version history: v2.0.0 | 2026-05-29T23:31:25.261Z | auto - Version updated to 2.0.0, marking a major release. - Added new file: hub.json. - Introduced \"badge: premium\" to indicate premium status. - Various documentati","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1048,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T13:36:26.548Z","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-11T13:36:26.548Z","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-11T16:04:12.266Z","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"}]}}}