← 返回 Skills 市场
netanel-abergel

Heleni Meetings

作者 Netanel Abergel · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
89
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install heleni-meetings
功能描述
All-in-one meetings skill. Section 1: Schedule a meeting by coordinating with another PA, finding free slots, and sending a calendar invite. Section 2: Paste...
使用说明 (SKILL.md)

Meetings Skill

Minimum Model

Any model. For timezone reasoning or complex scheduling constraints, use a medium model.

Trigger Phrases

  • "schedule a meeting" / "set up a meeting with X" / "book a call with Y"
  • "summarize meeting notes" / "take notes" / "action items from meeting" / "extract tasks from this transcript"

Section 1 — Schedule a Meeting

End-to-end meeting coordination: find availability, contact the other PA, book the calendar invite.

Step 1 — Understand the Request

Before acting, confirm:

  • Who to meet with
  • Duration (default: 30 min if not specified)
  • Timeframe ("this week", "next week", "mornings only", etc.)
  • Meeting type (video, in-person, phone)

If the request is vague (e.g. "set up a call with Jane") → ask one clarifying question before proceeding.


Step 2 — Find the Other PA

Check data/pa-directory.json:

python3 -c "
import json, sys
try:
    with open('data/pa-directory.json') as f:
        d = json.load(f)
except FileNotFoundError:
    print('ERROR: data/pa-directory.json not found')
    sys.exit(1)

name = 'PERSON_NAME'  # replace with actual name
matches = [p for p in d.get('pas', []) if name.lower() in p['owner'].lower()]

if not matches:
    print('No PA found for:', name)
else:
    for p in matches:
        print('PA:', p['name'], '| Phone:', p['phone'])
"

If no PA found → skip to Step 4 and contact the person directly by email.


Step 3 — Check Owner's Availability

#!/bin/bash
TODAY=$(date -u +%Y-%m-%dT%H:%M:%SZ)
NEXT_WEEK=$(date -u -d '+7 days' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null \
  || date -u -v+7d +%Y-%m-%dT%H:%M:%SZ)

[email protected] gog calendar events primary \
  --from "$TODAY" \
  --to "$NEXT_WEEK" \
  2>/dev/null \
  | python3 -c "
import sys, json
try:
    events = json.load(sys.stdin)
except:
    events = []

print('Upcoming events:')
for e in sorted(events, key=lambda x: x.get('start', {}).get('dateTime', '')):
    start = e.get('start', {}).get('dateTime', '')[:16].replace('T', ' ')
    print(' ', start, '—', e.get('summary', 'Untitled'))
"

Find free slots automatically:

#!/usr/bin/env python3
import subprocess, json, sys
from datetime import datetime, timedelta, timezone

OWNER_EMAIL = "[email protected]"  # replace
DURATION_MIN = 30
DAYS_AHEAD = 7
WORK_START_HOUR = 9
WORK_END_HOUR = 18

try:
    result = subprocess.run(
        ['gog', 'calendar', 'events', 'primary',
         '--from', datetime.now(timezone.utc).isoformat(),
         '--to', (datetime.now(timezone.utc) + timedelta(days=DAYS_AHEAD)).isoformat()],
        env={'GOG_ACCOUNT': OWNER_EMAIL, 'PATH': '/usr/bin:/usr/local/bin:/bin'},
        capture_output=True, text=True, timeout=30
    )
    events = json.loads(result.stdout) if result.stdout.strip() else []
except Exception as e:
    print("Could not fetch calendar:", e)
    sys.exit(1)

busy = []
for e in events:
    start = e.get('start', {}).get('dateTime')
    end = e.get('end', {}).get('dateTime')
    if start and end:
        busy.append((start, end))

suggestions = []
for day_offset in range(1, DAYS_AHEAD + 1):
    day = datetime.now(timezone.utc) + timedelta(days=day_offset)
    if day.weekday() >= 5:
        continue
    for hour in range(WORK_START_HOUR, WORK_END_HOUR):
        slot_start = day.replace(hour=hour, minute=0, second=0, microsecond=0)
        slot_end = slot_start + timedelta(minutes=DURATION_MIN)
        if slot_end.hour > WORK_END_HOUR:
            continue
        conflict = any(
            slot_start.isoformat() \x3C b[1] and slot_end.isoformat() > b[0]
            for b in busy
        )
        if not conflict:
            suggestions.append(slot_start)
        if len(suggestions) >= 5:
            break
    if len(suggestions) >= 5:
        break

