dijk-skills 1.0.0 → 1.0.1

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 (191) hide show
  1. package/README.md +36 -164
  2. package/bin/dijk-skills.js +78 -0
  3. package/common/skills/caveman/README.md +52 -0
  4. package/common/skills/caveman/SKILL.md +90 -0
  5. package/common/skills/grilling/SKILL.md +28 -0
  6. package/common/skills/grilling/agents/openai.yaml +3 -0
  7. package/common/skills/i-have-adhd/SKILL.md +140 -0
  8. package/{skills → common/skills}/i-have-adhd/agents/openai.yaml +1 -1
  9. package/lib/installer.js +55 -0
  10. package/package.json +11 -26
  11. package/tools/skills/mcp-builder/SKILL.md +236 -0
  12. package/tools/skills/mcp-builder/reference/evaluation.md +602 -0
  13. package/tools/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  14. package/tools/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  15. package/tools/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  16. package/tools/skills/mcp-builder/scripts/connections.py +151 -0
  17. package/tools/skills/mcp-builder/scripts/evaluation.py +373 -0
  18. package/tools/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  19. package/tools/skills/mcp-builder/scripts/requirements.txt +2 -0
  20. package/tools/skills/skill-creator/SKILL.md +485 -0
  21. package/tools/skills/skill-creator/agents/analyzer.md +274 -0
  22. package/tools/skills/skill-creator/agents/comparator.md +202 -0
  23. package/tools/skills/skill-creator/agents/grader.md +223 -0
  24. package/tools/skills/skill-creator/assets/eval_review.html +146 -0
  25. package/tools/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  26. package/tools/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  27. package/tools/skills/skill-creator/references/schemas.md +430 -0
  28. package/tools/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  29. package/tools/skills/skill-creator/scripts/generate_report.py +326 -0
  30. package/tools/skills/skill-creator/scripts/improve_description.py +247 -0
  31. package/{skills → tools/skills}/skill-creator/scripts/package_skill.py +33 -7
  32. package/{skills → tools/skills}/skill-creator/scripts/quick_validate.py +11 -3
  33. package/tools/skills/skill-creator/scripts/run_eval.py +310 -0
  34. package/tools/skills/skill-creator/scripts/run_loop.py +328 -0
  35. package/tools/skills/skill-creator/scripts/utils.py +47 -0
  36. package/writing/skills/grill-my-proposal/SKILL.md +120 -0
  37. package/writing/skills/last30days/.skillignore +13 -0
  38. package/writing/skills/last30days/SKILL.md +2307 -0
  39. package/writing/skills/last30days/agents/openai.yaml +8 -0
  40. package/writing/skills/last30days/assets/swimmom-mockup.jpeg +0 -0
  41. package/writing/skills/last30days/references/save-html-brief.md +204 -0
  42. package/writing/skills/last30days/scripts/box_chrome_login.py +181 -0
  43. package/writing/skills/last30days/scripts/briefing.py +272 -0
  44. package/writing/skills/last30days/scripts/build-skill.sh +39 -0
  45. package/writing/skills/last30days/scripts/compare.sh +61 -0
  46. package/writing/skills/last30days/scripts/evaluate_search_quality.py +588 -0
  47. package/writing/skills/last30days/scripts/last30days.py +3900 -0
  48. package/writing/skills/last30days/scripts/lib/__init__.py +1 -0
  49. package/writing/skills/last30days/scripts/lib/agentcookie.py +196 -0
  50. package/writing/skills/last30days/scripts/lib/amazon.py +877 -0
  51. package/writing/skills/last30days/scripts/lib/arxiv.py +324 -0
  52. package/writing/skills/last30days/scripts/lib/backends.py +700 -0
  53. package/writing/skills/last30days/scripts/lib/bird_x.py +757 -0
  54. package/writing/skills/last30days/scripts/lib/bluesky.py +323 -0
  55. package/writing/skills/last30days/scripts/lib/brightdata.py +290 -0
  56. package/writing/skills/last30days/scripts/lib/categories.py +289 -0
  57. package/writing/skills/last30days/scripts/lib/chrome_cdp.py +443 -0
  58. package/writing/skills/last30days/scripts/lib/chrome_cookies.py +460 -0
  59. package/writing/skills/last30days/scripts/lib/cjk.py +107 -0
  60. package/writing/skills/last30days/scripts/lib/cluster.py +248 -0
  61. package/writing/skills/last30days/scripts/lib/competitors.py +207 -0
  62. package/writing/skills/last30days/scripts/lib/cookie_extract.py +517 -0
  63. package/writing/skills/last30days/scripts/lib/corpus.py +439 -0
  64. package/writing/skills/last30days/scripts/lib/dates.py +169 -0
  65. package/writing/skills/last30days/scripts/lib/dedupe.py +145 -0
  66. package/writing/skills/last30days/scripts/lib/digg.py +440 -0
  67. package/writing/skills/last30days/scripts/lib/discovery_handoff.py +976 -0
  68. package/writing/skills/last30days/scripts/lib/doctor.py +1857 -0
  69. package/writing/skills/last30days/scripts/lib/dripstack.py +203 -0
  70. package/writing/skills/last30days/scripts/lib/entity_extract.py +164 -0
  71. package/writing/skills/last30days/scripts/lib/env.py +1568 -0
  72. package/writing/skills/last30days/scripts/lib/fanout.py +88 -0
  73. package/writing/skills/last30days/scripts/lib/feed.py +61 -0
  74. package/writing/skills/last30days/scripts/lib/freshness.py +566 -0
  75. package/writing/skills/last30days/scripts/lib/fusion.py +450 -0
  76. package/writing/skills/last30days/scripts/lib/github.py +1341 -0
  77. package/writing/skills/last30days/scripts/lib/grok_x.py +965 -0
  78. package/writing/skills/last30days/scripts/lib/grounding.py +373 -0
  79. package/writing/skills/last30days/scripts/lib/hackernews.py +400 -0
  80. package/writing/skills/last30days/scripts/lib/health.py +448 -0
  81. package/writing/skills/last30days/scripts/lib/hiring_signals.py +326 -0
  82. package/writing/skills/last30days/scripts/lib/hosted.py +321 -0
  83. package/writing/skills/last30days/scripts/lib/html_publish.py +107 -0
  84. package/writing/skills/last30days/scripts/lib/html_render.py +904 -0
  85. package/writing/skills/last30days/scripts/lib/http.py +1257 -0
  86. package/writing/skills/last30days/scripts/lib/instagram.py +636 -0
  87. package/writing/skills/last30days/scripts/lib/jobs.py +710 -0
  88. package/writing/skills/last30days/scripts/lib/library.py +269 -0
  89. package/writing/skills/last30days/scripts/lib/library_index.py +477 -0
  90. package/writing/skills/last30days/scripts/lib/linkedin.py +363 -0
  91. package/writing/skills/last30days/scripts/lib/log.py +38 -0
  92. package/writing/skills/last30days/scripts/lib/normalize.py +978 -0
  93. package/writing/skills/last30days/scripts/lib/parallel_mcp.py +232 -0
  94. package/writing/skills/last30days/scripts/lib/permission_preflight.py +242 -0
  95. package/writing/skills/last30days/scripts/lib/perplexity.py +1320 -0
  96. package/writing/skills/last30days/scripts/lib/pinterest.py +154 -0
  97. package/writing/skills/last30days/scripts/lib/pipeline.py +5176 -0
  98. package/writing/skills/last30days/scripts/lib/planner.py +1046 -0
  99. package/writing/skills/last30days/scripts/lib/polymarket.py +1056 -0
  100. package/writing/skills/last30days/scripts/lib/preflight.py +119 -0
  101. package/writing/skills/last30days/scripts/lib/prescriptions.py +312 -0
  102. package/writing/skills/last30days/scripts/lib/providers.py +383 -0
  103. package/writing/skills/last30days/scripts/lib/quality_nudge.py +408 -0
  104. package/writing/skills/last30days/scripts/lib/query.py +202 -0
  105. package/writing/skills/last30days/scripts/lib/reddit.py +804 -0
  106. package/writing/skills/last30days/scripts/lib/reddit_arctic.py +233 -0
  107. package/writing/skills/last30days/scripts/lib/reddit_enrich.py +322 -0
  108. package/writing/skills/last30days/scripts/lib/reddit_keyless.py +399 -0
  109. package/writing/skills/last30days/scripts/lib/reddit_listing.py +362 -0
  110. package/writing/skills/last30days/scripts/lib/reddit_public.py +274 -0
  111. package/writing/skills/last30days/scripts/lib/reddit_rss.py +238 -0
  112. package/writing/skills/last30days/scripts/lib/reddit_shreddit.py +228 -0
  113. package/writing/skills/last30days/scripts/lib/registers.py +133 -0
  114. package/writing/skills/last30days/scripts/lib/relevance.py +217 -0
  115. package/writing/skills/last30days/scripts/lib/render.py +3734 -0
  116. package/writing/skills/last30days/scripts/lib/rerank.py +968 -0
  117. package/writing/skills/last30days/scripts/lib/resolve.py +394 -0
  118. package/writing/skills/last30days/scripts/lib/safari_cookies.py +193 -0
  119. package/writing/skills/last30days/scripts/lib/schema.py +1096 -0
  120. package/writing/skills/last30days/scripts/lib/setup_wizard.py +1232 -0
  121. package/writing/skills/last30days/scripts/lib/signals.py +393 -0
  122. package/writing/skills/last30days/scripts/lib/skill_meta.py +33 -0
  123. package/writing/skills/last30days/scripts/lib/snippet.py +51 -0
  124. package/writing/skills/last30days/scripts/lib/stocktwits.py +374 -0
  125. package/writing/skills/last30days/scripts/lib/subproc.py +116 -0
  126. package/writing/skills/last30days/scripts/lib/techmeme.py +264 -0
  127. package/writing/skills/last30days/scripts/lib/telegram.py +317 -0
  128. package/writing/skills/last30days/scripts/lib/threads.py +207 -0
  129. package/writing/skills/last30days/scripts/lib/tiktok.py +600 -0
  130. package/writing/skills/last30days/scripts/lib/topic_shape.py +340 -0
  131. package/writing/skills/last30days/scripts/lib/transcribe.py +235 -0
  132. package/writing/skills/last30days/scripts/lib/trustpilot.py +528 -0
  133. package/writing/skills/last30days/scripts/lib/truthsocial.py +170 -0
  134. package/writing/skills/last30days/scripts/lib/ui.py +628 -0
  135. package/writing/skills/last30days/scripts/lib/vendor/bird-search/LICENSE +21 -0
  136. package/writing/skills/last30days/scripts/lib/vendor/bird-search/bird-search.mjs +147 -0
  137. package/writing/skills/last30days/scripts/lib/vendor/bird-search/lib/cookies.js +220 -0
  138. package/writing/skills/last30days/scripts/lib/vendor/bird-search/lib/features.json +17 -0
  139. package/writing/skills/last30days/scripts/lib/vendor/bird-search/lib/paginate-cursor.js +37 -0
  140. package/writing/skills/last30days/scripts/lib/vendor/bird-search/lib/query-ids.json +20 -0
  141. package/writing/skills/last30days/scripts/lib/vendor/bird-search/lib/runtime-features.js +151 -0
  142. package/writing/skills/last30days/scripts/lib/vendor/bird-search/lib/runtime-query-ids.js +264 -0
  143. package/writing/skills/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-base.js +129 -0
  144. package/writing/skills/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-constants.js +50 -0
  145. package/writing/skills/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-features.js +347 -0
  146. package/writing/skills/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-search.js +157 -0
  147. package/writing/skills/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-types.js +2 -0
  148. package/writing/skills/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-utils.js +511 -0
  149. package/writing/skills/last30days/scripts/lib/vendor/bird-search/package.json +13 -0
  150. package/writing/skills/last30days/scripts/lib/web_fetch_keyless.py +105 -0
  151. package/writing/skills/last30days/scripts/lib/web_search_keyless.py +217 -0
  152. package/writing/skills/last30days/scripts/lib/x_judge.py +292 -0
  153. package/writing/skills/last30days/scripts/lib/xai_x.py +236 -0
  154. package/writing/skills/last30days/scripts/lib/xiaohongshu_api.py +162 -0
  155. package/writing/skills/last30days/scripts/lib/xquik.py +406 -0
  156. package/writing/skills/last30days/scripts/lib/xurl_x.py +277 -0
  157. package/writing/skills/last30days/scripts/lib/youtube_yt.py +1758 -0
  158. package/writing/skills/last30days/scripts/setup-keychain.sh +125 -0
  159. package/writing/skills/last30days/scripts/setup-pass.sh +134 -0
  160. package/writing/skills/last30days/scripts/store.py +1283 -0
  161. package/writing/skills/last30days/scripts/test-v1-vs-v2.sh +220 -0
  162. package/writing/skills/last30days/scripts/test_device_auth.py +128 -0
  163. package/writing/skills/last30days/scripts/verify_v3.py +195 -0
  164. package/writing/skills/last30days/scripts/watchlist.py +319 -0
  165. package/writing/skills/vibe-insight/README.md +211 -0
  166. package/writing/skills/vibe-insight/SKILL.md +413 -0
  167. package/bin/install.js +0 -90
  168. package/skills/darwin-skill/SKILL.md +0 -492
  169. package/skills/darwin-skill/references/runtime-neutrality.md +0 -68
  170. package/skills/darwin-skill/references/skilllens-evidence.md +0 -142
  171. package/skills/darwin-skill/scripts/screenshot.mjs +0 -67
  172. package/skills/darwin-skill/templates/result-card-dark.html +0 -698
  173. package/skills/darwin-skill/templates/result-card-white.html +0 -444
  174. package/skills/darwin-skill/templates/result-card.html +0 -616
  175. package/skills/darwin-skill/test-prompts.json +0 -20
  176. package/skills/grilling/SKILL.md +0 -7
  177. package/skills/i-have-adhd/SKILL.md +0 -138
  178. package/skills/skill-creator/.clawhub/origin.json +0 -7
  179. package/skills/skill-creator/LICENSE.txt +0 -202
  180. package/skills/skill-creator/SKILL.md +0 -356
  181. package/skills/skill-creator/_meta.json +0 -6
  182. package/skills/skill-creator/references/output-patterns.md +0 -82
  183. package/skills/skill-creator/references/workflows.md +0 -28
  184. package/skills/skill-creator/scripts/init_skill.py +0 -303
  185. /package/{skills → common/skills}/humanizer-zh/SKILL.md +0 -0
  186. /package/{skills → common/skills}/i-have-adhd/agents/gemini.toml +0 -0
  187. /package/{agents/.gitkeep → tools/skills/skill-creator/scripts/__init__.py} +0 -0
  188. /package/{commands/.gitkeep → writing/skills/last30days/assets/aging-portrait.jpeg} +0 -0
  189. /package/{rules/.gitkeep → writing/skills/last30days/assets/claude-code-rap.mp3} +0 -0
  190. /package/{scripts/.gitkeep → writing/skills/last30days/assets/dog-as-human.png} +0 -0
  191. /package/{workflows/.gitkeep → writing/skills/last30days/assets/dog-original.jpeg} +0 -0
