myagent-ai 1.10.3 → 1.10.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/agents/main_agent.py +65 -18
  2. package/main.py +3 -3
  3. package/package.json +1 -1
  4. package/requirements.txt +6 -4
  5. package/skills/VLM/SKILL.md +34 -1
  6. package/skills/agent-browser/SKILL.md +0 -1
  7. package/skills/ai-news-collectors/SKILL.md +2 -2
  8. package/skills/auto-target-tracker/SKILL.md +6 -7
  9. package/skills/browser_skill.py +3 -2
  10. package/skills/coding-agent/SKILL.md +1 -2
  11. package/skills/contentanalysis/ExtractWisdom/SKILL.md +2 -5
  12. package/skills/docx/references/docx-js-advanced.md +1 -1
  13. package/skills/gui_skill.py +31 -56
  14. package/skills/market-research-reports/scripts/generate_market_visuals.py +1 -1
  15. package/skills/marketing-mode/SKILL.md +0 -16
  16. package/skills/marketing-mode/skill.json +1 -32
  17. package/skills/pdf/briefs/report.md +1 -1
  18. package/skills/podcast-generate/generate.ts +1 -1
  19. package/skills/ppt/SKILL.md +1 -1
  20. package/skills/ppt/ooxml/scripts/unpack.py +16 -32
  21. package/skills/ppt/ooxml/scripts/validate.py +5 -6
  22. package/skills/ppt/ooxml/scripts/validation/base.py +5 -2
  23. package/skills/ppt/ooxml/scripts/validation/pptx.py +8 -2
  24. package/skills/ppt/ooxml/scripts/validation/redlining.py +20 -20
  25. package/skills/ppt/scripts/pdf.py +917 -4
  26. package/skills/search_skill.py +156 -55
  27. package/skills/seo-content-writer/SKILL.md +4 -40
  28. package/skills/stock-analysis-skill/src/watchlist.ts +21 -5
  29. package/skills/web-shader-extractor/SKILL.md +1 -1
  30. package/skills/writing-plans/SKILL.md +1 -4
  31. package/web/__pycache__/api_server.cpython-312.pyc +0 -0
  32. package/web/api_server.py +18 -11
  33. package/web/ui/chat/chat.css +124 -5
  34. package/web/ui/chat/chat_main.js +66 -4
  35. package/web/ui/chat/flow_engine.js +186 -39
  36. package/skills/blog-writer/2024-02-17-radical-transparency-sales.md +0 -35
  37. package/skills/blog-writer/2024-02-17-raycast-spotlight-superpowers.md +0 -33
  38. package/skills/blog-writer/2024-02-17-short-form-content-marketing.md +0 -47
  39. package/skills/blog-writer/2024-02-17-typing-speed-benefits.md +0 -33
  40. package/skills/blog-writer/2024-03-14-effective-ai-prompts.md +0 -55
  41. package/skills/blog-writer/2024-11-08-ai-revolutionizing-entry-level-sales.md +0 -43
  42. package/skills/blog-writer/2025-11-12-why-ai-art-is-useless.md +0 -49
  43. package/skills/blog-writer/README.md +0 -2
  44. package/skills/blog-writer/SKILL.md +0 -158
  45. package/skills/blog-writer/_meta.json +0 -6
  46. package/skills/blog-writer/manage_examples.py +0 -90
  47. package/skills/blog-writer/style-guide.md +0 -160
  48. package/skills/content-strategy/SKILL.md +0 -181
  49. package/skills/content-strategy/_meta.json +0 -6
  50. package/skills/dream-interpreter/SKILL.md +0 -88
  51. package/skills/dream-interpreter/assets/example_asset.txt +0 -24
  52. package/skills/dream-interpreter/references/api_reference.md +0 -34
  53. package/skills/dream-interpreter/references/interpretation-guide.md +0 -83
  54. package/skills/dream-interpreter/references/output-schema.md +0 -65
  55. package/skills/dream-interpreter/references/questioning-strategy.md +0 -62
  56. package/skills/dream-interpreter/references/visual-mapping.md +0 -81
  57. package/skills/dream-interpreter/scripts/example.py +0 -19
  58. package/skills/dream-interpreter/skill.json +0 -7
  59. package/skills/example-skill/SKILL.md +0 -33
  60. package/skills/example-skill/run.sh +0 -11
  61. package/skills/fullstack-dev/SKILL.md +0 -205
  62. package/skills/get-fortune-analysis/SKILL.md +0 -370
  63. package/skills/get-fortune-analysis/lunar_python.py +0 -91
  64. package/skills/image-understand/LICENSE.txt +0 -21
  65. package/skills/image-understand/SKILL.md +0 -855
  66. package/skills/image-understand/scripts/image-understand.ts +0 -41
  67. package/skills/interview-designer/README.md +0 -70
  68. package/skills/interview-designer/SKILL.md +0 -53
  69. package/skills/interview-designer/_meta.json +0 -6
  70. package/skills/interview-designer/references/design_rationale.md +0 -43
  71. package/skills/interview-designer/templates/interview_guide_template.md +0 -62
  72. package/skills/mindfulness-meditation/SKILL.md +0 -65
  73. package/skills/mindfulness-meditation/_meta.json +0 -6
  74. package/skills/multi-search-engine/CHANGELOG.md +0 -15
  75. package/skills/multi-search-engine/CHANNELLOG.md +0 -48
  76. package/skills/multi-search-engine/SKILL.md +0 -78
  77. package/skills/multi-search-engine/_meta.json +0 -6
  78. package/skills/multi-search-engine/config.json +0 -14
  79. package/skills/multi-search-engine/metadata.json +0 -7
  80. package/skills/multi-search-engine/references/international-search.md +0 -651
  81. package/skills/skill-finder-cn/SKILL.md +0 -66
  82. package/skills/skill-finder-cn/_meta.json +0 -6
  83. package/skills/skill-finder-cn/package.json +0 -5
  84. package/skills/skill-finder-cn/scripts/search.sh +0 -15
  85. package/skills/skill-vetter/SKILL.md +0 -137
  86. package/skills/ui-ux-pro-max/data/charts.csv +0 -26
  87. package/skills/ui-ux-pro-max/data/colors.csv +0 -97
  88. package/skills/ui-ux-pro-max/data/icons.csv +0 -101
  89. package/skills/ui-ux-pro-max/data/landing.csv +0 -31
  90. package/skills/ui-ux-pro-max/data/products.csv +0 -97
  91. package/skills/ui-ux-pro-max/data/react-performance.csv +0 -45
  92. package/skills/ui-ux-pro-max/data/stacks/astro.csv +0 -54
  93. package/skills/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  94. package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  95. package/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -53
  96. package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  97. package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
  98. package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  99. package/skills/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  100. package/skills/ui-ux-pro-max/data/stacks/react.csv +0 -54
  101. package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +0 -61
  102. package/skills/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  103. package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  104. package/skills/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  105. package/skills/ui-ux-pro-max/data/styles.csv +0 -68
  106. package/skills/ui-ux-pro-max/data/typography.csv +0 -58
  107. package/skills/ui-ux-pro-max/data/ui-reasoning.csv +0 -101
  108. package/skills/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  109. package/skills/ui-ux-pro-max/data/web-interface.csv +0 -31
  110. package/skills/video-understand/LICENSE.txt +0 -21
  111. package/skills/video-understand/SKILL.md +0 -916
  112. package/skills/video-understand/scripts/video-understand.ts +0 -41
  113. package/skills/visual-design-foundations/SKILL.md +0 -318
  114. package/skills/visual-design-foundations/references/color-systems.md +0 -417
  115. package/skills/visual-design-foundations/references/spacing-iconography.md +0 -425
  116. package/skills/visual-design-foundations/references/typography-systems.md +0 -432
  117. /package/skills/TTS/{tts.ts → scripts/tts.ts} +0 -0
