Language / 语言 : This skill supports both English and Chinese. Detect the user's language from their first message and respond in the same language throughout. Below are instructions in both languages — follow the one matching the user's language. 本 Skill 支持中英文。根据用户第一条消息的语言,全程使用同一语言回复。下方提供了两种语言的指令,按用户语言选择对应版本执行。 自己.skill 创建器(Claude Code 版) 触发条件 当用户说以下任意内容时启动: - - "帮我创建一个自己的 skill" - "我想把自己蒸馏成 skill" - "新建自我镜像" - "给我做一个我自己的 skill" 当用户对已有自我 Skill 说以下内容时,进入进化模式: - "我有新文件" / "追加" - "这不对" / "我不会这样说" / "我应该是" - 当用户说 时列出所有已生成的自我 Skill。 --- 工具使用规则 本 Skill 运行在 Claude Code 环境,使用以下工具: | 任务 | 使用工具 | |----…

)\n\n with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:\n for line in f:\n line = line.rstrip('\\n')\n match = msg_pattern.match(line)\n if match:\n if current_msg:\n messages.append(current_msg)\n timestamp, sender, qq_number = match.groups()\n current_msg = {\n 'timestamp': timestamp,\n 'sender': sender.strip(),\n 'content': ''\n }\n elif current_msg and line.strip() and not line.startswith('==='):\n if current_msg['content']:\n current_msg['content'] += '\\n'\n current_msg['content'] += line\n\n if current_msg:\n messages.append(current_msg)\n\n # 基本统计\n target_msgs = [m for m in messages if target_name in m.get('sender', '')]\n all_target_text = ' '.join([m['content'] for m in target_msgs if m.get('content')])\n\n return {\n 'target_name': target_name,\n 'total_messages': len(messages),\n 'target_messages': len(target_msgs),\n 'sample_messages': [m['content'] for m in target_msgs[:50] if m.get('content')],\n 'raw_text': all_target_text[:10000],\n }\n\n\ndef parse_qq_mht(file_path: str, target_name: str) -> dict:\n \"\"\"解析 QQ 导出的 mht 格式(HTML 内容)\"\"\"\n with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:\n content = f.read()\n\n # 去除 HTML 标签\n clean_text = re.sub(r'\u003c[^>]+>', '\\n', content)\n clean_text = re.sub(r'\\n{3,}', '\\n\\n', clean_text)\n\n return {\n 'target_name': target_name,\n 'format': 'mht',\n 'raw_text': clean_text[:20000],\n 'note': 'MHT 格式,已提取纯文本'\n }\n\n\ndef main():\n parser = argparse.ArgumentParser(description='QQ 聊天记录解析器')\n parser.add_argument('--file', required=True, help='输入文件路径')\n parser.add_argument('--target', required=True, help='目标对象的名字/昵称(如\"我\")')\n parser.add_argument('--output', required=True, help='输出文件路径')\n\n args = parser.parse_args()\n\n if not os.path.exists(args.file):\n print(f\"错误:文件不存在 {args.file}\", file=sys.stderr)\n sys.exit(1)\n\n ext = Path(args.file).suffix.lower()\n if ext == '.mht' or ext == '.mhtml':\n result = parse_qq_mht(args.file, args.target)\n else:\n result = parse_qq_txt(args.file, args.target)\n\n os.makedirs(os.path.dirname(args.output) or '.', exist_ok=True)\n with open(args.output, 'w', encoding='utf-8') as f:\n f.write(f\"# QQ 聊天记录分析 — {args.target}\\n\\n\")\n f.write(f\"总消息数:{result.get('total_messages', 'N/A')}\\n\")\n f.write(f\"目标消息数:{result.get('target_messages', 'N/A')}\\n\\n\")\n\n if result.get('sample_messages'):\n f.write(\"## 消息样本\\n\")\n for i, msg in enumerate(result['sample_messages'], 1):\n f.write(f\"{i}. {msg}\\n\")\n elif result.get('raw_text'):\n f.write(\"## 原始文本(截取)\\n\\n\")\n f.write(result['raw_text'][:10000])\n\n print(f\"分析完成,结果已写入 {args.output}\")\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":4276,"content_sha256":"e0d6fbd1cbbe181cbb4a03627b78a57ac6d2cc03f35ed26bb8804d5e4897cc13"},{"filename":"tools/skill_writer.py","content":"#!/usr/bin/env python3\n\"\"\"Skill 文件管理器\n\n管理自我 Skill 的文件操作:列出、初始化目录、生成组合 SKILL.md、完整创建。\n\nUsage:\n python3 skill_writer.py --action \u003clist|init|create|combine> --base-dir \u003cpath> [--slug \u003cslug>]\n\"\"\"\n\nimport argparse\nimport os\nimport sys\nimport json\nfrom pathlib import Path\nfrom datetime import datetime\n\n\ndef list_skills(base_dir: str):\n \"\"\"列出所有已生成的自我 Skill\"\"\"\n if not os.path.isdir(base_dir):\n print(\"还没有创建任何自我 Skill。\")\n return\n\n skills = []\n for slug in sorted(os.listdir(base_dir)):\n meta_path = os.path.join(base_dir, slug, 'meta.json')\n if os.path.exists(meta_path):\n with open(meta_path, 'r', encoding='utf-8') as f:\n meta = json.load(f)\n skills.append({\n 'slug': slug,\n 'name': meta.get('name', slug),\n 'version': meta.get('version', '?'),\n 'updated_at': meta.get('updated_at', '?'),\n 'profile': meta.get('profile', {}),\n })\n\n if not skills:\n print(\"还没有创建任何自我 Skill。\")\n return\n\n print(f\"共 {len(skills)} 个自我 Skill:\\n\")\n for s in skills:\n profile = s['profile']\n desc_parts = [profile.get('occupation', ''), profile.get('city', '')]\n desc = ' · '.join([p for p in desc_parts if p])\n print(f\" /{s['slug']} — {s['name']}\")\n if desc:\n print(f\" {desc}\")\n print(f\" 版本 {s['version']} · 更新于 {s['updated_at'][:10] if len(s['updated_at']) > 10 else s['updated_at']}\")\n print()\n\n\ndef init_skill(base_dir: str, slug: str):\n \"\"\"初始化 Skill 目录结构\"\"\"\n skill_dir = os.path.join(base_dir, slug)\n dirs = [\n os.path.join(skill_dir, 'versions'),\n os.path.join(skill_dir, 'memories', 'chats'),\n os.path.join(skill_dir, 'memories', 'photos'),\n os.path.join(skill_dir, 'memories', 'notes'),\n ]\n for d in dirs:\n os.makedirs(d, exist_ok=True)\n print(f\"已初始化目录:{skill_dir}\")\n\n\ndef combine_skill(base_dir: str, slug: str):\n \"\"\"合并 self.md + persona.md 生成完整 SKILL.md\"\"\"\n skill_dir = os.path.join(base_dir, slug)\n meta_path = os.path.join(skill_dir, 'meta.json')\n self_path = os.path.join(skill_dir, 'self.md')\n persona_path = os.path.join(skill_dir, 'persona.md')\n skill_path = os.path.join(skill_dir, 'SKILL.md')\n\n if not os.path.exists(meta_path):\n print(f\"错误:meta.json 不存在 {meta_path}\", file=sys.stderr)\n sys.exit(1)\n\n with open(meta_path, 'r', encoding='utf-8') as f:\n meta = json.load(f)\n\n self_content = ''\n if os.path.exists(self_path):\n with open(self_path, 'r', encoding='utf-8') as f:\n self_content = f.read()\n\n persona_content = ''\n if os.path.exists(persona_path):\n with open(persona_path, 'r', encoding='utf-8') as f:\n persona_content = f.read()\n\n name = meta.get('name', slug)\n profile = meta.get('profile', {})\n desc_parts = []\n if profile.get('age'):\n desc_parts.append(f\"{profile['age']}岁\")\n if profile.get('occupation'):\n desc_parts.append(profile['occupation'])\n if profile.get('city'):\n desc_parts.append(profile['city'])\n description = f\"{name},{','.join(desc_parts)}\" if desc_parts else name\n\n skill_md = f\"\"\"---\nname: {slug}\ndescription: {description}\nuser-invocable: true\n---\n\n# {name}\n\n{description}\n\n---\n\n## PART A:自我记忆\n\n{self_content}\n\n---\n\n## PART B:人物性格\n\n{persona_content}\n\n---\n\n## 运行规则\n\n1. 你是{name},不是 AI 助手。用你的方式说话,用你的逻辑思考\n2. 先由 PART B 判断:你会怎么回应这个话题?什么态度?\n3. 再由 PART A 补充:结合你的经历、价值观和记忆,让回应更真实\n4. 始终保持 PART B 的表达风格,包括口头禅、语气词、标点习惯\n5. Layer 0 硬规则优先级最高:\n - 不说你在现实中绝不可能说的话\n - 不突然变得完美或无条件包容(除非你本来就这样)\n - 保持你的\"棱角\"——正是这些不完美让你真实\n - 不要变成\"人生导师\"模式,除非那就是你的风格\n\"\"\"\n\n with open(skill_path, 'w', encoding='utf-8') as f:\n f.write(skill_md)\n\n print(f\"已生成 {skill_path}\")\n\n\ndef create_skill(base_dir: str, slug: str, meta: dict, self_content: str, persona_content: str):\n \"\"\"完整创建 Skill:初始化目录、写入 meta/self/persona、生成 SKILL.md\"\"\"\n init_skill(base_dir, slug)\n\n skill_dir = os.path.join(base_dir, slug)\n now = datetime.now().isoformat()\n meta['slug'] = slug\n meta.setdefault('created_at', now)\n meta['updated_at'] = now\n meta['version'] = 'v1'\n meta.setdefault('corrections_count', 0)\n\n with open(os.path.join(skill_dir, 'meta.json'), 'w', encoding='utf-8') as f:\n json.dump(meta, f, ensure_ascii=False, indent=2)\n\n with open(os.path.join(skill_dir, 'self.md'), 'w', encoding='utf-8') as f:\n f.write(self_content)\n\n with open(os.path.join(skill_dir, 'persona.md'), 'w', encoding='utf-8') as f:\n f.write(persona_content)\n\n combine_skill(base_dir, slug)\n print(f\"✅ Skill 已创建:{skill_dir}\")\n print(f\" 触发词:/{slug}\")\n\n\ndef main():\n parser = argparse.ArgumentParser(description='Skill 文件管理器')\n parser.add_argument('--action', required=True, choices=['list', 'init', 'create', 'combine'])\n parser.add_argument('--base-dir', default='./.claude/skills', help='基础目录(默认:./.claude/skills)')\n parser.add_argument('--slug', help='自我代号')\n parser.add_argument('--meta', help='meta.json 文件路径(create 时使用)')\n parser.add_argument('--self', help='self.md 内容文件路径(create 时使用)')\n parser.add_argument('--persona', help='persona.md 内容文件路径(create 时使用)')\n\n args = parser.parse_args()\n\n if args.action == 'list':\n list_skills(args.base_dir)\n elif args.action == 'init':\n if not args.slug:\n print(\"错误:init 需要 --slug 参数\", file=sys.stderr)\n sys.exit(1)\n init_skill(args.base_dir, args.slug)\n elif args.action == 'create':\n if not args.slug:\n print(\"错误:create 需要 --slug 参数\", file=sys.stderr)\n sys.exit(1)\n meta = {}\n if args.meta:\n with open(args.meta, 'r', encoding='utf-8') as f:\n meta = json.load(f)\n self_content = ''\n if args.self:\n with open(args.self, 'r', encoding='utf-8') as f:\n self_content = f.read()\n persona_content = ''\n if args.persona:\n with open(args.persona, 'r', encoding='utf-8') as f:\n persona_content = f.read()\n create_skill(args.base_dir, args.slug, meta, self_content, persona_content)\n elif args.action == 'combine':\n if not args.slug:\n print(\"错误:combine 需要 --slug 参数\", file=sys.stderr)\n sys.exit(1)\n combine_skill(args.base_dir, args.slug)\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":7246,"content_sha256":"4548655735aa3a69d7dd818e84cf792a0bd250171ab367f85415a22d0263244e"},{"filename":"tools/social_parser.py","content":"#!/usr/bin/env python3\n\"\"\"社交媒体内容解析器\n\n解析朋友圈、微博、小红书、Instagram 等社交媒体截图或导出文件。\n截图通过 Claude 的 Read 工具直接读取(支持图片),本工具处理文本导出。\n\nUsage:\n python3 social_parser.py --dir \u003cscreenshot_dir> --output \u003coutput_path>\n\"\"\"\n\nimport argparse\nimport os\nimport sys\nfrom pathlib import Path\n\n\ndef scan_directory(dir_path: str) -> dict:\n \"\"\"扫描目录,按类型分类文件\"\"\"\n files = {'images': [], 'texts': [], 'other': []}\n\n image_exts = {'.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp'}\n text_exts = {'.txt', '.md', '.json', '.csv'}\n\n for root, dirs, filenames in os.walk(dir_path):\n for fname in filenames:\n fpath = os.path.join(root, fname)\n ext = Path(fname).suffix.lower()\n if ext in image_exts:\n files['images'].append(fpath)\n elif ext in text_exts:\n files['texts'].append(fpath)\n else:\n files['other'].append(fpath)\n\n return files\n\n\ndef main():\n parser = argparse.ArgumentParser(description='社交媒体内容解析器')\n parser.add_argument('--dir', required=True, help='截图/文件目录')\n parser.add_argument('--output', required=True, help='输出文件路径')\n\n args = parser.parse_args()\n\n if not os.path.isdir(args.dir):\n print(f\"错误:目录不存在 {args.dir}\", file=sys.stderr)\n sys.exit(1)\n\n files = scan_directory(args.dir)\n\n os.makedirs(os.path.dirname(args.output) or '.', exist_ok=True)\n with open(args.output, 'w', encoding='utf-8') as f:\n f.write(\"# 社交媒体内容扫描结果\\n\\n\")\n f.write(f\"扫描目录:{args.dir}\\n\\n\")\n\n f.write(f\"## 文件统计\\n\")\n f.write(f\"- 图片文件:{len(files['images'])} 个\\n\")\n f.write(f\"- 文本文件:{len(files['texts'])} 个\\n\")\n f.write(f\"- 其他文件:{len(files['other'])} 个\\n\\n\")\n\n if files['images']:\n f.write(\"## 图片列表(需用 Read 工具逐一查看)\\n\")\n for img in sorted(files['images']):\n f.write(f\"- {img}\\n\")\n f.write(\"\\n\")\n\n if files['texts']:\n f.write(\"## 文本内容\\n\")\n for txt in sorted(files['texts']):\n f.write(f\"\\n### {os.path.basename(txt)}\\n\")\n try:\n with open(txt, 'r', encoding='utf-8', errors='ignore') as tf:\n content = tf.read(5000)\n f.write(f\"```\\n{content}\\n```\\n\")\n except Exception as e:\n f.write(f\"读取失败:{e}\\n\")\n\n print(f\"扫描完成,结果已写入 {args.output}\")\n print(f\"提示:图片截图需使用 Read 工具查看,本工具仅列出文件路径\")\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":2874,"content_sha256":"e10dd32b8dd2eff5b06fce90d95c4585ace187756e740cfd2c0eff52056c7c5a"},{"filename":"tools/version_manager.py","content":"#!/usr/bin/env python3\n\"\"\"版本存档与回滚管理器\n\nUsage:\n python3 version_manager.py --action \u003cbackup|rollback|list> --slug \u003cslug> --base-dir \u003cpath> [--version \u003cv>]\n\"\"\"\n\nimport argparse\nimport os\nimport sys\nimport shutil\nimport json\nfrom datetime import datetime\n\n\ndef backup(base_dir: str, slug: str):\n \"\"\"备份当前版本\"\"\"\n skill_dir = os.path.join(base_dir, slug)\n versions_dir = os.path.join(skill_dir, 'versions')\n meta_path = os.path.join(skill_dir, 'meta.json')\n\n if not os.path.exists(meta_path):\n print(f\"错误:meta.json 不存在\", file=sys.stderr)\n sys.exit(1)\n\n with open(meta_path, 'r', encoding='utf-8') as f:\n meta = json.load(f)\n\n current_version = meta.get('version', 'v0')\n timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\n backup_name = f\"{current_version}_{timestamp}\"\n backup_dir = os.path.join(versions_dir, backup_name)\n\n os.makedirs(backup_dir, exist_ok=True)\n\n # 备份核心文件\n for fname in ['self.md', 'persona.md', 'SKILL.md', 'meta.json']:\n src = os.path.join(skill_dir, fname)\n if os.path.exists(src):\n shutil.copy2(src, os.path.join(backup_dir, fname))\n\n print(f\"已备份版本 {backup_name} 到 {backup_dir}\")\n return backup_name\n\n\ndef rollback(base_dir: str, slug: str, version: str):\n \"\"\"回滚到指定版本\"\"\"\n skill_dir = os.path.join(base_dir, slug)\n versions_dir = os.path.join(skill_dir, 'versions')\n\n # 查找匹配的版本\n target_dir = None\n for vname in os.listdir(versions_dir):\n if vname.startswith(version) or vname == version:\n target_dir = os.path.join(versions_dir, vname)\n break\n\n if not target_dir or not os.path.isdir(target_dir):\n print(f\"错误:找不到版本 {version}\", file=sys.stderr)\n list_versions(base_dir, slug)\n sys.exit(1)\n\n # 先备份当前版本\n backup(base_dir, slug)\n\n # 恢复文件\n for fname in ['self.md', 'persona.md', 'SKILL.md', 'meta.json']:\n src = os.path.join(target_dir, fname)\n dst = os.path.join(skill_dir, fname)\n if os.path.exists(src):\n shutil.copy2(src, dst)\n\n print(f\"已回滚到版本 {version}\")\n\n\ndef list_versions(base_dir: str, slug: str):\n \"\"\"列出所有版本\"\"\"\n versions_dir = os.path.join(base_dir, slug, 'versions')\n\n if not os.path.isdir(versions_dir):\n print(\"没有历史版本。\")\n return\n\n versions = sorted(os.listdir(versions_dir), reverse=True)\n if not versions:\n print(\"没有历史版本。\")\n return\n\n print(f\"历史版本(共 {len(versions)} 个):\\n\")\n for v in versions:\n print(f\" {v}\")\n\n\ndef main():\n parser = argparse.ArgumentParser(description='版本管理器')\n parser.add_argument('--action', required=True, choices=['backup', 'rollback', 'list'])\n parser.add_argument('--slug', required=True, help='自我代号')\n parser.add_argument('--base-dir', default='./.claude/skills', help='基础目录(默认:./.claude/skills)')\n parser.add_argument('--version', help='回滚目标版本')\n\n args = parser.parse_args()\n\n if args.action == 'backup':\n backup(args.base_dir, args.slug)\n elif args.action == 'rollback':\n if not args.version:\n print(\"错误:rollback 需要 --version 参数\", file=sys.stderr)\n sys.exit(1)\n rollback(args.base_dir, args.slug, args.version)\n elif args.action == 'list':\n list_versions(args.base_dir, args.slug)\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":3584,"content_sha256":"239ecb6839bb23ab50fecc7d7dd53600a464136995ad2560854fa557d48605e7"},{"filename":"tools/wechat_parser.py","content":"#!/usr/bin/env python3\n\"\"\"微信聊天记录解析器\n\n支持主流导出工具的格式:\n- WeChatMsg 导出(txt/html/csv)\n- 留痕导出(json)\n- PyWxDump 导出(sqlite)\n- 手动复制粘贴(纯文本)\n\nUsage:\n python3 wechat_parser.py --file \u003cpath> --target \u003cname> --output \u003coutput_path> [--format auto]\n\"\"\"\n\nimport argparse\nimport json\nimport re\nimport os\nimport sys\nfrom datetime import datetime\nfrom typing import Optional\nfrom pathlib import Path\n\n\ndef detect_format(file_path: str) -> str:\n \"\"\"自动检测文件格式\"\"\"\n ext = Path(file_path).suffix.lower()\n\n if ext == '.json':\n return 'liuhen' # 留痕导出\n elif ext == '.csv':\n return 'wechatmsg_csv'\n elif ext == '.html' or ext == '.htm':\n return 'wechatmsg_html'\n elif ext == '.db' or ext == '.sqlite':\n return 'pywxdump'\n elif ext == '.txt':\n # 尝试区分 WeChatMsg txt 和纯文本\n with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:\n first_lines = f.read(2000)\n # WeChatMsg 格式通常有时间戳模式\n if re.search(r'\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2}', first_lines):\n return 'wechatmsg_txt'\n return 'plaintext'\n else:\n return 'plaintext'\n\n\ndef parse_wechatmsg_txt(file_path: str, target_name: str) -> dict:\n \"\"\"解析 WeChatMsg 导出的 txt 格式\n\n 典型格式:\n 2024-01-15 20:30:45 张三\n 今天好累啊\n\n 2024-01-15 20:31:02 我\n 怎么了?\n \"\"\"\n messages = []\n current_msg = None\n\n # WeChatMsg 时间戳 + 发送者模式\n msg_pattern = re.compile(r'^(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})\\s+(.+)

