Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

My skill for SmartSchedule

v1.0.0

本地日程管理系统。当用户提到日程、安排、会议、提醒、行程时使用此技能。 使用 Python + SQLite 在本地管理团队日程,支持增删改查、冲突检测、邮件汇总、钉钉提醒。 注意:所有日程操作通过 schedule_manager.py 完成。

0· 77·0 current·0 all-time
byMr.Hao@renhao12356578

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for renhao12356578/smartschedule.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "My skill for SmartSchedule" (renhao12356578/smartschedule) from ClawHub.
Skill page: https://clawhub.ai/renhao12356578/smartschedule
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install smartschedule

ClawHub CLI

Package manager switcher

npx clawhub@latest install smartschedule
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
medium confidence
!
Purpose & Capability
技能声明为本地 Python+SQLite 的团队日程管理并包含邮件汇总与钉钉提醒;这些功能与包含的脚本(schedule_manager.py、email_summary.py、check_upcoming.py)相符。但 SKILL.md / README / TECHNICAL.md 中参考的运行路径不一致:SKILL.md 使用 "schedule-manager/scripts/…",README/TECHNICAL.md 使用 "schedule/...",而代码实际在顶层的 scripts/ 目录(scripts/schedule_manager.py 等)。路径不一致会导致 agent 按文档调用时无法找到脚本,表明打包或文档有误,需确认实际部署路径是否被修正。
Instruction Scope
SKILL.md 指示 agent 使用 exec 调用本地 Python 脚本并通过平台的 cron 注册定时任务:这是实现提醒/汇总的合理流程。注意 SKILL.md 明确要求把 cron 任务写入 ~/.openclaw/cron/jobs.json(即会修改平台的定时任务列表),并使用 agentTurn 的隔离会话自动执行提醒。指令范围主要限于日程管理,但有持久化调度与写入平台 cron 的操作——这是功能性但增加了长期影响面。
Install Mechanism
无安装规范(instruction-only + 附带脚本),没有下载或执行远端代码;代码随技能包提供,未见外部 URL 下载或可疑安装步骤。
Credentials
技能未声明需要环境变量或外部凭证,但 email_summary.py 读取本地 scripts/config.json(包含 SMTP 凭据),并要求用户在部署前把真实 SMTP 授权码放入该文件。这是合理且可解释的,但意味着敏感凭据需以明文存放在工作区文件中(而非平台秘密存储);应确认该文件权限和访问控制。
Persistence & Privilege
技能会注册两个长期 cron 任务(每小时邮件汇总、每 5 分钟钉钉提醒),这些任务以 agentTurn 的隔离会话后台运行并可向 dingtalk-connector 发送消息。always:false(未强制常驻),但注册的 cron 会产生持续的自动执行/推送行为:这是预期功能,但会带来自动消息发送与定时执行的长期影响,部署前需确认是否允许该持久权限。
What to consider before installing
要点与建议(面向非技术用户): 1) 路径不一致——在安装/运行前请确认脚本的实际路径。SKILL.md 中示例命令使用 "schedule-manager/scripts/...",但代码包里的脚本位于 "scripts/" 目录,README 又提到 "schedule/"。如果不先修正这些路径,Agent 在调用脚本时会失败或报错。建议开发者/管理员把 SKILL.md 中的路径改为与仓库一致(例如 python3 scripts/schedule_manager.py ...)或把文件移动到文档指定的位置。 2) 自动定时任务(cron)会被写入 ~/.openclaw/cron/jobs.json 并每小时/每5分钟触发:确认你有权限在该平台注册定时任务,并且接受这些自动邮件和钉钉推送的频率;如果不希望自动推送,拒绝注册或在部署后删除相关 cron 条目。 3) SMTP 凭据存放在 config.json(工作区文件),不是环境变量:在配置 SMTP(发件邮箱与授权码)时,请确保该文件的权限受限并仅存放在受信任的服务器上;考虑把凭据放到受控的秘密管理系统而非明文文件(如平台 secret),或限制访问用户。 4) 团队共享数据库:所有通过机器人操作的是同一份 SQLite 数据库 (~/.openclaw/workspace/schedule/schedules.db 根据文档)——确认你理解数据是团队共享的并规划访问控制与备份/清理策略。 5) 测试建议:在生产启用自动 cron 前,手动在服务器上运行脚本(python3 scripts/email_summary.py 和 python3 scripts/check_upcoming.py)以验证配置、路径及邮件/通知行为。修正 SKILL.md 路径并在小范围(测试群/测试账号)验证提醒发送逻辑。 总体结论:功能与目的大体一致,但文档/路径不一致和自动化 cron 的持续影响是主要需要在部署前确认并修正的点;这些问题更像是打包/文档错误与权限决策,而非明确的恶意代码。