@@ -46,9 +46,7 @@ class MainAgent(BaseAgent):
46
46
  <task_plan>如"context"包含非空"task_plan",则更新它,变为当前输出。否则,根据"context", 以MD 的格式,制定新任务列表。</task_plan>
47
47
 
48
48
  <toolstocal>
49
- <tool><beforecalltext>连接词,介绍调用什么工具,达到什么目的。示例:首先,要调用网页查询工具,找到网页内容。</beforecalltext><toolname>工具名</toolname><parms>参数</parms><timeout>预估超时时限</timeout><callback>true/false,要求解析器在该工具执行完后是否要回调llm大模型,将所有工具输出结果+新构造的"context"输入给llm</callback></tool>
50
-
51
- <tool><beforecalltext>连接词,介绍调用什么工具,达到什么目的。示例:接下来,要调用命令行工具,获得ip地址。</beforecalltext><toolname>工具名</toolname><parms>参数</parms><timeout>预估超时时限</timeout><callback>true/false</callback></tool>
49
+ <tool><beforecalltext>连接词,介绍调用什么工具,达到什么目的。</beforecalltext><toolname>工具名</toolname><parms>JSON格式的参数对象,例如: {"query": "搜索关键词", "num": 5}</parms><timeout>预估超时时限(秒)</timeout><callback>true/false,要求解析器在该工具执行完后是否要回调llm大模型,将所有工具输出结果+新构造的"context"输入给llm</callback></tool>
52
50
  </toolstocal>
53
51
  <remember>仅从最新用户输入(userprint 或 usersays_correct)中提炼值得长期记忆的信息(如用户偏好、重要结论、错误经验等)。不要从历史对话中重复提炼旧记忆。如果本轮用户输入没有新信息需要记忆,则为空。</remember>
54
52
  <recall>下一轮执行需要调取的记忆,这里要设计接上记忆库</recall>