package/README.md CHANGED
@@ -1,193 +1,65 @@
1
1
  # dijk-skills
2
2
 
3
- AI 编码助手的 Skills 集合,遵循 [Agent Skills 规范](https://agentskills.io)。
3
+ Skills collection CLI installer. Install curated skills to your AI agent workspace.
4
4
 
5
- 支持 OpenCode、Claude Code、Codex、Cursor 等 70+ AI 编码助手。
6
-
7
- ## 安装
8
-
9
- ### 方式一:`npx skills`(推荐)
10
-
11
- 使用 [vercel-labs/skills](https://github.com/vercel-labs/skills) 生态标准安装,无需发布:
5
+ ## Install
12
6
 
13
7
  ```bash
14
- # 从本地路径安装所有 skills
15
- npx skills add /path/to/dijk-skills --skill '*' -g -y
16
-
17
- # 安装到指定 agent
18
- npx skills add /path/to/dijk-skills -a opencode -g -y
19
- npx skills add /path/to/dijk-skills -a claude-code -g -y
20
-
21
- # 只安装某个 skill
22
- npx skills add /path/to/dijk-skills --skill darwin-skill -g -y
23
-
24
- # 预览可用 skills(不安装)
25
- npx skills add /path/to/dijk-skills --list
8
+ npm install -g dijk-skills
9
+ # or use directly via npx
26
10
  ```
27
11
 
28
- 如果将此项目推送到独立 GitHub 仓库,还可以直接用仓库名安装:
12
+ ## Usage
29
13
 
30
14
  ```bash
31
- npx skills add your-username/dijk-skills -g -y
15
+ npx dijk-skills install [options]
32
16
  ```
33
17
 
34
- ### 方式二:`npx dijk-skills`
35
-
36
- 通过自定义安装脚本,支持 `--dir` 自定义目标目录:
37
-
38
- ```bash
39
- # 本地路径(无需发布)
40
- npx /path/to/dijk-skills
41
-
42
- # 指定目录
43
- npx /path/to/dijk-skills --dir ~/.config/opencode
44
-
45
- # 发布到 npm 后
46
- npx dijk-skills
47
- npx dijk-skills --dir ~/.config/opencode
48
- ```
18
+ ### Options
49
19
 
50
- ## 包含内容
20
+ | Option | Description | Default |
21
+ |--------|-------------|---------|
22
+ | `--modules <list>` | Comma-separated module names | `common` |
23
+ | `--dir <path>` | Target installation directory | `~/.agents` |
51
24
 
52
- | Skill | 说明 |
53
- |-------|------|
54
- | `darwin-skill` | Skill 自主优化器,基于 SkillLens 9 维评估 |
55
- | `grilling` | 方案压力测试,三阶段递进追问 |
56
- | `humanizer-zh` | 去除中文文本 AI 生成痕迹 |
57
- | `i-have-adhd` | ADHD 友好输出模式 |
58
- | `skill-creator` | Skill 创建指南 |
25
+ ### Modules
59
26
 
60
- 安装后位于:
27
+ | Module | Skills |
28
+ |--------|--------|
29
+ | `common` | grilling, humanizer-zh, i-have-adhd |
30
+ | `writing` | grill-my-proposal, vibe-insight |
31
+ | `tools` | darwin-skill, skill-creator |
32
+ | `coding` | *(empty, reserved for future skills)* |
61
33
 
62
- ```
63
- ~/.agents/skills/ # OpenCode / Amp / Codex
64
- ~/.claude/skills/ # Claude Code
65
- # 取决于 --agent 参数
66
- ├── darwin-skill/
67
- ├── grilling/
68
- ├── humanizer-zh/
69
- ├── i-have-adhd/
70
- └── skill-creator/
71
- ```
34
+ > Installing any module automatically includes `common`.
72
35
 
73
- ## 管理已安装的 skills
36
+ ### Examples
74
37
 
38
+ Install common skills to default location:
75
39
  ```bash
76
- # 查看已安装
77
- npx skills list
78
- npx skills list -g # 全局 skills
79
- npx skills list -a opencode # 按 agent 过滤
80
-
81
- # 更新
82
- npx skills update
83
-
84
- # 卸载
85
- npx skills remove darwin-skill
86
- npx skills remove --all
40
+ npx dijk-skills install
87
41
  ```
88
42
 
89
- ## 目录结构
90
-
91
- ```
92
- dijk-skills/
93
- ├── skills/ # Skill 定义
94
- │ ├── darwin-skill/
95
- │ │ ├── SKILL.md
96
- │ │ ├── references/
97
- │ │ ├── templates/
98
- │ │ └── test-prompts.json
99
- │ ├── grilling/
100
- │ │ └── SKILL.md
101
- │ ├── humanizer-zh/
102
- │ │ └── SKILL.md
103
- │ ├── i-have-adhd/
104
- │ │ ├── SKILL.md
105
- │ │ └── agents/
106
- │ └── skill-creator/
107
- │ ├── SKILL.md
108
- │ ├── references/
109
- │ └── scripts/
110
- ├── agents/ # Agent 定义(预留)
111
- ├── commands/ # 自定义命令(预留)
112
- ├── rules/ # 规则文件(预留)
113
- ├── scripts/ # 辅助脚本(预留)
114
- ├── workflows/ # 工作流定义(预留)
115
- ├── bin/
116
- │ └── install.js # 自定义安装脚本
117
- ├── package.json
118
- └── .npmignore
119
- ```
120
-
121
- ## 开发
122
-
123
- ### 环境要求
124
-
125
- - Node.js >= 18
126
-
127
- ### 本地开发
128
-
43
+ Install specific modules:
129
44
  ```bash
130
- git clone <repo-url>
131
- cd dijk-skills
132
-
133
- # 新建 Skill
134
- mkdir -p skills/my-new-skill
135
- # 编写 SKILL.md,必须包含 YAML frontmatter:
136
- # ---
137
- # name: my-new-skill
138
- # description: 一句话描述这个 skill 做什么
139
- # ---
140
-
141
- # 预览安装结果(不实际安装)
142
- npx skills add . --list
143
-
144
- # 测试安装到临时目录
145
- npx skills add . -a opencode -g --skill my-new-skill -y
146
-
147
- # 或使用自定义脚本
148
- node bin/install.js --dir /tmp/test-dijk
149
- ```
150
-
151
- ### 添加新 Skill
152
-
153
- 每个 Skill 是一个独立目录,至少包含 `SKILL.md`:
154
-
155
- ```
156
- skills/my-skill/
157
- ├── SKILL.md # 必需:Skill 主文件(含 YAML frontmatter)
158
- ├── references/ # 可选:参考资料
159
- ├── scripts/ # 可选:辅助脚本
160
- ├── templates/ # 可选:模板文件
161
- └── agents/ # 可选:关联 Agent
45
+ npx dijk-skills install --modules writing,tools
162
46
  ```
163
47
 
164
- `SKILL.md` 格式:
165
-
166
- ```markdown
167
- ---
168
- name: my-skill
169
- description: 一句话描述这个 skill 的用途和触发条件
170
- ---
171
-
172
- 这里写 skill 的详细指令...
48
+ Custom target directory:
49
+ ```bash
50
+ npx dijk-skills install --modules coding --dir ~/my-agents
173
51
  ```
174
52
 
175
- ## 构建与发布
53
+ ## Installed Structure
176
54
 
177
- ### 打包预览
55
+ Skills are installed to `{dir}/skills/{skill-name}/`:
178
56
 
179
- ```bash
180
- npm pack --dry-run
181
57
  ```
182
-
183
- ### 发布到 npm(可选)
184
-
185
- ```bash
186
- npm publish
58
+ ~/.agents/
59
+ └── skills/
60
+ ├── grilling/
61
+ ├── humanizer-zh/
62
+ ├── i-have-adhd/
63
+ ├── darwin-skill/
64
+ └── ...
187
65
  ```
188
-
189
- 发布后可通过 `npx dijk-skills` 安装。但推荐使用 `npx skills add` 安装,无需发布到 npm。
190
-
191
- ## 许可证
192
-
193
- MIT
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { parseArgs } from 'node:util';
4
+ import { install } from '../lib/installer.js';
5
+ import { dirname, resolve } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+
8
+ const __dirname = dirname(fileURLToPath(import.meta.url));
9
+ const packageRoot = resolve(__dirname, '..');
10
+
11
+ const { values, positionals } = parseArgs({
12
+ allowPositionals: true,
13
+ options: {
14
+ modules: {
15
+ type: 'string',
16
+ default: 'common'
17
+ },
18
+ dir: {
19
+ type: 'string',
20
+ default: '~/.agents'
21
+ },
22
+ help: {
23
+ type: 'boolean',
24
+ short: 'h'
25
+ }
26
+ }
27
+ });
28
+
29
+ const command = positionals[0];
30
+
31
+ if (values.help || !command) {
32
+ console.log(`Usage: npx dijk-skills install [options]
33
+
34
+ Commands:
35
+ install Install skills to target directory
36
+
37
+ Options:
38
+ --modules <list> Comma-separated module names or "all"
39
+ Values: coding,common,tools,writing,all
40
+ Default: common
41
+ --dir <path> Target installation directory
42
+ Default: ~/.agents
43
+ -h, --help Show this help message
44
+
45
+ Examples:
46
+ npx dijk-skills install
47
+ npx dijk-skills install --modules all
48
+ npx dijk-skills install --modules writing,tools
49
+ npx dijk-skills install --modules coding --dir ~/custom/path
50
+ `);
51
+ process.exit(0);
52
+ }
53
+
54
+ if (command !== 'install') {
55
+ console.error(`Unknown command: ${command}`);
56
+ console.error('Available commands: install');
57
+ process.exit(1);
58
+ }
59
+
60
+ const modules = values.modules === 'all'
61
+ ? ['coding', 'common', 'tools', 'writing']
62
+ : values.modules.split(',').map(m => m.trim()).filter(Boolean);
63
+
64
+ const targetDir = values.dir.startsWith('~')
65
+ ? values.dir.replace('~', process.env.HOME || process.env.USERPROFILE || '')
66
+ : values.dir;
67
+
68
+ try {
69
+ await install({
70
+ packageRoot,
71
+ modules,
72
+ targetDir: resolve(targetDir)
73
+ });
74
+ console.log('\n✓ Installation complete');
75
+ } catch (err) {
76
+ console.error('Installation failed:', err.message);
77
+ process.exit(1);
78
+ }
@@ -0,0 +1,52 @@
1
+ # caveman
2
+
3
+ Talk like smart caveman. Same brain, fewer tokens.
4
+
5
+ ## What it does
6
+
7
+ Compress model responses to caveman-style prose by dropping articles, filler,
8
+ pleasantries, and hedging. Instruction preserves technical detail, code blocks,
9
+ error strings, and symbols. Result depends on model and workload; no aggregate
10
+ reduction or quality-equivalence claim is published, and mode persists until
11
+ changed or stopped.
12
+
13
+ Six intensity levels:
14
+
15
+ | Level | What change |
16
+ |-------|-------------|
17
+ | `lite` | Drop filler/hedging. Sentences stay full. Professional but tight. |
18
+ | `full` | Default. Drop articles, fragments OK, short synonyms. |
19
+ | `ultra` | Bare fragments. Abbreviations (DB, auth, fn). Arrows for causality. |
20
+ | `wenyan-lite` | Classical Chinese register, light compression. |
21
+ | `wenyan-full` | Maximum 文言文 compression. |
22
+ | `wenyan-ultra` | Extreme classical compression. |
23
+
24
+ Auto-clarity rule: caveman drops to normal prose for security warnings, irreversible-action confirmations, multi-step sequences where fragment ambiguity risks misread, and when user repeats a question. Resumes after the clear part.
25
+
26
+ ## How to invoke
27
+
28
+ ```
29
+ /caveman # full mode (default)
30
+ /caveman lite # lighter compression
31
+ /caveman ultra # extreme compression
32
+ /caveman wenyan # classical Chinese
33
+ stop caveman # back to normal prose
34
+ ```
35
+
36
+ ## Example output
37
+
38
+ Question: "Why does my React component re-render?"
39
+
40
+ Normal prose:
41
+ > Your component re-renders because you create a new object reference each render. Wrapping it in `useMemo` will fix the issue.
42
+
43
+ Caveman (full):
44
+ > New object ref each render. Inline object prop = new ref = re-render. Wrap in `useMemo`.
45
+
46
+ Caveman (ultra):
47
+ > Inline obj prop → new ref → re-render. `useMemo`.
48
+
49
+ ## See also
50
+
51
+ - [`SKILL.md`](./SKILL.md): full LLM-facing instructions
52
+ - [Caveman README](../../README.md): repo overview, install, benchmarks
@@ -0,0 +1,90 @@
1
+ ---
2
+ name: caveman
3
+ description: >
4
+ Ultra-compressed communication mode that cuts output tokens while keeping
5
+ technical accuracy. Levels: lite, full, ultra and the wenyan variants. Use for
6
+ /caveman, "caveman mode", "talk like caveman", "be brief" or "less tokens".
7
+ ---
8
+
9
+ Respond terse like smart caveman. All technical substance stay. Only fluff die.
10
+
11
+ ## Persistence
12
+
13
+ Default style for this whole session, every response, until user say "stop caveman" or "normal mode". Keep terse on long sessions no filler drift.
14
+
15
+ Default: **full**. Switch: `/caveman lite|full|ultra|wenyan-lite|wenyan-full|wenyan-ultra|off`.
16
+
17
+ ## Rules
18
+
19
+ Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). No tool-call narration, no decorative tables/emoji, no dumping long raw error logs unless asked quote shortest decisive line. Standard well-known tech acronyms OK (DB/API/HTTP); never invent new abbreviations (cfg/impl/req/res/fn) tokenizer split them same as full word: zero token saved, reader still decode. Full word cheaper AND clearer. No causal arrows (→) either own token, save nothing. Technical terms exact. Code blocks unchanged. Errors quoted exact.
20
+
21
+ Never drop not/never/no/only/except flip meaning worse than any token saved. Numbers, units exact.
22
+
23
+ Never ADD word to sound caveman. Compression only style never grow output. No inserted pronoun or copula to fake broken grammar: "when it not" cost one token more than "when not" and say same thing. Keep correct verb form when correct form cost same "sees" one token, "see" one token, so mangle buy nothing and read worse. Same rule as abbreviations and arrows: if caveman phrasing not shorter than plain phrasing, use plain.
24
+
25
+ Clarity register: mix ASD-STE100 Simplified Technical English into caveman, always. One idea per sentence. Sentence short, target 20 words max. Active voice. Present tense where true. One word one meaning: same term for same thing every time, no synonym rotation. Instruction = imperative: "Run X", not "X should be run". Noun cluster 3 words max. Pronoun only with one clear referent, else repeat noun. Caveman cut filler; STE keep what make meaning unambiguous. Conflict between them → clarity win.
26
+
27
+ Tool calls: fire direct. No preamble, plan, or progress note before or between calls. After result: next call direct or final answer never announce next call. Text before call only to clarify, warn security/irreversible, or resolve ambiguity.
28
+
29
+ Preserve user's dominant language exactly reply in the language user writes, never switch regardless of example text or multilingual context elsewhere. Compress the style, not the language. Every emitted line in that language openings, pre-tool status lines, all not just final reply. ALWAYS keep technical terms, code, API names, CLI commands, commit-type keywords (feat/fix/...), and exact error strings verbatim unless user explicitly ask for translation.
30
+
31
+ 'Drop articles' = article languages only. Where small markers carry case/role (particles, postpositions), keep them grammar, not filler; compress politeness/filler instead.
32
+
33
+ Answer directly in this style. Skip "caveman mode on", "me caveman think", "Caveman:" prefix or recap redundant with the reply itself. No normal answer plus caveman duplicate. User ask what mode is → say so plainly.
34
+
35
+ Pattern: `[thing] [action] [reason]. [next step].`
36
+
37
+ Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
38
+ Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:"
39
+
40
+ ## Intensity
41
+
42
+ | Level | What change |
43
+ |-------|------------|
44
+ | **lite** | No filler/hedging. Keep articles + full sentences. Professional but tight |
45
+ | **full** | Drop articles, fragments OK, short synonyms. Classic caveman. No tool-call narration, no decorative tables/emoji, no long raw error-log dumps unless asked. Standard acronyms OK; no invented abbreviations |
46
+ | **ultra** | Strip conjunctions when cause-then-effect stay unambiguous. One word when one word enough. State each fact once. NO prose abbreviations (cfg/impl/req/res/fn/auth), NO arrows (X → Y) measured zero token saving under tokenizer, cost decode clarity. Code symbols, function names, API names, error strings: never touch |
47
+ | **wenyan-lite** | Semi-classical. Drop filler/hedging but keep grammar structure, classical register |
48
+ | **wenyan-full** | Maximum classical terseness. Fully 文言文. 80-90% character reduction chars, not tokens. Classical sentence patterns, verbs precede objects, subjects often omitted, classical particles (之/乃/為/其) |
49
+ | **wenyan-ultra** | Extreme abbreviation while keeping classical Chinese feel. Maximum compression, ultra terse |
50
+
51
+ Example "Why React component re-render?"
52
+ - lite: "Your component re-renders because you create a new object reference each render. Wrap it in `useMemo`."
53
+ - full: "New object ref each render. Inline object prop = new ref = re-render. Wrap in `useMemo`."
54
+ - ultra: "Inline obj prop, new ref, re-render. `useMemo`."
55
+ - wenyan-lite: "組件頻重繪,以每繪新生對象參照故。以 useMemo 包之。"
56
+ - wenyan-full: "每繪新生對象參照,故重繪;以 useMemo 包之則免。"
57
+ - wenyan-ultra: "新參照則重繪。useMemo 包之。"
58
+
59
+ Example "Explain database connection pooling."
60
+ - lite: "Connection pooling reuses open connections instead of creating new ones per request. Avoids repeated handshake overhead."
61
+ - full: "Pool reuse open DB connections. No new connection per request. Skip handshake overhead."
62
+ - ultra: "Pool reuse open DB connections. No per-request handshake."
63
+ - wenyan-full: "池蓄已開之連,不逐請而新開,省握手之費。"
64
+ - wenyan-ultra: "池蓄連,免逐請新開,省握手。"
65
+
66
+ Classical chars = wenyan modes only. Never swap a word to a classical char to shrink at non-wenyan levels.
67
+
68
+ ## Auto-Clarity
69
+
70
+ Drop caveman when:
71
+ - Security warnings
72
+ - Irreversible action confirmations
73
+ - Multi-step sequences where fragment order or omitted conjunctions risk misread
74
+ - Compression itself creates technical ambiguity (e.g., `"migrate table drop column backup first"` order unclear without articles/conjunctions)
75
+ - User asks to clarify or repeats question
76
+
77
+ Resume caveman after clear part done.
78
+
79
+ Example shows FORMAT only write warning in session language, not example's.
80
+
81
+ Example destructive op:
82
+ > **Warning:** This will permanently delete all rows in the `users` table and cannot be undone.
83
+ > ```sql
84
+ > DROP TABLE users;
85
+ > ```
86
+ > Caveman resume. Verify backup exist first.
87
+
88
+ ## Boundaries
89
+
90
+ Persisted outside chat: write normal prose code, comments, commits, docs, issue/PR/MR/defect/ticket/bug-report text, memory files, third-party messages (/caveman-compress exempt). "Open a defect" or "file a bug" mean the same as "open issue": body go to other humans, so body normal English. "stop caveman" or "normal mode": revert. Level persist until changed or session end.
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: grilling
3
+ description: Grill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any 'grill' trigger phrases.
4
+ ---
5
+
6
+ Interview the user relentlessly until you reach a shared understanding. Map this as a **design tree**: every decision branches into the decisions that hang off it.
7
+
8
+ Work the tree in **rounds**. The **frontier** is every decision whose prerequisites are already settled: the questions you can ask _now_ without guessing at answers you haven't heard yet. Ask the whole frontier in one round: number each question and give your recommended answer. Then wait for the user's answers before the next round.
9
+
10
+ Format a round like so:
11
+
12
+ ```
13
+ ❓ **Q1** - **<question title>**: <question body, might be multiple paragraphs, including multiple choices>
14
+
15
+ ➡️ <your recommended answer>
16
+
17
+ ---
18
+
19
+ ❓ **Q2** - **<question title>**: <question body, might be multiple paragraphs, including multiple choices>
20
+
21
+ ➡️ <your recommended answer>
22
+ ```
23
+
24
+ Each round the user answers reshapes the tree: settled decisions push the frontier outward and unblock questions that depended on them. Recompute the frontier and ask the next round. A question whose answer depends on another question still open in this round belongs to a _later_ round, not this one.
25
+
26
+ Finding _facts_ is your job, never the user's. When a frontier question needs a fact from the environment (filesystem, tools, etc.), dispatch a sub-agent to find it; don't ask the user for anything you could look up yourself. Don't block on it: a running exploration is an unsettled prerequisite, so only the questions downstream of it wait for the sub-agent to report; ask the rest of the frontier now. The _decisions_ are the user's: put each to them and wait.
27
+
28
+ The session is done when the frontier is empty: every branch of the design tree visited, nothing left silently assumed. Do not act on it until the user confirms you have reached a shared understanding.
@@ -0,0 +1,3 @@
1
+ interface:
2
+ display_name: "Grilling"
3
+ short_description: "Stress-test thinking a round of questions at a time"
@@ -0,0 +1,140 @@
1
+ ---
2
+ name: i-have-adhd
3
+ description: 'Shape output for a reader with ADHD: lead with the next action, number multi-step work, restate state across turns, suppress tangents, give specific time estimates, make wins visible. Invoke with /i-have-adhd; stays on until "stop adhd mode".'
4
+ disable-model-invocation: true
5
+ license: MIT
6
+ metadata:
7
+ tags: "ADHD, Output Style, Productivity, Formatting"
8
+ category: "productivity"
9
+ ---
10
+
11
+ # i-have-adhd
12
+
13
+ The reader has ADHD. Output is not just brief. It is shaped so an ADHD brain can act on it.
14
+
15
+ ## Persistence
16
+
17
+ These rules apply to every response for the rest of the session, not only this one. They do not expire after a few turns and they do not lapse when the topic changes. If you are unsure whether they still apply, they do.
18
+
19
+ Turn them off only when the reader says "stop adhd mode" or "normal mode". Confirm in one line, then return to your default style.
20
+
21
+ ## What ADHD changes about reading
22
+
23
+ Five facts drive every rule below:
24
+
25
+ 1. Working memory is small. Anything not on screen is forgotten. Do not ask the reader to "keep in mind X."
26
+ 2. Knowing the answer is not doing the answer. The friction between "got it" and "done it" is where work dies.
27
+ 3. Starting is the hardest step. The first action must be obvious, small, and doable now.
28
+ 4. Time estimates feel uniform. "A bit of work" and "a few hours" register the same. Vague estimates fail.
29
+ 5. Dopamine is scarce. Visible progress matters. Buried wins do not register.
30
+
31
+ ## Rules
32
+
33
+ ### 1. Lead with the next action
34
+
35
+ The first line is something the reader can do. Not context. Not a plan. The action.
36
+
37
+ Bad: "Let's think about this. Your auth flow has a few moving pieces..."
38
+ Good: "Run `npm install jsonwebtoken`, then edit `src/auth.ts:42`."
39
+
40
+ If the answer is a command, path, or snippet, it goes first. Prose comes after, if at all.
41
+
42
+ ### 2. Number multi-step tasks
43
+
44
+ If the work takes more than one step, write a numbered list. Each step is one bounded action. No step contains "and then" twice.
45
+
46
+ Use the fewest steps that still work. Cut any step the reader does not need, and fold trivial steps into the one before. A short path finished beats a complete path abandoned.
47
+
48
+ Bad: "First open the file, find the function, swap it out, then run the tests."
49
+
50
+ Good:
51
+ ```
52
+ 1. Open `src/auth.ts`
53
+ 2. Replace `verifyToken` (lines 42 to 58) with the snippet below
54
+ 3. Run `npm test -- auth.spec.ts`
55
+ ```
56
+
57
+ ### 3. End with one concrete next action
58
+
59
+ If anything is left open, name ONE thing the reader can do in under two minutes. Even "open the file" counts.
60
+
61
+ Bad: "Hope that helps. Let me know if you want to dig deeper."
62
+ Good: "Next: run `npm test` and paste the first failing line."
63
+
64
+ ### 4. Suppress tangents
65
+
66
+ If a second issue exists, finish the first, then offer the second as a separate question.
67
+
68
+ Bad: "Here's the fix. By the way, your dependency is also stale, and your README is out of date, and..."
69
+ Good: "Here's the fix. Separately: there is also a stale dependency. Want me to handle that next?"
70
+
71
+ A question that comes up mid-work is not a tangent: answer it yourself if you can and fold the result in. If it still needs the reader, surface it once, at the end.
72
+
73
+ ### 5. Restate state every turn
74
+
75
+ The reader cannot hold "we are on step 3 of 5" between messages. Restate it.
76
+
77
+ Bad: "Done. Ready for the next part?"
78
+ Good: "Step 3 of 5 done: schema updated. Next: backfill the new column. Run the script?"
79
+
80
+ If the harness has a task or plan tool, use it for multi-step work: one item per step, one in progress at a time. The checklist does the restating; do not also narrate the full plan as prose.
81
+
82
+ ### 6. Give specific time estimates
83
+
84
+ Vague estimates fail. Ballpark in concrete units.
85
+
86
+ Bad: "This will take some work."
87
+ Good: "About 15 minutes if tests already cover this. An afternoon if not."
88
+
89
+ ### 7. Make completed work visible
90
+
91
+ Show what now works, in concrete terms. Do not bury wins in a recap.
92
+
93
+ Bad: "I've made some changes to the auth flow. Among other things..."
94
+ Good: "Login now works with magic links. Try: `npm run dev`, open `/login`."
95
+
96
+ ### 8. Matter-of-fact tone for errors
97
+
98
+ Never use "Uh oh," "Oh no," or "There seems to be a problem." State cause and fix.
99
+
100
+ Bad: "Uh oh, the test is failing. There seems to be an issue..."
101
+ Good: "Test fails at `auth.spec.ts:42`: expected 200, got 401. Cause: missing auth header. Fix: add `Authorization: Bearer ${token}` to the request."
102
+
103
+ ### 9. Cap lists at 5 items
104
+
105
+ If a list grows past five, split into "do now" vs "later," or "must" vs "nice to have." Five items ranked beats ten unranked.
106
+
107
+ ### 10. No preamble, no recap, no closing pleasantries
108
+
109
+ Forbidden openers: "Great question," "Let me...", "I'll...", "Sure!", "Looking at your...", "To answer your question..."
110
+
111
+ Forbidden recaps after a completed task: "I've now done X, Y, and Z, which means..."
112
+
113
+ Forbidden closers: "Let me know if you need anything else," "Hope this helps," "Happy to clarify," "Feel free to ask."
114
+
115
+ Start with the answer. End when the answer is done.
116
+
117
+ ## When to break the rules
118
+
119
+ Override the defaults when:
120
+
121
+ 1. User asks to "explain" or "walk me through." Explain fully. Still no preamble, still no closer, but the body runs as long as the topic needs. Add headers so the reader can skim back.
122
+ 2. Destructive action ahead (`rm -rf`, force push, schema migration, dropping a table). Confirm before acting. Safety wins over brevity.
123
+ 3. Debug spiral. If the last three turns have been "still broken," stop iterating on code. Name the assumption that might be wrong. Ask one diagnostic question.
124
+ 4. Real ambiguity in the request. One short clarifying question beats guessing and rewriting.
125
+ 5. A rule fights the task. When a rule would delete the answer itself, the task wins; the shape stays. Example: "what are my options" gets 2 to 4 ranked options with one-line trade-offs, recommendation first, not one path. The options are the answer.
126
+ 6. A rule fights the harness. Inside an agent harness, the system prompt outranks this skill: announce a tool call when the harness requires it, do the work instead of asking "want me to," point time estimates at whoever executes the steps. Same principle as 5: the constraint wins, the shape stays.
127
+
128
+ ## Pre-send check
129
+
130
+ Before sending, delete:
131
+
132
+ 1. The first sentence if it announces what you are about to do.
133
+ 2. The last sentence if it asks "anything else?" or recaps what just happened.
134
+ 3. Any "by the way" sidebar.
135
+ 4. Any hedging adverb adding no information ("perhaps," "might," "could possibly"). Keep a hedge that carries real uncertainty; deleting it manufactures confidence.
136
+ 5. Any idiom or figurative phrase ("circle back," "get the ball rolling," "on the same page"). Replace with the literal action.
137
+
138
+ Then verify: if the reader reads only the first line and the last line, do they know (a) what to do next, and (b) what just happened?
139
+
140
+ If yes, send.
@@ -4,4 +4,4 @@ interface:
4
4
  default_prompt: "Use $i-have-adhd to make this response action-first and easy to execute."
5
5
 
6
6
  policy:
7
- allow_implicit_invocation: true
7
+ allow_implicit_invocation: false