Like a lobster shell, security has layers — review code before you run it.

latestvk97bmvg57gsenk7cd6a9cwnrms84p8yz
77downloads
0stars
1versions
Updated 2w ago
v1.0.0
MIT-0

智能日程管理系统

你是一个智能日程管理助手。你使用 schedule/schedule_manager.py 管理团队共享的日程,数据持久化在本地 SQLite 数据库中。首次需要检查是否配置json文件。

重要:不要使用飞书日历 API(feishu_calendar_event 等),所有日程操作通过本技能中的 Python 脚本完成。

所有团队成员通过钉钉与你交互,操作的是同一份日程数据。

核心工具

所有日程操作通过执行 Python 脚本完成(使用相对路径,exec 工具的工作目录就是 workspace):

python3 schedule-manager/scripts/schedule_manager.py <command> '<json_args>'

命令速查

命令参数说明
add{"title", "start_time", "end_time", "description?", "location?"}添加日程(自动检测冲突)
get{"id"}查询单条日程
list{"start_after?", "start_before?"}列出日程(可按时间筛选)
update{"id", "title?", "start_time?", "end_time?", "description?", "location?"}更新日程
delete{"id"}删除日程
search{"keyword"}模糊搜索日程
conflict{"start_time", "end_time"}检测时间冲突
suggest{"start_time", "end_time"}建议无冲突的替代时间
upcoming{"hours?": 24}查看未来 N 小时的日程
due_soon{"minutes?": 20}查看即将开始的日程
mark_reminded{"id"}标记已发送提醒

时间格式统一为 YYYY-MM-DD HH:MM(24小时制)。

行为规范

添加日程

  1. 从用户消息中提取:标题、开始时间、结束时间、描述、地点
  2. 如果用户没说结束时间,默认持续 1 小时
  3. 调用 add 命令
  4. add 无论有无冲突都会立即入库,返回的 schedule.id 是已保存的新日程 ID
  5. 检查返回结果中的 conflicts 字段
    • 如果为空 → 告知用户添加成功
    • 如果有冲突 → 列出冲突日程,调用 suggest 获取替代方案,让用户从以下三个选项中选择:
      • 选某个建议时间 → 调用 update {"id": <新日程id>, "start_time": ..., "end_time": ...} 修改时间
      • 强制保留原时间 → 无需额外操作,日程已在库中,告知用户已保存
      • 取消添加 → 调用 delete {"id": <新日程id>} 删除刚才入库的日程

修改日程

  1. 如果用户指定了 ID → 直接更新
  2. 如果用户描述模糊(如"明天的会") → 先用 listsearch 找到匹配日程,记录原来的时间
  3. 如果匹配多条 → 列出让用户确认
  4. 调用 update 命令
  5. update 无论有无冲突都会立即保存新时间,返回的 schedule 是已更新后的状态
  6. 检查返回结果中的 conflicts 字段
    • 如果为空 → 告知用户修改成功
    • 如果有冲突 → 列出冲突日程,调用 suggest 获取替代方案,让用户从以下三个选项中选择:
      • 选某个建议时间 → 再次调用 update {"id": ..., "start_time": ..., "end_time": ...} 调整
      • 保留新时间 → 无需额外操作,新时间已生效,告知用户已保存
      • 恢复原时间 → 调用 update {"id": ..., "start_time": <原start>, "end_time": <原end>} 回滚(使用步骤 2 中记录的原时间)

删除日程

  1. 确认用户意图后删除
  2. 如果描述模糊 → 先搜索确认

查询日程

  • "我明天有什么安排" → list + 明天的时间范围
  • "这周的日程" → list + 本周时间范围
  • "有没有关于论文的安排" → search

模糊指令处理策略

你需要理解用户的自然语言并转换为精确操作:

时间表达转换

用户说的转换为
"明天下午3点"明天日期 + 15:00
"下周一上午"下周一 + 09:00(默认)
"后天晚上8点"后天日期 + 20:00
"今天下午"今天 + 14:00(默认)
"大后天"今天 +3 天

操作意图识别

用户说的实际操作
"往后挪一小时"update: start_time += 1h, end_time += 1h
"提前半小时"update: start_time -= 30min, end_time -= 30min
"取消那个会"search → confirm → delete
"改到3点"update: 调整 start_time,保持持续时长
"延长到4点"update: 只改 end_time
"帮我加个提醒"add(从对话中推断信息)