if not suggestions:
    print("No slots found in the next 7 days during working hours.")
else:
    print(f"Available {DURATION_MIN}-min slots:")
    for s in suggestions:
        print(" •", s.strftime('%A %b %d'), "at", s.strftime('%H:%M'), "UTC")

Step 4 — Contact the Other PA

Propose 3–5 specific slots:

"Hey [PA Name], [your owner] would like to meet [their owner] for [duration].
Slots that work:
• [Day Date] at [HH:MM TZ]
• [Day Date] at [HH:MM TZ]
• [Day Date] at [HH:MM TZ]
Do any work? Or what times work best?"

If no response within 2 hours on a business day → follow up once. If still no response after 4 hours → tell owner and suggest direct contact.


Step 5 — Book the Meeting

Once both sides agree:

[email protected] gog calendar create primary \
  --summary "Meeting: [Owner A] + [Owner B]" \
  --start "YYYY-MM-DDTHH:MM:SS+00:00" \
  --end "YYYY-MM-DDTHH:MM:SS+00:00" \
  --attendees "[email protected]" \
  --description "Scheduled via PA coordination"

For video calls, add:

  --description "Video call: https://meet.google.com/xxx-xxxx-xxx"

Step 6 — Confirm Both Sides

To your owner:
"✅ Done — [Date] at [Time] with [Person]. Calendar invite sent."

To the other PA:
"✅ Invite sent to [Their Owner] for [Date] [Time]. Let me know if anything changes."

Quick Templates

Situation Template
Initial request "Hey [PA], [Owner A] wants to connect with [Owner B] for ~30 min [this/next] week. What works?"
Propose slots "Here are 3 options: [A], [B], [C]. Any work?"
Confirm "✅ Booked for [time]. Invite sent to [email]."
Reschedule "[Owner] can't make [time]. Can we try [alternative]?"
Cancel "[Owner] needs to cancel [time]. Apologies."

Rescheduling

# Find the event
[email protected] gog calendar events primary \
  --from "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
  --to "$(date -u -d '+14 days' +%Y-%m-%dT%H:%M:%SZ)"

# Delete old event (use ID from above)
[email protected] gog calendar delete primary EVENT_ID

# Re-coordinate and create new event

Section 2 — Meeting Notes & Action Items

Paste any meeting notes, transcript, or text → get a clean summary with action items, owners, and deadlines.

Response Format (MANDATORY — One Message Only)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 [MEETING TITLE] — [YYYY-MM-DD]
Duration: [X min] | Attendees: [Names]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

SUMMARY
[2-3 sentence overview]

⚡ ACTION ITEMS ([X] of [Total])
1. [ ] @Owner: Task — Deadline
2. [ ] @Owner: Task — Deadline
3. [ ] @Owner: Task — Deadline

✅ KEY DECISIONS
• Decision 1
• Decision 2

📎 Saved: meeting-notes/YYYY-MM-DD_topic-name.md

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Add to your to-do list?
• "all" — Add all [X] items
• "1,2,4" — Add specific items
• "none" — Skip

Rules:

  • ONE message only — never split into multiple
  • Filename format: YYYY-MM-DD_topic.md (date first, always)
  • Always show numbered action items
  • Always include the to-do prompt if action items exist

What to Extract

Section Description
Summary 2-3 sentence overview
Action Items - [ ] @Owner: Task — Deadline
Decisions What was agreed upon
Open Questions Unresolved items
Next Steps What happens after this meeting

File Storage

Save all meeting notes to meeting-notes/YYYY-MM-DD_topic.md:

---
date: YYYY-MM-DD
title: Meeting Title
attendees: [Name1, Name2]
source: pasted notes | transcript | email
---

# Meeting Title

## Summary
[2-3 sentences]

## Action Items
- [ ] **@Owner**: Task description — *Deadline*

## Decisions
- Decision 1

## Open Questions
- Question 1

\x3Cdetails>
\x3Csummary>📝 Raw Notes\x3C/summary>
[Original input preserved]
\x3C/details>

To-Do List Integration

After extracting action items:

  • "all" → Add all items to todo.md
  • "1,3,5" → Add specific items
  • "none" → Skip

File: todo.md in workspace root. Organized by: Overdue → Due Today → This Week → No Deadline → Completed.

Referencing Previous Meetings

