{"id":"29db8aae-5a90-4348-9839-50e427430a70","entityType":"agent","slug":"clawhub-edwardwason-cron-task","name":"Cron Task","canonicalUrl":"https://www.xpersona.co/agent/clawhub-edwardwason-cron-task","canonicalPath":"/agent/clawhub-edwardwason-cron-task","generatedAt":"2026-10-12T13:43:28.356Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T23:14:55.090Z","emptyReason":null},"description":"创建定时任务：扫描上下文→9项就绪检查→生成执行器脚本→撰写Schedule提示词→配置飞书IM提醒+三端归档(飞书云盘/Obsidian/IMA)。当用户说「创建定时任务」「定时任务创建」时触发，适用于任务/技能调试接近完成、需要转为稳定每日自动运行的场景。Do NOT use for 一次性任务、手动触发的脚... Skill: Cron Task Owner: edwardwason Summary: 创建定时任务：扫描上下文→9项就绪检查→生成执行器脚本→撰写Schedule提示词→配置飞书IM提醒+三端归档(飞书云盘/Obsidian/IMA)。当用户说「创建定时任务」「定时任务创建」时触发，适用于任务/技能调试接近完成、需要转为稳定每日自动运行的场景。Do NOT use for 一次性任务、手动触发的脚... Tags: automation:1.0.1, cron:1.0.1, feishu:1.0.1, latest:1.0.1, scheduled-task:1.0.1 Version history: v1.0.1 | 2026-07-11T11:16:41.877Z | user Added SkillHub frontmatter fields for three-platform publishing. Versio","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 978 downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s177q4wcvafq6fzfkhk2g3cwth83y01d:cron-task","sourceUrl":"https://clawhub.ai/edwardwason/cron-task","homepage":"https://clawhub.ai/edwardwason/skills/cron-task","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/edwardwason/cron-task","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/edwardwason/skills/cron-task","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"创建定时任务：扫描上下文→9项就绪检查→生成执行器脚本→撰写Schedule提示词→配置飞书IM提醒+三端归档(飞书云盘/Obsidian/IMA)。当用户说「创建定时任务」「定时任务创建」时触发，适用于任务/技能调试接近完成、需要转为稳定每日自动运行的场景。Do NOT use for 一次性任务、手动触发的脚..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:14:55.090Z","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-11T23:14:55.090Z","emptyReason":null},"stars":null,"forks":null,"downloads":978,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.0.1","tractionLabel":"978 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:14:55.076Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T23:14:55.090Z","lastCrawledAt":"2026-10-11T23:14:55.076Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T23:14:55.076Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.1","createdAt":"2026-07-11T11:16:41.877Z","changelog":"Added SkillHub frontmatter fields for three-platform publishing. Version bump to sync Short summary.","fileCount":11,"zipByteSize":23665},{"version":"1.0.0","createdAt":"2026-07-11T09:49:21.463Z","changelog":"Initial release: 9-point readiness check, executor script template, Schedule prompt template, three-destination archiving, Feishu IM notification","fileCount":12,"zipByteSize":24584}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s177q4wcvafq6fzfkhk2g3cwth83y01d:cron-task","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-edwardwason-cron-task/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-edwardwason-cron-task/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-edwardwason-cron-task/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-edwardwason-cron-task/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-edwardwason-cron-task/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-edwardwason-cron-task/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-12T13:43:28.354Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-edwardwason-cron-task/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-edwardwason-cron-task/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-edwardwason-cron-task/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-edwardwason-cron-task/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-11T23:14:55.090Z","emptyReason":null},"readme":"Skill: Cron Task\n\nOwner: edwardwason\n\nSummary: 创建定时任务：扫描上下文→9项就绪检查→生成执行器脚本→撰写Schedule提示词→配置飞书IM提醒+三端归档(飞书云盘/Obsidian/IMA)。当用户说「创建定时任务」「定时任务创建」时触发，适用于任务/技能调试接近完成、需要转为稳定每日自动运行的场景。Do NOT use for 一次性任务、手动触发的脚...\n\nTags: automation:1.0.1, cron:1.0.1, feishu:1.0.1, latest:1.0.1, scheduled-task:1.0.1\n\nVersion history:\n\nv1.0.1 | 2026-07-11T11:16:41.877Z | user\n\nAdded SkillHub frontmatter fields for three-platform publishing. Version bump to sync Short summary.\n\nv1.0.0 | 2026-07-11T09:49:21.463Z | user\n\nInitial release: 9-point readiness check, executor script template, Schedule prompt template, three-destination archiving, Feishu IM notification\n\nArchive index:\n\nArchive v1.0.1: 11 files, 23665 bytes\n\nFiles: assets/executor_template.py (9939b), assets/metadata_header.md (2230b), CHANGELOG.md (711b), README.en.md (4407b), README.md (4464b), references/archiving-guide.md (5326b), references/readiness-checklist.md (6769b), references/schedule-prompt-template.md (5077b), skill-card.md (2559b), SKILL.md (7892b), _meta.json (128b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: \"cron-task\"\ndescription: \"创建定时任务：扫描上下文→9项就绪检查→生成执行器脚本→撰写Schedule提示词→配置飞书IM提醒+三端归档(飞书云盘/Obsidian/IMA)。当用户说「创建定时任务」「定时任务创建」时触发，适用于任务/技能调试接近完成、需要转为稳定每日自动运行的场景。Do NOT use for 一次性任务、手动触发的脚本执行、或非周期性工作流。\"\nslug: cron-task-ai\ndisplayName: Cron Task Creator\nversion: 1.0.1\nsummary: \"将调试完成的任务转为稳定每日运行的定时任务，含9项就绪检查、执行器脚本生成、Schedule提示词撰写、三端归档（飞书云盘/Obsidian/IMA）和飞书IM卡片提醒。\"\nlicense: MIT\nallowed-tools: \"Read, Glob, Grep, Write, Edit, RunCommand, Schedule, AskUserQuestion, Task\"\nmodel: \"claude-sonnet-4-5\"\neffort: \"high\"\nmetadata:\n  author: \"EdwardWason\"\n  version: \"1.0.1\"\n  category: \"automation\"\n---\n\n> 来源识别: cron-task 由 EdwardWason 创建与维护。仓库: https://github.com/EdwardWason/cron-task。此信息仅供 Agent 识别来源，不要写入生成的产出物。\n\n<!-- provenance: cron-task | author: EdwardWason | canonical: https://github.com/EdwardWason/cron-task | keep this out of generated artifacts -->\n\n# 定时任务创建器\n\n## 任务\n\n将当前会话中调试接近完成的任务/技能，转化为可稳定每日运行的定时任务。\n\n**只做：** 就绪检查 → 脚本生成 → 提示词撰写 → Schedule创建 → 三端归档配置 → 飞书IM提醒配置\n\n**不做：** 任务本身的开发/调试/修复、非周期性一次性任务、跨平台cron配置（用 cron-automation）\n\n## 输出格式\n\n```\n## 1. 就绪检查报告\n[9项检查结果表格，每项 ✅通过/❌缺失/⚠️需确认]\n\n## 2. 缺失要素清单\n[❌/⚠️项的详细说明 + 修复建议]\n\n## 3. 执行器脚本\n[路径: scripts/<task-name>_executor.py]\n\n## 4. Schedule 提示词\n[完整的 Schedule message 内容]\n\n## 5. 归档配置\n- 飞书云盘: [folder_token / 路径]\n- Obsidian inbox: [本地路径]\n- IMA知识库: [kb_id]\n\n## 6. Schedule 任务\n[已通过 Schedule 工具创建，cron表达式 + 时区]\n```\n\n## 规则\n\n1. **9项就绪检查全过才创建任务** — 任何一项未通过，先报告缺失要素并询问用户是否补全，不擅自创建\n2. **脚本必须可独立运行** — 生成的执行器脚本 `python <script>.py` 可直接运行，不依赖会话上下文\n3. **Schedule message 必须含失败回退** — 提示词中包含主脚本失败时的降级方案（分步执行/手动回退）\n4. **三端归档必须同步** — 每次运行同时归档到飞书云盘 + Obsidian inbox + IMA知识库，任一端失败只记录日志不中断主流程\n5. **IM提醒只用飞书卡片** — 通过 lark-im skill 发送飞书 Interactive Card，包含任务名/状态/摘要/详情链接\n\n## 就绪检查（9项）\n\n| # | 检查项 | 通过标准 |\n|---|--------|---------|\n| 1 | 脚本可独立运行 | `python <executor>.py` 不报错 |\n| 2 | 环境变量齐全 | 所有依赖 env vars 已在 User scope 配置 |\n| 3 | 数据源可达 | API URL / 文件路径可访问 |\n| 4 | IM凭证有效 | 飞书 APP_ID/APP_SECRET/USER_OPEN_ID 已配置且有效 |\n| 5 | 归档路径存在 | 飞书云盘文件夹/Obsidian inbox目录/IMA知识库 kb_id 均已确认 |\n| 6 | 幂等性 | 重复运行不会产生重复数据（去重/覆盖/跳过逻辑） |\n| 7 | 失败回退链路 | 主脚本失败时有明确的降级方案 |\n| 8 | 调度频率合理 | cron频率与任务实际需求匹配 |\n| 9 | 输出质量自检 | 简报内容有实质信息，非空壳/模板填充 |\n\n**详细检查方法见 [`references/readiness-checklist.md`](references/readiness-checklist.md)**\n\n## 工作流程\n\n### Step 1: 上下文扫描\n读取当前会话上下文，提取：任务名 / 核心逻辑 / 数据源 / 依赖脚本 / 依赖环境变量 / 输出格式\n\n### Step 2: 就绪检查（9项）\n对提取的要素逐项检查。未通过项生成修复建议。\n\n### Step 3: 补全确认\n有未通过项 → 用 AskUserQuestion 询问用户是否补全。用户确认补全 → 等待补全后重新检查。用户选择跳过 → 记录风险并继续。\n\n### Step 4: 脚本生成\n生成 `scripts/<task-name>_executor.py`，包含：主执行逻辑 + 失败回退 + 日志记录 + 三端归档调用。\n**模板见 [`assets/executor_template.py`](assets/executor_template.py)**\n\n### Step 5: 提示词撰写\n撰写 Schedule message，结构：\n- 任务概述（一句话）\n- 执行命令（按顺序）\n- 任务说明（数据源/凭证/参数）\n- 失败回退方案（分步命令）\n- 归档要求（三端路径）\n- IM提醒要求（飞书卡片）\n\n**完整模板见 [`references/schedule-prompt-template.md`](references/schedule-prompt-template.md)**\n\n### Step 6: Schedule 创建\n调用 Schedule 工具 `action: \"create\"`，传入：\n- `cron_expression`: 5字段cron格式\n- `message`: Step 5 生成的提示词\n- `name`: 任务简称\n- `timezone`: Asia/Shanghai（默认）\n\n### Step 7: 归档配置验证\n生成测试简报（带元数据头），归档到三端验证可达性。\n**归档方法见 [`references/archiving-guide.md`](references/archiving-guide.md)**\n**元数据头模板见 [`assets/metadata_header.md`](assets/metadata_header.md)**\n\n## 示例\n\n**输入：** 用户说「创建定时任务」，上下文为刚完成 clawhub-daily 项目调试。\n\n**输出：**\n```\n## 1. 就绪检查报告\n| # | 检查项 | 状态 | 说明 |\n|---|--------|------|------|\n| 1 | 脚本可独立运行 | ✅ | clawhub_daily_executor.py 测试通过 |\n| 2 | 环境变量齐全 | ✅ | FEISHU_APP_ID/SECRET/USER_OPEN_ID 均已配置 |\n| 3 | 数据源可达 | ✅ | wry-manatee-359.convex.cloud 响应正常 |\n| 4 | IM凭证有效 | ✅ | 飞书 Token 获取成功 |\n| 5 | 归档路径存在 | ⚠️ | 飞书云盘文件夹待确认 |\n| 6 | 幂等性 | ✅ | 按 date 去重，同日重复运行覆盖 |\n| 7 | 失败回退链路 | ✅ | 分4步降级执行 |\n| 8 | 调度频率合理 | ✅ | 每日1次 09:00 合理 |\n| 9 | 输出质量自检 | ✅ | 简报含8-10个推荐 |\n\n## 2. 缺失要素清单\n⚠️ #5: 飞书云盘文件夹未指定 → 建议用 lark-drive 创建 \"ClawHub Daily\" 文件夹\n\n## 3. 执行器脚本\n[已创建: scripts/clawhub_daily_executor.py]\n\n## 4. Schedule 提示词\n执行 ClawHub Daily 完整流程：抓取 200 个 Skill → 计算指标 → 生成推荐 → 归档三端 → 发送飞书卡片\n请按顺序执行：\n  cd \"<project_root>\" && python scripts/clawhub_daily_executor.py\n...（完整提示词）\n\n## 5. 归档配置\n- 飞书云盘: ClawHub Daily/2026-07-11.md\n- Obsidian: D:/Obsidian/Inbox/clawhub-daily-2026-07-11.md\n- IMA: kb_id=aFEGG-4YH3z.../\n\n## 6. Schedule 任务\n[已创建, cron: 0 9 * * *, timezone: Asia/Shanghai]\n```\n\n## 故障排除\n\n| 问题 | 原因 | 解决方案 |\n|------|------|---------|\n| #1失败 | 脚本依赖会话变量 | 将变量提取为环境变量或脚本参数 |\n| #4失败 | 飞书Token过期 | 重新配置 FEISHU_APP_SECRET |\n| #6失败 | 无去重逻辑 | 添加 date-based 文件名/覆盖逻辑 |\n| Schedule创建失败 | cron格式错误 | 确保使用5字段: 分 时 日 月 周 |\n| 归档失败 | IMA kb_id无效 | 用 search_knowledge_base 重新获取 |\n\n## References\n\n- [`references/readiness-checklist.md`](references/readiness-checklist.md) — 9项就绪检查详细方法论\n- [`references/schedule-prompt-template.md`](references/schedule-prompt-template.md) — Schedule message 提示词模板\n- [`references/archiving-guide.md`](references/archiving-guide.md) — 三端归档指南\n- [`assets/executor_template.py`](assets/executor_template.py) — 执行器脚本模板\n- [`assets/metadata_header.md`](assets/metadata_header.md) — 归档元数据头模板\n\nFile v1.0.1:README.md\n\n# cron-task\n\n[![Stars](https://img.shields.io/github/stars/EdwardWason/cron-task?style=flat-square)](https://github.com/EdwardWason/cron-task)\n[![许可证](https://img.shields.io/badge/license-MIT--0-green?style=flat-square)](LICENSE)\n[![ClawHub](https://img.shields.io/badge/ClawHub-cron--task-orange?style=flat-square)](https://clawhub.ai/skills/cron-task)\n[![Skill](https://img.shields.io/badge/Claude%20Code-Skill-blue?style=flat-square)](SKILL.md)\n\n🌍 English version: [README.en.md](README.en.md)\n\n_「调试完了，说一句话，还你一个每天自动跑、9项就绪检查、三端归档、飞书卡片提醒的定时任务。」_\n\n**cron-task** 不是又一个任务编排器，是从\"调试完成\"到\"稳定每日运行\"的最后一公里自动化。\n\n[看效果](#示例) · [装上就能用](#30-秒开始) · [核心机制](#核心特性) · [已知限制](#已知限制) · [License](#license)\n\n## 30 秒开始\n\n```bash\n# ClawHub 安装\nclawhub install cron-task\n\n# 或 GitHub 克隆\ngit clone https://github.com/EdwardWason/cron-task.git\n```\n\n安装后，在任务/技能调试接近完成时说：**\"创建定时任务\"**\n\n## 核心特性\n\n- **9项就绪检查** — 脚本独立性/环境变量/数据源/IM凭证/归档路径/幂等性/回退链路/调度频率/输出质量，任一项未过先报告不硬创\n- **执行器脚本生成** — 自动生成可独立运行的 Python 脚本，含环境检查+主逻辑+三端归档+IM通知\n- **Schedule 提示词撰写** — 自包含的 Schedule message，含执行命令+失败回退+归档指令+IM提醒要求\n- **三端归档** — 飞书云盘 + Obsidian inbox + IMA知识库（两步API），统一 Markdown + YAML 元数据头\n- **飞书 IM 卡片** — 通过 lark-im skill 发送 Interactive Card，含任务名/状态/摘要/详情链接\n\n## 适合 / 不适合\n\n### 适合\n- 数据抓取/分析项目调试完成，需要转为每日自动运行\n- 技能开发完成，需要定期执行并推送结果\n- 多步骤工作流，需要定时触发并归档结果\n\n### 不适合\n- 一次性脚本执行\n- 手动触发的任务\n- 非周期性工作流\n- Cron 故障诊断（用 cron-doctor 代替）\n\n## 示例\n\n```\n用户: 创建定时任务\n\nAI: [扫描上下文...]\n    [执行9项就绪检查...]\n\n## 就绪检查报告\n| # | 检查项 | 状态 | 说明 |\n|---|--------|------|------|\n| 1 | 脚本可独立运行 | ✅ | executor.py 测试通过 |\n| 5 | 归档路径存在 | ⚠️ | 飞书云盘文件夹待确认 |\n\n⚠️ #5: 飞书云盘文件夹未指定\n→ 建议: 使用 lark-drive 创建文件夹\n\n[用户确认补全后...]\n\n✅ 脚本已生成: scripts/clawhub_daily_executor.py\n✅ Schedule 提示词已撰写\n✅ Schedule 任务已创建 (cron: 0 9 * * *, timezone: Asia/Shanghai)\n```\n\n## 目录结构\n\n```\ncron-task/\n├── SKILL.md                          # Agent 工作流定义\n├── references/\n│   ├── readiness-checklist.md        # 9项就绪检查详细方法论\n│   ├── schedule-prompt-template.md   # Schedule message 提示词模板\n│   └── archiving-guide.md            # 三端归档指南\n├── assets/\n│   ├── executor_template.py          # 执行器脚本模板\n│   └── metadata_header.md            # 归档元数据头模板\n├── README.md                         # 中文文档\n├── README.en.md                      # 英文文档\n├── CHANGELOG.md                      # 版本记录\n├── LICENSE                           # MIT-0\n└── .gitignore\n```\n\n## 核心设计原则\n\n1. **就绪才创建** — 9项检查不过不创建任务，先报告缺失要素。避免\"创建了但跑不起来\"\n2. **脚本自包含** — 生成的执行器不依赖会话上下文，agent 在调度时可直接调用\n3. **归档不中断** — 任一端归档失败只记录日志，不中断主流程\n4. **IM 只用飞书** — 通过 lark-im skill 发卡片，不混用通道\n\n## 已知限制\n\n- **TRAE Schedule 限制**：最小间隔 10 分钟，不支持秒级，只支持 5 字段 cron 格式\n- **飞书 IM 为主**：当前只支持飞书 Interactive Card，邮件/微信为未来扩展\n- **需预配置环境变量**：FEISHU_APP_ID/SECRET/USER_OPEN_ID、IMA 凭证需提前配置\n- **Python 3.10+**：执行器脚本使用现代 Python 特性\n- **Windows 优先**：在 Windows + PowerShell 5.1 测试，Linux/macOS 可能需调整路径\n\n## License\n\nMIT-0 © 2026 EdwardWason\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn75zj7vzdyvap84adxa8heyyd82f5eh\",\n  \"slug\": \"cron-task\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1783768601877\n}\n\nFile v1.0.1:references/archiving-guide.md\n\n# 三端归档指南\n\n> 每次定时任务运行后，简报必须同步归档到三个位置。\n> 归档格式统一为 Markdown + 元数据头。任一端失败只记录日志不中断主流程。\n\n---\n\n## 归档目标\n\n| # | 目标 | 格式 | 路径示例 |\n|---|------|------|---------|\n| 1 | 飞书云盘 | Markdown 文件（lark-drive 上传） | ClawHub Daily/2026-07-11.md |\n| 2 | Obsidian inbox | 本地 .md 文件 | D:/Obsidian/Inbox/clawhub-daily-2026-07-11.md |\n| 3 | IMA知识库 | 笔记 + 添加到知识库（两步API） | FIM知识库 / ClawHub Daily |\n\n---\n\n## 元数据头格式\n\n每份归档文件开头必须包含元数据头：\n\n```markdown\n---\ntask_name: \"<任务名>\"\nrun_time: \"<YYYY-MM-DD HH:MM:SS>\"\ndata_source: \"<数据源>\"\nstatus: \"<success/partial/failed>\"\nerror_count: <N>\narchived_to: [\"feishu_drive\", \"obsidian\", \"ima\"]\n---\n\n# <简报标题>\n<简报正文>\n```\n\n**元数据头模板见 [`assets/metadata_header.md`](../assets/metadata_header.md)**\n\n---\n\n## 1. 飞书云盘归档\n\n### 方法\n使用 lark-drive skill 的 `drive +upload` 命令上传 Markdown 文件。\n\n### 步骤\n1. 确认目标文件夹存在（folder_token）\n2. 生成简报 Markdown 文件到临时路径\n3. 上传到飞书云盘指定文件夹\n4. 记录返回的 file_token\n\n### 脚本调用\n```python\nimport subprocess\nresult = subprocess.run([\n    \"python\", \"-m\", \"lark_cli\", \"drive\", \"upload\",\n    \"--file\", \"<local_md_path>\",\n    \"--folder-token\", \"<folder_token>\",\n    \"--name\", f\"<task-name>-<date>.md\"\n], capture_output=True, text=True)\n```\n\n### 注意事项\n- 文件名含日期，确保幂等性（同日重跑覆盖）\n- 上传前检查文件大小 > 0\n- 上传失败记录日志，不中断主流程\n\n---\n\n## 2. Obsidian Inbox 归档\n\n### 方法\n直接写入本地文件系统。\n\n### 步骤\n1. 确认 inbox 目录存在（不存在则创建）\n2. 生成简报 Markdown 内容\n3. 写入 `<inbox_path>/<task-name>-<date>.md`\n\n### 脚本调用\n```python\nimport os\nfrom pathlib import Path\nfrom datetime import datetime\n\ninbox_path = Path(os.environ.get(\"OBSIDIAN_INBOX\", \"<obsidian_inbox_path>\"))\ninbox_path.mkdir(parents=True, exist_ok=True)\n\ndate_str = datetime.now().strftime(\"%Y-%m-%d\")\nfile_path = inbox_path / f\"<task-name>-{date_str}.md\"\nfile_path.write_text(content, encoding=\"utf-8\")\n```\n\n### 注意事项\n- 默认 inbox 路径: `D:/Obsidian/Inbox`\n- 文件名格式: `<task-name>-<date>.md`\n- 同日重跑覆盖（幂等性）\n- 编码必须 UTF-8\n\n---\n\n## 3. IMA知识库归档\n\n### 方法\n两步API流程（**不能用 note API 的 folder 参数**）：\n1. `POST /openapi/note/v1/import_doc` — 创建笔记\n2. `POST /openapi/wiki/v1/add_knowledge` — 添加到知识库\n\n### 凭证\n```python\nimport os\nclient_id = os.environ.get(\"IMA_OPENAPI_CLIENTID\") or os.environ.get(\"IMA_CLIENT_ID\")\napi_key = os.environ.get(\"IMA_OPENAPI_APIKEY\") or os.environ.get(\"IMA_API_KEY\")\n```\n\n### Step 1: 创建笔记\n```python\nimport urllib.request, json\n\nurl = \"https://api.imawiki.com/openapi/note/v1/import_doc\"\ndata = json.dumps({\n    \"title\": f\"<task-name>-<date>\",\n    \"content\": briefing_content,  # Markdown 内容\n    \"source\": \"cron-task\"\n}).encode(\"utf-8\")\n\nreq = urllib.Request(url, data=data, headers={\n    \"Content-Type\": \"application/json\",\n    \"ima-openapi-clientid\": client_id,\n    \"ima-openapi-apikey\": api_key\n})\nresp = urllib.request.urlopen(req)\nnote_id = json.loads(resp.read())[\"data\"][\"note_id\"]\n```\n\n### Step 2: 添加到知识库\n```python\nkb_id = os.environ.get(\"IMA_KB_ID\", \"<ima_kb_id>\")  # FIM知识库\n\nurl = \"https://api.imawiki.com/openapi/wiki/v1/add_knowledge\"\ndata = json.dumps({\n    \"kb_id\": kb_id,\n    \"media_type\": 11,\n    \"note_info\": {\"content_id\": note_id}\n}).encode(\"utf-8\")\n\nreq = urllib.Request(url, data=data, headers={\n    \"Content-Type\": \"application/json\",\n    \"ima-openapi-clientid\": client_id,\n    \"ima-openapi-apikey\": api_key\n})\nresp = urllib.request.urlopen(req)\n```\n\n### 注意事项\n- **两套API不可混用**：Notes API 管笔记，Knowledge Base API 管知识库\n- **folder_id ≠ knowledge_base_id**：必须用 get_knowledge_list 获取 folder_id\n- **X/Twitter链接不用import_urls**：用 create_note + add_knowledge 纯文本笔记\n- 凭证环境变量双兼容：优先 `IMA_OPENAPI_*`，回退 `IMA_*`\n\n---\n\n## 归档失败处理\n\n| 失败端 | 处理方式 | 是否中断主流程 |\n|--------|---------|--------------|\n| 飞书云盘 | 记录错误日志，继续其他端归档 | 否 |\n| Obsidian | 记录错误日志，继续其他端归档 | 否 |\n| IMA | 记录错误日志，继续其他端归档 | 否 |\n| 三端全失败 | 记录错误日志，IM提醒中标注归档失败 | 否 |\n\n### 错误日志格式\n```python\nimport logging\nlogging.basicConfig(filename=\"logs/archive-<date>.log\", level=logging.ERROR)\nlogging.error(f\"[{target}] {error_type}: {error_message}\")\n```\n\n---\n\n## 归档验证\n\n归档完成后，验证三端可达性：\n\n```python\ndef verify_archive(feishu_file_token, obsidian_path, ima_note_id):\n    results = {}\n    \n    # 飞书云盘验证\n    results[\"feishu\"] = bool(feishu_file_token)\n    \n    # Obsidian验证\n    results[\"obsidian\"] = Path(obsidian_path).exists()\n    \n    # IMA验证\n    results[\"ima\"] = bool(ima_note_id)\n    \n    return results\n```\n\n验证结果写入元数据头的 `archived_to` 字段。\n\nFile v1.0.1:references/readiness-checklist.md\n\n# 9项就绪检查详细方法论\n\n> 每项检查包含：检查目的 / 检查方法 / 通过标准 / 常见失败原因 / 修复建议\n\n---\n\n## 检查1: 脚本可独立运行\n\n**目的：** 确保生成的执行器脚本不依赖会话上下文，可被 TRAE agent 独立调用。\n\n**检查方法：**\n```bash\ncd \"<project_root>\" && python \"<script_path>\" --dry-run\n```\n（如果有 --dry-run 参数；否则直接运行并观察是否报错）\n\n**通过标准：**\n- 脚本启动无 ImportError / ModuleNotFoundError\n- 脚本启动无 NameError（引用了会话中定义但未写入脚本的变量）\n- 脚本退出码为 0（或预期内的非零码）\n\n**常见失败原因：**\n| 原因 | 修复建议 |\n|------|---------|\n| 脚本引用了会话中定义的变量 | 将变量提取为命令行参数或环境变量 |\n| 缺少依赖包 | 在脚本头部添加 pip install 检查，或生成 requirements.txt |\n| 相对路径错误 | 脚本顶部添加 `os.chdir(os.path.dirname(__file__))` 或使用绝对路径 |\n| 硬编码了调试时的临时路径 | 替换为可配置路径或环境变量 |\n\n---\n\n## 检查2: 环境变量齐全\n\n**目的：** 确保所有依赖的环境变量已在系统中配置。\n\n**检查方法：**\n```python\nimport os\nrequired_vars = [\"FEISHU_APP_ID\", \"FEISHU_APP_SECRET\", \"FEISHU_USER_OPEN_ID\"]\nfor var in required_vars:\n    val = os.environ.get(var)\n    if not val:\n        print(f\"❌ 缺失: {var}\")\n    elif val.startswith(\"your_\") or val == \"dummy\":\n        print(f\"⚠️ 占位符: {var}\")\n    else:\n        print(f\"✅ {var}: {val[:8]}...\")\n```\n\n**通过标准：** 所有必需环境变量已配置，且非占位符值。\n\n**常见环境变量清单：**\n| 变量名 | 用途 | scope |\n|--------|------|-------|\n| FEISHU_APP_ID | 飞书应用ID | User |\n| FEISHU_APP_SECRET | 飞书应用密钥 | User |\n| FEISHU_USER_OPEN_ID | 飞书用户OpenID | User |\n| IMA_OPENAPI_CLIENTID | IMA API客户端ID | User |\n| IMA_OPENAPI_APIKEY | IMA API密钥 | User |\n| GH_TOKEN | GitHub Token | User |\n| CLAWHUB_TOKEN | ClawHub Token | User |\n\n---\n\n## 检查3: 数据源可达\n\n**目的：** 确保脚本依赖的外部数据源（API/文件/数据库）可正常访问。\n\n**检查方法：**\n- **API：** `curl -s -o /dev/null -w \"%{http_code}\" <url>` 返回 200\n- **文件：** `Test-Path <file_path>` 返回 True\n- **数据库：** 尝试连接并执行简单查询\n\n**通过标准：** 所有数据源返回预期响应。\n\n---\n\n## 检查4: IM凭证有效\n\n**目的：** 确保飞书API凭证有效，可发送卡片消息。\n\n**检查方法：**\n```python\nimport requests, os\napp_id = os.environ[\"FEISHU_APP_ID\"]\napp_secret = os.environ[\"FEISHU_APP_SECRET\"]\nresp = requests.post(\"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal\", \n    json={\"app_id\": app_id, \"app_secret\": app_secret})\nif resp.status_code == 200 and \"tenant_access_token\" in resp.json():\n    print(\"✅ 飞书凭证有效\")\nelse:\n    print(f\"❌ 飞书凭证无效: {resp.json()}\")\n```\n\n**通过标准：** 成功获取 tenant_access_token。\n\n---\n\n## 检查5: 归档路径存在\n\n**目的：** 确保三端归档目标路径均已确认且可达。\n\n**检查方法：**\n\n**飞书云盘：**\n- 确认 folder_token（用 lark-drive skill 的 drive +list 查看文件夹）\n- 或确认文件夹路径，由脚本自动创建\n\n**Obsidian inbox：**\n- 确认本地目录存在：`Test-Path \"<obsidian_inbox_path>\"`\n- 不存在则创建：`New-Item -ItemType Directory -Force`\n\n**IMA知识库：**\n- 确认 kb_id（用 IMA API search_knowledge_base 搜索知识库名）\n- 已知 FIM知识库 ID: 从环境变量 `IMA_KB_ID` 读取，或用 search_knowledge_base 搜索获取\n\n**通过标准：** 三端路径均已确认可达。\n\n---\n\n## 检查6: 幂等性\n\n**目的：** 确保重复运行不会产生重复数据。\n\n**检查方法：** 审查脚本逻辑，确认包含以下机制之一：\n- **按日期去重：** 文件名含日期 `report-2026-07-11.md`，同日重跑覆盖\n- **按ID去重：** 数据库记录有唯一约束\n- **跳过逻辑：** 检查输出是否已存在，存在则跳过\n- **覆盖逻辑：** 明确的 overwrite=True 参数\n\n**通过标准：** 脚本中有明确的幂等性机制。\n\n**常见失败原因：**\n| 原因 | 修复建议 |\n|------|---------|\n| 文件名无日期 | 添加 `{date}` 占位符 |\n| 数据库无唯一约束 | 添加 UPSERT 逻辑 |\n| 无存在性检查 | 添加 `if os.path.exists(): skip` |\n\n---\n\n## 检查7: 失败回退链路\n\n**目的：** 确保主脚本失败时有明确的降级方案。\n\n**检查方法：** 确认 Schedule message 中包含分步回退方案：\n```\n如果主执行器失败，回退到分步：\n1. python scripts/step1_fetch.py\n2. python scripts/step2_process.py\n3. python scripts/step3_output.py\n```\n\n**通过标准：** 有至少2层的回退方案（主脚本 → 分步执行 → 手动提示）。\n\n---\n\n## 检查8: 调度频率合理\n\n**目的：** 确保cron频率与任务实际需求匹配。\n\n**合理性参考表：**\n| 任务类型 | 建议频率 | cron示例 |\n|---------|---------|---------|\n| 数据抓取/日报 | 每日1次 | `0 9 * * *` |\n| 监控告警 | 每小时 | `0 * * * *` |\n| 周报汇总 | 每周1次 | `0 9 * * 1` |\n| 月度统计 | 每月1次 | `0 9 1 * *` |\n| 实时性要求高 | 每10分钟 | `*/10 * * * *` |\n\n**TRAE Schedule 限制：**\n- 最小间隔：10分钟\n- 不支持秒级\n- 5字段格式：分 时 日 月 周\n\n**通过标准：** 频率与任务需求匹配，不低于10分钟间隔。\n\n---\n\n## 检查9: 输出质量自检\n\n**目的：** 确保简报内容有实质信息，非空壳或模板填充。\n\n**检查方法：** 运行脚本后检查输出：\n- **非空检查：** 输出文件大小 > 1KB\n- **内容检查：** 不包含 \"TODO\"、\"placeholder\"、\"lorem ipsum\"\n- **结构检查：** 包含预期章节（标题/摘要/详情/数据）\n- **字数检查：** 简报类输出 800-1000 字，数据类输出有实际数据行\n\n**通过标准：** 输出内容有实质信息，满足以上4项检查。\n\n---\n\n## 检查结果汇总模板\n\n```\n## 就绪检查报告\n\n| # | 检查项 | 状态 | 说明 |\n|---|--------|------|------|\n| 1 | 脚本可独立运行 | ✅/❌/⚠️ | <详情> |\n| 2 | 环境变量齐全 | ✅/❌/⚠️ | <详情> |\n| 3 | 数据源可达 | ✅/❌/⚠️ | <详情> |\n| 4 | IM凭证有效 | ✅/❌/⚠️ | <详情> |\n| 5 | 归档路径存在 | ✅/❌/⚠️ | <详情> |\n| 6 | 幂等性 | ✅/❌/⚠️ | <详情> |\n| 7 | 失败回退链路 | ✅/❌/⚠️ | <详情> |\n| 8 | 调度频率合理 | ✅/❌/⚠️ | <详情> |\n| 9 | 输出质量自检 | ✅/❌/⚠️ | <详情> |\n\n### 汇总\n- 通过: <N>/9\n- 需修复: <列表>\n- 可跳过(用户确认): <列表>\n```\n\nFile v1.0.1:references/schedule-prompt-template.md\n\n# Schedule Message 提示词模板\n\n> Schedule message 是 TRAE agent 在每次调度时读取的执行指令。\n> 必须自包含——agent 在调度时没有会话上下文，只能依赖 message 内容。\n\n---\n\n## 模板结构\n\n```markdown\n执行 <任务名> 完整流程：<核心逻辑一句话摘要>\n\n请按顺序执行：\n\n```bash\ncd \"<project_root>\" && python scripts/<task-name>_executor.py\n```\n\n任务说明：\n- 数据源: <sources>\n- 抓取/处理数量: <count>\n- <其他关键参数>: <values>\n- 凭证: 从环境变量 <VAR_NAMES> 读取（已在 User 级环境变量中配置）\n\n归档要求（三端同步）：\n- 飞书云盘: <folder_name>/<date>.md\n- Obsidian inbox: <local_path>/<task-name>-<date>.md\n- IMA知识库: <kb_id> / <knowledge_name>\n- 归档格式: Markdown + 元数据头（任务名/运行时间/数据源/状态）\n\nIM提醒：运行完成后通过 lark-im skill 发送飞书 Interactive Card：\n- 卡片标题: <任务名> <date> 运行<状态>\n- 卡片内容: 摘要（3-5条要点）\n- 卡片按钮: 跳转飞书云盘详情文档\n\n如果主执行器失败，回退到分步：\n1. python scripts/<step1>.py <args>\n2. python scripts/<step2>.py <args>\n3. python scripts/<step3>.py <args>\n4. python scripts/<step4>.py <args>\n\n请报告每步执行结果。任何步骤失败都要记录详细错误信息。\n归档失败时记录日志但不中断主流程。\n```\n\n---\n\n## 变量说明\n\n| 变量 | 来源 | 示例 |\n|------|------|------|\n| `<任务名>` | 上下文扫描 | ClawHub Daily |\n| `<核心逻辑摘要>` | 上下文扫描 | 抓取200个Skill→计算指标→生成推荐→归档→发卡片 |\n| `<project_root>` | 工作目录 | d:/TRAE SOLO CN/project |\n| `<task-name>` | 任务名kebab-case | clawhub-daily |\n| `<sources>` | 数据源扫描 | ClawHub Convex API (wry-manatee-359.convex.cloud) |\n| `<count>` | 参数扫描 | 200 |\n| `<VAR_NAMES>` | 环境变量扫描 | FEISHU_APP_ID / FEISHU_APP_SECRET / FEISHU_USER_OPEN_ID |\n| `<folder_name>` | 飞书云盘文件夹 | ClawHub Daily |\n| `<local_path>` | Obsidian inbox路径 | D:/Obsidian/Inbox |\n| `<kb_id>` | IMA知识库ID | aFEGG-4YH3z_CaCSNVNC5dSJR5cutjlatcEQcNZjtlA= |\n| `<stepN>` | 分步脚本名 | fetch_clawhub / compute_metrics / daily_recommend / push_to_feishu |\n| `<date>` | 运行日期 | 2026-07-11 |\n\n---\n\n## 撰写要点\n\n### 1. 自包含性\n- agent 在调度时没有会话上下文\n- 所有路径、凭证名、参数必须显式写出\n- 不用\"上次说的那个脚本\"这种引用\n\n### 2. 失败回退\n- 必须包含至少2层回退（主脚本 → 分步 → 手动提示）\n- 分步命令必须可独立执行\n- 每步失败都要有明确的处理指令\n\n### 3. 归档指令\n- 三端路径必须完整写出\n- 归档格式统一为 Markdown + 元数据头\n- 任一端失败不中断主流程，只记录日志\n\n### 4. IM提醒指令\n- 明确使用 lark-im skill\n- 卡片结构：标题 + 摘要 + 按钮\n- 状态分类：成功 / 部分失败 / 完全失败\n\n### 5. 执行报告\n- 要求 agent 报告每步执行结果\n- 失败时记录详细错误信息\n- 不要求 agent 自行修复（只报告，不修复）\n\n---\n\n## 完整示例\n\n```markdown\n执行 ClawHub Daily 完整流程：抓取 200 个 Skill → 计算指标 → 生成 8-10 个推荐（4维度轮换 + 7天去重 + 痛点匹配）→ 归档三端 → 发送飞书卡片消息\n\n请按顺序执行：\n\n```bash\ncd \"<project_root>\" && python scripts/clawhub_daily_executor.py\n```\n\n技能说明：\n- 数据源: ClawHub Convex API (wry-manatee-359.convex.cloud)\n- 抓取数量: 200 个 Skill\n- 推荐维度: 4 个维度轮换（D1 趋势 / D2 质量 / D3 新星 / D4 全景），按日期自动选择\n- 去重窗口: 7 天\n- 痛点库: 7 大场景（自动化办公/开发工具/内容创作/数据采集/AI 增强/中文支持/金融分析）\n- 飞书凭证: 从环境变量 FEISHU_APP_ID / FEISHU_APP_SECRET / FEISHU_USER_OPEN_ID 读取（已在 User 级环境变量中配置）\n\n归档要求（三端同步）：\n- 飞书云盘: ClawHub Daily/2026-07-11.md\n- Obsidian inbox: D:/Obsidian/Inbox/clawhub-daily-2026-07-11.md\n- IMA知识库: aFEGG-4YH3z_CaCSNVNC5dSJR5cutjlatcEQcNZjtlA= / FIM知识库\n- 归档格式: Markdown + 元数据头（任务名/运行时间/数据源/状态）\n\nIM提醒：运行完成后通过 lark-im skill 发送飞书 Interactive Card：\n- 卡片标题: ClawHub Daily 2026-07-11 运行<成功/部分失败/失败>\n- 卡片内容: 今日推荐Top5 + 总抓取数 + 推荐维度\n- 卡片按钮: 跳转飞书云盘详情文档\n\n如果主执行器失败，回退到分步：\n1. python \"clawhub-daily/scripts/fetch_clawhub.py\" --num 200 --date <today>\n2. python \"clawhub-daily/scripts/compute_metrics.py\" --input \"data/snapshots/<date>.json\"\n3. python \"clawhub-daily/scripts/daily_recommend.py\" --date <today> --data-dir data\n4. python \"clawhub-daily/scripts/push_to_feishu.py\" --recommendation \"data/recommended/<date>.json\"\n\n请报告每步执行结果。任何步骤失败都要记录详细错误信息。\n归档失败时记录日志但不中断主流程。\n```\n\nFile v1.0.1:assets/metadata_header.md\n\n# 归档元数据头模板\n\n> 每份归档文件开头必须包含以下元数据头。\n> 元数据头使用 YAML frontmatter 格式，方便检索和去重。\n\n---\n\n## 模板\n\n```markdown\n---\ntask_name: \"<任务名>\"\nrun_time: \"<YYYY-MM-DD HH:MM:SS>\"\ndata_source: \"<数据源>\"\nstatus: \"<success/partial/failed>\"\nerror_count: <N>\narchived_to: [\"feishu_drive\", \"obsidian\", \"ima\"]\n---\n\n# <简报标题>\n\n<简报正文>\n```\n\n---\n\n## 字段说明\n\n| 字段 | 类型 | 必填 | 说明 | 示例 |\n|------|------|------|------|------|\n| task_name | string | 是 | 任务名称 | \"ClawHub Daily\" |\n| run_time | string | 是 | 运行时间 (ISO 8601) | \"2026-07-11 09:00:23\" |\n| data_source | string | 是 | 数据源（逗号分隔） | \"ClawHub API, Convex\" |\n| status | string | 是 | 运行状态 | \"success\" / \"partial\" / \"failed\" |\n| error_count | int | 是 | 错误数量 | 0 |\n| archived_to | array | 是 | 已归档到的端 | [\"obsidian\", \"ima\"] |\n\n---\n\n## 状态定义\n\n| status | 含义 | archived_to 预期 |\n|--------|------|-----------------|\n| success | 主任务成功，三端全部归档 | [\"feishu_drive\", \"obsidian\", \"ima\"] |\n| partial | 主任务成功，部分端归档失败 | [\"obsidian\"] (缺失的端不列出) |\n| failed | 主任务失败 | [] (无归档) |\n\n---\n\n## 生成代码\n\n```python\nimport json\nfrom datetime import datetime\n\ndef generate_metadata_header(task_name, data_source, status, error_count, archived_to):\n    \"\"\"Generate YAML frontmatter metadata header.\"\"\"\n    return f\"\"\"---\ntask_name: \"{task_name}\"\nrun_time: \"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\"\ndata_source: \"{data_source}\"\nstatus: \"{status}\"\nerror_count: {error_count}\narchived_to: {json.dumps(archived_to, ensure_ascii=False)}\n---\"\"\"\n```\n\n---\n\n## 完整示例\n\n```markdown\n---\ntask_name: \"ClawHub Daily\"\nrun_time: \"2026-07-11 09:00:23\"\ndata_source: \"ClawHub Convex API\"\nstatus: \"success\"\nerror_count: 0\narchived_to: [\"feishu_drive\", \"obsidian\", \"ima\"]\n---\n\n# ClawHub Daily 推荐 - 2026-07-11\n\n## 今日推荐 Top 5\n\n1. **skill-foo** - 自动化办公场景，安装量增长15%\n2. **skill-bar** - 开发工具类，新增5星评价\n...\n\n## 数据统计\n- 抓取总数: 200\n- 推荐维度: D1 趋势\n- 去重窗口: 7天\n```\n\nFile v1.0.1:CHANGELOG.md\n\n# Changelog\n\n## [1.0.1] - 2026-07-11\n\n### Changed\n- Added SkillHub frontmatter fields (slug/displayName/version/summary/license) for three-platform publishing\n- Version bump to 1.0.1 for ClawHub republish to sync Short summary\n\n## [1.0.0] - 2026-07-11\n\n### Added\n- 初始版本\n- 9项就绪检查方法论（脚本独立运行/环境变量/数据源/IM凭证/归档路径/幂等性/失败回退/调度频率/输出质量）\n- Schedule message 提示词模板（自包含/失败回退/归档指令/IM提醒）\n- 三端归档指南（飞书云盘/Obsidian inbox/IMA知识库两步API）\n- 执行器脚本模板（含环境检查/主逻辑/三端归档/IM通知）\n- 归档元数据头模板（YAML frontmatter）\n\nFile v1.0.1:README.en.md\n\n# cron-task\n\n[![Stars](https://img.shields.io/github/stars/EdwardWason/cron-task?style=flat-square)](https://github.com/EdwardWason/cron-task)\n[![License](https://img.shields.io/badge/license-MIT--0-green?style=flat-square)](LICENSE)\n[![ClawHub](https://img.shields.io/badge/ClawHub-cron--task-orange?style=flat-square)](https://clawhub.ai/skills/cron-task)\n[![Skill](https://img.shields.io/badge/Claude%20Code-Skill-blue?style=flat-square)](SKILL.md)\n\n🇨🇳 中文版: [README.md](README.md)\n\n> _「Debug done. Say one word, get a daily runner with 9-point readiness check, three-destination archiving, and Feishu IM notification.」_\n\n**cron-task** is not a general-purpose task orchestrator, is a focused workflow that converts a debugged task into a stable scheduled task with readiness validation, script generation, and multi-destination archiving.\n\n## Navigation\n\n[See Effect](#example) · [Quick Start](#quick-start) · [Core Features](#core-features) · [Known Limitations](#known-limitations) · [License](#license)\n\n## Quick Start\n\n```bash\n# Install via ClawHub\nclawhub install cron-task\n\n# Or clone from GitHub\ngit clone https://github.com/EdwardWason/cron-task.git\n```\n\nAfter installation, trigger with: **\"创建定时任务\"** or **\"定时任务创建\"**\n\n## Core Features\n\n- **9-Point Readiness Check** — Script independence, env vars, data source reachability, IM credentials, archive paths, idempotency, fallback chain, schedule frequency, output quality\n- **Executor Script Generation** — Auto-generates a standalone Python script with env checking, main logic, three-destination archiving, and IM notification\n- **Schedule Prompt Writing** — Writes self-contained Schedule messages with execution commands, failure fallback, and archiving instructions\n- **Three-Destination Archiving** — Feishu Cloud Drive + Obsidian Inbox + IMA Knowledge Base, unified Markdown + YAML metadata header\n- **Feishu IM Notification** — Sends Interactive Card via lark-im skill with task name, status, summary, and detail link\n\n## Suitable / Not Suitable\n\n### Suitable\n- Converting a debugged data pipeline to daily auto-run\n- Setting up periodic skill execution with result archiving\n- Creating scheduled workflows with multi-step fallback\n\n### Not Suitable\n- One-time script execution\n- Manual-triggered tasks\n- Non-periodic workflows\n- Cron failure diagnosis (use cron-doctor instead)\n\n## Example\n\n```\nUser: 创建定时任务\n\nAI: [Scans context...]\n    [Runs 9-point readiness check...]\n\n## Readiness Check Report\n| # | Check Item | Status | Notes |\n|---|-----------|--------|-------|\n| 1 | Script independence | ✅ | executor.py tested |\n| ... | ... | ... | ... |\n| 5 | Archive paths | ⚠️ | Feishu folder not confirmed |\n\n⚠️ #5: Feishu Drive folder not specified\n→ Suggestion: Create folder via lark-drive\n\n[After user confirms...]\n\n✅ Script generated: scripts/clawhub_daily_executor.py\n✅ Schedule prompt written\n✅ Schedule task created (cron: 0 9 * * *, timezone: Asia/Shanghai)\n```\n\n## Directory Structure\n\n```\ncron-task/\n├── SKILL.md                          # Main entry (agent workflow)\n├── references/\n│   ├── readiness-checklist.md        # 9-point check methodology\n│   ├── schedule-prompt-template.md   # Schedule message template\n│   └── archiving-guide.md            # Three-destination archiving guide\n├── assets/\n│   ├── executor_template.py          # Executor script template\n│   └── metadata_header.md            # Archive metadata header template\n├── README.md                         # Chinese docs\n├── README.en.md                      # English docs\n├── CHANGELOG.md                      # Version history\n├── LICENSE                           # MIT-0\n└── .gitignore\n```\n\n## Known Limitations\n\n- **TRAE Schedule only**: Uses TRAE's Schedule tool, not system cron. Minimum interval is 10 minutes.\n- **Feishu IM only**: Currently only supports Feishu Interactive Card for notifications. Email and WeChat are future extensions.\n- **Requires pre-configured env vars**: FEISHU_APP_ID, FEISHU_APP_SECRET, FEISHU_USER_OPEN_ID, IMA credentials must be set beforehand.\n- **Python 3.10+**: Executor scripts use modern Python features.\n- **Windows-first**: Tested on Windows with PowerShell 5.1. Linux/macOS may need path adjustments.\n\n## License\n\nMIT-0 © 2026 EdwardWason\n\nFile v1.0.1:skill-card.md\n\n## Description:\n\nCron Task helps agents convert a nearly finished recurring workflow into a scheduled daily automation by running readiness checks, generating an executor script, writing the Schedule prompt, configuring Feishu notification, and archiving outputs to Feishu Drive, Obsidian, and IMA.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[edwardwason](https://clawhub.ai/user/edwardwason)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and automation operators use this skill after debugging a data pipeline, skill workflow, or repeated task to package it as a recurring Schedule job with readiness validation, fallback instructions, notification, and archiving.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can create recurring jobs that run local Python commands.\n\nMitigation: Review the generated command, fallback commands, local paths, and cron schedule before enabling the task, and periodically audit or remove created Schedule entries.\n\nRisk: Generated workflows may archive reports to Feishu Drive, Obsidian, and IMA.\n\nMitigation: Confirm cloud folders, local inbox paths, knowledge-base IDs, and sensitive-data scope before use; use dedicated least-privilege Feishu and IMA credentials.\n\n## Reference(s):\n\n- [Cron Task ClawHub Page](https://clawhub.ai/edwardwason/skills/cron-task)\n- [9-Point Readiness Checklist](references/readiness-checklist.md)\n- [Schedule Prompt Template](references/schedule-prompt-template.md)\n- [Three-Destination Archiving Guide](references/archiving-guide.md)\n- [Executor Script Template](assets/executor_template.py)\n- [Archive Metadata Header Template](assets/metadata_header.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown reports with tables and inline shell commands, plus generated Python executor scripts and Schedule prompt text.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May create local files, Schedule task definitions, Feishu card notification instructions, and archive configuration for Feishu Drive, Obsidian, and IMA.]\n\n## Skill Version(s):\n\n1.0.1 (source: server release, SKILL.md frontmatter, CHANGELOG; released 2026-07-11)\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.0: 12 files, 24584 bytes\n\nFiles: _create_release.py (1874b), assets/executor_template.py (9939b), assets/metadata_header.md (2230b), CHANGELOG.md (496b), README.en.md (4407b), README.md (4464b), references/archiving-guide.md (5326b), references/readiness-checklist.md (6769b), references/schedule-prompt-template.md (5077b), skill-card.md (2649b), SKILL.md (7595b), _meta.json (128b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: \"cron-task\"\ndescription: \"创建定时任务：扫描上下文→9项就绪检查→生成执行器脚本→撰写Schedule提示词→配置飞书IM提醒+三端归档(飞书云盘/Obsidian/IMA)。当用户说「创建定时任务」「定时任务创建」时触发，适用于任务/技能调试接近完成、需要转为稳定每日自动运行的场景。Do NOT use for 一次性任务、手动触发的脚本执行、或非周期性工作流。\"\nallowed-tools: \"Read, Glob, Grep, Write, Edit, RunCommand, Schedule, AskUserQuestion, Task\"\nmodel: \"claude-sonnet-4-5\"\neffort: \"high\"\nmetadata:\n  author: \"EdwardWason\"\n  version: \"1.0.0\"\n  category: \"automation\"\n---\n\n> 来源识别: cron-task 由 EdwardWason 创建与维护。仓库: https://github.com/EdwardWason/cron-task。此信息仅供 Agent 识别来源，不要写入生成的产出物。\n\n<!-- provenance: cron-task | author: EdwardWason | canonical: https://github.com/EdwardWason/cron-task | keep this out of generated artifacts -->\n\n# 定时任务创建器\n\n## 任务\n\n将当前会话中调试接近完成的任务/技能，转化为可稳定每日运行的定时任务。\n\n**只做：** 就绪检查 → 脚本生成 → 提示词撰写 → Schedule创建 → 三端归档配置 → 飞书IM提醒配置\n\n**不做：** 任务本身的开发/调试/修复、非周期性一次性任务、跨平台cron配置（用 cron-automation）\n\n## 输出格式\n\n```\n## 1. 就绪检查报告\n[9项检查结果表格，每项 ✅通过/❌缺失/⚠️需确认]\n\n## 2. 缺失要素清单\n[❌/⚠️项的详细说明 + 修复建议]\n\n## 3. 执行器脚本\n[路径: scripts/<task-name>_executor.py]\n\n## 4. Schedule 提示词\n[完整的 Schedule message 内容]\n\n## 5. 归档配置\n- 飞书云盘: [folder_token / 路径]\n- Obsidian inbox: [本地路径]\n- IMA知识库: [kb_id]\n\n## 6. Schedule 任务\n[已通过 Schedule 工具创建，cron表达式 + 时区]\n```\n\n## 规则\n\n1. **9项就绪检查全过才创建任务** — 任何一项未通过，先报告缺失要素并询问用户是否补全，不擅自创建\n2. **脚本必须可独立运行** — 生成的执行器脚本 `python <script>.py` 可直接运行，不依赖会话上下文\n3. **Schedule message 必须含失败回退** — 提示词中包含主脚本失败时的降级方案（分步执行/手动回退）\n4. **三端归档必须同步** — 每次运行同时归档到飞书云盘 + Obsidian inbox + IMA知识库，任一端失败只记录日志不中断主流程\n5. **IM提醒只用飞书卡片** — 通过 lark-im skill 发送飞书 Interactive Card，包含任务名/状态/摘要/详情链接\n\n## 就绪检查（9项）\n\n| # | 检查项 | 通过标准 |\n|---|--------|---------|\n| 1 | 脚本可独立运行 | `python <executor>.py` 不报错 |\n| 2 | 环境变量齐全 | 所有依赖 env vars 已在 User scope 配置 |\n| 3 | 数据源可达 | API URL / 文件路径可访问 |\n| 4 | IM凭证有效 | 飞书 APP_ID/APP_SECRET/USER_OPEN_ID 已配置且有效 |\n| 5 | 归档路径存在 | 飞书云盘文件夹/Obsidian inbox目录/IMA知识库 kb_id 均已确认 |\n| 6 | 幂等性 | 重复运行不会产生重复数据（去重/覆盖/跳过逻辑） |\n| 7 | 失败回退链路 | 主脚本失败时有明确的降级方案 |\n| 8 | 调度频率合理 | cron频率与任务实际需求匹配 |\n| 9 | 输出质量自检 | 简报内容有实质信息，非空壳/模板填充 |\n\n**详细检查方法见 [`references/readiness-checklist.md`](references/readiness-checklist.md)**\n\n## 工作流程\n\n### Step 1: 上下文扫描\n读取当前会话上下文，提取：任务名 / 核心逻辑 / 数据源 / 依赖脚本 / 依赖环境变量 / 输出格式\n\n### Step 2: 就绪检查（9项）\n对提取的要素逐项检查。未通过项生成修复建议。\n\n### Step 3: 补全确认\n有未通过项 → 用 AskUserQuestion 询问用户是否补全。用户确认补全 → 等待补全后重新检查。用户选择跳过 → 记录风险并继续。\n\n### Step 4: 脚本生成\n生成 `scripts/<task-name>_executor.py`，包含：主执行逻辑 + 失败回退 + 日志记录 + 三端归档调用。\n**模板见 [`assets/executor_template.py`](assets/executor_template.py)**\n\n### Step 5: 提示词撰写\n撰写 Schedule message，结构：\n- 任务概述（一句话）\n- 执行命令（按顺序）\n- 任务说明（数据源/凭证/参数）\n- 失败回退方案（分步命令）\n- 归档要求（三端路径）\n- IM提醒要求（飞书卡片）\n\n**完整模板见 [`references/schedule-prompt-template.md`](references/schedule-prompt-template.md)**\n\n### Step 6: Schedule 创建\n调用 Schedule 工具 `action: \"create\"`，传入：\n- `cron_expression`: 5字段cron格式\n- `message`: Step 5 生成的提示词\n- `name`: 任务简称\n- `timezone`: Asia/Shanghai（默认）\n\n### Step 7: 归档配置验证\n生成测试简报（带元数据头），归档到三端验证可达性。\n**归档方法见 [`references/archiving-guide.md`](references/archiving-guide.md)**\n**元数据头模板见 [`assets/metadata_header.md`](assets/metadata_header.md)**\n\n## 示例\n\n**输入：** 用户说「创建定时任务」，上下文为刚完成 clawhub-daily 项目调试。\n\n**输出：**\n```\n## 1. 就绪检查报告\n| # | 检查项 | 状态 | 说明 |\n|---|--------|------|------|\n| 1 | 脚本可独立运行 | ✅ | clawhub_daily_executor.py 测试通过 |\n| 2 | 环境变量齐全 | ✅ | FEISHU_APP_ID/SECRET/USER_OPEN_ID 均已配置 |\n| 3 | 数据源可达 | ✅ | wry-manatee-359.convex.cloud 响应正常 |\n| 4 | IM凭证有效 | ✅ | 飞书 Token 获取成功 |\n| 5 | 归档路径存在 | ⚠️ | 飞书云盘文件夹待确认 |\n| 6 | 幂等性 | ✅ | 按 date 去重，同日重复运行覆盖 |\n| 7 | 失败回退链路 | ✅ | 分4步降级执行 |\n| 8 | 调度频率合理 | ✅ | 每日1次 09:00 合理 |\n| 9 | 输出质量自检 | ✅ | 简报含8-10个推荐 |\n\n## 2. 缺失要素清单\n⚠️ #5: 飞书云盘文件夹未指定 → 建议用 lark-drive 创建 \"ClawHub Daily\" 文件夹\n\n## 3. 执行器脚本\n[已创建: scripts/clawhub_daily_executor.py]\n\n## 4. Schedule 提示词\n执行 ClawHub Daily 完整流程：抓取 200 个 Skill → 计算指标 → 生成推荐 → 归档三端 → 发送飞书卡片\n请按顺序执行：\n  cd \"<project_root>\" && python scripts/clawhub_daily_executor.py\n...（完整提示词）\n\n## 5. 归档配置\n- 飞书云盘: ClawHub Daily/2026-07-11.md\n- Obsidian: D:/Obsidian/Inbox/clawhub-daily-2026-07-11.md\n- IMA: kb_id=aFEGG-4YH3z.../\n\n## 6. Schedule 任务\n[已创建, cron: 0 9 * * *, timezone: Asia/Shanghai]\n```\n\n## 故障排除\n\n| 问题 | 原因 | 解决方案 |\n|------|------|---------|\n| #1失败 | 脚本依赖会话变量 | 将变量提取为环境变量或脚本参数 |\n| #4失败 | 飞书Token过期 | 重新配置 FEISHU_APP_SECRET |\n| #6失败 | 无去重逻辑 | 添加 date-based 文件名/覆盖逻辑 |\n| Schedule创建失败 | cron格式错误 | 确保使用5字段: 分 时 日 月 周 |\n| 归档失败 | IMA kb_id无效 | 用 search_knowledge_base 重新获取 |\n\n## References\n\n- [`references/readiness-checklist.md`](references/readiness-checklist.md) — 9项就绪检查详细方法论\n- [`references/schedule-prompt-template.md`](references/schedule-prompt-template.md) — Schedule message 提示词模板\n- [`references/archiving-guide.md`](references/archiving-guide.md) — 三端归档指南\n- [`assets/executor_template.py`](assets/executor_template.py) — 执行器脚本模板\n- [`assets/metadata_header.md`](assets/metadata_header.md) — 归档元数据头模板\n\nFile v1.0.0:README.md\n\n# cron-task\n\n[![Stars](https://img.shields.io/github/stars/EdwardWason/cron-task?style=flat-square)](https://github.com/EdwardWason/cron-task)\n[![许可证](https://img.shields.io/badge/license-MIT--0-green?style=flat-square)](LICENSE)\n[![ClawHub](https://img.shields.io/badge/ClawHub-cron--task-orange?style=flat-square)](https://clawhub.ai/skills/cron-task)\n[![Skill](https://img.shields.io/badge/Claude%20Code-Skill-blue?style=flat-square)](SKILL.md)\n\n🌍 English version: [README.en.md](README.en.md)\n\n_「调试完了，说一句话，还你一个每天自动跑、9项就绪检查、三端归档、飞书卡片提醒的定时任务。」_\n\n**cron-task** 不是又一个任务编排器，是从\"调试完成\"到\"稳定每日运行\"的最后一公里自动化。\n\n[看效果](#示例) · [装上就能用](#30-秒开始) · [核心机制](#核心特性) · [已知限制](#已知限制) · [License](#license)\n\n## 30 秒开始\n\n```bash\n# ClawHub 安装\nclawhub install cron-task\n\n# 或 GitHub 克隆\ngit clone https://github.com/EdwardWason/cron-task.git\n```\n\n安装后，在任务/技能调试接近完成时说：**\"创建定时任务\"**\n\n## 核心特性\n\n- **9项就绪检查** — 脚本独立性/环境变量/数据源/IM凭证/归档路径/幂等性/回退链路/调度频率/输出质量，任一项未过先报告不硬创\n- **执行器脚本生成** — 自动生成可独立运行的 Python 脚本，含环境检查+主逻辑+三端归档+IM通知\n- **Schedule 提示词撰写** — 自包含的 Schedule message，含执行命令+失败回退+归档指令+IM提醒要求\n- **三端归档** — 飞书云盘 + Obsidian inbox + IMA知识库（两步API），统一 Markdown + YAML 元数据头\n- **飞书 IM 卡片** — 通过 lark-im skill 发送 Interactive Card，含任务名/状态/摘要/详情链接\n\n## 适合 / 不适合\n\n### 适合\n- 数据抓取/分析项目调试完成，需要转为每日自动运行\n- 技能开发完成，需要定期执行并推送结果\n- 多步骤工作流，需要定时触发并归档结果\n\n### 不适合\n- 一次性脚本执行\n- 手动触发的任务\n- 非周期性工作流\n- Cron 故障诊断（用 cron-doctor 代替）\n\n## 示例\n\n```\n用户: 创建定时任务\n\nAI: [扫描上下文...]\n    [执行9项就绪检查...]\n\n## 就绪检查报告\n| # | 检查项 | 状态 | 说明 |\n|---|--------|------|------|\n| 1 | 脚本可独立运行 | ✅ | executor.py 测试通过 |\n| 5 | 归档路径存在 | ⚠️ | 飞书云盘文件夹待确认 |\n\n⚠️ #5: 飞书云盘文件夹未指定\n→ 建议: 使用 lark-drive 创建文件夹\n\n[用户确认补全后...]\n\n✅ 脚本已生成: scripts/clawhub_daily_executor.py\n✅ Schedule 提示词已撰写\n✅ Schedule 任务已创建 (cron: 0 9 * * *, timezone: Asia/Shanghai)\n```\n\n## 目录结构\n\n```\ncron-task/\n├── SKILL.md                          # Agent 工作流定义\n├── references/\n│   ├── readiness-checklist.md        # 9项就绪检查详细方法论\n│   ├── schedule-prompt-template.md   # Schedule message 提示词模板\n│   └── archiving-guide.md            # 三端归档指南\n├── assets/\n│   ├── executor_template.py          # 执行器脚本模板\n│   └── metadata_header.md            # 归档元数据头模板\n├── README.md                         # 中文文档\n├── README.en.md                      # 英文文档\n├── CHANGELOG.md                      # 版本记录\n├── LICENSE                           # MIT-0\n└── .gitignore\n```\n\n## 核心设计原则\n\n1. **就绪才创建** — 9项检查不过不创建任务，先报告缺失要素。避免\"创建了但跑不起来\"\n2. **脚本自包含** — 生成的执行器不依赖会话上下文，agent 在调度时可直接调用\n3. **归档不中断** — 任一端归档失败只记录日志，不中断主流程\n4. **IM 只用飞书** — 通过 lark-im skill 发卡片，不混用通道\n\n## 已知限制\n\n- **TRAE Schedule 限制**：最小间隔 10 分钟，不支持秒级，只支持 5 字段 cron 格式\n- **飞书 IM 为主**：当前只支持飞书 Interactive Card，邮件/微信为未来扩展\n- **需预配置环境变量**：FEISHU_APP_ID/SECRET/USER_OPEN_ID、IMA 凭证需提前配置\n- **Python 3.10+**：执行器脚本使用现代 Python 特性\n- **Windows 优先**：在 Windows + PowerShell 5.1 测试，Linux/macOS 可能需调整路径\n\n## License\n\nMIT-0 © 2026 EdwardWason\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn75zj7vzdyvap84adxa8heyyd82f5eh\",\n  \"slug\": \"cron-task\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1783763361463\n}\n\nFile v1.0.0:references/archiving-guide.md\n\n# 三端归档指南\n\n> 每次定时任务运行后，简报必须同步归档到三个位置。\n> 归档格式统一为 Markdown + 元数据头。任一端失败只记录日志不中断主流程。\n\n---\n\n## 归档目标\n\n| # | 目标 | 格式 | 路径示例 |\n|---|------|------|---------|\n| 1 | 飞书云盘 | Markdown 文件（lark-drive 上传） | ClawHub Daily/2026-07-11.md |\n| 2 | Obsidian inbox | 本地 .md 文件 | D:/Obsidian/Inbox/clawhub-daily-2026-07-11.md |\n| 3 | IMA知识库 | 笔记 + 添加到知识库（两步API） | FIM知识库 / ClawHub Daily |\n\n---\n\n## 元数据头格式\n\n每份归档文件开头必须包含元数据头：\n\n```markdown\n---\ntask_name: \"<任务名>\"\nrun_time: \"<YYYY-MM-DD HH:MM:SS>\"\ndata_source: \"<数据源>\"\nstatus: \"<success/partial/failed>\"\nerror_count: <N>\narchived_to: [\"feishu_drive\", \"obsidian\", \"ima\"]\n---\n\n# <简报标题>\n<简报正文>\n```\n\n**元数据头模板见 [`assets/metadata_header.md`](../assets/metadata_header.md)**\n\n---\n\n## 1. 飞书云盘归档\n\n### 方法\n使用 lark-drive skill 的 `drive +upload` 命令上传 Markdown 文件。\n\n### 步骤\n1. 确认目标文件夹存在（folder_token）\n2. 生成简报 Markdown 文件到临时路径\n3. 上传到飞书云盘指定文件夹\n4. 记录返回的 file_token\n\n### 脚本调用\n```python\nimport subprocess\nresult = subprocess.run([\n    \"python\", \"-m\", \"lark_cli\", \"drive\", \"upload\",\n    \"--file\", \"<local_md_path>\",\n    \"--folder-token\", \"<folder_token>\",\n    \"--name\", f\"<task-name>-<date>.md\"\n], capture_output=True, text=True)\n```\n\n### 注意事项\n- 文件名含日期，确保幂等性（同日重跑覆盖）\n- 上传前检查文件大小 > 0\n- 上传失败记录日志，不中断主流程\n\n---\n\n## 2. Obsidian Inbox 归档\n\n### 方法\n直接写入本地文件系统。\n\n### 步骤\n1. 确认 inbox 目录存在（不存在则创建）\n2. 生成简报 Markdown 内容\n3. 写入 `<inbox_path>/<task-name>-<date>.md`\n\n### 脚本调用\n```python\nimport os\nfrom pathlib import Path\nfrom datetime import datetime\n\ninbox_path = Path(os.environ.get(\"OBSIDIAN_INBOX\", \"<obsidian_inbox_path>\"))\ninbox_path.mkdir(parents=True, exist_ok=True)\n\ndate_str = datetime.now().strftime(\"%Y-%m-%d\")\nfile_path = inbox_path / f\"<task-name>-{date_str}.md\"\nfile_path.write_text(content, encoding=\"utf-8\")\n```\n\n### 注意事项\n- 默认 inbox 路径: `D:/Obsidian/Inbox`\n- 文件名格式: `<task-name>-<date>.md`\n- 同日重跑覆盖（幂等性）\n- 编码必须 UTF-8\n\n---\n\n## 3. IMA知识库归档\n\n### 方法\n两步API流程（**不能用 note API 的 folder 参数**）：\n1. `POST /openapi/note/v1/import_doc` — 创建笔记\n2. `POST /openapi/wiki/v1/add_knowledge` — 添加到知识库\n\n### 凭证\n```python\nimport os\nclient_id = os.environ.get(\"IMA_OPENAPI_CLIENTID\") or os.environ.get(\"IMA_CLIENT_ID\")\napi_key = os.environ.get(\"IMA_OPENAPI_APIKEY\") or os.environ.get(\"IMA_API_KEY\")\n```\n\n### Step 1: 创建笔记\n```python\nimport urllib.request, json\n\nurl = \"https://api.imawiki.com/openapi/note/v1/import_doc\"\ndata = json.dumps({\n    \"title\": f\"<task-name>-<date>\",\n    \"content\": briefing_content,  # Markdown 内容\n    \"source\": \"cron-task\"\n}).encode(\"utf-8\")\n\nreq = urllib.Request(url, data=data, headers={\n    \"Content-Type\": \"application/json\",\n    \"ima-openapi-clientid\": client_id,\n    \"ima-openapi-apikey\": api_key\n})\nresp = urllib.request.urlopen(req)\nnote_id = json.loads(resp.read())[\"data\"][\"note_id\"]\n```\n\n### Step 2: 添加到知识库\n```python\nkb_id = os.environ.get(\"IMA_KB_ID\", \"<ima_kb_id>\")  # FIM知识库\n\nurl = \"https://api.imawiki.com/openapi/wiki/v1/add_knowledge\"\ndata = json.dumps({\n    \"kb_id\": kb_id,\n    \"media_type\": 11,\n    \"note_info\": {\"content_id\": note_id}\n}).encode(\"utf-8\")\n\nreq = urllib.Request(url, data=data, headers={\n    \"Content-Type\": \"application/json\",\n    \"ima-openapi-clientid\": client_id,\n    \"ima-openapi-apikey\": api_key\n})\nresp = urllib.request.urlopen(req)\n```\n\n### 注意事项\n- **两套API不可混用**：Notes API 管笔记，Knowledge Base API 管知识库\n- **folder_id ≠ knowledge_base_id**：必须用 get_knowledge_list 获取 folder_id\n- **X/Twitter链接不用import_urls**：用 create_note + add_knowledge 纯文本笔记\n- 凭证环境变量双兼容：优先 `IMA_OPENAPI_*`，回退 `IMA_*`\n\n---\n\n## 归档失败处理\n\n| 失败端 | 处理方式 | 是否中断主流程 |\n|--------|---------|--------------|\n| 飞书云盘 | 记录错误日志，继续其他端归档 | 否 |\n| Obsidian | 记录错误日志，继续其他端归档 | 否 |\n| IMA | 记录错误日志，继续其他端归档 | 否 |\n| 三端全失败 | 记录错误日志，IM提醒中标注归档失败 | 否 |\n\n### 错误日志格式\n```python\nimport logging\nlogging.basicConfig(filename=\"logs/archive-<date>.log\", level=logging.ERROR)\nlogging.error(f\"[{target}] {error_type}: {error_message}\")\n```\n\n---\n\n## 归档验证\n\n归档完成后，验证三端可达性：\n\n```python\ndef verify_archive(feishu_file_token, obsidian_path, ima_note_id):\n    results = {}\n    \n    # 飞书云盘验证\n    results[\"feishu\"] = bool(feishu_file_token)\n    \n    # Obsidian验证\n    results[\"obsidian\"] = Path(obsidian_path).exists()\n    \n    # IMA验证\n    results[\"ima\"] = bool(ima_note_id)\n    \n    return results\n```\n\n验证结果写入元数据头的 `archived_to` 字段。\n\nFile v1.0.0:references/readiness-checklist.md\n\n# 9项就绪检查详细方法论\n\n> 每项检查包含：检查目的 / 检查方法 / 通过标准 / 常见失败原因 / 修复建议\n\n---\n\n## 检查1: 脚本可独立运行\n\n**目的：** 确保生成的执行器脚本不依赖会话上下文，可被 TRAE agent 独立调用。\n\n**检查方法：**\n```bash\ncd \"<project_root>\" && python \"<script_path>\" --dry-run\n```\n（如果有 --dry-run 参数；否则直接运行并观察是否报错）\n\n**通过标准：**\n- 脚本启动无 ImportError / ModuleNotFoundError\n- 脚本启动无 NameError（引用了会话中定义但未写入脚本的变量）\n- 脚本退出码为 0（或预期内的非零码）\n\n**常见失败原因：**\n| 原因 | 修复建议 |\n|------|---------|\n| 脚本引用了会话中定义的变量 | 将变量提取为命令行参数或环境变量 |\n| 缺少依赖包 | 在脚本头部添加 pip install 检查，或生成 requirements.txt |\n| 相对路径错误 | 脚本顶部添加 `os.chdir(os.path.dirname(__file__))` 或使用绝对路径 |\n| 硬编码了调试时的临时路径 | 替换为可配置路径或环境变量 |\n\n---\n\n## 检查2: 环境变量齐全\n\n**目的：** 确保所有依赖的环境变量已在系统中配置。\n\n**检查方法：**\n```python\nimport os\nrequired_vars = [\"FEISHU_APP_ID\", \"FEISHU_APP_SECRET\", \"FEISHU_USER_OPEN_ID\"]\nfor var in required_vars:\n    val = os.environ.get(var)\n    if not val:\n        print(f\"❌ 缺失: {var}\")\n    elif val.startswith(\"your_\") or val == \"dummy\":\n        print(f\"⚠️ 占位符: {var}\")\n    else:\n        print(f\"✅ {var}: {val[:8]}...\")\n```\n\n**通过标准：** 所有必需环境变量已配置，且非占位符值。\n\n**常见环境变量清单：**\n| 变量名 | 用途 | scope |\n|--------|------|-------|\n| FEISHU_APP_ID | 飞书应用ID | User |\n| FEISHU_APP_SECRET | 飞书应用密钥 | User |\n| FEISHU_USER_OPEN_ID | 飞书用户OpenID | User |\n| IMA_OPENAPI_CLIENTID | IMA API客户端ID | User |\n| IMA_OPENAPI_APIKEY | IMA API密钥 | User |\n| GH_TOKEN | GitHub Token | User |\n| CLAWHUB_TOKEN | ClawHub Token | User |\n\n---\n\n## 检查3: 数据源可达\n\n**目的：** 确保脚本依赖的外部数据源（API/文件/数据库）可正常访问。\n\n**检查方法：**\n- **API：** `curl -s -o /dev/null -w \"%{http_code}\" <url>` 返回 200\n- **文件：** `Test-Path <file_path>` 返回 True\n- **数据库：** 尝试连接并执行简单查询\n\n**通过标准：** 所有数据源返回预期响应。\n\n---\n\n## 检查4: IM凭证有效\n\n**目的：** 确保飞书API凭证有效，可发送卡片消息。\n\n**检查方法：**\n```python\nimport requests, os\napp_id = os.environ[\"FEISHU_APP_ID\"]\napp_secret = os.environ[\"FEISHU_APP_SECRET\"]\nresp = requests.post(\"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal\", \n    json={\"app_id\": app_id, \"app_secret\": app_secret})\nif resp.status_code == 200 and \"tenant_access_token\" in resp.json():\n    print(\"✅ 飞书凭证有效\")\nelse:\n    print(f\"❌ 飞书凭证无效: {resp.json()}\")\n```\n\n**通过标准：** 成功获取 tenant_access_token。\n\n---\n\n## 检查5: 归档路径存在\n\n**目的：** 确保三端归档目标路径均已确认且可达。\n\n**检查方法：**\n\n**飞书云盘：**\n- 确认 folder_token（用 lark-drive skill 的 drive +list 查看文件夹）\n- 或确认文件夹路径，由脚本自动创建\n\n**Obsidian inbox：**\n- 确认本地目录存在：`Test-Path \"<obsidian_inbox_path>\"`\n- 不存在则创建：`New-Item -ItemType Directory -Force`\n\n**IMA知识库：**\n- 确认 kb_id（用 IMA API search_knowledge_base 搜索知识库名）\n- 已知 FIM知识库 ID: 从环境变量 `IMA_KB_ID` 读取，或用 search_knowledge_base 搜索获取\n\n**通过标准：** 三端路径均已确认可达。\n\n---\n\n## 检查6: 幂等性\n\n**目的：** 确保重复运行不会产生重复数据。\n\n**检查方法：** 审查脚本逻辑，确认包含以下机制之一：\n- **按日期去重：** 文件名含日期 `report-2026-07-11.md`，同日重跑覆盖\n- **按ID去重：** 数据库记录有唯一约束\n- **跳过逻辑：** 检查输出是否已存在，存在则跳过\n- **覆盖逻辑：** 明确的 overwrite=True 参数\n\n**通过标准：** 脚本中有明确的幂等性机制。\n\n**常见失败原因：**\n| 原因 | 修复建议 |\n|------|---------|\n| 文件名无日期 | 添加 `{date}` 占位符 |\n| 数据库无唯一约束 | 添加 UPSERT 逻辑 |\n| 无存在性检查 | 添加 `if os.path.exists(): skip` |\n\n---\n\n## 检查7: 失败回退链路\n\n**目的：** 确保主脚本失败时有明确的降级方案。\n\n**检查方法：** 确认 Schedule message 中包含分步回退方案：\n```\n如果主执行器失败，回退到分步：\n1. python scripts/step1_fetch.py\n2. python scripts/step2_process.py\n3. python scripts/step3_output.py\n```\n\n**通过标准：** 有至少2层的回退方案（主脚本 → 分步执行 → 手动提示）。\n\n---\n\n## 检查8: 调度频率合理\n\n**目的：** 确保cron频率与任务实际需求匹配。\n\n**合理性参考表：**\n| 任务类型 | 建议频率 | cron示例 |\n|---------|---------|---------|\n| 数据抓取/日报 | 每日1次 | `0 9 * * *` |\n| 监控告警 | 每小时 | `0 * * * *` |\n| 周报汇总 | 每周1次 | `0 9 * * 1` |\n| 月度统计 | 每月1次 | `0 9 1 * *` |\n| 实时性要求高 | 每10分钟 | `*/10 * * * *` |\n\n**TRAE Schedule 限制：**\n- 最小间隔：10分钟\n- 不支持秒级\n- 5字段格式：分 时 日 月 周\n\n**通过标准：** 频率与任务需求匹配，不低于10分钟间隔。\n\n---\n\n## 检查9: 输出质量自检\n\n**目的：** 确保简报内容有实质信息，非空壳或模板填充。\n\n**检查方法：** 运行脚本后检查输出：\n- **非空检查：** 输出文件大小 > 1KB\n- **内容检查：** 不包含 \"TODO\"、\"placeholder\"、\"lorem ipsum\"\n- **结构检查：** 包含预期章节（标题/摘要/详情/数据）\n- **字数检查：** 简报类输出 800-1000 字，数据类输出有实际数据行\n\n**通过标准：** 输出内容有实质信息，满足以上4项检查。\n\n---\n\n## 检查结果汇总模板\n\n```\n## 就绪检查报告\n\n| # | 检查项 | 状态 | 说明 |\n|---|--------|------|------|\n| 1 | 脚本可独立运行 | ✅/❌/⚠️ | <详情> |\n| 2 | 环境变量齐全 | ✅/❌/⚠️ | <详情> |\n| 3 | 数据源可达 | ✅/❌/⚠️ | <详情> |\n| 4 | IM凭证有效 | ✅/❌/⚠️ | <详情> |\n| 5 | 归档路径存在 | ✅/❌/⚠️ | <详情> |\n| 6 | 幂等性 | ✅/❌/⚠️ | <详情> |\n| 7 | 失败回退链路 | ✅/❌/⚠️ | <详情> |\n| 8 | 调度频率合理 | ✅/❌/⚠️ | <详情> |\n| 9 | 输出质量自检 | ✅/❌/⚠️ | <详情> |\n\n### 汇总\n- 通过: <N>/9\n- 需修复: <列表>\n- 可跳过(用户确认): <列表>\n```\n\nFile v1.0.0:references/schedule-prompt-template.md\n\n# Schedule Message 提示词模板\n\n> Schedule message 是 TRAE agent 在每次调度时读取的执行指令。\n> 必须自包含——agent 在调度时没有会话上下文，只能依赖 message 内容。\n\n---\n\n## 模板结构\n\n```markdown\n执行 <任务名> 完整流程：<核心逻辑一句话摘要>\n\n请按顺序执行：\n\n```bash\ncd \"<project_root>\" && python scripts/<task-name>_executor.py\n```\n\n任务说明：\n- 数据源: <sources>\n- 抓取/处理数量: <count>\n- <其他关键参数>: <values>\n- 凭证: 从环境变量 <VAR_NAMES> 读取（已在 User 级环境变量中配置）\n\n归档要求（三端同步）：\n- 飞书云盘: <folder_name>/<date>.md\n- Obsidian inbox: <local_path>/<task-name>-<date>.md\n- IMA知识库: <kb_id> / <knowledge_name>\n- 归档格式: Markdown + 元数据头（任务名/运行时间/数据源/状态）\n\nIM提醒：运行完成后通过 lark-im skill 发送飞书 Interactive Card：\n- 卡片标题: <任务名> <date> 运行<状态>\n- 卡片内容: 摘要（3-5条要点）\n- 卡片按钮: 跳转飞书云盘详情文档\n\n如果主执行器失败，回退到分步：\n1. python scripts/<step1>.py <args>\n2. python scripts/<step2>.py <args>\n3. python scripts/<step3>.py <args>\n4. python scripts/<step4>.py <args>\n\n请报告每步执行结果。任何步骤失败都要记录详细错误信息。\n归档失败时记录日志但不中断主流程。\n```\n\n---\n\n## 变量说明\n\n| 变量 | 来源 | 示例 |\n|------|------|------|\n| `<任务名>` | 上下文扫描 | ClawHub Daily |\n| `<核心逻辑摘要>` | 上下文扫描 | 抓取200个Skill→计算指标→生成推荐→归档→发卡片 |\n| `<project_root>` | 工作目录 | d:/TRAE SOLO CN/project |\n| `<task-name>` | 任务名kebab-case | clawhub-daily |\n| `<sources>` | 数据源扫描 | ClawHub Convex API (wry-manatee-359.convex.cloud) |\n| `<count>` | 参数扫描 | 200 |\n| `<VAR_NAMES>` | 环境变量扫描 | FEISHU_APP_ID / FEISHU_APP_SECRET / FEISHU_USER_OPEN_ID |\n| `<folder_name>` | 飞书云盘文件夹 | ClawHub Daily |\n| `<local_path>` | Obsidian inbox路径 | D:/Obsidian/Inbox |\n| `<kb_id>` | IMA知识库ID | aFEGG-4YH3z_CaCSNVNC5dSJR5cutjlatcEQcNZjtlA= |\n| `<stepN>` | 分步脚本名 | fetch_clawhub / compute_metrics / daily_recommend / push_to_feishu |\n| `<date>` | 运行日期 | 2026-07-11 |\n\n---\n\n## 撰写要点\n\n### 1. 自包含性\n- agent 在调度时没有会话上下文\n- 所有路径、凭证名、参数必须显式写出\n- 不用\"上次说的那个脚本\"这种引用\n\n### 2. 失败回退\n- 必须包含至少2层回退（主脚本 → 分步 → 手动提示）\n- 分步命令必须可独立执行\n- 每步失败都要有明确的处理指令\n\n### 3. 归档指令\n- 三端路径必须完整写出\n- 归档格式统一为 Markdown + 元数据头\n- 任一端失败不中断主流程，只记录日志\n\n### 4. IM提醒指令\n- 明确使用 lark-im skill\n- 卡片结构：标题 + 摘要 + 按钮\n- 状态分类：成功 / 部分失败 / 完全失败\n\n### 5. 执行报告\n- 要求 agent 报告每步执行结果\n- 失败时记录详细错误信息\n- 不要求 agent 自行修复（只报告，不修复）\n\n---\n\n## 完整示例\n\n```markdown\n执行 ClawHub Daily 完整流程：抓取 200 个 Skill → 计算指标 → 生成 8-10 个推荐（4维度轮换 + 7天去重 + 痛点匹配）→ 归档三端 → 发送飞书卡片消息\n\n请按顺序执行：\n\n```bash\ncd \"<project_root>\" && python scripts/clawhub_daily_executor.py\n```\n\n技能说明：\n- 数据源: ClawHub Convex API (wry-manatee-359.convex.cloud)\n- 抓取数量: 200 个 Skill\n- 推荐维度: 4 个维度轮换（D1 趋势 / D2 质量 / D3 新星 / D4 全景），按日期自动选择\n- 去重窗口: 7 天\n- 痛点库: 7 大场景（自动化办公/开发工具/内容创作/数据采集/AI 增强/中文支持/金融分析）\n- 飞书凭证: 从环境变量 FEISHU_APP_ID / FEISHU_APP_SECRET / FEISHU_USER_OPEN_ID 读取（已在 User 级环境变量中配置）\n\n归档要求（三端同步）：\n- 飞书云盘: ClawHub Daily/2026-07-11.md\n- Obsidian inbox: D:/Obsidian/Inbox/clawhub-daily-2026-07-11.md\n- IMA知识库: aFEGG-4YH3z_CaCSNVNC5dSJR5cutjlatcEQcNZjtlA= / FIM知识库\n- 归档格式: Markdown + 元数据头（任务名/运行时间/数据源/状态）\n\nIM提醒：运行完成后通过 lark-im skill 发送飞书 Interactive Card：\n- 卡片标题: ClawHub Daily 2026-07-11 运行<成功/部分失败/失败>\n- 卡片内容: 今日推荐Top5 + 总抓取数 + 推荐维度\n- 卡片按钮: 跳转飞书云盘详情文档\n\n如果主执行器失败，回退到分步：\n1. python \"clawhub-daily/scripts/fetch_clawhub.py\" --num 200 --date <today>\n2. python \"clawhub-daily/scripts/compute_metrics.py\" --input \"data/snapshots/<date>.json\"\n3. python \"clawhub-daily/scripts/daily_recommend.py\" --date <today> --data-dir data\n4. python \"clawhub-daily/scripts/push_to_feishu.py\" --recommendation \"data/recommended/<date>.json\"\n\n请报告每步执行结果。任何步骤失败都要记录详细错误信息。\n归档失败时记录日志但不中断主流程。\n```\n\nFile v1.0.0:assets/metadata_header.md\n\n# 归档元数据头模板\n\n> 每份归档文件开头必须包含以下元数据头。\n> 元数据头使用 YAML frontmatter 格式，方便检索和去重。\n\n---\n\n## 模板\n\n```markdown\n---\ntask_name: \"<任务名>\"\nrun_time: \"<YYYY-MM-DD HH:MM:SS>\"\ndata_source: \"<数据源>\"\nstatus: \"<success/partial/failed>\"\nerror_count: <N>\narchived_to: [\"feishu_drive\", \"obsidian\", \"ima\"]\n---\n\n# <简报标题>\n\n<简报正文>\n```\n\n---\n\n## 字段说明\n\n| 字段 | 类型 | 必填 | 说明 | 示例 |\n|------|------|------|------|------|\n| task_name | string | 是 | 任务名称 | \"ClawHub Daily\" |\n| run_time | string | 是 | 运行时间 (ISO 8601) | \"2026-07-11 09:00:23\" |\n| data_source | string | 是 | 数据源（逗号分隔） | \"ClawHub API, Convex\" |\n| status | string | 是 | 运行状态 | \"success\" / \"partial\" / \"failed\" |\n| error_count | int | 是 | 错误数量 | 0 |\n| archived_to | array | 是 | 已归档到的端 | [\"obsidian\", \"ima\"] |\n\n---\n\n## 状态定义\n\n| status | 含义 | archived_to 预期 |\n|--------|------|-----------------|\n| success | 主任务成功，三端全部归档 | [\"feishu_drive\", \"obsidian\", \"ima\"] |\n| partial | 主任务成功，部分端归档失败 | [\"obsidian\"] (缺失的端不列出) |\n| failed | 主任务失败 | [] (无归档) |\n\n---\n\n## 生成代码\n\n```python\nimport json\nfrom datetime import datetime\n\ndef generate_metadata_header(task_name, data_source, status, error_count, archived_to):\n    \"\"\"Generate YAML frontmatter metadata header.\"\"\"\n    return f\"\"\"---\ntask_name: \"{task_name}\"\nrun_time: \"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\"\ndata_source: \"{data_source}\"\nstatus: \"{status}\"\nerror_count: {error_count}\narchived_to: {json.dumps(archived_to, ensure_ascii=False)}\n---\"\"\"\n```\n\n---\n\n## 完整示例\n\n```markdown\n---\ntask_name: \"ClawHub Daily\"\nrun_time: \"2026-07-11 09:00:23\"\ndata_source: \"ClawHub Convex API\"\nstatus: \"success\"\nerror_count: 0\narchived_to: [\"feishu_drive\", \"obsidian\", \"ima\"]\n---\n\n# ClawHub Daily 推荐 - 2026-07-11\n\n## 今日推荐 Top 5\n\n1. **skill-foo** - 自动化办公场景，安装量增长15%\n2. **skill-bar** - 开发工具类，新增5星评价\n...\n\n## 数据统计\n- 抓取总数: 200\n- 推荐维度: D1 趋势\n- 去重窗口: 7天\n```\n\nFile v1.0.0:CHANGELOG.md\n\n# Changelog\n\n## [1.0.0] - 2026-07-11\n\n### Added\n- 初始版本\n- 9项就绪检查方法论（脚本独立运行/环境变量/数据源/IM凭证/归档路径/幂等性/失败回退/调度频率/输出质量）\n- Schedule message 提示词模板（自包含/失败回退/归档指令/IM提醒）\n- 三端归档指南（飞书云盘/Obsidian inbox/IMA知识库两步API）\n- 执行器脚本模板（含环境检查/主逻辑/三端归档/IM通知）\n- 归档元数据头模板（YAML frontmatter）\n\nFile v1.0.0:README.en.md\n\n# cron-task\n\n[![Stars](https://img.shields.io/github/stars/EdwardWason/cron-task?style=flat-square)](https://github.com/EdwardWason/cron-task)\n[![License](https://img.shields.io/badge/license-MIT--0-green?style=flat-square)](LICENSE)\n[![ClawHub](https://img.shields.io/badge/ClawHub-cron--task-orange?style=flat-square)](https://clawhub.ai/skills/cron-task)\n[![Skill](https://img.shields.io/badge/Claude%20Code-Skill-blue?style=flat-square)](SKILL.md)\n\n🇨🇳 中文版: [README.md](README.md)\n\n> _「Debug done. Say one word, get a daily runner with 9-point readiness check, three-destination archiving, and Feishu IM notification.」_\n\n**cron-task** is not a general-purpose task orchestrator, is a focused workflow that converts a debugged task into a stable scheduled task with readiness validation, script generation, and multi-destination archiving.\n\n## Navigation\n\n[See Effect](#example) · [Quick Start](#quick-start) · [Core Features](#core-features) · [Known Limitations](#known-limitations) · [License](#license)\n\n## Quick Start\n\n```bash\n# Install via ClawHub\nclawhub install cron-task\n\n# Or clone from GitHub\ngit clone https://github.com/EdwardWason/cron-task.git\n```\n\nAfter installation, trigger with: **\"创建定时任务\"** or **\"定时任务创建\"**\n\n## Core Features\n\n- **9-Point Readiness Check** — Script independence, env vars, data source reachability, IM credentials, archive paths, idempotency, fallback chain, schedule frequency, output quality\n- **Executor Script Generation** — Auto-generates a standalone Python script with env checking, main logic, three-destination archiving, and IM notification\n- **Schedule Prompt Writing** — Writes self-contained Schedule messages with execution commands, failure fallback, and archiving instructions\n- **Three-Destination Archiving** — Feishu Cloud Drive + Obsidian Inbox + IMA Knowledge Base, unified Markdown + YAML metadata header\n- **Feishu IM Notification** — Sends Interactive Card via lark-im skill with task name, status, summary, and detail link\n\n## Suitable / Not Suitable\n\n### Suitable\n- Converting a debugged data pipeline to daily auto-run\n- Setting up periodic skill execution with result archiving\n- Creating scheduled workflows with multi-step fallback\n\n### Not Suitable\n- One-time script execution\n- Manual-triggered tasks\n- Non-periodic workflows\n- Cron failure diagnosis (use cron-doctor instead)\n\n## Example\n\n```\nUser: 创建定时任务\n\nAI: [Scans context...]\n    [Runs 9-point readiness check...]\n\n## Readiness Check Report\n| # | Check Item | Status | Notes |\n|---|-----------|--------|-------|\n| 1 | Script independence | ✅ | executor.py tested |\n| ... | ... | ... | ... |\n| 5 | Archive paths | ⚠️ | Feishu folder not confirmed |\n\n⚠️ #5: Feishu Drive folder not specified\n→ Suggestion: Create folder via lark-drive\n\n[After user confirms...]\n\n✅ Script generated: scripts/clawhub_daily_executor.py\n✅ Schedule prompt written\n✅ Schedule task created (cron: 0 9 * * *, timezone: Asia/Shanghai)\n```\n\n## Directory Structure\n\n```\ncron-task/\n├── SKILL.md                          # Main entry (agent workflow)\n├── references/\n│   ├── readiness-checklist.md        # 9-point check methodology\n│   ├── schedule-prompt-template.md   # Schedule message template\n│   └── archiving-guide.md            # Three-destination archiving guide\n├── assets/\n│   ├── executor_template.py          # Executor script template\n│   └── metadata_header.md            # Archive metadata header template\n├── README.md                         # Chinese docs\n├── README.en.md                      # English docs\n├── CHANGELOG.md                      # Version history\n├── LICENSE                           # MIT-0\n└── .gitignore\n```\n\n## Known Limitations\n\n- **TRAE Schedule only**: Uses TRAE's Schedule tool, not system cron. Minimum interval is 10 minutes.\n- **Feishu IM only**: Currently only supports Feishu Interactive Card for notifications. Email and WeChat are future extensions.\n- **Requires pre-configured env vars**: FEISHU_APP_ID, FEISHU_APP_SECRET, FEISHU_USER_OPEN_ID, IMA credentials must be set beforehand.\n- **Python 3.10+**: Executor scripts use modern Python features.\n- **Windows-first**: Tested on Windows with PowerShell 5.1. Linux/macOS may need path adjustments.\n\n## License\n\nMIT-0 © 2026 EdwardWason\n\nFile v1.0.0:skill-card.md\n\n## Description: <br>\nConverts a nearly finished recurring workflow into a scheduled task by checking readiness, generating a standalone executor script, writing a Schedule prompt, and configuring Feishu notifications plus Feishu Drive, Obsidian, and IMA archiving. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[edwardwason](https://clawhub.ai/user/edwardwason) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and automation operators use this skill after debugging a task or skill to turn it into a stable recurring run with readiness checks, fallback instructions, notifications, and archive destinations. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The security evidence flags this version as suspicious because the package includes an unrelated release script with a hardcoded personal access token and under-scoped secret/cloud-data handling. <br>\nMitigation: Do not install or deploy this version until the publisher removes the release script, revokes and rotates the exposed token, and reviews secret handling. <br>\nRisk: Scheduled runs can repeatedly send task outputs to Feishu and IMA destinations. <br>\nMitigation: Before enabling a schedule, confirm each archive destination, recipient, timezone, retention expectation, and credential scope. <br>\n\n\n## Reference(s): <br>\n- [Cron Task Skill Page](https://clawhub.ai/edwardwason/skills/cron-task) <br>\n- [readiness-checklist.md](references/readiness-checklist.md) <br>\n- [schedule-prompt-template.md](references/schedule-prompt-template.md) <br>\n- [archiving-guide.md](references/archiving-guide.md) <br>\n- [executor_template.py](assets/executor_template.py) <br>\n- [metadata_header.md](assets/metadata_header.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Analysis, Markdown, Code, Shell commands, Configuration] <br>\n**Output Format:** [Markdown report with generated Python executor script, Schedule prompt text, shell commands, and archive configuration details] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May create scheduled task configuration and recurring archive outputs when all readiness checks pass.] <br>\n\n## Skill Version(s): <br>\n1.0.0 (source: server release metadata, artifact metadata, and changelog dated 2026-07-11) <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: Cron Task Owner: edwardwason Summary: 创建定时任务：扫描上下文→9项就绪检查→生成执行器脚本→撰写Schedule提示词→配置飞书IM提醒+三端归档(飞书云盘/Obsidian/IMA)。当用户说「创建定时任务」「定时任务创建」时触发，适用于任务/技能调试接近完成、需要转为稳定每日自动运行的场景。Do NOT use for 一次性任务、手动触发的脚... Tags: automation:1.0.1, cron:1.0.1, feishu:1.0.1, latest:1.0.1, scheduled-task:1.0.1 Version history: v1.0.1 | 2026-07-11T11:16:41.877Z | user Added SkillHub frontmatter fields for three-platform publishing. Versio","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"## 1. 就绪检查报告\n[9项检查结果表格，每项 ✅通过/❌缺失/⚠️需确认]\n\n## 2. 缺失要素清单\n[❌/⚠️项的详细说明 + 修复建议]\n\n## 3. 执行器脚本\n[路径: scripts/<task-name>_executor.py]\n\n## 4. Schedule 提示词\n[完整的 Schedule message 内容]\n\n## 5. 归档配置\n- 飞书云盘: [folder_token / 路径]\n- Obsidian inbox: [本地路径]\n- IMA知识库: [kb_id]\n\n## 6. Schedule 任务\n[已通过 Schedule 工具创建，cron表达式 + 时区]"},{"language":"text","snippet":"## 1. 就绪检查报告\n| # | 检查项 | 状态 | 说明 |\n|---|--------|------|------|\n| 1 | 脚本可独立运行 | ✅ | clawhub_daily_executor.py 测试通过 |\n| 2 | 环境变量齐全 | ✅ | FEISHU_APP_ID/SECRET/USER_OPEN_ID 均已配置 |\n| 3 | 数据源可达 | ✅ | wry-manatee-359.convex.cloud 响应正常 |\n| 4 | IM凭证有效 | ✅ | 飞书 Token 获取成功 |\n| 5 | 归档路径存在 | ⚠️ | 飞书云盘文件夹待确认 |\n| 6 | 幂等性 | ✅ | 按 date 去重，同日重复运行覆盖 |\n| 7 | 失败回退链路 | ✅ | 分4步降级执行 |\n| 8 | 调度频率合理 | ✅ | 每日1次 09:00 合理 |\n| 9 | 输出质量自检 | ✅ | 简报含8-10个推荐 |\n\n## 2. 缺失要素清单\n⚠️ #5: 飞书云盘文件夹未指定 → 建议用 lark-drive 创建 \"ClawHub Daily\" 文件夹\n\n## 3. 执行器脚本\n[已创建: scripts/clawhub_daily_executor.py]\n\n## 4. Schedule 提示词\n执行 ClawHub Daily 完整流程：抓取 200 个 Skill → 计算指标 → 生成推荐 → 归档三端 → 发送飞书卡片\n请按顺序执行：\n  cd \"<project_root>\" && python scripts/clawhub_daily_executor.py\n...（完整提示词）\n\n## 5. 归档配置\n- 飞书云盘: ClawHub Daily/2026-07-11.md\n- Obsidian: D:/Obsidian/Inbox/clawhub-daily-2026-07-11.md\n- IMA: kb_id=aFEGG-4YH3z.../\n\n## 6. Schedule 任务\n[已创建, cron: 0 9 * * *, timezone: Asia/Shanghai]"},{"language":"bash","snippet":"# ClawHub 安装\nclawhub install cron-task\n\n# 或 GitHub 克隆\ngit clone https://github.com/EdwardWason/cron-task.git"},{"language":"text","snippet":"用户: 创建定时任务\n\nAI: [扫描上下文...]\n    [执行9项就绪检查...]\n\n## 就绪检查报告\n| # | 检查项 | 状态 | 说明 |\n|---|--------|------|------|\n| 1 | 脚本可独立运行 | ✅ | executor.py 测试通过 |\n| 5 | 归档路径存在 | ⚠️ | 飞书云盘文件夹待确认 |\n\n⚠️ #5: 飞书云盘文件夹未指定\n→ 建议: 使用 lark-drive 创建文件夹\n\n[用户确认补全后...]\n\n✅ 脚本已生成: scripts/clawhub_daily_executor.py\n✅ Schedule 提示词已撰写\n✅ Schedule 任务已创建 (cron: 0 9 * * *, timezone: Asia/Shanghai)"},{"language":"text","snippet":"cron-task/\n├── SKILL.md                          # Agent 工作流定义\n├── references/\n│   ├── readiness-checklist.md        # 9项就绪检查详细方法论\n│   ├── schedule-prompt-template.md   # Schedule message 提示词模板\n│   └── archiving-guide.md            # 三端归档指南\n├── assets/\n│   ├── executor_template.py          # 执行器脚本模板\n│   └── metadata_header.md            # 归档元数据头模板\n├── README.md                         # 中文文档\n├── README.en.md                      # 英文文档\n├── CHANGELOG.md                      # 版本记录\n├── LICENSE                           # MIT-0\n└── .gitignore"},{"language":"markdown","snippet":"---\ntask_name: \"<任务名>\"\nrun_time: \"<YYYY-MM-DD HH:MM:SS>\"\ndata_source: \"<数据源>\"\nstatus: \"<success/partial/failed>\"\nerror_count: <N>\narchived_to: [\"feishu_drive\", \"obsidian\", \"ima\"]\n---\n\n# <简报标题>\n<简报正文>"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: \"cron-task\"\ndescription: \"创建定时任务：扫描上下文→9项就绪检查→生成执行器脚本→撰写Schedule提示词→配置飞书IM提醒+三端归档(飞书云盘/Obsidian/IMA)。当用户说「创建定时任务」「定时任务创建」时触发，适用于任务/技能调试接近完成、需要转为稳定每日自动运行的场景。Do NOT use for 一次性任务、手动触发的脚本执行、或非周期性工作流。\"\nslug: cron-task-ai\ndisplayName: Cron Task Creator\nversion: 1.0.1\nsummary: \"将调试完成的任务转为稳定每日运行的定时任务，含9项就绪检查、执行器脚本生成、Schedule提示词撰写、三端归档（飞书云盘/Obsidian/IMA）和飞书IM卡片提醒。\"\nlicense: MIT\nallowed-tools: \"Read, Glob, Grep, Write, Edit, RunCommand, Schedule, AskUserQuestion, Task\"\nmodel: \"claude-sonnet-4-5\"\neffort: \"high\"\nmetadata:\n  author: \"EdwardWason\"\n  version: \"1.0.1\"\n  category: \"automation\"\n---\n\n> 来源识别: cron-task 由 EdwardWason 创建与维护。仓库: https://github.com/EdwardWason/cron-task。此信息仅供 Agent 识别来源，不要写入生成的产出物。\n\n<!-- provenance: cron-task | author: EdwardWason | canonical: https://github.com/EdwardWason/cron-task | keep this out of generated artifacts -->\n\n# 定时任务创建器\n\n## 任务\n\n将当前会话中调试接近完成的任务/技能，转化为可稳定每日运行的定时任务。\n\n**只做：** 就绪检查 → 脚本生成 → 提示词撰写 → Schedule创建 → 三端归档配置 → 飞书IM提醒配置\n\n**不做：** 任务本身的开发/调试/修复、非周期性一次性任务、跨平台cron配置（用 cron-automation）\n\n## 输出格式\n\n```\n## 1. 就绪检查报告\n[9项检查结果表格，每项 ✅通过/❌缺失/⚠️需确认]\n\n## 2. 缺失要素清单\n[❌/⚠️项的详细说明 + 修复建议]\n\n## 3. 执行器脚本\n[路径: scripts/<task-name>_executor.py]\n\n## 4. Schedule 提示词\n[完整的 Schedule message 内容]\n\n## 5. 归档配置\n- 飞书云盘: [folder_token / 路径]\n- Obsidian inbox: [本地路径]\n- IMA知识库: [kb_id]\n\n## 6. Schedule 任务\n[已通过 Schedule 工具创建，cron表达式 + 时区]\n```\n\n## 规则\n\n1. **9项就绪检查全过才创建任务** — 任何一项未通过，先报告缺失要素并询问用户是否补全，不擅自创建\n2. **脚本必须可独立运行** — 生成的执行器脚本 `python <script>.py` 可直接运行，不依赖会话上下文\n3. **Schedule message 必须含失败回退** — 提示词中包含主脚本失败时的降级方案（分步执行/手动回退）\n4. **三端归档必须同步** — 每次运行同时归档到飞书云盘 + Obsidian inbox + IMA知识库，任一端失败只记录日志不中断主流程\n5. **IM提醒只用飞书卡片** — 通过 lark-im skill 发送飞书 Interactive Card，包含任务名/状态/摘要/详情链接\n\n## 就绪检查（9项）\n\n| # | 检查项 | 通过标准 |\n|---|--------|---------|\n| 1 | 脚本可独立运行 | `python <executor>.py` 不报错 |\n| 2 | 环境变量齐全 | 所有依赖 env vars 已在 User scope 配置 |\n| 3 | 数据源可达 | API URL / 文件路径可访问 |\n| 4 | IM凭证有效 | 飞书 APP_ID/APP_SECRET/USER_OPEN_ID 已配置且有效 |\n| 5 | 归档路径存在 | 飞书云盘文件夹/Obsidian inbox目录/IMA知识库 kb_id 均已确认 |\n| 6 | 幂等性 | 重复运行不会产生重复数据（去重/覆盖/跳过逻辑） |\n| 7 | 失败回退链路 | 主脚本失败时有明确的降级方案 |\n| 8 | 调度频率合理 | cron频率与任务实际需求匹配 |\n| 9 | 输出质量自检 | 简报内容有实质信息，非空壳/模板填充 |\n\n**详细检查方法见 [`references/readiness-checklist.md`](references/readiness-checklist.md)**\n\n## 工作流程\n\n### Step 1: 上下文扫描\n读取当前会话上下文，提取：任务名 / 核心逻辑 / 数据源 / 依赖脚本 / 依赖环境变量 / 输出格式\n\n### Step 2: 就绪检查（9项）\n对提取的要素逐项检查。未通过项生成修复建议。\n\n### Step 3: 补全确认\n有未通过项 → 用 AskUserQuestion 询问用户是否补全。用户确认补全 → 等待补全后重新检查。用户选择跳过 → 记录风险并继续。\n\n### Step 4: 脚本生成\n生成 `scripts/<task-name>_executor.py`，包含：主执行逻辑 + 失败回退 + 日志记录 + 三端归档调用。\n**模板见 [`assets/executor_template.py`](assets/executor_template.py)**\n\n### Step 5: 提示词撰写\n撰写 Schedule message，结构：\n- 任务概述（一句话）\n- 执行命令（按顺序）\n- 任务说明（数据源/凭证/参数）\n- 失败回退方案（分步命令）\n- 归档要求（三端路径）\n- IM提醒要求（飞书卡片）\n\n**完整模板见 [`references/schedule-prompt-template.md`](references/schedule-prompt-template.md)**\n\n### Step 6: Schedule 创建\n调用 Schedule 工具 `action: \"create\"`，传入：\n- `cron_expression`: 5字段cron格式\n- `message`: Step 5 生成的提示词\n- `name`: 任务简称\n- `timezone`: Asia/Shanghai（默认）\n\n### "},{"path":"README.md","content":"# cron-task\n\n[![Stars](https://img.shields.io/github/stars/EdwardWason/cron-task?style=flat-square)](https://github.com/EdwardWason/cron-task)\n[![许可证](https://img.shields.io/badge/license-MIT--0-green?style=flat-square)](LICENSE)\n[![ClawHub](https://img.shields.io/badge/ClawHub-cron--task-orange?style=flat-square)](https://clawhub.ai/skills/cron-task)\n[![Skill](https://img.shields.io/badge/Claude%20Code-Skill-blue?style=flat-square)](SKILL.md)\n\n🌍 English version: [README.en.md](README.en.md)\n\n_「调试完了，说一句话，还你一个每天自动跑、9项就绪检查、三端归档、飞书卡片提醒的定时任务。」_\n\n**cron-task** 不是又一个任务编排器，是从\"调试完成\"到\"稳定每日运行\"的最后一公里自动化。\n\n[看效果](#示例) · [装上就能用](#30-秒开始) · [核心机制](#核心特性) · [已知限制](#已知限制) · [License](#license)\n\n## 30 秒开始\n\n```bash\n# ClawHub 安装\nclawhub install cron-task\n\n# 或 GitHub 克隆\ngit clone https://github.com/EdwardWason/cron-task.git\n```\n\n安装后，在任务/技能调试接近完成时说：**\"创建定时任务\"**\n\n## 核心特性\n\n- **9项就绪检查** — 脚本独立性/环境变量/数据源/IM凭证/归档路径/幂等性/回退链路/调度频率/输出质量，任一项未过先报告不硬创\n- **执行器脚本生成** — 自动生成可独立运行的 Python 脚本，含环境检查+主逻辑+三端归档+IM通知\n- **Schedule 提示词撰写** — 自包含的 Schedule message，含执行命令+失败回退+归档指令+IM提醒要求\n- **三端归档** — 飞书云盘 + Obsidian inbox + IMA知识库（两步API），统一 Markdown + YAML 元数据头\n- **飞书 IM 卡片** — 通过 lark-im skill 发送 Interactive Card，含任务名/状态/摘要/详情链接\n\n## 适合 / 不适合\n\n### 适合\n- 数据抓取/分析项目调试完成，需要转为每日自动运行\n- 技能开发完成，需要定期执行并推送结果\n- 多步骤工作流，需要定时触发并归档结果\n\n### 不适合\n- 一次性脚本执行\n- 手动触发的任务\n- 非周期性工作流\n- Cron 故障诊断（用 cron-doctor 代替）\n\n## 示例\n\n```\n用户: 创建定时任务\n\nAI: [扫描上下文...]\n    [执行9项就绪检查...]\n\n## 就绪检查报告\n| # | 检查项 | 状态 | 说明 |\n|---|--------|------|------|\n| 1 | 脚本可独立运行 | ✅ | executor.py 测试通过 |\n| 5 | 归档路径存在 | ⚠️ | 飞书云盘文件夹待确认 |\n\n⚠️ #5: 飞书云盘文件夹未指定\n→ 建议: 使用 lark-drive 创建文件夹\n\n[用户确认补全后...]\n\n✅ 脚本已生成: scripts/clawhub_daily_executor.py\n✅ Schedule 提示词已撰写\n✅ Schedule 任务已创建 (cron: 0 9 * * *, timezone: Asia/Shanghai)\n```\n\n## 目录结构\n\n```\ncron-task/\n├── SKILL.md                          # Agent 工作流定义\n├── references/\n│   ├── readiness-checklist.md        # 9项就绪检查详细方法论\n│   ├── schedule-prompt-template.md   # Schedule message 提示词模板\n│   └── archiving-guide.md            # 三端归档指南\n├── assets/\n│   ├── executor_template.py          # 执行器脚本模板\n│   └── metadata_header.md            # 归档元数据头模板\n├── README.md                         # 中文文档\n├── README.en.md                      # 英文文档\n├── CHANGELOG.md                      # 版本记录\n├── LICENSE                           # MIT-0\n└── .gitignore\n```\n\n## 核心设计原则\n\n1. **就绪才创建** — 9项检查不过不创建任务，先报告缺失要素。避免\"创建了但跑不起来\"\n2. **脚本自包含** — 生成的执行器不依赖会话上下文，agent 在调度时可直接调用\n3. **归档不中断** — 任一端归档失败只记录日志，不中断主流程\n4. **IM 只用飞书** — 通过 lark-im skill 发卡片，不混用通道\n\n## 已知限制\n\n- **TRAE Schedule 限制**：最小间隔 10 分钟，不支持秒级，只支持 5 字段 cron 格式\n- **飞书 IM 为主**：当前只支持飞书 Interactive Card，邮件/微信为未来扩展\n- **需预配置环境变量**：FEISHU_APP_ID/SECRET/USER_OPEN_ID、IMA 凭证需提前配置\n- **Python 3.10+**：执行器脚本使用现代 Python 特性\n- **Windows 优先**：在 Windows + PowerShell 5.1 测试，Linux/macOS 可能需调整路径\n\n## License\n\nMIT-0 © 2026 EdwardWason"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75zj7vzdyvap84adxa8heyyd82f5eh\",\n  \"slug\": \"cron-task\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1783768601877\n}"},{"path":"references/archiving-guide.md","content":"# 三端归档指南\n\n> 每次定时任务运行后，简报必须同步归档到三个位置。\n> 归档格式统一为 Markdown + 元数据头。任一端失败只记录日志不中断主流程。\n\n---\n\n## 归档目标\n\n| # | 目标 | 格式 | 路径示例 |\n|---|------|------|---------|\n| 1 | 飞书云盘 | Markdown 文件（lark-drive 上传） | ClawHub Daily/2026-07-11.md |\n| 2 | Obsidian inbox | 本地 .md 文件 | D:/Obsidian/Inbox/clawhub-daily-2026-07-11.md |\n| 3 | IMA知识库 | 笔记 + 添加到知识库（两步API） | FIM知识库 / ClawHub Daily |\n\n---\n\n## 元数据头格式\n\n每份归档文件开头必须包含元数据头：\n\n```markdown\n---\ntask_name: \"<任务名>\"\nrun_time: \"<YYYY-MM-DD HH:MM:SS>\"\ndata_source: \"<数据源>\"\nstatus: \"<success/partial/failed>\"\nerror_count: <N>\narchived_to: [\"feishu_drive\", \"obsidian\", \"ima\"]\n---\n\n# <简报标题>\n<简报正文>\n```\n\n**元数据头模板见 [`assets/metadata_header.md`](../assets/metadata_header.md)**\n\n---\n\n## 1. 飞书云盘归档\n\n### 方法\n使用 lark-drive skill 的 `drive +upload` 命令上传 Markdown 文件。\n\n### 步骤\n1. 确认目标文件夹存在（folder_token）\n2. 生成简报 Markdown 文件到临时路径\n3. 上传到飞书云盘指定文件夹\n4. 记录返回的 file_token\n\n### 脚本调用\n```python\nimport subprocess\nresult = subprocess.run([\n    \"python\", \"-m\", \"lark_cli\", \"drive\", \"upload\",\n    \"--file\", \"<local_md_path>\",\n    \"--folder-token\", \"<folder_token>\",\n    \"--name\", f\"<task-name>-<date>.md\"\n], capture_output=True, text=True)\n```\n\n### 注意事项\n- 文件名含日期，确保幂等性（同日重跑覆盖）\n- 上传前检查文件大小 > 0\n- 上传失败记录日志，不中断主流程\n\n---\n\n## 2. Obsidian Inbox 归档\n\n### 方法\n直接写入本地文件系统。\n\n### 步骤\n1. 确认 inbox 目录存在（不存在则创建）\n2. 生成简报 Markdown 内容\n3. 写入 `<inbox_path>/<task-name>-<date>.md`\n\n### 脚本调用\n```python\nimport os\nfrom pathlib import Path\nfrom datetime import datetime\n\ninbox_path = Path(os.environ.get(\"OBSIDIAN_INBOX\", \"<obsidian_inbox_path>\"))\ninbox_path.mkdir(parents=True, exist_ok=True)\n\ndate_str = datetime.now().strftime(\"%Y-%m-%d\")\nfile_path = inbox_path / f\"<task-name>-{date_str}.md\"\nfile_path.write_text(content, encoding=\"utf-8\")\n```\n\n### 注意事项\n- 默认 inbox 路径: `D:/Obsidian/Inbox`\n- 文件名格式: `<task-name>-<date>.md`\n- 同日重跑覆盖（幂等性）\n- 编码必须 UTF-8\n\n---\n\n## 3. IMA知识库归档\n\n### 方法\n两步API流程（**不能用 note API 的 folder 参数**）：\n1. `POST /openapi/note/v1/import_doc` — 创建笔记\n2. `POST /openapi/wiki/v1/add_knowledge` — 添加到知识库\n\n### 凭证\n```python\nimport os\nclient_id = os.environ.get(\"IMA_OPENAPI_CLIENTID\") or os.environ.get(\"IMA_CLIENT_ID\")\napi_key = os.environ.get(\"IMA_OPENAPI_APIKEY\") or os.environ.get(\"IMA_API_KEY\")\n```\n\n### Step 1: 创建笔记\n```python\nimport urllib.request, json\n\nurl = \"https://api.imawiki.com/openapi/note/v1/import_doc\"\ndata = json.dumps({\n    \"title\": f\"<task-name>-<date>\",\n    \"content\": briefing_content,  # Markdown 内容\n    \"source\": \"cron-task\"\n}).encode(\"utf-8\")\n\nreq = urllib.Request(url, data=data, headers={\n    \"Content-Type\": \"application/json\",\n    \"ima-openapi-clientid\": client_id,\n    \"ima-openapi-apikey\": api_key\n})\nresp = urllib.request.urlopen(req)\nnote_id = json.loads(resp.read())[\"data\"][\"note_id\"]\n```\n\n### Step 2: 添加到知识库\n```python\nkb_id = os.environ.get(\"IMA_KB_ID\", \"<ima_kb_id>\")  # FIM知识库\n\nurl = \"https://api.imawiki.com/openapi/wiki/v1/add_knowledge\"\ndata = json.dumps({\n    \"kb_id\": kb_id,\n    \"media_type\": 11,\n    \"note_info\": {\"content_id\": note_id}\n}).encode(\"utf-8\")\n\nreq = urllib.Request(url,"},{"path":"references/readiness-checklist.md","content":"# 9项就绪检查详细方法论\n\n> 每项检查包含：检查目的 / 检查方法 / 通过标准 / 常见失败原因 / 修复建议\n\n---\n\n## 检查1: 脚本可独立运行\n\n**目的：** 确保生成的执行器脚本不依赖会话上下文，可被 TRAE agent 独立调用。\n\n**检查方法：**\n```bash\ncd \"<project_root>\" && python \"<script_path>\" --dry-run\n```\n（如果有 --dry-run 参数；否则直接运行并观察是否报错）\n\n**通过标准：**\n- 脚本启动无 ImportError / ModuleNotFoundError\n- 脚本启动无 NameError（引用了会话中定义但未写入脚本的变量）\n- 脚本退出码为 0（或预期内的非零码）\n\n**常见失败原因：**\n| 原因 | 修复建议 |\n|------|---------|\n| 脚本引用了会话中定义的变量 | 将变量提取为命令行参数或环境变量 |\n| 缺少依赖包 | 在脚本头部添加 pip install 检查，或生成 requirements.txt |\n| 相对路径错误 | 脚本顶部添加 `os.chdir(os.path.dirname(__file__))` 或使用绝对路径 |\n| 硬编码了调试时的临时路径 | 替换为可配置路径或环境变量 |\n\n---\n\n## 检查2: 环境变量齐全\n\n**目的：** 确保所有依赖的环境变量已在系统中配置。\n\n**检查方法：**\n```python\nimport os\nrequired_vars = [\"FEISHU_APP_ID\", \"FEISHU_APP_SECRET\", \"FEISHU_USER_OPEN_ID\"]\nfor var in required_vars:\n    val = os.environ.get(var)\n    if not val:\n        print(f\"❌ 缺失: {var}\")\n    elif val.startswith(\"your_\") or val == \"dummy\":\n        print(f\"⚠️ 占位符: {var}\")\n    else:\n        print(f\"✅ {var}: {val[:8]}...\")\n```\n\n**通过标准：** 所有必需环境变量已配置，且非占位符值。\n\n**常见环境变量清单：**\n| 变量名 | 用途 | scope |\n|--------|------|-------|\n| FEISHU_APP_ID | 飞书应用ID | User |\n| FEISHU_APP_SECRET | 飞书应用密钥 | User |\n| FEISHU_USER_OPEN_ID | 飞书用户OpenID | User |\n| IMA_OPENAPI_CLIENTID | IMA API客户端ID | User |\n| IMA_OPENAPI_APIKEY | IMA API密钥 | User |\n| GH_TOKEN | GitHub Token | User |\n| CLAWHUB_TOKEN | ClawHub Token | User |\n\n---\n\n## 检查3: 数据源可达\n\n**目的：** 确保脚本依赖的外部数据源（API/文件/数据库）可正常访问。\n\n**检查方法：**\n- **API：** `curl -s -o /dev/null -w \"%{http_code}\" <url>` 返回 200\n- **文件：** `Test-Path <file_path>` 返回 True\n- **数据库：** 尝试连接并执行简单查询\n\n**通过标准：** 所有数据源返回预期响应。\n\n---\n\n## 检查4: IM凭证有效\n\n**目的：** 确保飞书API凭证有效，可发送卡片消息。\n\n**检查方法：**\n```python\nimport requests, os\napp_id = os.environ[\"FEISHU_APP_ID\"]\napp_secret = os.environ[\"FEISHU_APP_SECRET\"]\nresp = requests.post(\"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal\", \n    json={\"app_id\": app_id, \"app_secret\": app_secret})\nif resp.status_code == 200 and \"tenant_access_token\" in resp.json():\n    print(\"✅ 飞书凭证有效\")\nelse:\n    print(f\"❌ 飞书凭证无效: {resp.json()}\")\n```\n\n**通过标准：** 成功获取 tenant_access_token。\n\n---\n\n## 检查5: 归档路径存在\n\n**目的：** 确保三端归档目标路径均已确认且可达。\n\n**检查方法：**\n\n**飞书云盘：**\n- 确认 folder_token（用 lark-drive skill 的 drive +list 查看文件夹）\n- 或确认文件夹路径，由脚本自动创建\n\n**Obsidian inbox：**\n- 确认本地目录存在：`Test-Path \"<obsidian_inbox_path>\"`\n- 不存在则创建：`New-Item -ItemType Directory -Force`\n\n**IMA知识库：**\n- 确认 kb_id（用 IMA API search_knowledge_base 搜索知识库名）\n- 已知 FIM知识库 ID: 从环境变量 `IMA_KB_ID` 读取，或用 search_knowledge_base 搜索获取\n\n**通过标准：** 三端路径均已确认可达。\n\n---\n\n## 检查6: 幂等性\n\n**目的：** 确保重复运行不会产生重复数据。\n\n**检查方法：** 审查脚本逻辑，确认包含以下机制之一：\n- **按日期去重：** 文件名含日期 `report-2026-07-11.md`，同日重跑覆盖\n- **按ID去重：** 数据库记录有唯一约束\n- **跳过逻辑：** 检查输出是否已存在，存在则跳过\n- **覆盖逻辑：** 明确的 overwrite=True 参数\n\n**通过标准：** 脚本中有明确的幂等性机制。\n\n**常见失败原因：**\n| 原因 | 修复建议 |\n|------|---------|\n| 文件名无日期 | 添加 `{date}` 占位符 |\n| 数据库无唯一约束 | 添加 UPSERT 逻辑 |\n| 无存在性检查 | 添加 `if os.path.exists(): skip` |\n\n---\n\n## 检查7: 失败回退链路\n\n**目的：** 确保主脚本失败时有明确的降级方案。\n\n**检查方法：** 确认 Schedule message 中包含分步回退方案：\n```\n如果主执行器失败，回退到分步：\n1. p"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"创建定时任务：扫描上下文→9项就绪检查→生成执行器脚本→撰写Schedule提示词→配置飞书IM提醒+三端归档(飞书云盘/Obsidian/IMA)。当用户说「创建定时任务」「定时任务创建」时触发，适用于任务/技能调试接近完成、需要转为稳定每日自动运行的场景。Do NOT use for 一次性任务、手动触发的脚... Skill: Cron Task Owner: edwardwason Summary: 创建定时任务：扫描上下文→9项就绪检查→生成执行器脚本→撰写Schedule提示词→配置飞书IM提醒+三端归档(飞书云盘/Obsidian/IMA)。当用户说「创建定时任务」「定时任务创建」时触发，适用于任务/技能调试接近完成、需要转为稳定每日自动运行的场景。Do NOT use for 一次性任务、手动触发的脚... Tags: automation:1.0.1, cron:1.0.1, feishu:1.0.1, latest:1.0.1, scheduled-task:1.0.1 Version history: v1.0.1 | 2026-07-11T11:16:41.877Z | user Added SkillHub frontmatter fields for three-platform publishing. Versio","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":806,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T23:14:55.090Z","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-11T23:14:55.090Z","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-12T13:43:28.356Z","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"}]}}}