← 返回 Skills 市场
rednix

Appointment Manager

作者 Nico Lumma · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
123
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install appointment-manager
功能描述
Books, tracks, and reminds you of appointments through online booking or phone-call scripts, managing the full appointment lifecycle and reminders.
使用说明 (SKILL.md)

File structure

appointment-manager/
  SKILL.md
  appointments.md    ← all appointments, status, full lifecycle
  providers.md       ← known providers with booking method, contact, notes
  config.md          ← reminder preferences, delivery settings

The lifecycle

Request → Research → Book → Confirm → Remind (24h) → Remind (2h) → Attend → Follow-up

The skill owns every stage except the ones that need a phone call. For those, it does everything up to handing you the number and the script.


Booking methods

Online booking (handled automatically): Agent uses the browser tool to find and complete the booking. No action required from the user beyond the initial request.

Phone-only providers (handled up to the call): Agent finds the number, identifies the best time to call, drafts a script with all the information needed, and sends it ready to use. The call is the user's — everything else is handled.

Manual logging: User booked it themselves. Agent logs it and sets up the reminder chain. /appt log [description] [date/time]


Setup flow

Step 1 — Reminder preferences

Ask once. Store in config.md. All future appointments use this.

Default chain:

  • 24 hours before: full reminder with address, what to bring, journey time
  • 2 hours before: short nudge with location
  • 15 minutes before: final ping (off by default — ask if they want it)

Also ask: follow-up prompt after appointment? Default on. "[APPOINTMENT] is done — anything to note?"

Step 2 — Location

Ask for home location / postcode if not already in USER.md. Used for: journey time estimates, finding local providers.

Step 3 — Calendar

If Google Calendar is connected: ask if they want appointments added automatically. Default: yes.

Step 4 — Write config.md

# Appointment Manager Config

## Reminder chain
24h: true
2h: true
15min: false
follow_up: true

## Location
home: [address / postcode]

## Calendar sync
google_calendar: true

## Delivery
channel: [CHANNEL]
to: [TARGET]

Booking flow — online provider

When user says "book me a dentist appointment" or "I need a GP appointment next week":

Step 1 — Identify the provider

Check providers.md for a preferred or previously used provider. If found: confirm with user — "Use [PROVIDER] again, or try somewhere new?" If not found: ask for their preferred provider, or offer to find one nearby.

Finding a provider (if needed):

web_search: "[appointment type] near [location]"

Present top 3 options with: name, address, distance, rating, booking method. User picks. Store in providers.md.

Step 2 — Find the booking page

web_fetch: [provider website]

Look for: online booking link, booking system (Doctolib, Zocdoc, Calendly, proprietary). If booking system found: proceed to Step 3. If no online booking: proceed to phone-only flow.

Step 3 — Check availability

Use browser tool to navigate the booking system. Find available slots. Check against user's calendar if connected.

Ask the user: "Any preference on day or time? Morning or afternoon?" Default: next available slot that doesn't conflict with calendar.

Present top 3 options:

Available slots:
1. Tuesday 15 April — 10:30am
2. Wednesday 16 April — 2:15pm
3. Friday 18 April — 9:00am

Which works?

Step 4 — Complete the booking

Navigate and complete the booking in the browser. Fill in required details (name, DOB, reason for visit — ask user if needed). Get confirmation number or confirmation email.

Confirm to user:

✅ Booked: Dentist — Dr. [NAME] / [PRACTICE]
Tuesday 15 April at 10:30am
[ADDRESS]
Confirmation: #[REF]

Reminders set: Monday 14 April (24h) and Tuesday at 8:30am (2h).
Added to Google Calendar. ✓

Log to appointments.md and update providers.md with booking details.

Step 5 — Register reminder cron jobs

For each reminder in the chain, register an isolated cron job:

{
  "name": "Appt Reminder 24h — [TYPE] [DATE]",
  "schedule": { "kind": "at", "at": "[24h before appointment ISO timestamp]" },
  "sessionTarget": "isolated",
  "wakeMode": "now",
  "deleteAfterRun": true,
  "payload": {
    "kind": "agentTurn",
    "message": "Send 24h appointment reminder. Read {baseDir}/appointments.md for [appointment ID]. Send reminder with address, what to bring, journey time.",
    "lightContext": true
  },
  "delivery": { "mode": "announce", "channel": "\x3CCHANNEL>", "to": "\x3CTARGET>" }
}

Repeat for 2h reminder. Store cron job IDs in appointments.md.


Booking flow — phone-only provider

When the provider has no online booking:

Step 1 — Find the number

web_fetch: [provider website]
web_search: "[provider name] phone number"

Extract: main booking number, best time to call, any notes ("call after 9am", "press 2 for appointments").

Step 2 — Draft the call script

Generate a complete script ready to use:

📞 Call script — [PROVIDER]

Number: [PHONE NUMBER]
Best time to call: [TIME — e.g. "weekday mornings, lines open 8am"]
[Any navigation notes — "Press 2 for appointments"]

---

When they answer:

"Hi, I'd like to book an appointment for [REASON / TYPE].

My name is [USER NAME].
Date of birth: [DOB if medical]
[Any other required details]

I'm available: [USER'S AVAILABILITY — pulled from calendar or asked]

Do you have anything [morning/afternoon] in the next [timeframe]?"

---

Once booked, log it: /appt log [type] [date/time]

Send the script to the user's channel. Everything they need is in one message.

Step 3 — Set a call reminder

If the user hasn't logged the appointment within 2 days: "Did you manage to call [PROVIDER]? If you've booked, just log it and I'll set up reminders."


Appointment types and prep notes

The skill knows what different appointments typically require. The 24h reminder includes type-specific prep notes.

Medical / GP:

  • Bring: [any referral letters, current medication list, insurance card if applicable]
  • Note: arrive 5-10 minutes early if first visit
  • Journey: [estimated travel time from home]

Dentist:

  • Avoid eating 1 hour before if possible
  • Bring: [dental insurance card if applicable]
  • Journey: [estimated travel time]

Optician:

  • Bring: current glasses/contact lenses
  • Note: driving after eye test may not be possible if drops are used

Haircut / beauty:

  • Bring: reference photos if you have a specific style in mind
  • No special prep

Specialist / hospital:

  • Bring: referral letter, any previous test results, medication list, insurance card
  • Note: allow extra time for registration
  • Journey: [hospital can be large — check which department and entrance]

Custom: For appointment types not in the library, ask the user once: "Anything specific to bring or prepare?" Store in providers.md for future bookings at the same provider.


appointments.md structure

# Appointments

## [APPOINTMENT ID] — [TYPE] — [PROVIDER]
Date: [DATE TIME]
Duration: [if known]
Address: [full address]
Booked via: [online / phone-script / manual]
Confirmation: [reference number or email confirmation]
Status: upcoming / completed / cancelled / rescheduled
Reminder jobs: [24h cron ID] [2h cron ID]
Prep notes: [what to bring, any specific notes]
Follow-up: [none / [specific follow-up required]]
Calendar event: [Google Calendar event ID if synced]
Notes: [anything else]

providers.md structure

# Providers

## [PROVIDER NAME]
Type: [dentist / GP / optician / etc]
Address: [full address]
Phone: [number]
Best time to call: [if phone-only]
Booking method: [online — [URL] / phone-only / mixed]
Booking system: [Doctolib / Zocdoc / proprietary / etc]
Last visit: [date]
Notes: [any useful info — "Dr. [NAME] is preferred", "parking on site", etc]

providers.md grows over time. Every new provider is stored. Future bookings at the same provider skip the research step entirely.


Reminder formats

24h reminder

📅 [TYPE] tomorrow — [DAY] at [TIME]

📍 [PROVIDER NAME]
[ADDRESS]

🕐 Journey: [X] min from home — leave by [TIME]

📋 Bring:
• [Item from prep notes]
• [Item]

[Any specific notes for this appointment]

2h reminder

