@uluops/setup 0.2.0 → 0.6.0

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 (253) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -89
  3. package/assets/auto-tracker-save.mjs +142 -0
  4. package/assets/claude-code/agents/anxiety-reader-agent.md +464 -0
  5. package/assets/{agents → claude-code/agents}/api-contract-validator-agent.md +9 -228
  6. package/assets/{agents → claude-code/agents}/aristotle-analyst-agent.md +51 -4
  7. package/assets/{agents → claude-code/agents}/aristotle-explorer-agent.md +6 -2
  8. package/assets/{agents → claude-code/agents}/aristotle-forecaster-agent.md +15 -230
  9. package/assets/{agents → claude-code/agents}/aristotle-validator-agent.md +12 -252
  10. package/assets/{agents → claude-code/agents}/assumption-excavator-agent.md +21 -247
  11. package/assets/{agents → claude-code/agents}/code-auditor-agent.md +12 -255
  12. package/assets/{agents → claude-code/agents}/code-optimizer-agent.md +15 -236
  13. package/assets/{agents → claude-code/agents}/code-validator-agent.md +31 -300
  14. package/assets/claude-code/agents/docs-validator-agent.md +472 -0
  15. package/assets/{agents → claude-code/agents}/frontend-validator-agent.md +15 -258
  16. package/assets/{agents → claude-code/agents}/mcp-validator-agent.md +8 -252
  17. package/assets/{agents → claude-code/agents}/pre-implementation-architect-agent.md +8 -224
  18. package/assets/{agents → claude-code/agents}/prompt-engineer-agent.md +57 -290
  19. package/assets/{agents → claude-code/agents}/prompt-pattern-analyzer-agent.md +10 -225
  20. package/assets/{agents → claude-code/agents}/prompt-quality-validator-agent.md +11 -249
  21. package/assets/{agents → claude-code/agents}/public-interface-validator-agent.md +15 -268
  22. package/assets/claude-code/agents/release-readiness-agent.md +495 -0
  23. package/assets/{agents → claude-code/agents}/security-analyst-agent.md +236 -480
  24. package/assets/{agents → claude-code/agents}/test-architect-agent.md +16 -259
  25. package/assets/{agents → claude-code/agents}/type-safety-validator-agent.md +23 -266
  26. package/assets/{agents → claude-code/agents}/workflow-synthesis-agent.md +23 -226
  27. package/assets/claude-code/commands/agents/anxiety-reader.md +157 -0
  28. package/assets/{commands → claude-code/commands}/agents/api-contract.md +156 -135
  29. package/assets/{commands → claude-code/commands}/agents/architect.md +156 -135
  30. package/assets/claude-code/commands/agents/aristotle-analyst.md +157 -0
  31. package/assets/claude-code/commands/agents/aristotle-explorer.md +157 -0
  32. package/assets/claude-code/commands/agents/aristotle-forecaster.md +157 -0
  33. package/assets/claude-code/commands/agents/aristotle-validator.md +157 -0
  34. package/assets/{commands → claude-code/commands}/agents/assumption-excavator.md +49 -6
  35. package/assets/{commands → claude-code/commands}/agents/audit.md +156 -136
  36. package/assets/{commands → claude-code/commands}/agents/docs-validate.md +156 -133
  37. package/assets/{commands → claude-code/commands}/agents/frontend.md +156 -135
  38. package/assets/{commands → claude-code/commands}/agents/mcp-validate.md +156 -136
  39. package/assets/{commands → claude-code/commands}/agents/optimize.md +156 -133
  40. package/assets/{commands → claude-code/commands}/agents/pattern-analyzer.md +150 -126
  41. package/assets/{commands → claude-code/commands}/agents/prompt-quality.md +155 -134
  42. package/assets/claude-code/commands/agents/prompt-validate.md +155 -0
  43. package/assets/{commands → claude-code/commands}/agents/public-interface.md +156 -134
  44. package/assets/{commands → claude-code/commands}/agents/release.md +156 -135
  45. package/assets/{commands → claude-code/commands}/agents/security.md +156 -137
  46. package/assets/{commands → claude-code/commands}/agents/test-review.md +156 -136
  47. package/assets/{commands → claude-code/commands}/agents/type-safety.md +156 -135
  48. package/assets/{commands → claude-code/commands}/agents/validate.md +156 -134
  49. package/assets/claude-code/commands/agents/workflow-synthesis.md +157 -0
  50. package/assets/claude-code/commands/pipelines/aristotle.md +143 -0
  51. package/assets/claude-code/commands/pipelines/ship.md +188 -0
  52. package/assets/claude-code/commands/workflows/post-implementation.md +60 -0
  53. package/assets/claude-code/commands/workflows/pre-implementation.md +46 -0
  54. package/assets/claude-code/commands/workflows/prompt-audit.md +44 -0
  55. package/assets/codex/agents/anxiety-reader-agent.toml +462 -0
  56. package/assets/codex/agents/api-contract-validator-agent.toml +738 -0
  57. package/assets/codex/agents/aristotle-analyst-agent.toml +750 -0
  58. package/assets/codex/agents/aristotle-explorer-agent.toml +155 -0
  59. package/assets/codex/agents/aristotle-forecaster-agent.toml +449 -0
  60. package/assets/codex/agents/aristotle-validator-agent.toml +424 -0
  61. package/assets/codex/agents/assumption-excavator-agent.toml +1126 -0
  62. package/assets/codex/agents/code-auditor-agent.toml +815 -0
  63. package/assets/codex/agents/code-optimizer-agent.toml +652 -0
  64. package/assets/codex/agents/code-validator-agent.toml +573 -0
  65. package/assets/codex/agents/docs-validator-agent.toml +468 -0
  66. package/assets/codex/agents/frontend-validator-agent.toml +598 -0
  67. package/assets/codex/agents/mcp-validator-agent.toml +580 -0
  68. package/assets/codex/agents/pre-implementation-architect-agent.toml +817 -0
  69. package/assets/codex/agents/prompt-engineer-agent.toml +922 -0
  70. package/assets/codex/agents/prompt-pattern-analyzer-agent.toml +689 -0
  71. package/assets/codex/agents/prompt-quality-validator-agent.toml +777 -0
  72. package/assets/codex/agents/public-interface-validator-agent.toml +695 -0
  73. package/assets/codex/agents/release-readiness-agent.toml +491 -0
  74. package/assets/codex/agents/security-analyst-agent.toml +847 -0
  75. package/assets/codex/agents/test-architect-agent.toml +615 -0
  76. package/assets/codex/agents/type-safety-validator-agent.toml +686 -0
  77. package/assets/codex/agents/workflow-synthesis-agent.toml +631 -0
  78. package/assets/gemini-cli/agents/anxiety-reader-agent.md +470 -0
  79. package/assets/gemini-cli/agents/api-contract-validator-agent.md +747 -0
  80. package/assets/gemini-cli/agents/aristotle-analyst-agent.md +758 -0
  81. package/assets/gemini-cli/agents/aristotle-explorer-agent.md +163 -0
  82. package/assets/gemini-cli/agents/aristotle-forecaster-agent.md +457 -0
  83. package/assets/gemini-cli/agents/aristotle-validator-agent.md +432 -0
  84. package/assets/gemini-cli/agents/assumption-excavator-agent.md +1134 -0
  85. package/assets/gemini-cli/agents/code-auditor-agent.md +827 -0
  86. package/assets/gemini-cli/agents/code-optimizer-agent.md +661 -0
  87. package/assets/gemini-cli/agents/code-validator-agent.md +582 -0
  88. package/assets/gemini-cli/agents/docs-validator-agent.md +477 -0
  89. package/assets/gemini-cli/agents/frontend-validator-agent.md +610 -0
  90. package/assets/gemini-cli/agents/mcp-validator-agent.md +589 -0
  91. package/assets/gemini-cli/agents/pre-implementation-architect-agent.md +826 -0
  92. package/assets/gemini-cli/agents/prompt-engineer-agent.md +931 -0
  93. package/assets/gemini-cli/agents/prompt-pattern-analyzer-agent.md +698 -0
  94. package/assets/gemini-cli/agents/prompt-quality-validator-agent.md +786 -0
  95. package/assets/gemini-cli/agents/public-interface-validator-agent.md +707 -0
  96. package/assets/gemini-cli/agents/release-readiness-agent.md +500 -0
  97. package/assets/gemini-cli/agents/security-analyst-agent.md +859 -0
  98. package/assets/gemini-cli/agents/test-architect-agent.md +624 -0
  99. package/assets/gemini-cli/agents/type-safety-validator-agent.md +695 -0
  100. package/assets/gemini-cli/agents/workflow-synthesis-agent.md +639 -0
  101. package/assets/gemini-cli/commands/agents/anxiety-reader.toml +155 -0
  102. package/assets/gemini-cli/commands/agents/api-contract.toml +154 -0
  103. package/assets/gemini-cli/commands/agents/architect.toml +154 -0
  104. package/assets/gemini-cli/commands/agents/aristotle-analyst.toml +155 -0
  105. package/assets/gemini-cli/commands/agents/aristotle-explorer.toml +155 -0
  106. package/assets/gemini-cli/commands/agents/aristotle-forecaster.toml +155 -0
  107. package/assets/gemini-cli/commands/agents/aristotle-validator.toml +155 -0
  108. package/assets/gemini-cli/commands/agents/assumption-excavator.toml +155 -0
  109. package/assets/gemini-cli/commands/agents/audit.toml +154 -0
  110. package/assets/gemini-cli/commands/agents/docs-validate.toml +154 -0
  111. package/assets/gemini-cli/commands/agents/frontend.toml +154 -0
  112. package/assets/gemini-cli/commands/agents/mcp-validate.toml +154 -0
  113. package/assets/gemini-cli/commands/agents/optimize.toml +154 -0
  114. package/assets/gemini-cli/commands/agents/pattern-analyzer.toml +148 -0
  115. package/assets/gemini-cli/commands/agents/prompt-quality.toml +153 -0
  116. package/assets/gemini-cli/commands/agents/prompt-validate.toml +153 -0
  117. package/assets/gemini-cli/commands/agents/public-interface.toml +154 -0
  118. package/assets/gemini-cli/commands/agents/release.toml +154 -0
  119. package/assets/gemini-cli/commands/agents/security.toml +154 -0
  120. package/assets/gemini-cli/commands/agents/test-review.toml +154 -0
  121. package/assets/gemini-cli/commands/agents/type-safety.toml +154 -0
  122. package/assets/gemini-cli/commands/agents/validate.toml +154 -0
  123. package/assets/gemini-cli/commands/agents/workflow-synthesis.toml +155 -0
  124. package/assets/gemini-cli/commands/pipelines/aristotle.toml +139 -0
  125. package/assets/gemini-cli/commands/pipelines/ship.toml +184 -0
  126. package/assets/gemini-cli/commands/workflows/post-implementation.toml +56 -0
  127. package/assets/gemini-cli/commands/workflows/pre-implementation.toml +42 -0
  128. package/assets/gemini-cli/commands/workflows/prompt-audit.toml +40 -0
  129. package/assets/opencode/agents/anxiety-reader-agent.md +472 -0
  130. package/assets/opencode/agents/api-contract-validator-agent.md +749 -0
  131. package/assets/opencode/agents/aristotle-analyst-agent.md +760 -0
  132. package/assets/opencode/agents/aristotle-explorer-agent.md +164 -0
  133. package/assets/opencode/agents/aristotle-forecaster-agent.md +459 -0
  134. package/assets/opencode/agents/aristotle-validator-agent.md +434 -0
  135. package/assets/opencode/agents/assumption-excavator-agent.md +1136 -0
  136. package/assets/opencode/agents/code-auditor-agent.md +826 -0
  137. package/assets/opencode/agents/code-optimizer-agent.md +663 -0
  138. package/assets/opencode/agents/code-validator-agent.md +584 -0
  139. package/assets/opencode/agents/docs-validator-agent.md +479 -0
  140. package/assets/opencode/agents/frontend-validator-agent.md +609 -0
  141. package/assets/opencode/agents/mcp-validator-agent.md +591 -0
  142. package/assets/opencode/agents/pre-implementation-architect-agent.md +828 -0
  143. package/assets/opencode/agents/prompt-engineer-agent.md +933 -0
  144. package/assets/opencode/agents/prompt-pattern-analyzer-agent.md +700 -0
  145. package/assets/opencode/agents/prompt-quality-validator-agent.md +788 -0
  146. package/assets/opencode/agents/public-interface-validator-agent.md +706 -0
  147. package/assets/opencode/agents/release-readiness-agent.md +502 -0
  148. package/assets/opencode/agents/security-analyst-agent.md +858 -0
  149. package/assets/opencode/agents/test-architect-agent.md +626 -0
  150. package/assets/opencode/agents/type-safety-validator-agent.md +697 -0
  151. package/assets/opencode/agents/workflow-synthesis-agent.md +641 -0
  152. package/dist/cli.js +22 -380
  153. package/dist/commands/helpers.d.ts +73 -0
  154. package/dist/commands/helpers.js +274 -0
  155. package/dist/commands/setup.d.ts +13 -0
  156. package/dist/commands/setup.js +93 -0
  157. package/dist/commands/uninstall.d.ts +3 -0
  158. package/dist/commands/uninstall.js +126 -0
  159. package/dist/commands/verify.d.ts +1 -0
  160. package/dist/commands/verify.js +28 -0
  161. package/dist/harnesses/claude-code.d.ts +8 -0
  162. package/dist/harnesses/claude-code.js +74 -0
  163. package/dist/harnesses/codex.d.ts +15 -0
  164. package/dist/harnesses/codex.js +54 -0
  165. package/dist/harnesses/gemini-cli.d.ts +12 -0
  166. package/dist/harnesses/gemini-cli.js +80 -0
  167. package/dist/harnesses/index.d.ts +27 -0
  168. package/dist/harnesses/index.js +54 -0
  169. package/dist/harnesses/opencode.d.ts +14 -0
  170. package/dist/harnesses/opencode.js +139 -0
  171. package/dist/harnesses/types.d.ts +106 -0
  172. package/dist/harnesses/types.js +26 -0
  173. package/dist/lib/agent-transform.d.ts +12 -0
  174. package/dist/lib/agent-transform.js +129 -0
  175. package/dist/lib/asset-catalog.d.ts +9 -0
  176. package/dist/lib/asset-catalog.js +56 -0
  177. package/dist/lib/atomic-write.d.ts +11 -0
  178. package/dist/lib/atomic-write.js +28 -0
  179. package/dist/lib/config-merger.d.ts +9 -2
  180. package/dist/lib/config-merger.js +44 -7
  181. package/dist/lib/display.d.ts +14 -0
  182. package/dist/lib/display.js +66 -0
  183. package/dist/lib/file-ops.d.ts +11 -0
  184. package/dist/lib/file-ops.js +40 -4
  185. package/dist/lib/hash.d.ts +1 -0
  186. package/dist/lib/hash.js +2 -1
  187. package/dist/lib/health.d.ts +2 -0
  188. package/dist/lib/health.js +10 -0
  189. package/dist/lib/manifest.d.ts +51 -5
  190. package/dist/lib/manifest.js +146 -13
  191. package/dist/lib/paths.d.ts +30 -3
  192. package/dist/lib/paths.js +98 -12
  193. package/dist/lib/settings-merger.d.ts +31 -8
  194. package/dist/lib/settings-merger.js +87 -24
  195. package/dist/lib/version.d.ts +2 -0
  196. package/dist/lib/version.js +10 -0
  197. package/dist/steps/agents.d.ts +4 -1
  198. package/dist/steps/agents.js +48 -9
  199. package/dist/steps/auth.js +26 -10
  200. package/dist/steps/cli.d.ts +53 -0
  201. package/dist/steps/cli.js +90 -0
  202. package/dist/steps/commands.d.ts +6 -1
  203. package/dist/steps/commands.js +36 -9
  204. package/dist/steps/detect.d.ts +3 -0
  205. package/dist/steps/detect.js +11 -0
  206. package/dist/steps/mcp.d.ts +6 -2
  207. package/dist/steps/mcp.js +39 -22
  208. package/dist/steps/metrics.d.ts +26 -10
  209. package/dist/steps/metrics.js +108 -108
  210. package/dist/steps/shell.d.ts +2 -0
  211. package/dist/steps/shell.js +26 -9
  212. package/dist/steps/signup.d.ts +7 -4
  213. package/dist/steps/signup.js +29 -20
  214. package/dist/steps/verify.d.ts +2 -2
  215. package/dist/steps/verify.js +118 -112
  216. package/package.json +40 -14
  217. package/assets/agents/docs-validator-agent.md +0 -490
  218. package/assets/agents/release-readiness-agent.md +0 -482
  219. package/assets/commands/agents/aristotle-analyst.md +0 -115
  220. package/assets/commands/agents/aristotle-explorer.md +0 -92
  221. package/assets/commands/agents/aristotle-forecaster.md +0 -114
  222. package/assets/commands/agents/aristotle-validator.md +0 -114
  223. package/assets/commands/agents/prompt-validate.md +0 -135
  224. package/assets/commands/agents/workflow-synthesis.md +0 -101
  225. package/assets/commands/workflows/aristotle.md +0 -543
  226. package/assets/commands/workflows/post-implementation.md +0 -577
  227. package/assets/commands/workflows/pre-implementation.md +0 -670
  228. package/assets/commands/workflows/prompt-audit.md +0 -754
  229. package/assets/commands/workflows/ship.md +0 -721
  230. package/dist/test/auth.test.d.ts +0 -1
  231. package/dist/test/auth.test.js +0 -43
  232. package/dist/test/config-io.test.d.ts +0 -1
  233. package/dist/test/config-io.test.js +0 -56
  234. package/dist/test/config-merger.test.d.ts +0 -1
  235. package/dist/test/config-merger.test.js +0 -94
  236. package/dist/test/detect.test.d.ts +0 -1
  237. package/dist/test/detect.test.js +0 -25
  238. package/dist/test/file-ops.test.d.ts +0 -1
  239. package/dist/test/file-ops.test.js +0 -100
  240. package/dist/test/hash.test.d.ts +0 -1
  241. package/dist/test/hash.test.js +0 -14
  242. package/dist/test/manifest.test.d.ts +0 -1
  243. package/dist/test/manifest.test.js +0 -78
  244. package/dist/test/paths.test.d.ts +0 -1
  245. package/dist/test/paths.test.js +0 -30
  246. package/dist/test/settings-merger.test.d.ts +0 -1
  247. package/dist/test/settings-merger.test.js +0 -167
  248. package/dist/test/shell-profile.test.d.ts +0 -1
  249. package/dist/test/shell-profile.test.js +0 -40
  250. package/dist/test/shell.test.d.ts +0 -1
  251. package/dist/test/shell.test.js +0 -71
  252. package/dist/test/signup.test.d.ts +0 -1
  253. package/dist/test/signup.test.js +0 -83
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 UluOps
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -4,21 +4,57 @@
4
4
 
