skill-h-meeting-sync

WarnAudited by ClawScan on May 10, 2026.

Overview

This appears to be a real meeting-sync skill, but it can repeatedly change and delete Gitea meeting files across bot-accessible repositories using an undeclared Gitea token.

Install only if you intend this skill to manage the specified Gitea meeting repositories automatically. Before enabling cron, switch the Gitea URL to HTTPS, use a least-privilege token, add a repository allowlist and dry-run/approval workflow, and review how meeting emails and links are shared.

Findings (7)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

The skill can act as the configured Gitea bot account, and the token could be exposed over the network if a non-HTTPS base URL is used.

Why it was flagged

The skill requires a Gitea bot token despite registry metadata declaring no required env vars or primary credential. The example also uses plain HTTP, which would expose the token if used as-is.

Skill content
GITEA_BASE_URL=http://43.156.243.152:3000
GITEA_TOKEN_BOT=your_aifusionbot_access_token_here
Recommendation

Declare the credential requirement, use HTTPS only, create a least-privilege token, restrict it to the intended repositories, and rotate any token that may have been used over HTTP.

What this means

A bad comparison, bad metadata, or over-scoped token could cause automated file changes or deletions across multiple repositories.

Why it was flagged

The archive job operates across all discovered managed repos and deletes original files after copying them to an archive path.

Skill content
repos   = get_managed_repos(GITEA_TOKEN, GITEA_BASE_URL)
...
for full_name in repos:
    results = archive_repo(full_name)
...
delete_file_in_repo(
Recommendation

Add an explicit repository allowlist, dry-run output, backup/rollback behavior, and require approval or PR-based changes for destructive archive operations.

What this means

A failed reschedule can leave the old meeting no longer active while the replacement meeting was not created, which can mislead later cron runs and notifications.

Why it was flagged

The reschedule flow marks the old meeting as rescheduled before the new meeting record is guaranteed to exist, and the error message confirms a partial-failure state is possible.

Skill content
old_meta["status"] = "rescheduled"
...
_fail(f"新 meta.yaml 创建失败(旧目录已标记 rescheduled):{e}")
Recommendation

Make the operation transactional: create and verify the new record first, roll back old status on failure, or stage changes in a branch/pull request.

What this means

If meeting titles, reasons, or links contain misleading HTML, recipients may receive bot-branded emails with altered content or deceptive links.

Why it was flagged

Meeting fields are inserted directly into trusted HTML notification emails without visible escaping or URL validation.

Skill content
<td style="padding:10px 14px;border:1px solid #e0e0e0;">{topic}</td>
...
<a href="{new_join_url}"
Recommendation

HTML-escape all text fields, validate meeting URLs against expected domains, and consider plain-text email fallbacks.

What this means

Installing could change the local Python environment and depend on package versions available at install time.

Why it was flagged

The setup step installs Python dependencies into the environment and may affect the system Python installation. This is documented and user-directed, but not represented by an install spec.

Skill content
pip install -r "$SKILL_DIR/requirements.txt" --break-system-packages -q
Recommendation

Use a virtual environment, pin dependency versions with hashes, and declare the install requirements in metadata.

What this means

The local scripts run with access to the configured Gitea token and environment variables.

Why it was flagged

The Node entrypoint executes local Python scripts. Command selection is constrained by a fixed command map, so this is expected for the skill, but it still runs code with the user's environment.

Skill content
const result = spawnSync(
  'python3',
  [path.join(SCRIPT_DIR, script), ...args],
Recommendation

Install only from a trusted source and review the local Python scripts before enabling cron execution.

What this means

Meeting IDs, join URLs, attendee emails, and schedule details may move between multiple skills and be sent by email.

Why it was flagged

The workflow intentionally passes meeting data between this skill, a Tencent meeting skill, and an email-sending skill.

Skill content
调用 tencent-meeting-skill 获取腾讯会议侧未来 7 天会议列表
...
调用 imap-smtp-email 发送通知邮件
Recommendation

Confirm the other skills are trusted, limit what meeting data is passed, and ensure email recipients and logs are appropriate.