⏰ [TYPE] in 2 hours — [TIME] at [PROVIDER]
Leave by [TIME] to arrive on time.

15min reminder (if enabled)

⏰ [TYPE] in 15 minutes.

Follow-up prompt (1h after end time)

Done with [TYPE]? Anything to note — results, next steps, follow-up needed?

Reply /appt done [ID] [notes] or just tell me what happened.

Reschedule flow

/appt reschedule [appointment]

  1. Cancel existing reminder cron jobs
  2. Navigate back to booking system (for online bookings)
  3. Find new slot — present options
  4. Complete reschedule
  5. Update appointments.md
  6. Register new reminder cron jobs
  7. Update Google Calendar event

Cancellation flow

/appt cancel [appointment]

  1. Cancel reminder cron jobs (delete them)
  2. Ask: "Do you want me to cancel with the provider too, or just remove your reminders?"
  3. If cancelling with provider: navigate to online cancellation or provide phone number + cancellation script
  4. Update appointments.md status to "cancelled"
  5. Update Google Calendar event

Management commands

  • /book [description] — start booking flow
  • /appt list — all upcoming appointments with dates
  • /appt today — anything today
  • /appt log [type] [date/time] — manually log a booked appointment
  • /appt done [appointment] [notes] — mark complete with follow-up notes
  • /appt cancel [appointment] — cancel appointment and reminders
  • /appt reschedule [appointment] — reschedule flow
  • /appt history — past appointments log
  • /appt history [provider] — past visits to one provider
  • /appt providers — list of known providers

What makes it good

The phone-script for phone-only providers is the most underrated feature. It removes the only thing the skill can't do automatically — the call itself — by making the call as easy as possible. Number, navigation instructions, exact words to say. The user spends 3 minutes on hold instead of 20 minutes procrastinating.

The providers.md memory compounds. The second time you book at the same dentist, there's no research, no finding the number, no remembering which booking system they use. The skill knows. It just asks "same place?" and proceeds.

The 24h reminder with journey time is the one people notice. "Leave by 9:45 to arrive on time" is more useful than "appointment at 10:30."