5
5
  # @uluops/setup
6
6
 
7
- Zero-friction installer for [UluOps](https://uluops.ai) + Claude Code. One command sets up MCP servers, agents, and slash commands.
7
+ Zero-friction installer for [UluOps](https://uluops.ai) agentic harnesses. One command sets up MCP servers, agents, and slash commands for Claude Code, OpenCode, and more.
8
8
 
9
9
  ```
10
10
  npx @uluops/setup
11
11
  ```
12
12
 
13
+ > **⚠️ Windows Users:** Native Windows is not yet supported. Please use **WSL2 (Ubuntu)** and run the setup inside your WSL environment.
14
+
15
+ ## Supported harnesses
16
+
17
+ | Harness | Status | Alias | Config |
18
+ |---------|--------|-------|--------|
19
+ | Claude Code | Fully supported (default) | `claude` | `~/.claude.json` |
20
+ | OpenCode | Fully supported | `oc` | `~/.config/opencode/opencode.json` |
21
+ | Gemini CLI | Fully supported | `gemini` | `~/.gemini/settings.json` |
22
+ | Codex | Coming soon | — | `~/.codex/config.toml` |
23
+
24
+ ```bash
25
+ # Install for Claude Code (default)
26
+ npx @uluops/setup
27
+
28
+ # Install for OpenCode
29
+ npx @uluops/setup --harness opencode
30
+
31
+ # Install for Gemini CLI
32
+ npx @uluops/setup --harness gemini-cli
33
+ ```
34
+
13
35
  ## What it does
14
36
 
15
- | Artifact | Count | Destination |
16
- |----------|-------|-------------|
37
+ | Artifact | Count | Destination (Claude Code) |
38
+ |----------|-------|---------------------------|
17
39
  | MCP servers | 2 | `~/.claude.json` |
18
- | Agent definitions | 22 | `~/.claude/agents/` |
19
- | Slash commands | 27 | `~/.claude/commands/` |
40
+ | Agent definitions | 23 | `~/.claude/agents/` |
41
+ | Agent commands | 23 | `~/.claude/commands/agents/` |
42
+ | Workflow commands | 3 | `~/.claude/commands/workflows/` |
43
+ | Pipeline commands | 2 | `~/.claude/commands/pipelines/` |
44
+ | Agent metrics hook | 1 | `~/.claude/tools/agent-metrics/` |
20
45
 
21
- The installer validates your API key, writes MCP config for the tracker and registry servers, copies pre-rendered agent and command definitions, and runs a health check against both APIs.
46
+ > Paths shown are for Claude Code (default). Gemini CLI installs agents as `.md` and commands as `.toml` to `~/.gemini/`. OpenCode installs agents to `~/.config/opencode/agents/`. Agent definitions and commands are transformed to the target harness format at install time from a single source.
47
+
48
+ The installer runs these steps in sequence:
49
+
50
+ 1. **Authenticate** — Validates your API key (or creates an account with `--signup`)
51
+ 2. **MCP config** — Writes tracker and registry server entries to the harness config
52
+ 3. **Definitions** — Copies pre-rendered agent definition files
53
+ 4. **Metrics hook** — Configures a post-agent hook for automatic run capture (Claude Code and Gemini CLI)
54
+ 5. **`ulu` CLI** *(optional)* — Offers to install `@uluops/cli` globally. Interactive runs are prompted (default Y); non-interactive runs skip unless `--with-cli` is passed. `--no-cli` always skips. The install is best-effort: if `npm install -g` fails (permissions, nvm prefix, etc.) the rest of setup still completes and a manual install command is printed.
55
+ 6. **Health check** — Verifies both API endpoints are reachable
56
+
57
+ > When this setup installs the CLI, the install is recorded in the manifest so `--uninstall` removes it symmetrically. If the CLI was already on your PATH before running setup, it is left alone on uninstall.
22
58
 
23
59
  ## Usage
24
60
 
@@ -26,7 +62,7 @@ The installer validates your API key, writes MCP config for the tracker and regi
26
62
  npx @uluops/setup
27
63
  ```
28
64
 
29
- You'll be prompted for your API key (get one at [app.uluops.ai/settings/api-keys](https://app.uluops.ai/settings/api-keys)). Everything else uses smart defaults — no other prompts.
65
+ You'll be prompted for your API key (get one at [app.uluops.ai/settings/api-keys](https://app.uluops.ai/settings/api-keys)). Everything else uses smart defaults — no other prompts. See [What it does](#what-it-does) for the full list of changes made.
30
66
 
31
67
  **New to UluOps?** Create an account without leaving the terminal:
32
68
 
@@ -36,16 +72,7 @@ npx @uluops/setup --signup
36
72
 
37
73
  You'll be prompted for email and password. Account + API key are created automatically.
38
74
 
39
- **Restart Claude Code after setup to load agents.**
40
-
41
- ### API key resolution
42
-
43
- The installer checks these sources in order:
44
-
45
- 1. `--api-key <key>` flag
46
- 2. `ULUOPS_API_KEY` environment variable
47
- 3. `~/.uluops/credentials.json` (existing CLI auth)
48
- 4. Interactive prompt
75
+ > **🛑 IMPORTANT:** You must restart your harness (e.g., restart Claude Code) after setup to load the new agents and commands.
49
76
 
50
77
  ### Options
51
78
 
@@ -53,24 +80,67 @@ The installer checks these sources in order:
53
80
  npx @uluops/setup [options]
54
81
 
55
82
  --api-key <key> API key (skip prompt)
83
+ --harness <name> Target harness: claude-code, opencode, gemini-cli, codex
84
+ Aliases: claude, oc, gemini (default: claude-code)
56
85
  --signup Create account from terminal (email + password)
57
86
  --scope <mode> MCP config scope: "global" or "local" (default: global)
58
- --local-defs Save definitions to ./uluops/ instead of ~/.claude/
87
+ --local-defs Save definitions to ./uluops/ for review
59
88
  --shell Write API key export to shell profile
89
+ --with-cli Install @uluops/cli globally (skip prompt)
90
+ --no-cli Skip @uluops/cli install (skip prompt)
60
91
  --skip-validation Accept API key without server verification
61
92
  --list Show available agents and workflows without installing
62
- --verify Check existing installation health (no changes)
93
+ --verify Check installation health: manifest, files, MCP config, API connectivity (no changes)
63
94
  --uninstall Remove all UluOps-managed artifacts
64
95
  --dry-run Show what would happen without making changes
65
96
  -y, --yes Skip confirmations
66
97
  ```
67
98
 
99
+ ### Advanced Commands
100
+
101
+ #### Preview available agents (`--list`)
102
+ Displays all agents and workflows included in the current version of the setup tool.
103
+
104
+ ```text
105
+ ⟨u⟩ ulu·ops v0.6.0 — available agents and workflows
106
+
107
+ WORKFLOWS
108
+ /workflows:post-implementation Iterative validation after coding
109
+ /workflows:pre-implementation Design validation before implementation
110
+ /workflows:prompt-audit Strategic prompt quality audit
111
+
112
+ AGENTS (run individually) MODEL
113
+ /agents:code-validator Validate cod... sonnet
114
+ /agents:type-safety Deep TypeScr... sonnet
115
+ /agents:security-analyst Comprehensiv... sonnet
116
+ /agents:test-architect Validate tes... sonnet
117
+ ...
118
+ ```
119
+
120
+ #### Check installation health (`--verify`)
121
+ Validates your current installation against the local manifest and checks API connectivity.
122
+
123
+ ```text
124
+ ⟨u⟩ ulu·ops Installation Check v0.6.0
125
+
126
+ ✓ Manifest found (~/.uluops/manifest.json)
127
+ ✓ All 23 agents present in ~/.claude/agents/
128
+ ✓ MCP servers configured in ~/.claude.json
129
+ ✓ API connectivity: Tracker (Online)
130
+ ✓ API connectivity: Registry (Online)
131
+
132
+ All checks passed.
133
+ ```
134
+
68
135
  ### Examples
69
136
 
70
137
  ```bash
71
138
  # New user — create account + install in one shot
72
139
  npx @uluops/setup --signup
73
140
 
141
+ # Install for OpenCode
142
+ npx @uluops/setup --harness opencode
143
+
74
144
  # Non-interactive (CI/automation)
75
145
  npx @uluops/setup --api-key ulr_abc123 -y
76
146
 
@@ -83,64 +153,13 @@ npx @uluops/setup --dry-run --api-key ulr_abc123
83
153
  # Persist API key in shell profile (~/.zshrc, ~/.bashrc, etc.)
84
154
  npx @uluops/setup --shell
85
155
 
86
- # Preview what's included without installing
87
- npx @uluops/setup --list
156
+ # Install the ulu CLI globally alongside harness setup
157
+ npx @uluops/setup --with-cli
88
158
 
89
- # Check existing installation
90
- npx @uluops/setup --verify
91
-
92
- # Clean removal
93
- npx @uluops/setup --uninstall
159
+ # Skip the CLI prompt entirely (interactive runs default to asking)
160
+ npx @uluops/setup --no-cli
94
161
  ```
95
162
 
96
- ## What's included
97
-
98
- ### Workflows
99
-
100
- | Command | Description |
101
- |---------|-------------|
102
- | `/workflows:pre-implementation` | Design review before coding |
103
- | `/workflows:post-implementation` | Iterative validation loop |
104
- | `/workflows:ship` | Final gate before shipping |
105
- | `/workflows:prompt-audit` | Audit agent prompts |
106
- | `/workflows:aristotle` | Four-phase Aristotelian analysis |
107
-
108
- ### Agents
109
-
110
- | Command | Focus | Model |
111
- |---------|-------|-------|
112
- | `/agents:validate` | Code quality | sonnet |
113
- | `/agents:type-safety` | TypeScript | sonnet |
114
- | `/agents:test-review` | Test quality | sonnet |
115
- | `/agents:optimize` | Performance | sonnet |
116
- | `/agents:frontend` | React/a11y | sonnet |
117
- | `/agents:mcp-validate` | MCP compliance | sonnet |
118
- | `/agents:architect` | Design review | sonnet |
119
- | `/agents:audit` | Runtime bugs | opus |
120
- | `/agents:security` | OWASP | sonnet |
121
- | `/agents:api-contract` | API alignment | sonnet |
122
- | `/agents:release` | Publish ready | sonnet |
123
- | `/agents:public-interface` | README/exports | sonnet |
124
- | `/agents:docs-validate` | Documentation | sonnet |
125
- | `/agents:prompt-validate` | Prompt review | sonnet |
126
- | `/agents:prompt-quality` | Prompt quality | sonnet |
127
- | `/agents:pattern-analyzer` | Patterns | sonnet |
128
- | `/agents:aristotle-explorer` | Categories | opus |
129
- | `/agents:aristotle-analyst` | Four causes | opus |
130
- | `/agents:aristotle-validator` | Teleology | opus |
131
- | `/agents:aristotle-forecaster` | Potentiality | opus |
132
- | `/agents:assumption-excavator` | Assumptions | sonnet |
133
- | `/agents:workflow-synthesis` | Cross-agent synthesis | opus |
134
-
135
- > This is the starter set. Browse 135+ agents at [registry.uluops.ai](https://registry.uluops.ai).
136
-
137
- ### MCP servers
138
-
139
- Both servers use `npx -y` so there's no global install required:
140
-
141
- - **uluops-tracker** — Validation run tracking, issue management, analytics
142
- - **uluops-registry** — Agent definition registry, versioning, rendering
143
-
144
163
  ## How updates work
145
164
 
146
165
  Re-running `npx @uluops/setup` is safe and idempotent:
@@ -150,7 +169,15 @@ Re-running `npx @uluops/setup` is safe and idempotent:
150
169
  - Removed definitions are cleaned up
151
170
  - Your custom agents and non-UluOps MCP servers are never touched
152
171
 
153
- A manifest at `~/.claude/uluops-manifest.json` tracks what was installed.
172
+ Setup manages four surfaces: agent files, command files, MCP config entries, and the metrics hook. A manifest at `~/.uluops/manifest.json` tracks what was installed so `--uninstall` can cleanly reverse all changes. The manifest supports multiple harnesses — each gets its own installation state.
173
+
174
+ ## Troubleshooting
175
+
176
+ - **Agents not appearing:** Ensure you have restarted your harness (Claude Code, etc.) after running setup. For Claude Code, simply exit and restart the CLI.
177
+ - **MCP errors:** If the harness fails to start the MCP servers, ensure `npx` is available in your PATH. You can check your config at `~/.claude.json` or `~/.config/opencode/opencode.json`.
178
+ - **API key rejected:** Verify your key at [app.uluops.ai](https://app.uluops.ai). If you are behind a corporate proxy, you may need to set `HTTPS_PROXY`.
179
+ - **`@uluops/cli` install warning:** If setup warns it could not install the CLI globally (EACCES, nvm prefix mismatch, network), the rest of setup still completes. Run `npm install -g @uluops/cli` yourself when convenient — once it's on your PATH, every subsequent `npx @uluops/setup` will see it and skip the install step.
180
+ - **Windows issues:** Remember that native Windows is not supported; you must run the installer and your harness within **WSL2**.
154
181
 
155
182
  ## Uninstall
156
183
 
@@ -158,21 +185,14 @@ A manifest at `~/.claude/uluops-manifest.json` tracks what was installed.
158
185
  npx @uluops/setup --uninstall
159
186
  ```
160
187
 
161
- Removes only UluOps-managed files: agents, commands, MCP config entries, and shell profile export (if `--shell` was used). Your custom agents and other MCP servers are preserved.
188
+ Removes only UluOps-managed files: agents, commands, MCP config entries, shell profile export (if `--shell` was used), and the global `@uluops/cli` package (only if this setup installed it — a CLI you installed yourself is left alone). Your custom agents and other MCP servers are preserved. Uninstall iterates all harnesses recorded in the manifest.
162
189
 
163
190
  ## Requirements
164
191
 
165
- - Node.js >= 18
166
- - [Claude Code](https://docs.anthropic.com/en/docs/claude-code) installed
167
- - UluOps API key ([get one here](https://app.uluops.ai/settings/api-keys))
168
-
169
- > **Global install:** If you install globally with `npm i -g @uluops/setup`, the binary is `uluops-setup`.
192
+ - **Node.js:** >= 20.0.0
193
+ - **Platform:** Linux, macOS, or WSL2 (native Windows not supported)
194
+ - **Harness:** Claude Code, OpenCode, or Gemini CLI
195
+ - **Auth:** UluOps API key ([get one here](https://app.uluops.ai/settings/api-keys))
170
196
 
171
- ## Platform support
172
-
173
- | Platform | Status |
174
- |----------|--------|
175
- | Linux | Supported |
176
- | macOS | Supported |
177
- | WSL2 | Supported |
178
- | Windows (native) | Not yet supported |
197
+ ---
198
+ **Global install:** If you prefer, install once with `npm i -g @uluops/setup` then run `uluops-setup`.
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Auto-Tracker-Save Hook for Gemini CLI & Claude Code
5
+ *
6
+ * Event: AfterTool (Gemini CLI) / SubagentStop (Claude Code)
7
+ *
8
+ * This hook parses the output of an agent run and automatically
9
+ * queues a save_run call to the UluOps Tracker.
10
+ */
11
+
12
+ import { readFileSync } from 'node:fs';
13
+ import { join } from 'node:path';
14
+
15
+ function main() {
16
+ let input;
17
+ try {
18
+ input = JSON.parse(readFileSync(0, 'utf8'));
19
+ } catch (err) {
20
+ process.stderr.write('Failed to parse hook input: ' + err.message + '\n');
21
+ process.exit(1);
22
+ }
23
+
24
+ const { tool_name, tool_response, metadata, cwd } = input;
25
+
26
+ // Handle both Gemini CLI's invoke_agent and Claude Code's agent execution
27
+ // (In Claude Code, tool_name might be the specific agent tool if it's rendered as one)
28
+ const isAgentTool = tool_name === 'invoke_agent' || tool_name.startsWith('uluops-');
29
+
30
+ if (!isAgentTool) {
31
+ process.stdout.write(JSON.stringify({ decision: 'allow' }));
32
+ return;
33
+ }
34
+
35
+ const content = tool_response?.llmContent || tool_response?.content || '';
36
+ if (!content) {
37
+ process.stdout.write(JSON.stringify({ decision: 'allow' }));
38
+ return;
39
+ }
40
+
41
+ // --- Parsing Logic ---
42
+
43
+ // 1. Extract Agent Name
44
+ let agentName = input.tool_input?.agent_name || tool_name.replace(/^uluops-/, '');
45
+ if (agentName === 'invoke_agent') agentName = 'unknown-agent';
46
+
47
+ // 2. Extract Verdict and Score
48
+ // Broaden pattern to catch various agent output styles
49
+ const decisionMatch = content.match(/\*\*Verdict:\s*([A-Z_]+)/i) ||
50
+ content.match(/\*\*Decision:\s*([A-Z_]+)/i) ||
51
+ content.match(/Verdict:\s*([A-Z_]+)/i) ||
52
+ content.match(/Decision:\s*([A-Z_]+)/i);
53
+
54
+ const scoreMatch = content.match(/\(Score:\s*(\d+)\/100\)/i) ||
55
+ content.match(/Score:\s*(\d+)/i);
56
+
57
+ const decision = decisionMatch ? decisionMatch[1].toUpperCase() : 'PASS';
58
+ const score = scoreMatch ? parseInt(scoreMatch[1], 10) : 100;
59
+
60
+ // 3. Extract Summary
61
+ const summaryMatch = content.match(/### Executive Summary\n\n(.*?)(?:\n\n|###|$)/s) ||
62
+ content.match(/Summary\n\n(.*?)(?:\n\n|###|$)/s) ||
63
+ content.match(/## .*?\n\n(.*?)(?:\n\n|###|$)/s);
64
+ const summary = summaryMatch ? summaryMatch[1].trim().substring(0, 500) : `Auto-saved run for ${agentName}`;
65
+
66
+ // 4. Extract Recommendations & Failure Codes
67
+ const recommendations = [];
68
+ // Resilient pattern for list items containing a failure code
69
+ const lines = content.split('\n');
70
+ for (const line of lines) {
71
+ const codeMatch = line.match(/`([A-Z]{3}-[A-Z]{3}\/[CHMLI])`/);
72
+ if (codeMatch) {
73
+ const code = codeMatch[1];
74
+ // Try to extract title: everything before the first '(' or '`' or '-'
75
+ let title = line.replace(/^\s*[\*\-]\s*/, '') // remove bullet
76
+ .split(/[`\(\-]/)[0] // take everything before first separator
77
+ .trim();
78
+
79
+ if (!title) title = `Issue ${code}`;
80
+
81
+ // Try to extract priority
82
+ const priorityMatch = line.match(/\((Priority: )?(critical|high|suggested|backlog)\)/i);
83
+ const priority = priorityMatch ? priorityMatch[2].toLowerCase() : 'suggested';
84
+
85
+ recommendations.push({
86
+ agent: agentName,
87
+ title: title.substring(0, 100),
88
+ priority,
89
+ failure_code: code,
90
+ description: 'Extracted via auto-save hook'
91
+ });
92
+ }
93
+ }
94
+
95
+ // 5. Project Name Detection
96
+ let project = 'default-project';
97
+ if (cwd) {
98
+ const parts = cwd.split('/');
99
+ // If we're in a sub-repo (like uluops packages), use the last two parts
100
+ if (parts.length > 2 && (parts[parts.length-2].startsWith('-') || parts[parts.length-2] === 'packages')) {
101
+ project = parts[parts.length-1];
102
+ } else {
103
+ project = parts.pop();
104
+ }
105
+ }
106
+
107
+ // --- Build Tail Call ---
108
+
109
+ const saveRunArgs = {
110
+ project,
111
+ workflow_type: 'auto-save',
112
+ agents: [{
113
+ name: agentName,
114
+ model: metadata?.model || 'gemini-1.5-pro',
115
+ decision,
116
+ score: score,
117
+ summary,
118
+ tokens: {
119
+ input_tokens: metadata?.input_tokens || 0,
120
+ output_tokens: metadata?.output_tokens || 0,
121
+ cache_creation_tokens: metadata?.cache_creation_tokens || 0,
122
+ cache_read_tokens: metadata?.cache_read_tokens || 0
123
+ }
124
+ }],
125
+ recommendations
126
+ };
127
+
128
+ const output = {
129
+ decision: 'allow',
130
+ systemMessage: `[hook] Auto-saving ${agentName} results to tracker (Project: ${project})...`,
131
+ hookSpecificOutput: {
132
+ tailToolCallRequest: {
133
+ name: 'mcp_uluops-tracker_save_run',
134
+ args: saveRunArgs
135
+ }
136
+ }
137
+ };
138
+
139
+ process.stdout.write(JSON.stringify(output));
140
+ }
141
+
142
+ main();