@uluops/setup 0.4.0 → 0.6.3

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 (213) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +75 -60
  3. package/assets/auto-tracker-save.mjs +142 -0
  4. package/assets/{agents → claude-code/agents}/api-contract-validator-agent.md +9 -228
  5. package/assets/{agents → claude-code/agents}/aristotle-analyst-agent.md +51 -4
  6. package/assets/{agents → claude-code/agents}/aristotle-explorer-agent.md +6 -2
  7. package/assets/{agents → claude-code/agents}/aristotle-forecaster-agent.md +15 -230
  8. package/assets/{agents → claude-code/agents}/aristotle-validator-agent.md +12 -252
  9. package/assets/{agents → claude-code/agents}/assumption-excavator-agent.md +21 -247
  10. package/assets/{agents → claude-code/agents}/code-auditor-agent.md +12 -255
  11. package/assets/{agents → claude-code/agents}/code-optimizer-agent.md +15 -236
  12. package/assets/{agents → claude-code/agents}/code-validator-agent.md +31 -300
  13. package/assets/claude-code/agents/docs-validator-agent.md +472 -0
  14. package/assets/{agents → claude-code/agents}/frontend-validator-agent.md +15 -258
  15. package/assets/{agents → claude-code/agents}/mcp-validator-agent.md +8 -252
  16. package/assets/{agents → claude-code/agents}/pre-implementation-architect-agent.md +8 -224
  17. package/assets/{agents → claude-code/agents}/prompt-engineer-agent.md +57 -290
  18. package/assets/{agents → claude-code/agents}/prompt-pattern-analyzer-agent.md +10 -225
  19. package/assets/{agents → claude-code/agents}/prompt-quality-validator-agent.md +11 -249
  20. package/assets/{agents → claude-code/agents}/public-interface-validator-agent.md +15 -268
  21. package/assets/claude-code/agents/release-readiness-agent.md +495 -0
  22. package/assets/{agents → claude-code/agents}/security-analyst-agent.md +236 -480
  23. package/assets/{agents → claude-code/agents}/test-architect-agent.md +16 -259
  24. package/assets/{agents → claude-code/agents}/type-safety-validator-agent.md +23 -266
  25. package/assets/{agents → claude-code/agents}/workflow-synthesis-agent.md +23 -226
  26. package/assets/{commands → claude-code/commands}/agents/anxiety-reader.md +12 -15
  27. package/assets/{commands → claude-code/commands}/agents/api-contract.md +156 -136
  28. package/assets/{commands → claude-code/commands}/agents/architect.md +156 -136
  29. package/assets/claude-code/commands/agents/aristotle-analyst.md +157 -0
  30. package/assets/claude-code/commands/agents/aristotle-explorer.md +157 -0
  31. package/assets/claude-code/commands/agents/aristotle-forecaster.md +157 -0
  32. package/assets/claude-code/commands/agents/aristotle-validator.md +157 -0
  33. package/assets/{commands → claude-code/commands}/agents/assumption-excavator.md +49 -7
  34. package/assets/{commands → claude-code/commands}/agents/audit.md +156 -137
  35. package/assets/{commands → claude-code/commands}/agents/docs-validate.md +156 -134
  36. package/assets/{commands → claude-code/commands}/agents/frontend.md +156 -136
  37. package/assets/{commands → claude-code/commands}/agents/mcp-validate.md +156 -137
  38. package/assets/{commands → claude-code/commands}/agents/optimize.md +156 -134
  39. package/assets/{commands → claude-code/commands}/agents/pattern-analyzer.md +150 -127
  40. package/assets/{commands → claude-code/commands}/agents/prompt-quality.md +155 -135
  41. package/assets/claude-code/commands/agents/prompt-validate.md +155 -0
  42. package/assets/{commands → claude-code/commands}/agents/public-interface.md +156 -135
  43. package/assets/{commands → claude-code/commands}/agents/release.md +156 -136
  44. package/assets/{commands → claude-code/commands}/agents/security.md +156 -138
  45. package/assets/{commands → claude-code/commands}/agents/test-review.md +156 -137
  46. package/assets/{commands → claude-code/commands}/agents/type-safety.md +156 -136
  47. package/assets/{commands/agents/code-validate.md → claude-code/commands/agents/validate.md} +156 -135
  48. package/assets/claude-code/commands/agents/workflow-synthesis.md +157 -0
  49. package/assets/{commands → claude-code/commands}/pipelines/aristotle.md +8 -8
  50. package/assets/{commands → claude-code/commands}/pipelines/ship.md +8 -8
  51. package/assets/claude-code/commands/workflows/post-implementation.md +60 -0
  52. package/assets/claude-code/commands/workflows/pre-implementation.md +46 -0
  53. package/assets/{commands → claude-code/commands}/workflows/prompt-audit.md +2 -2
  54. package/assets/codex/agents/anxiety-reader-agent.toml +462 -0
  55. package/assets/codex/agents/api-contract-validator-agent.toml +738 -0
  56. package/assets/codex/agents/aristotle-analyst-agent.toml +750 -0
  57. package/assets/codex/agents/aristotle-explorer-agent.toml +155 -0
  58. package/assets/codex/agents/aristotle-forecaster-agent.toml +449 -0
  59. package/assets/codex/agents/aristotle-validator-agent.toml +424 -0
  60. package/assets/codex/agents/assumption-excavator-agent.toml +1126 -0
  61. package/assets/codex/agents/code-auditor-agent.toml +815 -0
  62. package/assets/codex/agents/code-optimizer-agent.toml +652 -0
  63. package/assets/codex/agents/code-validator-agent.toml +573 -0
  64. package/assets/codex/agents/docs-validator-agent.toml +468 -0
  65. package/assets/codex/agents/frontend-validator-agent.toml +598 -0
  66. package/assets/codex/agents/mcp-validator-agent.toml +580 -0
  67. package/assets/codex/agents/pre-implementation-architect-agent.toml +817 -0
  68. package/assets/codex/agents/prompt-engineer-agent.toml +922 -0
  69. package/assets/codex/agents/prompt-pattern-analyzer-agent.toml +689 -0
  70. package/assets/codex/agents/prompt-quality-validator-agent.toml +777 -0
  71. package/assets/codex/agents/public-interface-validator-agent.toml +695 -0
  72. package/assets/codex/agents/release-readiness-agent.toml +491 -0
  73. package/assets/codex/agents/security-analyst-agent.toml +847 -0
  74. package/assets/codex/agents/test-architect-agent.toml +615 -0
  75. package/assets/codex/agents/type-safety-validator-agent.toml +686 -0
  76. package/assets/codex/agents/workflow-synthesis-agent.toml +631 -0
  77. package/assets/gemini-cli/agents/anxiety-reader-agent.md +470 -0
  78. package/assets/gemini-cli/agents/api-contract-validator-agent.md +747 -0
  79. package/assets/gemini-cli/agents/aristotle-analyst-agent.md +758 -0
  80. package/assets/gemini-cli/agents/aristotle-explorer-agent.md +163 -0
  81. package/assets/gemini-cli/agents/aristotle-forecaster-agent.md +457 -0
  82. package/assets/gemini-cli/agents/aristotle-validator-agent.md +432 -0
  83. package/assets/gemini-cli/agents/assumption-excavator-agent.md +1134 -0
  84. package/assets/gemini-cli/agents/code-auditor-agent.md +827 -0
  85. package/assets/gemini-cli/agents/code-optimizer-agent.md +661 -0
  86. package/assets/gemini-cli/agents/code-validator-agent.md +582 -0
  87. package/assets/gemini-cli/agents/docs-validator-agent.md +477 -0
  88. package/assets/gemini-cli/agents/frontend-validator-agent.md +610 -0
  89. package/assets/gemini-cli/agents/mcp-validator-agent.md +589 -0
  90. package/assets/gemini-cli/agents/pre-implementation-architect-agent.md +826 -0
  91. package/assets/gemini-cli/agents/prompt-engineer-agent.md +931 -0
  92. package/assets/gemini-cli/agents/prompt-pattern-analyzer-agent.md +698 -0
  93. package/assets/gemini-cli/agents/prompt-quality-validator-agent.md +786 -0
  94. package/assets/gemini-cli/agents/public-interface-validator-agent.md +707 -0
  95. package/assets/gemini-cli/agents/release-readiness-agent.md +500 -0
  96. package/assets/gemini-cli/agents/security-analyst-agent.md +859 -0
  97. package/assets/gemini-cli/agents/test-architect-agent.md +624 -0
  98. package/assets/gemini-cli/agents/type-safety-validator-agent.md +695 -0
  99. package/assets/gemini-cli/agents/workflow-synthesis-agent.md +639 -0
  100. package/assets/gemini-cli/commands/agents/anxiety-reader.toml +155 -0
  101. package/assets/gemini-cli/commands/agents/api-contract.toml +154 -0
  102. package/assets/gemini-cli/commands/agents/architect.toml +154 -0
  103. package/assets/gemini-cli/commands/agents/aristotle-analyst.toml +155 -0
  104. package/assets/gemini-cli/commands/agents/aristotle-explorer.toml +155 -0
  105. package/assets/gemini-cli/commands/agents/aristotle-forecaster.toml +155 -0
  106. package/assets/gemini-cli/commands/agents/aristotle-validator.toml +155 -0
  107. package/assets/gemini-cli/commands/agents/assumption-excavator.toml +155 -0
  108. package/assets/gemini-cli/commands/agents/audit.toml +154 -0
  109. package/assets/gemini-cli/commands/agents/docs-validate.toml +154 -0
  110. package/assets/gemini-cli/commands/agents/frontend.toml +154 -0
  111. package/assets/gemini-cli/commands/agents/mcp-validate.toml +154 -0
  112. package/assets/gemini-cli/commands/agents/optimize.toml +154 -0
  113. package/assets/gemini-cli/commands/agents/pattern-analyzer.toml +148 -0
  114. package/assets/gemini-cli/commands/agents/prompt-quality.toml +153 -0
  115. package/assets/gemini-cli/commands/agents/prompt-validate.toml +153 -0
  116. package/assets/gemini-cli/commands/agents/public-interface.toml +154 -0
  117. package/assets/gemini-cli/commands/agents/release.toml +154 -0
  118. package/assets/gemini-cli/commands/agents/security.toml +154 -0
  119. package/assets/gemini-cli/commands/agents/test-review.toml +154 -0
  120. package/assets/gemini-cli/commands/agents/type-safety.toml +154 -0
  121. package/assets/gemini-cli/commands/agents/validate.toml +154 -0
  122. package/assets/gemini-cli/commands/agents/workflow-synthesis.toml +155 -0
  123. package/assets/gemini-cli/commands/pipelines/aristotle.toml +139 -0
  124. package/assets/gemini-cli/commands/pipelines/ship.toml +184 -0
  125. package/assets/gemini-cli/commands/workflows/post-implementation.toml +56 -0
  126. package/assets/gemini-cli/commands/workflows/pre-implementation.toml +42 -0
  127. package/assets/gemini-cli/commands/workflows/prompt-audit.toml +40 -0
  128. package/assets/opencode/agents/anxiety-reader-agent.md +472 -0
  129. package/assets/opencode/agents/api-contract-validator-agent.md +749 -0
  130. package/assets/opencode/agents/aristotle-analyst-agent.md +760 -0
  131. package/assets/opencode/agents/aristotle-explorer-agent.md +164 -0
  132. package/assets/opencode/agents/aristotle-forecaster-agent.md +459 -0
  133. package/assets/opencode/agents/aristotle-validator-agent.md +434 -0
  134. package/assets/opencode/agents/assumption-excavator-agent.md +1136 -0
  135. package/assets/opencode/agents/code-auditor-agent.md +826 -0
  136. package/assets/opencode/agents/code-optimizer-agent.md +663 -0
  137. package/assets/opencode/agents/code-validator-agent.md +584 -0
  138. package/assets/opencode/agents/docs-validator-agent.md +479 -0
  139. package/assets/opencode/agents/frontend-validator-agent.md +609 -0
  140. package/assets/opencode/agents/mcp-validator-agent.md +591 -0
  141. package/assets/opencode/agents/pre-implementation-architect-agent.md +828 -0
  142. package/assets/opencode/agents/prompt-engineer-agent.md +933 -0
  143. package/assets/opencode/agents/prompt-pattern-analyzer-agent.md +700 -0
  144. package/assets/opencode/agents/prompt-quality-validator-agent.md +788 -0
  145. package/assets/opencode/agents/public-interface-validator-agent.md +706 -0
  146. package/assets/opencode/agents/release-readiness-agent.md +502 -0
  147. package/assets/opencode/agents/security-analyst-agent.md +858 -0
  148. package/assets/opencode/agents/test-architect-agent.md +626 -0
  149. package/assets/opencode/agents/type-safety-validator-agent.md +697 -0
  150. package/assets/opencode/agents/workflow-synthesis-agent.md +641 -0
  151. package/dist/cli.js +49 -416
  152. package/dist/commands/helpers.d.ts +73 -0
  153. package/dist/commands/helpers.js +311 -0
  154. package/dist/commands/setup.d.ts +13 -0
  155. package/dist/commands/setup.js +93 -0
  156. package/dist/commands/uninstall.d.ts +3 -0
  157. package/dist/commands/uninstall.js +126 -0
  158. package/dist/commands/verify.d.ts +1 -0
  159. package/dist/commands/verify.js +28 -0
  160. package/dist/harnesses/claude-code.d.ts +1 -1
  161. package/dist/harnesses/claude-code.js +3 -1
  162. package/dist/harnesses/codex.js +6 -5
  163. package/dist/harnesses/gemini-cli.d.ts +4 -8
  164. package/dist/harnesses/gemini-cli.js +47 -21
  165. package/dist/harnesses/index.d.ts +10 -1
  166. package/dist/harnesses/index.js +11 -2
  167. package/dist/harnesses/opencode.d.ts +1 -1
  168. package/dist/harnesses/opencode.js +17 -8
  169. package/dist/harnesses/types.d.ts +19 -0
  170. package/dist/harnesses/types.js +2 -0
  171. package/dist/lib/asset-catalog.js +2 -2
  172. package/dist/lib/config-merger.d.ts +2 -1
  173. package/dist/lib/config-merger.js +15 -7
  174. package/dist/lib/file-ops.d.ts +5 -0
  175. package/dist/lib/file-ops.js +18 -3
  176. package/dist/lib/hash.d.ts +1 -1
  177. package/dist/lib/hash.js +2 -2
  178. package/dist/lib/manifest.d.ts +30 -1
  179. package/dist/lib/manifest.js +5 -7
  180. package/dist/lib/paths.d.ts +16 -1
  181. package/dist/lib/paths.js +31 -3
  182. package/dist/lib/settings-merger.d.ts +24 -9
  183. package/dist/lib/settings-merger.js +57 -22
  184. package/dist/lib/version.d.ts +2 -0
  185. package/dist/lib/version.js +10 -0
  186. package/dist/steps/agents.d.ts +1 -2
  187. package/dist/steps/agents.js +7 -18
  188. package/dist/steps/auth.d.ts +6 -0
  189. package/dist/steps/auth.js +19 -2
  190. package/dist/steps/cli.d.ts +53 -0
  191. package/dist/steps/cli.js +90 -0
  192. package/dist/steps/commands.d.ts +1 -1
  193. package/dist/steps/commands.js +20 -71
  194. package/dist/steps/detect.js +4 -0
  195. package/dist/steps/mcp.js +7 -15
  196. package/dist/steps/metrics.d.ts +12 -0
  197. package/dist/steps/metrics.js +52 -22
  198. package/dist/steps/shell.js +11 -1
  199. package/dist/steps/signup.d.ts +2 -2
  200. package/dist/steps/signup.js +9 -12
  201. package/dist/steps/verify.js +47 -8
  202. package/package.json +12 -11
  203. package/assets/agents/docs-validator-agent.md +0 -490
  204. package/assets/agents/release-readiness-agent.md +0 -482
  205. package/assets/commands/agents/aristotle-analyst.md +0 -116
  206. package/assets/commands/agents/aristotle-explorer.md +0 -93
  207. package/assets/commands/agents/aristotle-forecaster.md +0 -115
  208. package/assets/commands/agents/aristotle-validator.md +0 -115
  209. package/assets/commands/agents/prompt-validate.md +0 -136
  210. package/assets/commands/agents/workflow-synthesis.md +0 -102
  211. package/assets/commands/workflows/post-implementation.md +0 -577
  212. package/assets/commands/workflows/pre-implementation.md +0 -670
  213. /package/assets/{agents → claude-code/agents}/anxiety-reader-agent.md +0 -0
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
@@ -10,13 +10,15 @@ Zero-friction installer for [UluOps](https://uluops.ai) agentic harnesses. One c
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
+
13
15
  ## Supported harnesses
14
16
 
15
17
  | Harness | Status | Alias | Config |
16
18
  |---------|--------|-------|--------|
17
19
  | Claude Code | Fully supported (default) | `claude` | `~/.claude.json` |
18
20
  | OpenCode | Fully supported | `oc` | `~/.config/opencode/opencode.json` |
19
- | Gemini CLI | Agents + Commands | `gemini` | `~/.gemini/settings.json` |
21
+ | Gemini CLI | Fully supported | `gemini` | `~/.gemini/settings.json` |
20
22
  | Codex | Coming soon | — | `~/.codex/config.toml` |
21
23
 
22
24
  ```bash
@@ -43,13 +45,16 @@ npx @uluops/setup --harness gemini-cli
43
45
 
44
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.
45
47
 
46
- The installer runs five steps in sequence:
48
+ The installer runs these steps in sequence:
47
49
 
48
- 1. **Authenticate** — Validates your API key (or creates an account with `--signup`)
50
+ 1. **Authenticate** — Asks whether you're creating a new account. New users sign up with email + password; returning users paste an API key. Skip the question with `--api-key`, `--signup`, `--yes`, or `ULUOPS_API_KEY`.
49
51
  2. **MCP config** — Writes tracker and registry server entries to the harness config
50
52
  3. **Definitions** — Copies pre-rendered agent definition files
51
- 4. **Metrics hook** — Configures a post-agent hook for automatic run capture (Claude Code only)
52
- 5. **Health check** — Verifies both API endpoints are reachable
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.
53
58
 
54
59
  ## Usage
55
60
 
@@ -57,26 +62,11 @@ The installer runs five steps in sequence:
57
62
  npx @uluops/setup
58
63
  ```
59
64
 
60
- 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.
61
-
62
- **New to UluOps?** Create an account without leaving the terminal:
63
-
64
- ```
65
- npx @uluops/setup --signup
66
- ```
67
-
68
- You'll be prompted for email and password. Account + API key are created automatically.
69
-
70
- **Restart your harness after setup to load agents.**
71
-
72
- ### API key resolution
65
+ Setup will first ask whether you're creating a new UluOps account. Pick **Y** to sign up with an email and password (account + API key created automatically); pick **n** to paste an existing API key from [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.
73
66
 
74
- The installer checks these sources in order:
67
+ > The account question is automatically skipped if you've already saved credentials, set `ULUOPS_API_KEY`, or passed `--api-key`/`--yes`/`--signup`. You can also pass `--signup` to skip the question and go straight to signup.
75
68
 
76
- 1. `--api-key <key>` flag
77
- 2. `ULUOPS_API_KEY` environment variable
78
- 3. `~/.uluops/credentials.json` (existing CLI auth)
79
- 4. Interactive prompt
69
+ > **🛑 IMPORTANT:** You must restart your harness (e.g., restart Claude Code) after setup to load the new agents and commands.
80
70
 
81
71
  ### Options
82
72
 
@@ -90,6 +80,8 @@ npx @uluops/setup [options]
90
80
  --scope <mode> MCP config scope: "global" or "local" (default: global)
91
81
  --local-defs Save definitions to ./uluops/ for review
92
82
  --shell Write API key export to shell profile
83
+ --with-cli Install @uluops/cli globally (skip prompt)
84
+ --no-cli Skip @uluops/cli install (skip prompt)
93
85
  --skip-validation Accept API key without server verification
94
86
  --list Show available agents and workflows without installing
95
87
  --verify Check installation health: manifest, files, MCP config, API connectivity (no changes)
@@ -98,10 +90,50 @@ npx @uluops/setup [options]
98
90
  -y, --yes Skip confirmations
99
91
  ```
100
92
 
93
+ ### Advanced Commands
94
+
95
+ #### Preview available agents (`--list`)
96
+ Displays all agents and workflows included in the current version of the setup tool.
97
+
98
+ ```text
99
+ ⟨u⟩ ulu·ops v0.6.0 — available agents and workflows
100
+
101
+ WORKFLOWS
102
+ /workflows:post-implementation Iterative validation after coding
103
+ /workflows:pre-implementation Design validation before implementation
104
+ /workflows:prompt-audit Strategic prompt quality audit
105
+
106
+ AGENTS (run individually) MODEL
107
+ /agents:code-validator Validate cod... sonnet
108
+ /agents:type-safety Deep TypeScr... sonnet
109
+ /agents:security-analyst Comprehensiv... sonnet
110
+ /agents:test-architect Validate tes... sonnet
111
+ ...
112
+ ```
113
+
114
+ #### Check installation health (`--verify`)
115
+ Validates your current installation against the local manifest and checks API connectivity.
116
+
117
+ ```text
118
+ ⟨u⟩ ulu·ops Installation Check v0.6.0
119
+
120
+ ✓ Manifest found (~/.uluops/manifest.json)
121
+ ✓ All 23 agents present in ~/.claude/agents/
122
+ ✓ MCP servers configured in ~/.claude.json
123
+ ✓ API connectivity: Tracker (Online)
124
+ ✓ API connectivity: Registry (Online)
125
+
126
+ All checks passed.
127
+ ```
128
+
101
129
  ### Examples
102
130
 
103
131
  ```bash
104
- # New user create account + install in one shot
132
+ # Defaultasks "creating a new account?" then either signs you up or
133
+ # prompts for an existing API key
134
+ npx @uluops/setup
135
+
136
+ # Skip the account question and go straight to signup
105
137
  npx @uluops/setup --signup
106
138
 
107
139
  # Install for OpenCode
@@ -119,31 +151,13 @@ npx @uluops/setup --dry-run --api-key ulr_abc123
119
151
  # Persist API key in shell profile (~/.zshrc, ~/.bashrc, etc.)
120
152
  npx @uluops/setup --shell
121
153
 
122
- # Preview what's included without installing
123
- npx @uluops/setup --list
124
-
125
- # Check existing installation (manifest + file presence + API connectivity)
126
- npx @uluops/setup --verify
154
+ # Install the ulu CLI globally alongside harness setup
155
+ npx @uluops/setup --with-cli
127
156
 
128
- # Clean removal
129
- npx @uluops/setup --uninstall
157
+ # Skip the CLI prompt entirely (interactive runs default to asking)
158
+ npx @uluops/setup --no-cli
130
159
  ```
131
160
 
132
- ## What's included
133
-
134
- ### Agents & Workflows
135
-
136
- Setup installs the starter set of agent and workflow slash commands. Run `npx @uluops/setup --list` to see what's included.
137
-
138
- > Browse more agents, workflows, and pipelines at [registry.uluops.ai](https://registry.uluops.ai). Pipelines are available via the registry API and MCP tools — they are not installed locally.
139
-
140
- ### MCP servers
141
-
142
- Both servers use `npx -y` so there's no global install required:
143
-
144
- - **uluops-tracker** — Validation run tracking, issue management, analytics
145
- - **uluops-registry** — Agent definition registry, versioning, rendering
146
-
147
161
  ## How updates work
148
162
 
149
163
  Re-running `npx @uluops/setup` is safe and idempotent:
@@ -155,27 +169,28 @@ Re-running `npx @uluops/setup` is safe and idempotent:
155
169
 
156
170
  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.
157
171
 
172
+ ## Troubleshooting
173
+
174
+ - **Agents not appearing:** Ensure you have restarted your harness (Claude Code, etc.) after running setup. For Claude Code, simply exit and restart the CLI.
175
+ - **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`.
176
+ - **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`.
177
+ - **`@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.
178
+ - **Windows issues:** Remember that native Windows is not supported; you must run the installer and your harness within **WSL2**.
179
+
158
180
  ## Uninstall
159
181
 
160
182
  ```
161
183
  npx @uluops/setup --uninstall
162
184
  ```
163
185
 
164
- 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. Uninstall iterates all harnesses recorded in the manifest.
186
+ 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.
165
187
 
166
188
  ## Requirements
167
189
 
168
- - Node.js >= 20
169
- - At least one supported harness installed (Claude Code or OpenCode)
170
- - UluOps API key ([get one here](https://app.uluops.ai/settings/api-keys))
171
-
172
- > **Global install:** If you install globally with `npm i -g @uluops/setup`, the binary is `uluops-setup`.
190
+ - **Node.js:** >= 20.0.0
191
+ - **Platform:** Linux, macOS, or WSL2 (native Windows not supported)
192
+ - **Harness:** Claude Code, OpenCode, or Gemini CLI
193
+ - **Auth:** UluOps API key ([get one here](https://app.uluops.ai/settings/api-keys))
173
194
 
174
- ## Platform support
175
-
176
- | Platform | Status |
177
- |----------|--------|
178
- | Linux | Supported |
179
- | macOS | Supported |
180
- | WSL2 | Supported |
181
- | Windows (native) | Not yet supported |
195
+ ---
196
+ **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();
@@ -1,12 +1,9 @@
1
1
  ---
2
2
  name: api-contract-validator
3
- version: "2.0.0"
3
+ version: "2.3.0"
4
4
  description: Validates API contract consistency between documentation, types, and implementation. Catches contract drift, breaking changes, and documentation staleness. Required for APIs consumed by external clients or other services. Prevents integration failures.
5
-
6
5
  tools: Read, Grep, Glob, Bash
7
6
  model: sonnet
8
- adl_schema: /home/alexs/uluops/uluops-agent-workflows/udl/adl/v3/api-contract-validator.agent.yaml
9
- taxonomy_version: "0.2.2"
10
7
  threshold: 80
11
8
  auto_fail_severity: [critical, high]
12
9
  ---
@@ -44,6 +41,12 @@ Every issue you identify MUST include a failure classification code from the tax
44
41
  - Do NOT auto-fail GraphQL APIs—adapt validation to schema.graphql
45
42
 
46
43
 
44
+ ### Epistemic Nature
45
+ - **Verifiability:** Expert Judgment
46
+ - **Determinism:** Stochastic
47
+ - **Claim Type:** Factual
48
+
49
+
47
50
  ## Reference Examples
48
51
 
49
52
  Use these examples to calibrate your judgment.
@@ -299,40 +302,6 @@ Use these examples to classify issues with the correct failure codes:
299
302
  Domain: Semantic (data exposure) Mode: INC (Inconsistency - internal data in public response) Severity: C (Critical - security concern, auto-fail)
300
303
 
301
304
 
302
- ## Failure Taxonomy Reference
303
-
304
- Compact format: `DOMAIN-MODE/SEVERITY` where:
305
- - **Domain:** STR (Structural), SEM (Semantic), PRA (Pragmatic), EPI (Epistemic)
306
- - **Mode:** 3-letter code (e.g., OMI=Omission, EXC=Excess, INC=Inconsistency, AMB=Ambiguity)
307
- - **Severity:** C (Critical), H (High), M (Medium), L (Low), I (Info)
308
-
309
- ### Domain Reference
310
- | Code | Domain | Description |
311
- |------|--------|-------------|
312
- | STR | Structural | Form, syntax, organization issues |
313
- | SEM | Semantic | Meaning, correctness, completeness issues |
314
- | PRA | Pragmatic | Practical effectiveness, efficiency issues |
315
- | EPI | Epistemic | Knowledge, claims, confidence issues |
316
-
317
- ### Common Mode Codes
318
- | Code | Mode | Domain | Meaning |
319
- |------|------|--------|---------|
320
- | OMI | Omission | STR | Missing required element |
321
- | EXC | Excess | STR | Unnecessary/redundant element |
322
- | MAL | Malformation | STR | Incorrectly structured |
323
- | INC | Inconsistency | STR/SEM | Internal contradictions |
324
- | COM | Incompleteness | SEM | Partial implementation |
325
- | AMB | Ambiguity | SEM | Unclear meaning |
326
- | COH | Incoherence | SEM | Logical disconnect |
327
- | ALI | Misalignment | PRA | Doesn't match requirements |
328
- | MAT | Mismatch | PRA | Interface/contract violation |
329
- | EFF | Inefficiency | PRA | Performance issues |
330
- | FRA | Fragility | PRA | Brittleness, poor error handling |
331
- | OVR | Overclaiming | EPI | Claims exceed evidence |
332
- | UND | Underclaiming | EPI | Evidence exceeds claims |
333
- | GRN | Granularity | EPI | Wrong level of detail |
334
- | FAL | Fallacy | EPI | Logical reasoning error |
335
-
336
305
  ## API Contract Validator Framework
337
306
 
338
307
  ### Category Overview
@@ -463,6 +432,7 @@ Before finalizing your decision, verify:
463
432
 
464
433
  - **Target:** ~3500 tokens
465
434
  - **Maximum:** 8000 tokens
435
+
466
436
  Target ~3500 tokens for typical reviews. Include endpoint inventory table for all endpoints. Show exact schema diffs for contract drift. Expand for large APIs with many endpoints.
467
437
 
468
438
 
@@ -547,154 +517,7 @@ OR
547
517
 
548
518
  Reasoning: [Explain decision]
549
519
 
550
- ## JSON OUTPUT
551
-
552
- <!-- Machine-readable output for API consumption and validation-tracker integration -->
553
- <!-- Schema: udl/agent-output-schema-v1.4.json -->
554
- ```json
555
- {
556
- "schema_version": "1.3.0",
557
- "validator": {
558
- "name": "api-contract-validator",
559
- "model": "sonnet",
560
- "adl_schema": "/home/alexs/uluops/uluops-agent-workflows/udl/adl/v3/api-contract-validator.agent.yaml",
561
- "tokens": {
562
- "input_tokens": 0,
563
- "output_tokens": 0
564
- }
565
- },
566
- "target": "[path/to/validated/directory]",
567
- "timestamp": "[ISO 8601 timestamp]",
568
- "result": {
569
- "score": "[X]",
570
- "max_score": 100,
571
- "decision": "[PASS|FAIL]",
572
- "threshold": 80
573
- },
574
- "categories": [
575
- {
576
- "name": "Endpoint Completeness",
577
- "score": "[X]",
578
- "max_points": 25,
579
- "findings": [
580
- {
581
- "criterion": "[criterion name from framework]",
582
- "points_earned": "[X]",
583
- "points_possible": "[X]",
584
- "issues": [
585
- {
586
- "title": "[Short issue title]",
587
- "priority": "[critical|suggested|backlog]",
588
- "type": "[feature|bug|refactor|config|docs|infra|security|test|observation|deficiency|ambiguity]",
589
- "failure_code": "[DOMAIN-MODE/SEVERITY]",
590
- "file_path": "[path/to/file]",
591
- "line_number": "[N]",
592
- "description": "[Full explanation]"
593
- }
594
- ]
595
- }
596
- ]
597
- },
598
- {
599
- "name": "Request Contract",
600
- "score": "[X]",
601
- "max_points": 25,
602
- "findings": [
603
- {
604
- "criterion": "[criterion name from framework]",
605
- "points_earned": "[X]",
606
- "points_possible": "[X]",
607
- "issues": [
608
- {
609
- "title": "[Short issue title]",
610
- "priority": "[critical|suggested|backlog]",
611
- "type": "[feature|bug|refactor|config|docs|infra|security|test|observation|deficiency|ambiguity]",
612
- "failure_code": "[DOMAIN-MODE/SEVERITY]",
613
- "file_path": "[path/to/file]",
614
- "line_number": "[N]",
615
- "description": "[Full explanation]"
616
- }
617
- ]
618
- }
619
- ]
620
- },
621
- {
622
- "name": "Response Contract",
623
- "score": "[X]",
624
- "max_points": 25,
625
- "findings": [
626
- {
627
- "criterion": "[criterion name from framework]",
628
- "points_earned": "[X]",
629
- "points_possible": "[X]",
630
- "issues": [
631
- {
632
- "title": "[Short issue title]",
633
- "priority": "[critical|suggested|backlog]",
634
- "type": "[feature|bug|refactor|config|docs|infra|security|test|observation|deficiency|ambiguity]",
635
- "failure_code": "[DOMAIN-MODE/SEVERITY]",
636
- "file_path": "[path/to/file]",
637
- "line_number": "[N]",
638
- "description": "[Full explanation]"
639
- }
640
- ]
641
- }
642
- ]
643
- },
644
- {
645
- "name": "Breaking Change Safety",
646
- "score": "[X]",
647
- "max_points": 25,
648
- "findings": [
649
- {
650
- "criterion": "[criterion name from framework]",
651
- "points_earned": "[X]",
652
- "points_possible": "[X]",
653
- "issues": [
654
- {
655
- "title": "[Short issue title]",
656
- "priority": "[critical|suggested|backlog]",
657
- "type": "[feature|bug|refactor|config|docs|infra|security|test|observation|deficiency|ambiguity]",
658
- "failure_code": "[DOMAIN-MODE/SEVERITY]",
659
- "file_path": "[path/to/file]",
660
- "line_number": "[N]",
661
- "description": "[Full explanation]"
662
- }
663
- ]
664
- }
665
- ]
666
- }
667
- ],
668
- "summary": {
669
- "total_issues": "[N]",
670
- "by_priority": {
671
- "critical": "[N]",
672
- "suggested": "[N]",
673
- "backlog": "[N]"
674
- },
675
- "by_severity": {
676
- "critical": "[N]",
677
- "high": "[N]",
678
- "medium": "[N]",
679
- "low": "[N]",
680
- "info": "[N]"
681
- },
682
- "by_type": {
683
- "feature": "[N]",
684
- "bug": "[N]",
685
- "refactor": "[N]",
686
- "config": "[N]",
687
- "docs": "[N]",
688
- "infra": "[N]",
689
- "security": "[N]",
690
- "test": "[N]",
691
- "observation": "[N]",
692
- "deficiency": "[N]",
693
- "ambiguity": "[N]"
694
- }
695
- }
696
- }
697
- ```
520
+
698
521
  ```
699
522
 
700
523
  ## Output Examples
@@ -860,44 +683,6 @@ API contracts are aligned when ALL of the following are true
860
683
  - No breaking changes without versioning or deprecation
861
684
  - No auto-fail conditions triggered
862
685
 
863
- ## Priority & Severity Mapping
864
-
865
- When generating the JSON OUTPUT section, map issues as follows:
866
-
867
- **Priority (for triage):**
868
- | Severity | Priority | Meaning |
869
- |----------|----------|---------|
870
- | Critical | `critical` | Blocks progression, must fix now |
871
- | High | `critical` | Should fix before next phase |
872
- | Medium | `suggested` | Should fix soon |
873
- | Low | `backlog` | Optional improvement |
874
- | Info | `backlog` | Informational only |
875
-
876
- **Severity is derived from failure_code suffix:**
877
- | Suffix | Severity | Priority |
878
- |--------|----------|----------|
879
- | `/C` | critical | critical |
880
- | `/H` | high | critical |
881
- | `/M` | medium | suggested |
882
- | `/L` | low | backlog |
883
- | `/I` | info | backlog |
884
-
885
- ## Failure Code Selection
886
-
887
- **1. Use the default code from the criterion that failed** (e.g., `→ SEM-COM/H`)
888
-
889
- **2. Adjust severity letter based on actual impact:**
890
- - `/C` - Security vulnerabilities, data loss risk, crashes, blocks all functionality
891
- - `/H` - Broken functionality, missing critical tests, significant user impact
892
- - `/M` - Code quality issues, maintainability concerns, moderate impact
893
- - `/L` - Style issues, minor improvements, low impact
894
- - `/I` - Suggestions, informational, no functional impact
895
-
896
- **3. Consider context when adjusting:**
897
- - A naming issue in a public API → elevate to `/M` or `/H`
898
- - A complexity issue in rarely-used code → may stay at `/L`
899
- - Missing error handling in user-facing code → `/H` or `/C`
900
- - Missing error handling in internal utility → `/M`
901
686
 
902
687
  ## Edge Case Handling
903
688
 
@@ -938,10 +723,6 @@ When generating the JSON OUTPUT section, map issues as follows:
938
723
  **Runs after:** code-validator
939
724
  **Recommends:** type-safety-validator
940
725
 
941
- ### Handoff: What This Agent Passes Downstream
942
-
943
- ### Handoff: What This Agent Expects From Predecessors
944
- **From code-validator:** Validation results from code-validator
945
726
 
946
727
  ---
947
728