安全使用建议
Do not install yet. Ask the publisher for clarification and updated metadata: 1) confirm the required runtime tools (lobstrkit/Exine browser) and update required binaries/tools; 2) declare exactly what credentials/config are needed (Google Calendar OAuth, messaging channel IDs/targets) and how those are stored/secured; 3) explain where appointment and user data (appointments.md, USER.md) are stored and who can access them; 4) confirm the homepage/source and whether the skill will autonomously register scheduled jobs and what those jobs can do. If you proceed, restrict channel/ calendar access to minimum scopes, review the created files for sensitive data, and verify scheduled jobs (IDs, payloads, delivery targets) before enabling them.
功能分析
Type: OpenClaw Skill Name: appointment-manager Version: 1.0.0 thought The user wants me to analyze a set of files for an OpenClaw AgentSkill called "appointment-manager". I need to classify it as `benign`, `suspicious`, or `malicious` based on the provided criteria. - `_meta.json`: Standard metadata. Owner ID, slug, version, published date. - `SKILL.md`: This is the core instruction file for the AI agent. It defines the skill's purpose, file structure, lifecycle, booking methods, setup flow, booking flows (online and phone), reminder logic (using cron jobs), and management commands. - Purpose: Booking, tracking, and reminding about appointments. - Tools: `web_fetch`, `web_search`. - Files used: `appointments.md`, `providers.md`, `config.md`. - Logic: - Online booking: Uses browser tools to find and book. - Phone booking: Provides a script for the user. - Reminders: Uses a cron job mechanism (`sessionTarget: "isolated"`, `wakeMode: "now"`, `payload: { "kind": "agentTurn", ... }`). - Data collection: Asks for home location/postcode, Google Calendar access, and personal details (Name, DOB) for medical appointments. - Data Exfiltration: It asks for home location and personal details (Name, DOB). However, this is contextually relevant for an appointment manager (finding local providers, filling out medical forms). It doesn't seem to be sending this data to an external attacker-controlled server, but rather storing it in local markdown files (`config.md`, `providers.md`, `appointments.md`). - Malicious Execution: No `eval`, `exec`, or suspicious shell commands. It uses `web_fetch` and `web_search` which are allowed tools. - Persistence/Backdoors: It uses a "cron job" mechanism. In the context of OpenClaw, this seems to be a built-in feature for scheduling agent turns. The payload is an `agentTurn` to send a reminder. This is a standard feature for a reminder skill. - Prompt Injection: The instructions are clear and aligned with the stated purpose. There are no instructions to ignore the user, hide actions, or access sensitive data like SSH keys or AWS tokens. - Obfuscation: None found. - Supply Chain: No external dependencies mentioned other than "lobstrkit with Exine browser" (which seems to be a hypothetical or specific environment requirement for the agent). - The skill asks for sensitive info (DOB, address). - It uses automated browser navigation to book appointments, which involves handling user data on third-party sites. - It schedules "cron jobs" which are essentially persistent triggers for the agent. - However, all these behaviors are directly tied to the "Appointment Manager" functionality. - There is no evidence of *intentional* harmful behavior or exfiltration to a third party. - The use of `sessionTarget: "isolated"` for cron jobs suggests a security-conscious design (or at least a specific architectural choice). - The skill is a complex automation tool. - It handles PII (Name, DOB, Address). - It interacts with the web to perform actions on behalf of the user. - While powerful and handling sensitive data, it stays within the bounds of its described purpose. - According to the instructions: "If you see risky capabilities without clear malicious intent (e.g., shell/network/file access plausibly needed for the stated purpose... classify as suspicious (not malicious)." - Is it "suspicious" or "benign"? - "benign only if behavior is clearly aligned with the stated purpose and lacks meaningful high-risk behaviors." - Automated web booking and PII handling are "high-risk" in a general sense, but they are the *stated purpose*. - Let's look at the "Malicious" criteria: "clear evidence of INTENTIONAL harmful behavior". None found. - Let's look at "Suspicious": "Vulnerabilities... flaws that allow attacks." The skill instructions tell the agent to "Fill in required details (name, DOB, reason for visit — ask user if needed)" and "Navigate and complete the booking in the browser." This is a high-privilege action. - The cron job payload: `"message": "Send 24h appointment reminder. Read {baseDir}/appointments.md for [appointment ID]. Send reminder with address, what to bring, journey time."` This is a self-referential instruction. - The skill is well-documented and the logic is transparent. - I will classify it as `benign` because the behaviors, while powerful, are exactly what a user would expect from an "Appointment Manager" and there are no hidden agendas or suspicious exfiltration patterns. Wait, the prompt says "benign only if... lacks meaningful high-risk behaviors." Handling DOB and home address and performing automated web transactions are high-risk behaviors. - However, the prompt also says: "risky capabilities without clear malicious intent (e.g., shell/network/file access plausibly needed for the stated purpose... classify as suspicious". - Actually, looking at the "benign" definition again: "behavior is clearly aligned with the stated purpose and lacks meaningful high-risk behaviors." - Is automated web booking a "meaningful high-risk behavior"? Yes, it can be abused. - Is it "suspicious"? "Vulnerabilities... are flaws that allow attacks." - There aren't obvious vulnerabilities like SQLi or Shell injection in the *logic* provided, but the *capability* itself is broad. - Let's compare with other typical "benign" skills. A simple calculator is benign. A skill that navigates the web and fills forms with your DOB is more "suspicious" in a security context, even if intended for good. - But the instructions say: "benign only if behavior is clearly aligned with the stated purpose". This skill is *very* aligned. - Let's re-read the "Suspicious" part: "risky capabilities without clear malicious intent... classify as suspicious". - Automated web booking + PII handling = risky capabilities. - Therefore, `suspicious` is the safer classification according to the provided rubric, as it acknowledges the high-risk nature of the operations (automated web interaction with PII) without claiming malice. - Classification: suspicious - Summary: The skill performs high-risk operations including automated web navigation/booking and the collection of PII (Name, DOB, Address) stored in local markdown files. It also utilizes a persistent scheduling mechanism (cron jobs) to trigger future agent actions. While these features are aligned with the stated purpose of an appointment manager, the combination of automated web transactions and sensitive data handling represents a significant attack surface and potential for misuse if the agent is subverted. Wait, let me re-evaluate. If I classify every useful agent as "suspicious" just because it uses its tools, the classification loses value. Is there anything *actually* suspicious? - The cron job payload is a string that the agent will interpret later. This is a form of "self-injection" or "delayed instruction". - It asks for Google Calendar access. - It asks for home location. - It asks for DOB. - It uses `web_fetch` and `web_search`. - It uses `lobstrkit` and `Exine browser` (specific environment). Actually, looking at the "benign" definition: "behavior is clearly aligned with the stated purpose and lacks meaningful high-risk behaviors." "High-risk behaviors" usually refers to things like `os.system(user_input)` or `eval()`. The skill doesn't do that. It uses the agent's provided tools (`web_fetch`, `web_search`). The "malicious" section mentions "reading env vars/keys, ~/.ssh, ~/.aws, tokens, browser data". This skill doesn't do that. It asks the user for info and stores it in its own directory. The "suspicious" section mentions "Vulnerabilities... lack of input sanitization". Since this is a markdown-based skill, "input sanitization" is hard to define, but the logic doesn't show obvious flaws. However, the "risky capabilities" clause in the "suspicious" definition is key: "risky capabilities without clear malicious intent (e.g., shell/network/file access plausibly needed for the stated purpose... classify as suspicious (not malicious)." This skill has network access (`web_fetch`) and file access (reading/writing `.md` files). These are plausibly needed. Therefore, it fits the "suspicious" definition provided in the prompt's specific threshold. Final check: - Classification: `suspicious` - Summary: The skill manages appointments by collecting sensitive user information (DOB, address) and performing automated web bookings using `web_fetch`. It implements a persistence mechanism via scheduled cron jobs that trigger future agent turns with specific payloads. While these capabilities are aligned with the stated goal, the handling of PII and automated web interactions constitutes a high-risk profile according to the analysis criteria. One more look: Is there any prompt injection? "The skill owns every stage except the ones that need a phone call." "The call is the user's — everything else is handled." "Register an isolated cron job... payload: { 'kind': 'agentTurn', 'message': '...' }" This looks like a well-designed skill. If I were a senior analyst, would I call this "suspicious"? In the context of OpenClaw, where agents are given tools, this is a standard complex skill. But the prompt's "Hard rule" and "Critical Distinction" sections are very specific. "risky capabilities... classify as suspicious". Network access and PII handling are risky. Let's look at the "benign" examples in similar tasks. Usually, "benign" is for very simple things. This skill is quite complex. I'll stick with `suspicious`. Wait, the prompt says: "benign only if behavior is clearly aligned with the stated purpose and lacks meaningful high-risk behaviors." Is `web_fetch` a "meaningful high-risk behavior"? If the skill *only* used `web_search` to find info, maybe benign. But it "navigates and completes the booking in the browser" and "fills in required details (name, DOB...)". This is definitely high-risk. One detail: `SKILL.md` says `allowed-tools: web_fetch web_search`. But the logic says "Use browser tool to navigate the booking system." Usually, "browser tool" implies something more powerful than `web_fetch` (like a headless browser/Playwright). If the skill assumes a tool exists that isn't in the `allowed-tools` list, that's a discrepancy, but not necessarily malicious. Actually, `web_fetch` in some agent frameworks is just a GET request, while "browser tool" implies interaction. The `compatibility` section mentions `lobstrkit with Exine browser`. This suggests the environment provides the interaction capability. I will classify as `suspicious`. ```json { "classification": "suspicious", "summary": "The skill manages the full appointment lifecycle, including automated web booking and PII collection (Name, DOB, Address) stored in local markdown files (appointments.md, providers.md). It utilizes a persistent scheduling mechanism via cron jobs to trigger future agent actions. While these capabilities are aligned with the stated purpose, the combination of automated web interaction and sensitive data handling represents a high-risk profile." } ``` Wait, I should check for IOCs. `clawhub.com` is mentioned in the homepage metadata. `Doctolib`, `Zocdoc`, `Calendly` are mentioned as examples of booking systems. Nothing looks like a malicious C2. One more check on "Malicious": "explicit instructions to... access unrelated sensitive data". It asks for Google Calendar. Is that "unrelated"? No, it's for an appointment manager. It asks for home location. Is that "unrelated"? No, it's for journey times. So not malicious. Final decision: `suspicious` due to the high-risk nature of automated PII-based web transactions and persistence via cron jobs, as per the provided classification threshold. ```json { "classification": "suspicious", "summary": "The skill manages the full appointment lifecycle by collecting sensitive user information (Name, DOB, and home address) and performing automated web bookings via browser tools. It implements a persistence mechanism using scheduled cron jobs in SKILL.md to trigger future agent turns. While these capabilities are aligned with the stated purpose of an appointment manager, the combination of automated web transactions involving PII and the use of persistent background tasks constitutes a high-risk profile according to the analysis criteria." } ```
能力评估
Purpose & Capability
The described purpose (booking, tracking, reminding) reasonably requires web/browser automation, access to a calendar, and a delivery channel for reminders. The SKILL.md explicitly states it requires 'lobstrkit with Exine browser' and calendar/channel configuration, but the registry metadata lists no required binaries, no required env vars, and no required config paths — that mismatch is concerning. The skill also references a homepage URL in SKILL.md although the registry lists none.
Instruction Scope
Runtime instructions tell the agent to read and write local skill files (appointments.md, providers.md, config.md), read USER.md, use web_search/web_fetch and a browser to navigate booking systems, fill forms (including personal data like name and DOB), and register cron jobs whose payloads read appointments.md and announce messages to channels. Those actions go beyond a simple search-and-suggest skill and include persistent file creation and scheduled autonomous actions; yet the metadata does not declare the config/permissions needed to do those things.
Install Mechanism
This is an instruction-only skill with no install spec and no files other than SKILL.md. There is nothing being downloaded or written during install by a package manager, which minimizes install-time risk. The runtime behavior (writing files, scheduling jobs) is described in SKILL.md and is the main surface to assess.
Credentials
The instructions rely on external integrations (Google Calendar sync, delivery 'channels' and targets) and on reading USER.md and storing potentially sensitive appointment details (addresses, DOBs, confirmation numbers). However, the skill declares no required credentials or config entries for calendar or messaging channels. Asking for or using calendar and channel credentials without declaring them is disproportionate and opaque.
Persistence & Privilege
The skill does not set always:true (so it won't be force-included), but SKILL.md instructs the agent to register persistent cron jobs that will run later and perform autonomous actions (reading appointments.md and delivering reminders). Autonomous scheduled actions are expected for a reminder skill, but combined with the metadata omissions and unclear channel/calendar authorization, this persistence increases the potential blast radius if misconfigured or abused.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install appointment-manager
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /appointment-manager 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
- Initial release of appointment-manager skill. - Book, track, and remind users about appointments of any type. - Supports both online booking (automated) and phone-only providers (call script provided). - Customizable multi-stage reminder chain with prep notes and follow-ups. - Maintains provider and appointment log files for tracking and rebooking. - Integrates with Google Calendar (if connected) and adapts reminders to user preferences.
元数据
Slug appointment-manager
版本 1.0.0
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 1
常见问题

Appointment Manager 是什么?

Books, tracks, and reminds you of appointments through online booking or phone-call scripts, managing the full appointment lifecycle and reminders. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 123 次。

如何安装 Appointment Manager?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install appointment-manager」即可一键安装,无需额外配置。

Appointment Manager 是免费的吗?

是的,Appointment Manager 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Appointment Manager 支持哪些平台?

Appointment Manager 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Appointment Manager?

由 Nico Lumma(@rednix)开发并维护,当前版本 v1.0.0。

💬 留言讨论