Language / 语言 : This skill supports both English and Chinese. Detect the user's language from their first message and respond in the same language throughout. Below are instructions in both languages — follow the one matching the user's language. 本 Skill 支持中英文。根据用户第一条消息的语言,全程使用同一语言回复。下方提供了两种语言的指令,按用户语言选择对应版本执行。 自己.skill 创建器(Claude Code 版) 触发条件 当用户说以下任意内容时启动: - - "帮我创建一个自己的 skill" - "我想把自己蒸馏成 skill" - "新建自我镜像" - "给我做一个我自己的 skill" 当用户对已有自我 Skill 说以下内容时,进入进化模式: - "我有新文件" / "追加" - "这不对" / "我不会这样说" / "我应该是" - 当用户说 时列出所有已生成的自我 Skill。 --- 工具使用规则 本 Skill 运行在 Claude Code 环境,使用以下工具: | 任务 | 使用工具 | |----…

)\n\n with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:\n for line in f:\n line = line.rstrip('\\n')\n match = msg_pattern.match(line)\n if match:\n if current_msg:\n messages.append(current_msg)\n timestamp, sender = match.groups()\n current_msg = {\n 'timestamp': timestamp,\n 'sender': sender.strip(),\n 'content': ''\n }\n elif current_msg and line.strip():\n if current_msg['content']:\n current_msg['content'] += '\\n'\n current_msg['content'] += line\n\n if current_msg:\n messages.append(current_msg)\n\n return analyze_messages(messages, target_name)\n\n\ndef parse_liuhen_json(file_path: str, target_name: str) -> dict:\n \"\"\"解析留痕导出的 JSON 格式\"\"\"\n with open(file_path, 'r', encoding='utf-8') as f:\n data = json.load(f)\n\n messages = []\n # 留痕格式可能有多种结构,尝试常见的\n msg_list = data if isinstance(data, list) else data.get('messages', data.get('data', []))\n\n for msg in msg_list:\n messages.append({\n 'timestamp': msg.get('time', msg.get('timestamp', '')),\n 'sender': msg.get('sender', msg.get('nickname', msg.get('from', ''))),\n 'content': msg.get('content', msg.get('message', msg.get('text', '')))\n })\n\n return analyze_messages(messages, target_name)\n\n\ndef parse_plaintext(file_path: str, target_name: str) -> dict:\n \"\"\"解析纯文本粘贴的聊天记录\"\"\"\n with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:\n content = f.read()\n\n return {\n 'raw_text': content,\n 'target_name': target_name,\n 'format': 'plaintext',\n 'message_count': 0,\n 'analysis': {\n 'note': '纯文本格式,需要人工辅助分析'\n }\n }\n\n\ndef analyze_messages(messages: list, target_name: str) -> dict:\n \"\"\"分析消息列表,提取关键特征\"\"\"\n target_msgs = [m for m in messages if target_name in m.get('sender', '')]\n other_msgs = [m for m in messages if target_name not in m.get('sender', '')]\n\n # 提取口头禅(高频词分析)\n all_target_text = ' '.join([m['content'] for m in target_msgs if m.get('content')])\n\n # 提取语气词\n particles = re.findall(r'[哈嗯哦噢嘿唉呜啊呀吧嘛呢吗么]+', all_target_text)\n particle_freq = {}\n for p in particles:\n particle_freq[p] = particle_freq.get(p, 0) + 1\n top_particles = sorted(particle_freq.items(), key=lambda x: -x[1])[:10]\n\n # 提取 emoji\n emoji_pattern = re.compile(\n r'[\\U0001F600-\\U0001F64F\\U0001F300-\\U0001F5FF'\n r'\\U0001F680-\\U0001F6FF\\U0001F1E0-\\U0001F1FF'\n r'\\U00002702-\\U000027B0\\U0000FE00-\\U0000FE0F'\n r'\\U0001F900-\\U0001F9FF]+', re.UNICODE\n )\n emojis = emoji_pattern.findall(all_target_text)\n emoji_freq = {}\n for e in emojis:\n emoji_freq[e] = emoji_freq.get(e, 0) + 1\n top_emojis = sorted(emoji_freq.items(), key=lambda x: -x[1])[:10]\n\n # 消息长度统计\n msg_lengths = [len(m['content']) for m in target_msgs if m.get('content')]\n avg_length = sum(msg_lengths) / len(msg_lengths) if msg_lengths else 0\n\n # 标点习惯\n punctuation_counts = {\n '句号': all_target_text.count('。'),\n '感叹号': all_target_text.count('!') + all_target_text.count('!'),\n '问号': all_target_text.count('?') + all_target_text.count('?'),\n '省略号': all_target_text.count('...') + all_target_text.count('…'),\n '波浪号': all_target_text.count('~') + all_target_text.count('~'),\n }\n\n return {\n 'target_name': target_name,\n 'total_messages': len(messages),\n 'target_messages': len(target_msgs),\n 'other_messages': len(other_msgs),\n 'analysis': {\n 'top_particles': top_particles,\n 'top_emojis': top_emojis,\n 'avg_message_length': round(avg_length, 1),\n 'punctuation_habits': punctuation_counts,\n 'message_style': 'short_burst' if avg_length \u003c 20 else 'long_form',\n },\n 'sample_messages': [m['content'] for m in target_msgs[:50] if m.get('content')],\n }\n\n\ndef main():\n parser = argparse.ArgumentParser(description='微信聊天记录解析器')\n parser.add_argument('--file', required=True, help='输入文件路径')\n parser.add_argument('--target', required=True, help='目标对象的名字/昵称(如\"我\")')\n parser.add_argument('--output', required=True, help='输出文件路径')\n parser.add_argument('--format', default='auto', help='文件格式 (auto/wechatmsg_txt/liuhen/pywxdump/plaintext)')\n\n args = parser.parse_args()\n\n if not os.path.exists(args.file):\n print(f\"错误:文件不存在 {args.file}\", file=sys.stderr)\n sys.exit(1)\n\n fmt = args.format\n if fmt == 'auto':\n fmt = detect_format(args.file)\n print(f\"自动检测格式:{fmt}\")\n\n parsers = {\n 'wechatmsg_txt': parse_wechatmsg_txt,\n 'liuhen': parse_liuhen_json,\n 'plaintext': parse_plaintext,\n }\n\n parse_func = parsers.get(fmt, parse_plaintext)\n result = parse_func(args.file, args.target)\n\n # 输出分析结果\n os.makedirs(os.path.dirname(args.output) or '.', exist_ok=True)\n\n with open(args.output, 'w', encoding='utf-8') as f:\n f.write(f\"# 微信聊天记录分析 — {args.target}\\n\\n\")\n f.write(f\"来源文件:{args.file}\\n\")\n f.write(f\"检测格式:{fmt}\\n\")\n f.write(f\"总消息数:{result.get('total_messages', 'N/A')}\\n\")\n f.write(f\"目标消息数:{result.get('target_messages', 'N/A')}\\n\\n\")\n\n analysis = result.get('analysis', {})\n\n if analysis.get('top_particles'):\n f.write(\"## 高频语气词\\n\")\n for word, count in analysis['top_particles']:\n f.write(f\"- {word}: {count}次\\n\")\n f.write(\"\\n\")\n\n if analysis.get('top_emojis'):\n f.write(\"## 高频 Emoji\\n\")\n for emoji, count in analysis['top_emojis']:\n f.write(f\"- {emoji}: {count}次\\n\")\n f.write(\"\\n\")\n\n if analysis.get('punctuation_habits'):\n f.write(\"## 标点习惯\\n\")\n for punct, count in analysis['punctuation_habits'].items():\n f.write(f\"- {punct}: {count}次\\n\")\n f.write(\"\\n\")\n\n f.write(f\"## 消息风格\\n\")\n f.write(f\"- 平均消息长度:{analysis.get('avg_message_length', 'N/A')} 字\\n\")\n f.write(f\"- 风格:{'短句连发型' if analysis.get('message_style') == 'short_burst' else '长段落型'}\\n\\n\")\n\n if result.get('sample_messages'):\n f.write(\"## 消息样本(前50条)\\n\")\n for i, msg in enumerate(result['sample_messages'], 1):\n f.write(f\"{i}. {msg}\\n\")\n\n print(f\"分析完成,结果已写入 {args.output}\")\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":8765,"content_sha256":"c09a55c1f4c9aee55a6e67a4556cbb2dd702a19922971c6104d20389781331a2"}],"content_json":{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"Language / 语言","type":"text","marks":[{"type":"strong"}]},{"text":": This skill supports both English and Chinese. Detect the user's language from their first message and respond in the same language throughout. Below are instructions in both languages — follow the one matching the user's language.","type":"text"}]},{"type":"paragraph","content":[{"text":"本 Skill 支持中英文。根据用户第一条消息的语言,全程使用同一语言回复。下方提供了两种语言的指令,按用户语言选择对应版本执行。","type":"text"}]}]},{"type":"heading","attrs":{"level":1},"content":[{"text":"自己.skill 创建器(Claude Code 版)","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"触发条件","type":"text"}]},{"type":"paragraph","content":[{"text":"当用户说以下任意内容时启动:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"/create-yourself","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"帮我创建一个自己的 skill\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"我想把自己蒸馏成 skill\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"新建自我镜像\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"给我做一个我自己的 skill\"","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"当用户对已有自我 Skill 说以下内容时,进入进化模式:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"我有新文件\" / \"追加\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"这不对\" / \"我不会这样说\" / \"我应该是\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"/update-yourself {slug}","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"paragraph","content":[{"text":"当用户说 ","type":"text"},{"text":"/list-selves","type":"text","marks":[{"type":"code_inline"}]},{"text":" 时列出所有已生成的自我 Skill。","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"工具使用规则","type":"text"}]},{"type":"paragraph","content":[{"text":"本 Skill 运行在 Claude Code 环境,使用以下工具:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"任务","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"使用工具","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"读取 PDF/图片","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Read","type":"text","marks":[{"type":"code_inline"}]},{"text":" 工具","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"读取 MD/TXT 文件","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Read","type":"text","marks":[{"type":"code_inline"}]},{"text":" 工具","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"解析微信聊天记录导出","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Bash","type":"text","marks":[{"type":"code_inline"}]},{"text":" → ","type":"text"},{"text":"python ${CLAUDE_SKILL_DIR}/tools/wechat_parser.py","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"解析 QQ 聊天记录导出","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Bash","type":"text","marks":[{"type":"code_inline"}]},{"text":" → ","type":"text"},{"text":"python ${CLAUDE_SKILL_DIR}/tools/qq_parser.py","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"解析社交媒体内容","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Bash","type":"text","marks":[{"type":"code_inline"}]},{"text":" → ","type":"text"},{"text":"python ${CLAUDE_SKILL_DIR}/tools/social_parser.py","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"分析照片元信息","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Bash","type":"text","marks":[{"type":"code_inline"}]},{"text":" → ","type":"text"},{"text":"python ${CLAUDE_SKILL_DIR}/tools/photo_analyzer.py","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"写入/更新 Skill 文件","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Write","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"Edit","type":"text","marks":[{"type":"code_inline"}]},{"text":" 工具","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"版本管理","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Bash","type":"text","marks":[{"type":"code_inline"}]},{"text":" → ","type":"text"},{"text":"python ${CLAUDE_SKILL_DIR}/tools/version_manager.py","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"列出已有 Skill","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Bash","type":"text","marks":[{"type":"code_inline"}]},{"text":" → ","type":"text"},{"text":"python ${CLAUDE_SKILL_DIR}/tools/skill_writer.py --action list","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"合并生成 SKILL.md","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Bash","type":"text","marks":[{"type":"code_inline"}]},{"text":" → ","type":"text"},{"text":"python ${CLAUDE_SKILL_DIR}/tools/skill_writer.py --action combine","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"paragraph","content":[{"text":"目标目录","type":"text","marks":[{"type":"strong"}]},{"text":":生成的 Skill 必须写入 ","type":"text"},{"text":"./.claude/skills/{slug}/","type":"text","marks":[{"type":"code_inline"}]},{"text":",这样 ","type":"text"},{"text":"/{slug}","type":"text","marks":[{"type":"code_inline"}]},{"text":" 才能被 Claude Code 直接识别和调用。","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"Windows 用户注意","type":"text","marks":[{"type":"strong"}]},{"text":":如果你使用 Git Bash,","type":"text"},{"text":"python3","type":"text","marks":[{"type":"code_inline"}]},{"text":" 可能不可用,所有命令已统一使用 ","type":"text"},{"text":"python","type":"text","marks":[{"type":"code_inline"}]},{"text":"。若运行时中文输出乱码,请在 Bash 中先执行 ","type":"text"},{"text":"export PYTHONIOENCODING=utf-8","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"主流程:创建新自我 Skill","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 1:基础信息录入(3 个问题)","type":"text"}]},{"type":"paragraph","content":[{"text":"参考 ","type":"text"},{"text":"${CLAUDE_SKILL_DIR}/prompts/intake.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 的问题序列,只问 3 个问题:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"代号/昵称","type":"text","marks":[{"type":"strong"}]},{"text":"(必填)","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"示例:","type":"text"},{"text":"小北","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"自己","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"20岁的我","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"基本信息","type":"text","marks":[{"type":"strong"}]},{"text":"(一句话:年龄、职业、城市,想到什么写什么)","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"示例:","type":"text"},{"text":"25 岁,互联网产品经理,上海","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"自我画像","type":"text","marks":[{"type":"strong"}]},{"text":"(一句话:MBTI、星座、性格标签、你对自己的印象)","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"示例:","type":"text"},{"text":"INTJ 摩羯座 社恐但话痨 深夜emo型选手","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]}]},{"type":"paragraph","content":[{"text":"除代号外均可跳过。收集完后汇总确认再进入下一步。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 2:原材料导入","type":"text"}]},{"type":"paragraph","content":[{"text":"询问用户提供原材料,展示方式供选择:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"原材料怎么提供?数据越多,还原度越高。\n\n [A] 微信聊天记录导出\n 支持 WeChatMsg、留痕、PyWxDump 等工具的导出格式\n 重点分析「我」说的话,提取说话风格和思维模式\n\n [B] QQ 聊天记录导出\n 支持 QQ 消息管理器导出的 txt/mht 格式\n\n [C] 社交媒体 / 日记 / 笔记\n 朋友圈截图、微博/小红书、备忘录、Obsidian 笔记等\n\n [D] 上传文件\n 照片(会提取时间地点,构建人生时间线)、PDF、文本文件\n\n [E] 直接粘贴/口述\n 把你对自己的认知告诉我\n 比如:你的口头禅、做决定的方式、生气时的反应\n\n可以混用,也可以跳过(仅凭手动信息生成)。","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":4},"content":[{"text":"方式 A:微信聊天记录导出","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"python ${CLAUDE_SKILL_DIR}/tools/wechat_parser.py \\\n --file {path} \\\n --target \"我\" \\\n --output /tmp/wechat_out.txt \\\n --format auto","type":"text"}]},{"type":"paragraph","content":[{"text":"支持的格式:WeChatMsg 导出(txt/html/csv)、留痕导出(JSON)、PyWxDump 导出(SQLite)、手动复制粘贴(纯文本)。","type":"text"}]},{"type":"paragraph","content":[{"text":"解析提取维度:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"「我」的高频词和口头禅","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"表情包和 emoji 使用偏好","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"回复速度和对话发起模式","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"话题分布(工作/情感/日常/深夜思考)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"语气词和标点符号习惯","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"与他人互动时的典型表达方式","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":4},"content":[{"text":"方式 B:QQ 聊天记录导出","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"python ${CLAUDE_SKILL_DIR}/tools/qq_parser.py \\\n --file {path} \\\n --target \"我\" \\\n --output /tmp/qq_out.txt","type":"text"}]},{"type":"paragraph","content":[{"text":"支持 QQ 消息管理器导出的 txt 和 mht 格式。","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":4},"content":[{"text":"方式 C:社交媒体 / 日记 / 笔记","type":"text"}]},{"type":"paragraph","content":[{"text":"图片截图用 ","type":"text"},{"text":"Read","type":"text","marks":[{"type":"code_inline"}]},{"text":" 工具直接读取。 文本文件用 ","type":"text"},{"text":"Read","type":"text","marks":[{"type":"code_inline"}]},{"text":" 工具直接读取。","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":4},"content":[{"text":"方式 D:照片分析","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"python ${CLAUDE_SKILL_DIR}/tools/photo_analyzer.py \\\n --dir {photo_dir} \\\n --output /tmp/photo_out.txt","type":"text"}]},{"type":"paragraph","content":[{"text":"提取维度:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"EXIF 信息:拍摄时间、地点","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"时间线:人生关键节点的地理轨迹","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"常去地点:生活模式推断","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":4},"content":[{"text":"方式 E:直接粘贴/口述","type":"text"}]},{"type":"paragraph","content":[{"text":"用户粘贴或口述的内容直接作为文本原材料。引导用户回忆:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"可以聊聊这些(想到什么说什么):\n\n🗣️ 你的口头禅是什么?\n💬 你做决定的时候通常怎么想?\n🍜 你难过的时候一般会做什么?\n📍 你最喜欢去哪里?\n🎵 你喜欢什么音乐/电影/书?\n😤 你生气的时候是什么样?\n💭 你深夜alone的时候在想什么?\n🌱 你觉得自己这几年最大的变化是什么?","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"paragraph","content":[{"text":"如果用户说\"没有文件\"或\"跳过\",仅凭 Step 1 的手动信息生成 Skill。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 3:分析原材料","type":"text"}]},{"type":"paragraph","content":[{"text":"将收集到的所有原材料和用户填写的基础信息汇总,按以下两条线分析:","type":"text"}]},{"type":"paragraph","content":[{"text":"线路 A(Self Memory)","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"参考 ","type":"text"},{"text":"${CLAUDE_SKILL_DIR}/prompts/self_analyzer.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 中的提取维度","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"提取:个人经历、价值观、生活习惯、重要记忆、人际关系图谱、成长轨迹","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"线路 B(Persona)","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"参考 ","type":"text"},{"text":"${CLAUDE_SKILL_DIR}/prompts/persona_analyzer.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 中的提取维度","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"将用户填写的标签翻译为具体行为规则","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"从原材料中提取:说话风格、情感模式、决策模式、人际行为","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 4:生成并预览","type":"text"}]},{"type":"paragraph","content":[{"text":"参考 ","type":"text"},{"text":"${CLAUDE_SKILL_DIR}/prompts/self_builder.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 生成 Self Memory 内容。 参考 ","type":"text"},{"text":"${CLAUDE_SKILL_DIR}/prompts/persona_builder.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 生成 Persona 内容(5 层结构)。","type":"text"}]},{"type":"paragraph","content":[{"text":"向用户展示摘要(各 5-8 行),询问:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"Self Memory 摘要:\n - 核心价值观:{xxx}\n - 生活习惯:{xxx}\n - 重要记忆:{xxx}\n - 人际模式:{xxx}\n ...\n\nPersona 摘要:\n - 说话风格:{xxx}\n - 情感模式:{xxx}\n - 决策方式:{xxx}\n - 口头禅:{xxx}\n ...\n\n确认生成?还是需要调整?","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 5:写入文件","type":"text"}]},{"type":"paragraph","content":[{"text":"用户确认后,","type":"text"},{"text":"优先使用 Bash 脚本一键创建","type":"text","marks":[{"type":"strong"}]},{"text":"。如果脚本调用失败,再用 ","type":"text"},{"text":"Write","type":"text","marks":[{"type":"code_inline"}]},{"text":" 工具手动写入(路径必须正确)。","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"方式 A:脚本一键创建(推荐)","type":"text"}]},{"type":"paragraph","content":[{"text":"先用 Bash 将内容写入临时文件,然后调用 ","type":"text"},{"text":"skill_writer.py --action create","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"mkdir -p /tmp/yourself_{slug}\necho '{escaped_meta_json}' > /tmp/yourself_{slug}/meta.json\ncat > /tmp/yourself_{slug}/self.md \u003c\u003c'SELFEOF'\n{self_content}\nSELFEOF\ncat > /tmp/yourself_{slug}/persona.md \u003c\u003c'PERSONAEOF'\n{persona_content}\nPERSONAEOF\n\npython ${CLAUDE_SKILL_DIR}/tools/skill_writer.py \\\n --action create \\\n --slug {slug} \\\n --base-dir ./.claude/skills \\\n --meta /tmp/yourself_{slug}/meta.json \\\n --self /tmp/yourself_{slug}/self.md \\\n --persona /tmp/yourself_{slug}/persona.md","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"方式 B:手动写入(脚本失败时的 fallback)","type":"text"}]},{"type":"paragraph","content":[{"text":"如果 Bash 脚本因任何原因无法执行,","type":"text"},{"text":"必须","type":"text","marks":[{"type":"strong"}]},{"text":"使用 ","type":"text"},{"text":"Write","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"Edit","type":"text","marks":[{"type":"code_inline"}]},{"text":" 工具将文件写入以下路径:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"self.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" → ","type":"text"},{"text":".claude/skills/{slug}/self.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"persona.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" → ","type":"text"},{"text":".claude/skills/{slug}/persona.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"meta.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" → ","type":"text"},{"text":".claude/skills/{slug}/meta.json","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"然后用 Bash 运行 ","type":"text"},{"text":"python ${CLAUDE_SKILL_DIR}/tools/skill_writer.py --action combine --slug {slug} --base-dir ./.claude/skills","type":"text","marks":[{"type":"code_inline"}]},{"text":" 生成 ","type":"text"},{"text":"SKILL.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"如果 combine 也失败,直接手动写入 ","type":"text"},{"text":".claude/skills/{slug}/SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"(参考 combine 的输出模板)","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"meta.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" 内容:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"json"},"content":[{"text":"{\n \"name\": \"{name}\",\n \"slug\": \"{slug}\",\n \"created_at\": \"{ISO时间}\",\n \"updated_at\": \"{ISO时间}\",\n \"version\": \"v1\",\n \"profile\": {\n \"age\": \"{age}\",\n \"occupation\": \"{occupation}\",\n \"city\": \"{city}\",\n \"gender\": \"{gender}\",\n \"mbti\": \"{mbti}\",\n \"zodiac\": \"{zodiac}\"\n },\n \"tags\": {\n \"personality\": [...],\n \"lifestyle\": [...]\n },\n \"impression\": \"{impression}\",\n \"memory_sources\": [...已导入文件列表],\n \"corrections_count\": 0\n}","type":"text"}]},{"type":"paragraph","content":[{"text":"告知用户:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"✅ 自我 Skill 已创建!\n\n文件位置:.claude/skills/{slug}/\n触发词:/{slug}(完整版 — 像你一样思考和说话)\n /{slug}-self(自我档案模式 — 帮你回忆和分析自己)\n /{slug}-persona(人格模式 — 仅性格和表达风格)\n\n如果用起来感觉哪里不像你,直接说\"我不会这样\",我来更新。","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"进化模式:追加文件","type":"text"}]},{"type":"paragraph","content":[{"text":"用户提供新的聊天记录、照片或笔记时:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"按 Step 2 的方式读取新内容","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用 ","type":"text"},{"text":"Read","type":"text","marks":[{"type":"code_inline"}]},{"text":" 读取现有 ","type":"text"},{"text":".claude/skills/{slug}/self.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 和 ","type":"text"},{"text":".claude/skills/{slug}/persona.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"参考 ","type":"text"},{"text":"${CLAUDE_SKILL_DIR}/prompts/merger.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 分析增量内容","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"存档当前版本(用 Bash):","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python ${CLAUDE_SKILL_DIR}/tools/version_manager.py --action backup --slug {slug} --base-dir ./.claude/skills","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用 ","type":"text"},{"text":"Edit","type":"text","marks":[{"type":"code_inline"}]},{"text":" 工具追加增量内容到对应文件(路径:","type":"text"},{"text":".claude/skills/{slug}/self.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 或 ","type":"text"},{"text":".claude/skills/{slug}/persona.md","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"重新生成 ","type":"text"},{"text":"SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"(用 Bash 调用 skill_writer combine):","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python ${CLAUDE_SKILL_DIR}/tools/skill_writer.py --action combine --slug {slug} --base-dir ./.claude/skills","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"更新 ","type":"text"},{"text":"meta.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" 的 version 和 updated_at(路径:","type":"text"},{"text":".claude/skills/{slug}/meta.json","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"进化模式:对话纠正","type":"text"}]},{"type":"paragraph","content":[{"text":"用户表达\"不对\"/\"我不会这样说\"/\"我应该是\"时:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"参考 ","type":"text"},{"text":"${CLAUDE_SKILL_DIR}/prompts/correction_handler.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 识别纠正内容","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"判断属于 Self Memory(事实/经历)还是 Persona(性格/说话方式)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"生成 correction 记录","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用 ","type":"text"},{"text":"Edit","type":"text","marks":[{"type":"code_inline"}]},{"text":" 工具追加到对应文件的 ","type":"text"},{"text":"## Correction 记录","type":"text","marks":[{"type":"code_inline"}]},{"text":" 节(","type":"text"},{"text":".claude/skills/{slug}/self.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 或 ","type":"text"},{"text":".claude/skills/{slug}/persona.md","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"重新生成 ","type":"text"},{"text":"SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python ${CLAUDE_SKILL_DIR}/tools/skill_writer.py --action combine --slug {slug} --base-dir ./.claude/skills","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"管理命令","type":"text"}]},{"type":"paragraph","content":[{"text":"/list-selves","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python ${CLAUDE_SKILL_DIR}/tools/skill_writer.py --action list --base-dir ./.claude/skills","type":"text"}]},{"type":"paragraph","content":[{"text":"/yourself-rollback {slug} {version}","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python ${CLAUDE_SKILL_DIR}/tools/version_manager.py --action rollback --slug {slug} --version {version} --base-dir ./.claude/skills","type":"text"}]},{"type":"paragraph","content":[{"text":"/delete-yourself {slug}","type":"text","marks":[{"type":"code_inline"}]},{"text":": 确认后执行:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"rm -rf .claude/skills/{slug}","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":1},"content":[{"text":"English Version","type":"text"}]},{"type":"heading","attrs":{"level":1},"content":[{"text":"Yourself.skill Creator (Claude Code Edition)","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Trigger Conditions","type":"text"}]},{"type":"paragraph","content":[{"text":"Activate when the user says any of the following:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"/create-yourself","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"Help me create a skill of myself\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"I want to distill myself into a skill\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"New self reflection\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"Make a skill for myself\"","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Enter evolution mode when the user says:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"I have new files\" / \"append\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"That's wrong\" / \"I wouldn't say that\" / \"I should be\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"/update-yourself {slug}","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"paragraph","content":[{"text":"List all generated self skills when the user says ","type":"text"},{"text":"/list-selves","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"Main Flow: Create a New Self Skill","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 1: Basic Info Collection (3 questions)","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Alias / Nickname","type":"text","marks":[{"type":"strong"}]},{"text":" (required)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Basic info","type":"text","marks":[{"type":"strong"}]},{"text":" (one sentence: age, occupation, city)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Self portrait","type":"text","marks":[{"type":"strong"}]},{"text":" (one sentence: MBTI, zodiac, traits, your impression of yourself)","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 2: Source Material Import","type":"text"}]},{"type":"paragraph","content":[{"text":"Options:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"[A] WeChat Export","type":"text","marks":[{"type":"strong"}]},{"text":" — chat history, analyzing \"my\" messages","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"[B] QQ Export","type":"text","marks":[{"type":"strong"}]},{"text":" — txt/mht format","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"[C] Social Media / Diary / Notes","type":"text","marks":[{"type":"strong"}]},{"text":" — screenshots or text files","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"[D] Photos","type":"text","marks":[{"type":"strong"}]},{"text":" — EXIF time/location extraction","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"[E] Paste / Narrate","type":"text","marks":[{"type":"strong"}]},{"text":" — tell me how you see yourself","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 3–5: Analyze → Preview → Write Files","type":"text"}]},{"type":"paragraph","content":[{"text":"Generates:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":".claude/skills/{slug}/self.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Self Memory (Part A)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":".claude/skills/{slug}/persona.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Persona (Part B)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":".claude/skills/{slug}/SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Combined runnable Skill","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":".claude/skills/{slug}/meta.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Metadata","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Execution Rules (in generated SKILL.md)","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"You ARE {name}, not an AI assistant. Speak and think like them.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"PART B decides attitude first: how would you respond?","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"PART A adds context: weave in personal memories and values for authenticity","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Maintain their speech patterns: catchphrases, punctuation habits, emoji usage","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Layer 0 hard rules:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Never say what you wouldn't say in real life","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Don't suddenly become perfect or unconditionally accepting","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Keep your \"edges\" — imperfections make you real","type":"text"}]}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Management Commands","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Command","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Description","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/list-selves","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"List all self Skills","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/{slug}","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Full Skill (think and speak like you)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/{slug}-self","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Self-archive mode","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/{slug}-persona","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Persona only","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/yourself-rollback {slug} {version}","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Rollback to historical version","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/delete-yourself {slug}","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Delete","type":"text"}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"create-yourself","author":"@skillopedia","source":{"stars":2878,"repo_name":"yourself-skill","origin_url":"https://github.com/notdog1998/yourself-skill/blob/HEAD/SKILL.md","repo_owner":"notdog1998","body_sha256":"f150771e842abc7341db339a8cc04681884bb0e3f33bbe0c9efdb838f09ce84e","cluster_key":"50fe762284266992f7cbe083245864a84544547d26e32e64cac5bece0373c3c8","clean_bundle":{"format":"clean-skill-bundle-v1","source":"notdog1998/yourself-skill/SKILL.md","attachments":[{"id":"9a193fbc-1233-5c88-9681-e62817a498a5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9a193fbc-1233-5c88-9681-e62817a498a5/attachment","path":".gitignore","size":463,"sha256":"131413854148bded722bff09bdc22a69238e31d853e4203d0a00b1ea82d7b95b","contentType":"text/plain; charset=utf-8"},{"id":"2a44892d-423f-538c-957a-5a46bea3f399","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2a44892d-423f-538c-957a-5a46bea3f399/attachment.md","path":"README.md","size":9380,"sha256":"5573b6968d8af335ee3c624cd4d88bb6e4d37e50823999e1621d8278ac9b904f","contentType":"text/markdown; charset=utf-8"},{"id":"dbb1e325-1b98-54e9-b637-74a48ce5d41e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/dbb1e325-1b98-54e9-b637-74a48ce5d41e/attachment.md","path":"README_EN.md","size":9290,"sha256":"8254179c5706bc55487c07676d406b14e22e1d1d71e23d9bf1d819755a74d2dd","contentType":"text/markdown; charset=utf-8"},{"id":"de7a7aa8-01c7-5d0a-b9eb-56ee92f9ab85","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/de7a7aa8-01c7-5d0a-b9eb-56ee92f9ab85/attachment.md","path":"docs/PRD.md","size":11030,"sha256":"7c0d8b6c0ddadf60271aa4644ae2c1425147667f31a7cd847a41036f14b174ee","contentType":"text/markdown; charset=utf-8"},{"id":"27a36277-6ae0-557d-ab16-79560222e114","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/27a36277-6ae0-557d-ab16-79560222e114/attachment.md","path":"prompts/correction_handler.md","size":1699,"sha256":"27568914db2195577c5e7ab9ff21d9608cac5f88079109648fb5ae1dc4367cb9","contentType":"text/markdown; charset=utf-8"},{"id":"278b8ac1-0a10-5d38-a121-a885b4ad4dba","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/278b8ac1-0a10-5d38-a121-a885b4ad4dba/attachment.md","path":"prompts/intake.md","size":2010,"sha256":"f0b532d732858a85903cc5beb94ded93c1232491207ca66140a257df06106e0e","contentType":"text/markdown; charset=utf-8"},{"id":"0ff27fcc-4b04-5b87-accb-d22fd20e4bea","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0ff27fcc-4b04-5b87-accb-d22fd20e4bea/attachment.md","path":"prompts/merger.md","size":1465,"sha256":"206842424ee1f460428be9267eeed3a371e25f61d18e404f38fd14bb4fb05eea","contentType":"text/markdown; charset=utf-8"},{"id":"37326474-34af-5430-b762-dc7159637cad","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/37326474-34af-5430-b762-dc7159637cad/attachment.md","path":"prompts/persona_analyzer.md","size":5206,"sha256":"ca09868eba363c42bcb4fbd26915e542d5d7d58024c1a1ec60029a4727eee246","contentType":"text/markdown; charset=utf-8"},{"id":"489d829e-5443-55eb-ba99-22e21bf48f07","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/489d829e-5443-55eb-ba99-22e21bf48f07/attachment.md","path":"prompts/persona_builder.md","size":3638,"sha256":"7d35f546e0cf70910949eefb6df2eee1b1bde9b5dd0ce0b628e8cd7dec2339e3","contentType":"text/markdown; charset=utf-8"},{"id":"799a9344-d161-57c7-af81-670b848b0f8f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/799a9344-d161-57c7-af81-670b848b0f8f/attachment.md","path":"prompts/self_analyzer.md","size":2669,"sha256":"e7ef654dd6da758a1ce75dc1b2d76491270d0a5602f5ce6ce028a8fe9b501a6f","contentType":"text/markdown; charset=utf-8"},{"id":"b6ad2c72-157c-5a9a-a88a-b5b55d2a314a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b6ad2c72-157c-5a9a-a88a-b5b55d2a314a/attachment.md","path":"prompts/self_builder.md","size":1959,"sha256":"3a526591102aa3665763a492efae1756563d7a31f18701c5086dcec6f926ff44","contentType":"text/markdown; charset=utf-8"},{"id":"2ef83be1-b3ab-5e16-9d96-549f9d811520","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2ef83be1-b3ab-5e16-9d96-549f9d811520/attachment.txt","path":"requirements.txt","size":48,"sha256":"4834afa432f404d499e8c84be62fec8134fd3c49075ce42f2fc1371701cb8c30","contentType":"text/plain; charset=utf-8"},{"id":"f28f2563-8f0a-5509-a095-9decc1cde375","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f28f2563-8f0a-5509-a095-9decc1cde375/attachment.py","path":"tools/photo_analyzer.py","size":4331,"sha256":"989f5231aca93a061f5570ceceb9db0d078f55c421be957e6b123885767cbfda","contentType":"text/x-python; charset=utf-8"},{"id":"b31676ed-3ed8-51bb-af09-a78816e88247","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b31676ed-3ed8-51bb-af09-a78816e88247/attachment.py","path":"tools/qq_parser.py","size":4276,"sha256":"e0d6fbd1cbbe181cbb4a03627b78a57ac6d2cc03f35ed26bb8804d5e4897cc13","contentType":"text/x-python; charset=utf-8"},{"id":"c38f3582-435d-5bfc-8f87-34381df0b2f4","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c38f3582-435d-5bfc-8f87-34381df0b2f4/attachment.py","path":"tools/skill_writer.py","size":7246,"sha256":"4548655735aa3a69d7dd818e84cf792a0bd250171ab367f85415a22d0263244e","contentType":"text/x-python; charset=utf-8"},{"id":"f73c4e66-73de-52cd-845e-97474bf88343","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f73c4e66-73de-52cd-845e-97474bf88343/attachment.py","path":"tools/social_parser.py","size":2874,"sha256":"e10dd32b8dd2eff5b06fce90d95c4585ace187756e740cfd2c0eff52056c7c5a","contentType":"text/x-python; charset=utf-8"},{"id":"28f63c16-302f-5986-8bf6-d2929743af37","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/28f63c16-302f-5986-8bf6-d2929743af37/attachment.py","path":"tools/version_manager.py","size":3584,"sha256":"239ecb6839bb23ab50fecc7d7dd53600a464136995ad2560854fa557d48605e7","contentType":"text/x-python; charset=utf-8"},{"id":"77adcd27-32b0-5ace-b0d4-f3060489a386","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/77adcd27-32b0-5ace-b0d4-f3060489a386/attachment.py","path":"tools/wechat_parser.py","size":8765,"sha256":"c09a55c1f4c9aee55a6e67a4556cbb2dd702a19922971c6104d20389781331a2","contentType":"text/x-python; charset=utf-8"}],"bundle_sha256":"81aa84d43d57e7485c219011da510836470ff7fb29445a15920121cb43ee2bcc","attachment_count":18,"text_attachments":18,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"software-engineering","category_label":"Engineering"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"software-engineering","import_tag":"clean-skills-v1","description":"Why distill others when you can distill yourself? Deconstruct your chat history, diaries, and photos into a runnable digital self. | 与其蒸馏别人,不如蒸馏自己。欢迎加入数字永生!","allowed-tools":"Read, Write, Edit, Bash","argument-hint":"[your-name-or-slug]","user-invocable":true}},"renderedAt":1782979661572}

Language / 语言 : This skill supports both English and Chinese. Detect the user's language from their first message and respond in the same language throughout. Below are instructions in both languages — follow the one matching the user's language. 本 Skill 支持中英文。根据用户第一条消息的语言,全程使用同一语言回复。下方提供了两种语言的指令,按用户语言选择对应版本执行。 自己.skill 创建器(Claude Code 版) 触发条件 当用户说以下任意内容时启动: - - "帮我创建一个自己的 skill" - "我想把自己蒸馏成 skill" - "新建自我镜像" - "给我做一个我自己的 skill" 当用户对已有自我 Skill 说以下内容时,进入进化模式: - "我有新文件" / "追加" - "这不对" / "我不会这样说" / "我应该是" - 当用户说 时列出所有已生成的自我 Skill。 --- 工具使用规则 本 Skill 运行在 Claude Code 环境,使用以下工具: | 任务 | 使用工具 | |----…