Local Auto Emoji

AdvisoryAudited by Static analysis on Apr 30, 2026.

Overview

No suspicious patterns detected.

Findings (0)

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

Emoji generation may run code that is not part of the reviewed skill bundle and may behave differently depending on what local GetEmoji project is present.

Why it was flagged

The skill imports generator code from a sibling projects/getemoji directory that is not included in the file manifest, creating an unreviewed dependency/provenance gap.

Skill content
GETEMOJI_ROOT = Path(__file__).parent.parent.parent.parent / "projects" / "getemoji"
sys.path.insert(0, str(GETEMOJI_ROOT))
from lib.image_models.qwen_image_generator import QwenImageGenerator
Recommendation

Bundle or pin the generator dependency, declare DashScope/GetEmoji/PIL requirements and config paths, and review that external helper before enabling generation.

What this means

The skill may use whatever provider account/configuration the external GetEmoji project points to.

Why it was flagged

The generator uses an external image-model configuration for the Qwen/DashScope flow, while the supplied registry metadata does not declare a credential or config path.

Skill content
config_path = GETEMOJI_ROOT / "config" / "image_model.json"
self.generator = QwenImageGenerator(Path(config_path))
Recommendation

Declare the provider credential/config requirement and use a narrowly scoped API key or account for image generation.

What this means

Private conversation fragments may remain on disk and be visible through backups, file access, or later skill state inspection.

Why it was flagged

Emotion analysis persists snippets of message context to config/emotion_log.json and keeps up to 100 entries, but the SKILL.md does not clearly disclose chat-snippet retention.

Skill content
"context": context[:200]  # 截断
...
if len(self.history) > 100:
    self.history = self.history[-100:]

with open(self.log_file, 'w', encoding='utf-8') as f:
    json.dump(self.history, f, indent=2, ensure_ascii=False)
Recommendation

Disclose the log clearly, add opt-out/delete controls, and store only the minimum needed emotion state rather than message text.

What this means

A face/avatar image may remain stored locally with generated emoji versions.

Why it was flagged

The skill copies the user's avatar into its assets area and records the path in an index; this is purpose-aligned for personalized emojis but involves sensitive image retention.

Skill content
avatar_dest = version_dir / "avatar.jpg"
shutil.copy2(avatar_path, avatar_dest)
...
"avatar_path": str(avatar_dest)
Recommendation

Use a non-sensitive image if possible, and provide a documented cleanup command for stored avatars and generated emojis.

What this means

It may add emoji/media messages to chats without asking each time.

Why it was flagged

The skill is explicitly designed to send emojis automatically during normal conversation.

Skill content
日常对话:自动根据情绪发送表情(50% 概率)
Recommendation

Enable it only in chats where automatic emoji posting is acceptable, and disable the wrapper/auto-send behavior if manual control is preferred.