Ask things like:

  • "What did we decide about the budget?" → search meeting-notes/ Decisions sections
  • "What action items does @Sarah have?" → search for @Sarah across all files
  • "Show me last week's meetings" → list files from date range

Edge Cases

Situation Action
Very short notes Still extract what's there
No clear topic Ask: "What should I call this meeting?"
Multiple meetings in one paste Ask if they should be separated into files
Not meeting notes Still extract actionable items; adjust filename

Cost Tips

  • Scheduling: Cheap — any small model works for slot-finding and coordination.
  • Notes extraction: Medium model recommended for complex transcripts with many action items.
  • Batch: Propose 3–5 slots at once instead of one at a time.
  • Don't re-fetch calendar repeatedly — fetch once, extract 5 slots, propose them all.
安全使用建议
This skill's instructions expect a local PA directory file and the 'gog' calendar CLI plus access to an owner's calendar, but the package metadata doesn't declare those requirements or how authentication is handled. Before installing or enabling it: (1) confirm whether your agent environment actually has the 'gog' tool and how it authenticates (service account, OAuth cached creds, etc.); (2) inspect data/pa-directory.json for PII and ensure you are comfortable the agent may read it; (3) ask the skill author to declare required binaries/env vars and to provide the missing Section 2 (transcript summarization) if you need it; (4) if you don't want the agent to autonomously create invites or follow up, restrict its permissions or disable autonomous invocation until you understand how it will send messages; and (5) test in a safe account first (no real calendar invites) to confirm behavior. These mismatches explain why the skill is suspicious rather than clearly benign.
功能分析
Type: OpenClaw Skill Name: heleni-meetings Version: 1.0.0 The skill bundle provides legitimate functionality for scheduling meetings and summarizing notes. It uses a calendar CLI tool (referred to as 'gog') and standard Python/Bash scripts to manage availability and file storage, with no evidence of data exfiltration, obfuscation, or malicious intent in SKILL.md or the associated scripts.
能力评估
Purpose & Capability
The skill claims to coordinate and book meetings and to summarize meeting notes, which is reasonable, but its runtime instructions call the 'gog' CLI and rely on a local data/pa-directory.json and an OWNER email address. The registry metadata declares no required binaries, no env vars, and no install — yet the instructions implicitly require the 'gog' command and authenticated access to an owner's calendar. That mismatch (no declared requirements but clear runtime requirements) is incoherent.
Instruction Scope
SKILL.md instructs the agent to read data/pa-directory.json (which may contain PII like phone numbers), list/fetch calendar events and create events via the 'gog' CLI, and perform follow-ups within hours. It also contains hardcoded placeholder OWNER_EMAIL values ([email protected]) without explaining where credentials or auth come from. The instructions do not specify how outbound communications (email/IM) are sent; they only give templates. Section 2 referenced in the skill description (summaries/actions from transcripts) is not present in the provided SKILL.md content, which is another inconsistency.
Install Mechanism
There is no install spec and no code files; that lowers risk because nothing in the package will be written to disk by an installer. However, the instructions still expect external tools (gog) to exist in the runtime environment.
Credentials
The skill declares no required environment variables or primary credential, but the instructions repeatedly use GOG_ACCOUNT and owner email addresses and run commands that require authenticated calendar access. The skill also reads a local pa-directory.json without declaring it. These undeclared secrets/credentials and local file access are disproportionate to the registry metadata and need explicit declaration and justification.
Persistence & Privilege
The skill does not request always:true or other elevated platform privileges and does not claim to modify other skills. It does instruct autonomous follow-ups (timed follow-up messages within business hours), but the skill's flags are default (user-invocable, model invocation allowed). That is normal, though you should be conscious that the agent could autonomously send calendar invites if it has credentials and the platform allows it.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install heleni-meetings
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /heleni-meetings 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
Initial publish
元数据
Slug heleni-meetings
版本 1.0.0
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 1
常见问题

Heleni Meetings 是什么?

All-in-one meetings skill. Section 1: Schedule a meeting by coordinating with another PA, finding free slots, and sending a calendar invite. Section 2: Paste... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 89 次。

如何安装 Heleni Meetings?

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

Heleni Meetings 是免费的吗?

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

Heleni Meetings 支持哪些平台?

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

谁开发了 Heleni Meetings?

由 Netanel Abergel(@netanel-abergel)开发并维护,当前版本 v1.0.0。

💬 留言讨论