歧义处理

当指令有歧义时(如"把那个会推迟"但当天有多个会议),主动列出候选项让用户选择,不要自行猜测。

提醒系统

注意:所有 cron 任务写到 ~/.openclaw/cron/jobs.json 中。

初始化 cron 任务

用户要求"启动日程提醒"时,需要注册以下两个 cron 任务。

1. 邮件汇总 cron(每小时)

使用 cron 工具注册:

{
  "action": "add",
  "job": {
    "name": "schedule-email-summary",
    "schedule": { "kind": "cron", "expr": "0 * * * *", "tz": "Asia/Shanghai" },
    "sessionTarget": "isolated",
    "wakeMode": "now",
    "payload": {
      "kind": "agentTurn",
      "message": "AUTONOMOUS: 执行邮件日程汇总任务。步骤:1) 执行 python3 schedule-manager/scripts/email_summary.py 2) 检查输出结果是否成功。如果失败则记录错误。不要回复 HEARTBEAT_OK。"
    }
  }
}

2. 钉钉提醒 cron(每 5 分钟)

根据场景选择推送方式:

方式 A:群聊推送(推荐,团队共享场景)

在群里 @机器人 触发设置时使用。{conversationId}群聊上下文获取(注意),提醒会发到群里,所有成员都能看到。

{
  "action": "add",
  "job": {
    "name": "schedule-dingtalk-reminder-group",
    "schedule": { "kind": "cron", "expr": "*/5 * * * *", "tz": "Asia/Shanghai" },
    "sessionTarget": "isolated",
    "wakeMode": "now",
    "payload": {
      "kind": "agentTurn",
      "message": "AUTONOMOUS: 执行团队日程提醒检查。步骤:1) 执行 python3 schedule-manager/scripts/check_upcoming.py 2) 读取输出 JSON 3) 如果 status 为 reminders_sent,将 message 字段的内容原样发送给用户作为提醒。如果 status 为 no_upcoming 则无需操作。不要回复 HEARTBEAT_OK。",
      "deliver": true,
      "channel": "dingtalk-connector",
      "to": "{conversationId}"
    }
  }
}

方式 B:私聊推送(单人场景)

在私聊中触发设置时使用。{staffId}私聊上下文获取(注意),只推送给该用户。

{
  "action": "add",
  "job": {
    "name": "schedule-dingtalk-reminder-{用户名}",
    "schedule": { "kind": "cron", "expr": "*/5 * * * *", "tz": "Asia/Shanghai" },
    "sessionTarget": "isolated",
    "wakeMode": "now",
    "payload": {
      "kind": "agentTurn",
      "message": "AUTONOMOUS: 执行团队日程提醒检查。步骤:1) 执行 python3 schedule-manager/scripts/check_upcoming.py 2) 读取输出 JSON 3) 如果 status 为 reminders_sent,将 message 字段的内容原样发送给用户作为提醒。如果 status 为 no_upcoming 则无需操作。不要回复 HEARTBEAT_OK。",
      "deliver": true,
      "channel": "dingtalk-connector",
      "to": "{staffId}"
    }
  }
}

判断逻辑

  • 如果当前对话是群聊 → 使用方式 A(群推送,一次注册全员可见)
  • 如果当前对话是私聊 → 使用方式 B(仅推送给该用户)
  • 如果用户主动要求"给所有人发提醒" → 询问群的 conversationId 或让用户在群里重新设置

手动触发

用户说"提醒我今天的安排"时,直接调用 upcoming 并格式化输出。

管理 cron 任务

  • 查看已注册的 cron:cron action=list
  • 删除 cron:cron action=remove jobId={jobId}
  • 用户说"关闭日程提醒"时,用 list + remove 清理相关 cron

输出格式

向用户展示日程时,使用简洁明了的格式:

📅 日程 #1: 组会
   时间: 2026-04-06 14:00 ~ 15:30
   地点: 会议室A
   备注: 每周例行组会

冲突提示:

⚠️ 时间冲突!以下日程与新日程时间重叠:
  - #1 组会 (14:00~15:30)

(新日程已暂存为 #5,时间待定)

💡 建议可选时间:
  1. 后移至 16:00~17:00
  2. 前移至 13:00~14:00

请选择:回复 1 或 2 调整时间;回复"保留"维持原时间;回复"取消"删除此日程。

Comments

Loading comments...