@@ -64,15 +62,23 @@ class MainAgent(BaseAgent):
64
62
  3. <usersays_correct>: 如果 context 中 usersays 非空,则根据对话语境优化为更准确的用户意图表达
65
63
  4. <task_plan>: 使用 Markdown 列表格式,每项包含任务描述和完成状态标记 [x]/[ ]
66
64
  5. <toolstocal>: 列出所有需要执行的工具调用,每个工具包含完整的参数说明
67
- 6. <timeout>: 预估超时秒数(简单操作10-30s,文件操作30-60s,网络请求60-120s,数据处理120-300s)
68
- 7. <callback>: 如果该工具的执行结果对后续决策有影响,设为 true;否则设为 false
69
- 8. <remember>: 仅从最新用户输入(userprint usersays_correct)中提炼值得长期记忆的关键信息,不要重复提炼历史对话中已有的记忆。如果本轮没有新信息需要记忆,则为空
70
- 9. <recall>: 描述下一轮执行时需要从记忆库中检索的内容关键词
71
- 10. <get_knowledge>: 如果当前 <knowledge> 内容不足以完成任务,填写需要从知识库搜索的关键词;否则为空
72
- 11. <askuser>: 当信息不足需要用户补充时,在此填写要问的问题
73
- 12. <finish>: 当任务已完成或需要等待用户回应时为 true;否则为 false 继续执行
74
- 13. 使用中文输出所有内容
75
- 14. 优先使用技能系统(skill)而非直接写代码执行
65
+ 6. <parms>: **必须使用严格合法的JSON格式**,例如 {"query": "关键词", "num": 10},不要使用其他格式
66
+ 7. <timeout>: 预估超时秒数(简单操作10-30s,文件操作30-60s,网络请求60-120s,数据处理120-300s)
67
+ 8. <callback>: 如果该工具的执行结果对后续决策有影响,设为 true;否则设为 false
68
+ 9. <remember>: 仅从最新用户输入(userprint 或 usersays_correct)中提炼值得长期记忆的关键信息,不要重复提炼历史对话中已有的记忆。如果本轮没有新信息需要记忆,则为空
69
+ 10. <recall>: 描述下一轮执行时需要从记忆库中检索的内容关键词
70
+ 11. <get_knowledge>: 如果当前 <knowledge> 内容不足以完成任务,填写需要从知识库搜索的关键词;否则为空
71
+ 12. <askuser>: 当信息不足需要用户补充时,在此填写要问的问题
72
+ 13. <finish>: 当任务已完成或需要等待用户回应时为 true;否则为 false 继续执行
73
+ 14. 使用中文输出所有内容
74
+
75
+ ## 工具选择指南
76
+ - **搜索信息**: 用 `web_search`(返回标题+URL+摘要),不要用 browser_open
77
+ - **读取网页内容**: 用 `web_read`(传入URL,提取正文)
78
+ - **浏览器交互**(填表、点击、截图等): 才使用 browser_open / browser_click 等
79
+ - **执行代码**: 用 `code` 工具(language: python/javascript/shell)
80
+ - **执行命令**: 用 `command` 或 `command_run` 工具
81
+ - **文件操作**: 用 `file_read` / `file_write` / `file_list` 等文件工具
76
82
  """
77
83
 
78
84
  def __init__(self, tool_agent=None, memory_agent=None, **kwargs):
@@ -414,7 +420,7 @@ class MainAgent(BaseAgent):
414
420
  if all_tool_outputs:
415
421
  messages.append(Message(
416
422
  role="user",
417
- content=f"[上一轮工具执行结果汇总]\n{truncate_str(all_tool_outputs, 15000)}"
423
+ content=f"[上一轮工具执行结果汇总]\n{truncate_str(all_tool_outputs, 30000)}"
418
424
  ))
419
425
  all_tool_outputs = ""
420
426
 
@@ -694,20 +700,59 @@ class MainAgent(BaseAgent):
694
700
 
695
701
  # 发送工具结果事件
696
702
  # 提取实际输出:SkillResult 有 output/message/data,ExecResult 有 stdout/stderr
703
+ def _format_data_for_llm(data):
704
+ """将结构化 data 格式化为 LLM 可读的文本"""
705
+ if data is None:
706
+ return ""
707
+ if isinstance(data, str):
708
+ return data
709
+ if isinstance(data, dict):
710
+ # 搜索结果列表格式 (web_search)
711
+ results = data.get("results")
712
+ if isinstance(results, list):
713
+ lines = []
714
+ for i, r in enumerate(results, 1):
715
+ title = r.get("title", "")
716
+ url = r.get("url", "")
717
+ snippet = r.get("snippet", "")
718
+ lines.append(f"{i}. {title}\n URL: {url}\n {snippet}")
719
+ return "\n".join(lines)
720
+ # 网页内容格式 (web_read)
721
+ if "url" in data and "content" in data:
722
+ title = data.get("title", "")
723
+ content = data.get("content", "")
724
+ lines = [f"标题: {title}", f"URL: {data['url']}", f"内容:\n{content}"]
725
+ return "\n".join(lines)
726
+ # 通用 dict: key-value 格式
727
+ parts = []
728
+ for k, v in data.items():
729
+ if k == "results":
730
+ continue # 已在上面处理
731
+ parts.append(f"{k}: {v}")
732
+ return "\n".join(parts) if parts else str(data)
733
+ if isinstance(data, list):
734
+ return "\n".join(str(item) for item in data)
735
+ return str(data)
736
+
697
737
  def _extract_tool_output(tr):
698
738
  """从工具结果中提取实际输出文本"""
739
+ # 优先使用 output 字段 (技能明确设置的输出)
699
740
  out = tr.get("output", "")
700
741
  if out:
701
742
  return out
743
+ # 如果 output 为空,尝试智能格式化 data 字段
744
+ data = tr.get("data")
745
+ if data is not None:
746
+ formatted = _format_data_for_llm(data)
747
+ if formatted:
748
+ return formatted
749
+ # 降级到 message / stdout / error
702
750
  out = tr.get("message", "")
703
751
  if out:
704
752
  return out
705
753
  out = tr.get("stdout", "")
706
754
  if out:
707
755
  return out
708
- data = tr.get("data")
709
- if data is not None:
710
- return str(data) if not isinstance(data, str) else data
711
756
  return tr.get("error", "")
712
757
 
713
758
  tool_output_text = _extract_tool_output(tool_result)
@@ -739,16 +784,18 @@ class MainAgent(BaseAgent):
739
784
  need_callback = True
740
785
 
741
786
  output_str = tool_output_text
787
+ # 搜索和网页读取类工具允许更长的输出
788
+ _max_output = 6000 if tool_name in ("web_search", "web_read", "url_read") else 3000
742
789
  tool_outputs_parts.append(
743
790
  f"### {before_call}\n"
744
791
  f"**工具**: {tool_name}\n"
745
792
  f"**结果**: {'成功' if tool_result.get('success') else '失败'}\n"
746
- f"{truncate_str(output_str, 2000)}\n"
793
+ f"{truncate_str(output_str, _max_output)}\n"
747
794
  )
748
795
 
749
796
  conversation_history.append(Message(
750
797
  role="assistant",
751
- content=f"执行工具 {tool_name}:\n{truncate_str(output_str, 3000)}",
798
+ content=f"执行工具 {tool_name}:\n{truncate_str(output_str, _max_output)}",
752
799
  ))
753
800
  conversation_history.append(Message(
754
801
  role="user",
package/main.py CHANGED
@@ -702,8 +702,8 @@ def create_tray_icon(app: MyAgentApp, web_port: int = 8767):
702
702
  try:
703
703
  import pystray
704
704
  from PIL import Image, ImageDraw, ImageFont
705
- except ImportError:
706
- # 自动尝试安装 pystray Pillow
705
+ except Exception:
706
+ # pystray 可能因缺少 GUI 环境 (X11/Wayland) 或未安装而失败
707
707
  try:
708
708
  from core.deps_checker import _pip_install
709
709
  logger.info("pystray/PIL 未安装,正在自动安装...")
@@ -719,7 +719,7 @@ def create_tray_icon(app: MyAgentApp, web_port: int = 8767):
719
719
  logger.warning(f"pystray/PIL 自动安装失败: {msg}")
720
720
  return None
721
721
  except Exception as e:
722
- logger.warning(f"pystray/PIL 安装异常: {e}")
722
+ logger.warning(f"pystray 初始化失败 (可能缺少 GUI 环境): {e}")
723
723
  return None
724
724
 
725
725
  # ── 图标颜色主题 ──
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "myagent-ai",
3
- "version": "1.10.3",
3
+ "version": "1.10.5",
4
4
  "description": "本地桌面端执行型AI助手 - Open Interpreter 风格 | Local Desktop Execution-Oriented AI Assistant",
5
5
  "main": "main.py",
6
6
  "bin": {
package/requirements.txt CHANGED
@@ -22,18 +22,20 @@ psutil>=5.9.0
22
22
  playwright>=1.41.0
23
23
 
24
24
  # ============================================================
25
- # 技能系统 - 桌面 GUI 自动化
25
+ # 技能系统 - 桌面 GUI 自动化 (可选,无头服务器不需要)
26
26
  # ============================================================
27
27
  # 注意: pynput 在 Linux 上会自动拉取 evdev 作为依赖
28
28
  # 如果 evdev 编译失败(缺少 linux-headers),不影响核心功能
29
29
  pynput>=1.7.6
30
- pygetwindow>=0.0.9
30
+ # pygetwindow 仅支持 Windows 和 macOS,Linux 不需要
31
+ # pygetwindow>=0.0.9
31
32
  mss>=9.0.0
32
33
 
33
34
  # ============================================================
34
- # 系统托盘 (默认启用)
35
+ # 系统托盘 (可选,需要 GUI 桌面环境)
35
36
  # ============================================================
36
- pystray>=0.19.5
37
+ # pystray 需要 X11/Wayland 显示环境,无头服务器不需要
38
+ # pystray>=0.19.5
37
39
  Pillow>=10.0.0
38
40
 
39
41
  # ============================================================
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: VLM
3
- description: Implement vision-based AI chat capabilities using the z-ai-web-dev-sdk. Use this skill when the user needs to analyze images, describe visual content, or create applications that combine image understanding with conversational AI. Supports image URLs and base64 encoded images for multimodal interactions.
3
+ description: "Implement vision-based AI chat capabilities using the z-ai-web-dev-sdk. Use this skill when the user needs to analyze images, describe visual content, analyze video content, or create applications that combine image/video understanding with conversational AI. Also supports image editing use cases. Supports image URLs, video URLs, base64 encoded images, and document files for multimodal interactions."
4
4
  license: MIT
5
5
  ---
6
6
 
@@ -20,6 +20,8 @@ this skill is located at above path in your project.
20
20
 
21
21
  Vision Chat allows you to build applications that can analyze images, extract information from visual content, and answer questions about images through natural language conversation.
22
22
 
23
+ > **Unified Vision Skill**: VLM is the single skill for all vision-based AI use cases. It handles **image understanding** (`image_url`), **video understanding** (`video_url`), and **image editing** — the previously separate `image-understand`, `video-understand`, and `image-edit` skills are now consolidated here.
24
+
23
25
  **IMPORTANT**: z-ai-web-dev-sdk MUST be used in backend code only. Never use it in client-side code.
24
26
 
25
27
  ## Prerequisites
@@ -284,6 +286,37 @@ async function analyzeLocalImage(imagePath, question) {
284
286
  }
285
287
  ```
286
288
 
289
+ ### Video Analysis
290
+
291
+ ```javascript
292
+ import ZAI from 'z-ai-web-dev-sdk';
293
+
294
+ async function analyzeVideo(videoUrl, prompt) {
295
+ const zai = await ZAI.create();
296
+
297
+ const response = await zai.chat.completions.createVision({
298
+ messages: [
299
+ {
300
+ role: 'user',
301
+ content: [
302
+ { type: 'text', text: prompt },
303
+ { type: 'video_url', video_url: { url: videoUrl } }
304
+ ]
305
+ }
306
+ ],
307
+ thinking: { type: 'disabled' }
308
+ });
309
+
310
+ return response.choices[0]?.message?.content;
311
+ }
312
+
313
+ // Usage
314
+ const summary = await analyzeVideo(
315
+ 'https://example.com/presentation.mp4',
316
+ 'Summarize the key points presented in this video'
317
+ );
318
+ ```
319
+
287
320
  ## Advanced Use Cases
288
321
 
289
322
  ### Conversational Vision Chat
@@ -6,7 +6,6 @@ read_when:
6
6
  - Extracting structured data from pages
7
7
  - Filling forms programmatically
8
8
  - Testing web UIs
9
- metadata: {"clawdbot":{"emoji":"🌐","requires":{"bins":["node","npm"]}}}
10
9
  allowed-tools: Bash(agent-browser:*)
11
10
  ---
12
11
 
@@ -29,7 +29,7 @@ description: AI 新闻聚合与热度排序工具。当用户询问 AI 领域最
29
29
  - site:substack.com AI news [当前月份]
30
30
  ```
31
31
 
32
- 发现周报后,用 web_fetch 获取全文,从中提取所有新闻线索。
32
+ 发现周报后,用 web-reader 获取全文,从中提取所有新闻线索。
33
33
 
34
34
  #### 维度 B:社区热度/病毒传播(关键维度 🔑)
35
35
 
@@ -142,7 +142,7 @@ description: AI 新闻聚合与热度排序工具。当用户询问 AI 领域最
142
142
 
143
143
  - 同一事件被多家报道时,合并为一条,选择最权威/详细的来源
144
144
  - 在摘要中注明"多家媒体报道"以体现热度
145
- - 改名/更名的项目视为同一事件(如 Clawdbot → Moltbot → OpenClaw)
145
+ - 改名/更名的项目视为同一事件
146
146
 
147
147
  ## 推荐新闻源
148
148
 
@@ -58,7 +58,7 @@ description: 自动目标进度追踪器。在对话中检测到目标相关图
58
58
 
59
59
  ### 4. 记录到目标日记
60
60
 
61
- 调用`edit_daily`工具将识别结果记录到当天的日常笔记中
61
+ 将识别结果保存到当天的日常笔记文件中(JSON 或 Markdown 格式)
62
62
 
63
63
 
64
64
  ### 5. 反馈给用户
@@ -269,7 +269,7 @@ This skill NEVER:
269
269
 
270
270
  **Data that stays local:**
271
271
  - 识别后的结构化结果
272
- - 记录到 日常笔记或长期记忆 和 USER.md 的内容
272
+ - 记录到日常笔记的内容
273
273
  - 打卡历史数据
274
274
 
275
275
  **This skill does NOT:**
@@ -291,7 +291,7 @@ This skill NEVER:
291
291
 
292
292
  ## 集成建议
293
293
 
294
- ### 与 SOUL.md 配合
294
+ ### 与日常工作流配合
295
295
 
296
296
  将自动追踪器整合到目标管理日常工作流中:
297
297
 
@@ -302,16 +302,15 @@ This skill NEVER:
302
302
  1. 自动调用 auto-target-tracker 识别内容
303
303
  2. 提取关键信息并估算进度
304
304
  3. 立刻记录到日常笔记中
305
- 4. 同步更新 USER.md 的目标进度
306
305
  ```
307
306
 
308
- ### 与 HEARTBEAT.md 配合
307
+ ### 与定期汇总配合
309
308
 
310
- 在心跳检查中包含:
309
+ 在定期汇总中包含:
311
310
 
312
311
  ```markdown
313
312
  ## 每日汇总
314
- - 22:00 自动读取今日所有打卡记录
313
+ - 自动读取今日所有打卡记录
315
314
  - 生成目标进度报告
316
315
  - 发送给用户
317
316
  ```
@@ -163,8 +163,9 @@ class BrowserOpenSkill(Skill):
163
163
 
164
164
  name = "browser_open"
165
165
  description = (
166
- "使用浏览器打开指定 URL,返回页面的结构化信息(标题、可见文本、链接、表单等)。"
167
- "浏览器会保持持久会话,后续操作可在同一页面继续。"
166
+ "【仅用于需要浏览器交互的场景】打开网页并返回结构化页面信息(标题、文本、链接、表单等)。"
167
+ "注意:单纯搜索信息请用 web_search,读取网页正文请用 web_read。"
168
+ "仅在需要填写表单、点击按钮、截图、执行JavaScript等浏览器交互时才使用此工具。"
168
169
  )
169
170
  category = "browser"
170
171
  parameters = [
@@ -2,10 +2,9 @@
2
2
  name: coding-agent
3
3
  slug: code
4
4
  version: 1.0.4
5
- homepage: https://clawic.com/skills/code
6
5
  description: Coding workflow with planning, implementation, verification, and testing for clean software development.
7
6
  changelog: Improved description for better discoverability
8
- metadata: {"clawdbot":{"emoji":"💻","requires":{"bins":[]},"os":["linux","darwin","win32"]}}
7
+ metadata: {"emoji":"💻","requires":{"bins":[]},"os":["linux","darwin","win32"]}
9
8
  ---
10
9
 
11
10
  ## When to Use
@@ -5,10 +5,7 @@ description: Content-adaptive wisdom extraction — detects what domains exist i
5
5
 
6
6
  ## Customization
7
7
 
8
- **Before executing, check for user customizations at:**
9
- `~/.claude/PAI/USER/SKILLCUSTOMIZATIONS/ExtractWisdom/`
10
-
11
- If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults.
8
+ Before executing, check for user customizations in the skill's local configuration directory. If custom PREFERENCES.md or configuration files exist, load and apply them. These override default behavior. If no customizations exist, proceed with skill defaults.
12
9
 
13
10
  # ExtractWisdom — Dynamic Content Extraction
14
11
 
@@ -60,7 +57,7 @@ The output should feel like your smartest friend watched/read the thing and is t
60
57
 
61
58
  ## Tone Rules (CRITICAL)
62
59
 
63
- **Canonical voice reference: `PAI/USER/WRITINGSTYLE.md`** read this file for the full voice definition. The bullets should sound like {PRINCIPAL.NAME} telling a friend about it over coffee. Not compressed info nuggets. Not clever one-liners. Actual spoken observations.
60
+ **Voice reference:** Use a conversational, natural tone. The bullets should sound like someone telling a friend about it over coffee. Not compressed info nuggets. Not clever one-liners. Actual spoken observations.
64
61
 
65
62
  **THREE LEVELS — we're aiming for Level 3:**
66
63
 
@@ -96,7 +96,7 @@ Use `keepNext: true` for:
96
96
 
97
97
  ## Page Break Rules
98
98
 
99
- Follow the document type strategy defined in SOUL.md Rule 1.
99
+ Follow the document type strategy defined in skill guidelines Rule 1.
100
100
 
101
101
  **Structural breaks (always):**
102
102
  - Cover page → TOC
@@ -176,19 +176,14 @@ class MouseClickSkill(Skill):
176
176
  """执行:鼠标点击"""
177
177
  try:
178
178
  from pynput.mouse import Controller, Button
179
- except ImportError:
180
- from core.deps_checker import ensure_skill_deps
181
- if not ensure_skill_deps("gui"):
182
- return SkillResult(
183
- success=False,
184
- error="pynput 安装失败,请手动运行: pip install pynput",
185
- )
186
- from pynput.mouse import Controller, Button
179
+ except Exception:
180
+ return SkillResult(
181
+ success=False,
182
+ error="pynput 不可用(当前平台缺少 GUI 环境或未安装)。仅在 Windows/macOS 桌面环境支持鼠标操作。",
183
+ )
187
184
 
188
185
  try:
189
186
  mouse = Controller()
190
-
191
- # 映射按钮名称
192
187
  button_map = {
193
188
  "left": Button.left,
194
189
  "right": Button.right,
@@ -259,14 +254,11 @@ class MouseDragSkill(Skill):
259
254
  """执行:鼠标拖拽"""
260
255
  try:
261
256
  from pynput.mouse import Controller, Button
262
- except ImportError:
263
- from core.deps_checker import ensure_skill_deps
264
- if not ensure_skill_deps("gui"):
265
- return SkillResult(
266
- success=False,
267
- error="pynput 安装失败,请手动运行: pip install pynput",
268
- )
269
- from pynput.mouse import Controller, Button
257
+ except Exception:
258
+ return SkillResult(
259
+ success=False,
260
+ error="pynput 不可用(当前平台缺少 GUI 环境或未安装)",
261
+ )
270
262
 
271
263
  try:
272
264
  mouse = Controller()
@@ -346,14 +338,11 @@ class TypeTextSkill(Skill):
346
338
  """执行:输入文本"""
347
339
  try:
348
340
  from pynput.keyboard import Controller
349
- except ImportError:
350
- from core.deps_checker import ensure_skill_deps
351
- if not ensure_skill_deps("gui"):
352
- return SkillResult(
353
- success=False,
354
- error="pynput 安装失败,请手动运行: pip install pynput",
355
- )
356
- from pynput.keyboard import Controller
341
+ except Exception:
342
+ return SkillResult(
343
+ success=False,
344
+ error="pynput 不可用(当前平台缺少 GUI 环境或未安装)",
345
+ )
357
346
 
358
347
  if not text:
359
348
  return SkillResult(success=False, error="缺少必需参数: text")
@@ -444,14 +433,11 @@ class HotkeySkill(Skill):
444
433
  """执行:按下快捷键"""
445
434
  try:
446
435
  from pynput.keyboard import Controller, Key, KeyCode
447
- except ImportError:
448
- from core.deps_checker import ensure_skill_deps
449
- if not ensure_skill_deps("gui"):
450
- return SkillResult(
451
- success=False,
452
- error="pynput 安装失败,请手动运行: pip install pynput",
453
- )
454
- from pynput.keyboard import Controller, Key, KeyCode
436
+ except Exception:
437
+ return SkillResult(
438
+ success=False,
439
+ error="pynput 不可用(当前平台缺少 GUI 环境或未安装)",
440
+ )
455
441
 
456
442
  if not action:
457
443
  return SkillResult(success=False, error="缺少必需参数: action")
@@ -558,13 +544,9 @@ class WindowListSkill(Skill):
558
544
  try:
559
545
  import pygetwindow as gw
560
546
  except ImportError:
561
- from core.deps_checker import ensure_skill_deps
562
- if not ensure_skill_deps("gui"):
563
- return SkillResult(
564
- success=False,
565
- error="pygetwindow 安装失败,请手动运行: pip install pygetwindow",
566
- )
567
- import pygetwindow as gw
547
+ return SkillResult(success=False, error="pygetwindow 未安装,请运行: pip install pygetwindow")
548
+ except NotImplementedError:
549
+ return SkillResult(success=False, error="当前平台不支持窗口管理(pygetwindow 仅支持 Windows 和 macOS)")
568
550
 
569
551
  try:
570
552
  windows = gw.getAllWindows()
@@ -632,13 +614,9 @@ class WindowFocusSkill(Skill):
632
614
  try:
633
615
  import pygetwindow as gw
634
616
  except ImportError:
635
- from core.deps_checker import ensure_skill_deps
636
- if not ensure_skill_deps("gui"):
637
- return SkillResult(
638
- success=False,
639
- error="pygetwindow 安装失败,请手动运行: pip install pygetwindow",
640
- )
641
- import pygetwindow as gw
617
+ return SkillResult(success=False, error="pygetwindow 未安装,请运行: pip install pygetwindow")
618
+ except NotImplementedError:
619
+ return SkillResult(success=False, error="当前平台不支持窗口管理(pygetwindow 仅支持 Windows 和 macOS)")
642
620
 
643
621
  if not title:
644
622
  return SkillResult(success=False, error="缺少必需参数: title")
@@ -728,14 +706,11 @@ class ScreenElementSkill(Skill):
728
706
  # 第一步:截图
729
707
  try:
730
708
  import mss
731
- except ImportError:
732
- from core.deps_checker import ensure_skill_deps
733
- if not ensure_skill_deps("gui"):
734
- return SkillResult(
735
- success=False,
736
- error="mss 安装失败,请手动运行: pip install mss",
737
- )
738
- import mss
709
+ except Exception:
710
+ return SkillResult(
711
+ success=False,
712
+ error="mss 不可用(当前平台缺少 GUI 环境或未安装)",
713
+ )
739
714
 
740
715
  try:
741
716
  screenshot_path = _generate_screenshot_path()
@@ -465,7 +465,7 @@ def main():
465
465
  if args.only:
466
466
  pattern = args.only.lower()
467
467
  visuals_to_generate = [
468
- v for v in VISUALS
468
+ v for v in CORE_VISUALS + EXTENDED_VISUALS
469
469
  if pattern in v[0].lower() or pattern in v[2].lower()
470
470
  ]
471
471
  print(f"Filtered to {len(visuals_to_generate)} visuals matching '{args.only}'\n")
@@ -4,22 +4,6 @@ description: "Marketing Mode combines 23 comprehensive marketing skills covering
4
4
  metadata:
5
5
  version: 1.0.0
6
6
  tags: ["marketing", "growth", "seo", "copywriting", "cro", "paid-ads", "strategy", "psychology", "launch", "pricing", "email", "social"]
7
- clawdbot:
8
- mode:
9
- name: "Mark the Marketer"
10
- role: "Growth & Marketing Strategist"
11
- emoji: "📈"
12
- personality: |
13
- Mark is a growth-obsessed marketing strategist who lives for the next conversion. He speaks in marketing frameworks, funnels, and metrics. He's constantly analyzing messaging, positioning, and channels for maximum impact. Mark doesn't just "post content" - he builds systems that convert.
14
- requires:
15
- bins: ["node"]
16
- npm: true
17
- install:
18
- - id: "skill-install"
19
- kind: "skill"
20
- source: "clawdhub"
21
- slug: "marketing-mode"
22
- label: "Activate Marketing Mode"
23
7
  ---
24
8
 
25
9
  # Marketing Mode - Complete Marketing Knowledge Base
@@ -5,7 +5,6 @@
5
5
  "tags": ["marketing", "growth", "founder", "positioning", "messaging", "funnel"],
6
6
  "author": "Seth Rose",
7
7
  "license": "MIT",
8
- "repository": "https://github.com/TheSethRose/clawdbot-skills",
9
8
  "documentation": "SKILL.md",
10
9
  "keywords": [
11
10
  "marketing",
@@ -17,35 +16,5 @@
17
16
  "conversion",
18
17
  "cta",
19
18
  "hooks"
20
- ],
21
- "engines": {
22
- "node": ">=18.0.0"
23
- },
24
- "install": {
25
- "npm": "npm install -g @thesethrose/marketing-mode"
26
- },
27
- "usage": {
28
- "cli": "clawdhub install marketing-mode"
29
- },
30
- "clawdbot": {
31
- "requires": {
32
- "node": true,
33
- "npm": true
34
- },
35
- "mode": {
36
- "name": "Mark the Marketer",
37
- "role": "Marketing Strategist",
38
- "emoji": "📈",
39
- "personality": "Growth-obsessed marketing strategist focused on funnels, positioning, and conversion.",
40
- "system_prompt_path": "mode-prompt.md"
41
- },
42
- "install": [
43
- {
44
- "id": "npm-pkg",
45
- "kind": "npm",
46
- "package": "@thesethrose/marketing-mode",
47
- "label": "Install Marketing Mode (npm)"
48
- }
49
- ]
50
- }
19
+ ]
51
20
  }
@@ -306,7 +306,7 @@ Run `fc-list` to get more fonts. Font files are typically located under:
306
306
 
307
307
  ### Page Breaks
308
308
 
309
- Follow the document type strategy defined in SOUL.md Rule 1.
309
+ Follow the document type strategy defined in skill guidelines Rule 1.
310
310
 
311
311
  **Structural breaks (always - MANDATORY):**
312
312
  - Between cover page and TOC - **cover must NEVER share a page with anything else**
@@ -238,7 +238,7 @@ async function callZAI(
238
238
 
239
239
  const completion = await zai.chat.completions.create({
240
240
  messages: [
241
- { role: 'assistant', content: systemPrompt },
241
+ { role: 'system', content: systemPrompt },
242
242
  { role: 'user', content: userPrompt },
243
243
  ],
244
244
  thinking: { type: 'disabled' },
@@ -67,7 +67,7 @@ For comments, speaker notes, slide layouts, animations, design elements, or comp
67
67
  python ooxml/scripts/unpack.py <office_file> <output_dir>
68
68
  ```
69
69
 
70
- **Note**: `unpack.py` is at `skills/pptx/ooxml/scripts/unpack.py` relative to the project root. If not found, run `find . -name "unpack.py"` to locate it.
70
+ **Note**: `unpack.py` is at `skills/ppt/ooxml/scripts/unpack.py` relative to the project root. If not found, run `find . -name "unpack.py"` to locate it.
71
71
 
72
72
  #### Key file structures
73
73