Local Auto Emoji
PassAudited by VirusTotal on May 11, 2026.
Overview
Type: OpenClaw Skill Name: local-auto-emoji Version: 1.0.0 The skill bundle implements an automated emoji system that generates custom stickers from user avatars using the Qwen-Image-2.0 model. The code logic in `send_emoji.py` and `generate_emojis.py` is consistent with the functionality described in `SKILL.md`, including emotion analysis and image processing. While the bundle contains some artifacts from a local development environment (absolute file paths in `assets/public/index.json`) and includes a hardcoded restriction to specific user channels (`_is_kaige_channel`), there is no evidence of malicious intent, data exfiltration, or unauthorized command execution. The reliance on an external directory (`../../../../projects/getemoji`) for the image generation library appears to be a local architectural dependency rather than a malicious exploit.
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.
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.
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.
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
Bundle or pin the generator dependency, declare DashScope/GetEmoji/PIL requirements and config paths, and review that external helper before enabling generation.
The skill may use whatever provider account/configuration the external GetEmoji project points to.
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.
config_path = GETEMOJI_ROOT / "config" / "image_model.json" self.generator = QwenImageGenerator(Path(config_path))
Declare the provider credential/config requirement and use a narrowly scoped API key or account for image generation.
Private conversation fragments may remain on disk and be visible through backups, file access, or later skill state inspection.
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.
"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)Disclose the log clearly, add opt-out/delete controls, and store only the minimum needed emotion state rather than message text.
A face/avatar image may remain stored locally with generated emoji versions.
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.
avatar_dest = version_dir / "avatar.jpg" shutil.copy2(avatar_path, avatar_dest) ... "avatar_path": str(avatar_dest)
Use a non-sensitive image if possible, and provide a documented cleanup command for stored avatars and generated emojis.
It may add emoji/media messages to chats without asking each time.
The skill is explicitly designed to send emojis automatically during normal conversation.
日常对话:自动根据情绪发送表情(50% 概率)
Enable it only in chats where automatic emoji posting is acceptable, and disable the wrapper/auto-send behavior if manual control is preferred.
