uv-suite 0.28.0 → 0.30.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 (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -35
  3. package/agents/claude-code/anti-slop-guard.md +14 -1
  4. package/agents/claude-code/architect.md +30 -4
  5. package/agents/claude-code/cartographer.md +18 -6
  6. package/agents/claude-code/eval-writer.md +7 -2
  7. package/agents/claude-code/reviewer.md +5 -1
  8. package/agents/claude-code/spec-writer.md +30 -7
  9. package/agents/generate.py +88 -0
  10. package/bin/cli.js +51 -48
  11. package/hooks/auto-checkpoint-helper.sh +2 -2
  12. package/hooks/auto-checkpoint.sh +3 -3
  13. package/hooks/auto-restore-on-start.sh +30 -0
  14. package/hooks/checkpoint-helper.sh +40 -35
  15. package/hooks/git-context.sh +41 -0
  16. package/hooks/lite-mode-inject.sh +26 -0
  17. package/hooks/session-end-helper.sh +2 -2
  18. package/hooks/session-end.sh +2 -2
  19. package/hooks/session-label-nag.sh +2 -2
  20. package/hooks/session-meta.sh +18 -1
  21. package/hooks/session-review-reminder.sh +2 -2
  22. package/hooks/session-start.sh +16 -0
  23. package/hooks/slop-grep.sh +12 -31
  24. package/hooks/uv-out-best.sh +20 -0
  25. package/hooks/uv-out-collect.sh +52 -0
  26. package/hooks/uv-out-notify.sh +28 -0
  27. package/hooks/uv-out-pointer.sh +16 -0
  28. package/hooks/uv-out-session.sh +24 -0
  29. package/hooks/watchtower-notify.sh +45 -0
  30. package/hooks/watchtower-send.sh +4 -0
  31. package/install.sh +93 -42
  32. package/package.json +2 -2
  33. package/personas/auto.json +40 -1
  34. package/personas/professional.json +46 -1
  35. package/personas/spike.json +32 -2
  36. package/personas/sport.json +44 -1
  37. package/settings.json +6 -2
  38. package/skills/architect/SKILL.md +109 -8
  39. package/skills/architect/specialists/distributed-systems.md +84 -0
  40. package/skills/architect/specialists/full-stack.md +92 -0
  41. package/skills/architect/specialists/llm-ai-engineering.md +86 -0
  42. package/skills/architect/specialists/ml-systems.md +81 -0
  43. package/skills/commit/SKILL.md +5 -2
  44. package/skills/confirm/SKILL.md +3 -3
  45. package/skills/investigate/SKILL.md +14 -4
  46. package/skills/lite/SKILL.md +45 -0
  47. package/skills/qa/SKILL.md +274 -0
  48. package/skills/review/SKILL.md +187 -8
  49. package/skills/review/specialists/api-contract.md +122 -0
  50. package/skills/review/specialists/architecture-trace.md +64 -0
  51. package/skills/review/specialists/data-migration.md +113 -0
  52. package/skills/review/specialists/maintainability.md +138 -0
  53. package/skills/review/specialists/performance.md +115 -0
  54. package/skills/review/specialists/security.md +132 -0
  55. package/skills/review/specialists/testing.md +109 -0
  56. package/skills/session/SKILL.md +87 -0
  57. package/skills/session/operations/auto.md +22 -0
  58. package/skills/session/operations/checkpoint.md +43 -0
  59. package/skills/session/operations/end.md +35 -0
  60. package/skills/session/operations/init.md +16 -0
  61. package/skills/session/operations/restore.md +16 -0
  62. package/skills/spec/SKILL.md +40 -1
  63. package/skills/test/SKILL.md +89 -0
  64. package/skills/test/specialists/eval.md +46 -0
  65. package/skills/test/specialists/integration.md +42 -0
  66. package/skills/test/specialists/unit.md +39 -0
  67. package/skills/understand/SKILL.md +118 -0
  68. package/skills/understand/modes/repo.md +38 -0
  69. package/skills/understand/modes/stack.md +41 -0
  70. package/skills/uv-help/SKILL.md +43 -20
  71. package/uv.sh +36 -3
  72. package/watchtower/Dockerfile +9 -0
  73. package/watchtower/README.md +78 -0
  74. package/watchtower/app/__init__.py +0 -0
  75. package/watchtower/app/__pycache__/__init__.cpython-314.pyc +0 -0
  76. package/watchtower/app/__pycache__/db.cpython-314.pyc +0 -0
  77. package/watchtower/app/__pycache__/main.cpython-314.pyc +0 -0
  78. package/watchtower/app/__pycache__/models.cpython-314.pyc +0 -0
  79. package/watchtower/app/db.py +85 -0
  80. package/watchtower/app/main.py +45 -0
  81. package/watchtower/app/models.py +49 -0
  82. package/watchtower/app/routers/__init__.py +0 -0
  83. package/watchtower/app/routers/__pycache__/__init__.cpython-314.pyc +0 -0
  84. package/watchtower/app/routers/__pycache__/control.cpython-314.pyc +0 -0
  85. package/watchtower/app/routers/__pycache__/ingest.cpython-314.pyc +0 -0
  86. package/watchtower/app/routers/__pycache__/query.cpython-314.pyc +0 -0
  87. package/watchtower/app/routers/__pycache__/stream.cpython-314.pyc +0 -0
  88. package/watchtower/app/routers/control.py +144 -0
  89. package/watchtower/app/routers/ingest.py +102 -0
  90. package/watchtower/app/routers/query.py +84 -0
  91. package/watchtower/app/routers/stream.py +30 -0
  92. package/watchtower/app/services/__init__.py +0 -0
  93. package/watchtower/app/services/__pycache__/__init__.cpython-314.pyc +0 -0
  94. package/watchtower/app/services/__pycache__/checkpoint.cpython-314.pyc +0 -0
  95. package/watchtower/app/services/__pycache__/tmux.cpython-314.pyc +0 -0
  96. package/watchtower/app/services/checkpoint.py +107 -0
  97. package/watchtower/app/services/tmux.py +54 -0
  98. package/watchtower/docker-compose.yml +22 -0
  99. package/watchtower/events.json +10373 -1
  100. package/watchtower/{auto-checkpoint-runner.js → legacy/auto-checkpoint-runner.js} +29 -2
  101. package/watchtower/{dashboard.html → legacy/dashboard.html} +261 -0
  102. package/watchtower/{server.js → legacy/server.js} +63 -0
  103. package/watchtower/legacy/snapshot-manager.js +305 -0
  104. package/watchtower/requirements.txt +3 -0
  105. package/watchtower/schema.sql +43 -0
  106. package/watchtower/static/dashboard.html +449 -0
  107. package/agents/claude-code/devops.md +0 -50
  108. package/agents/claude-code/security.md +0 -75
  109. package/agents/codex/anti-slop-guard.toml +0 -12
  110. package/agents/codex/architect.toml +0 -11
  111. package/agents/codex/cartographer.toml +0 -16
  112. package/agents/codex/devops.toml +0 -8
  113. package/agents/codex/eval-writer.toml +0 -11
  114. package/agents/codex/prototype-builder.toml +0 -10
  115. package/agents/codex/reviewer.toml +0 -16
  116. package/agents/codex/security.toml +0 -14
  117. package/agents/codex/spec-writer.toml +0 -11
  118. package/agents/codex/test-writer.toml +0 -13
  119. package/agents/cursor/anti-slop-guard.mdc +0 -22
  120. package/agents/cursor/architect.mdc +0 -24
  121. package/agents/cursor/cartographer.mdc +0 -28
  122. package/agents/cursor/devops.mdc +0 -16
  123. package/agents/cursor/eval-writer.mdc +0 -21
  124. package/agents/cursor/prototype-builder.mdc +0 -25
  125. package/agents/cursor/reviewer.mdc +0 -26
  126. package/agents/cursor/security.mdc +0 -20
  127. package/agents/cursor/spec-writer.mdc +0 -27
  128. package/agents/cursor/test-writer.mdc +0 -28
  129. package/agents/portable/anti-slop-guard.md +0 -71
  130. package/agents/portable/architect.md +0 -83
  131. package/agents/portable/cartographer.md +0 -64
  132. package/agents/portable/devops.md +0 -56
  133. package/agents/portable/eval-writer.md +0 -70
  134. package/agents/portable/prototype-builder.md +0 -70
  135. package/agents/portable/reviewer.md +0 -79
  136. package/agents/portable/security.md +0 -63
  137. package/agents/portable/spec-writer.md +0 -89
  138. package/agents/portable/test-writer.md +0 -56
  139. package/hooks/context-warning.sh +0 -4
  140. package/skills/auto-checkpoint/SKILL.md +0 -47
  141. package/skills/checkpoint/SKILL.md +0 -105
  142. package/skills/map-codebase/SKILL.md +0 -54
  143. package/skills/map-stack/SKILL.md +0 -121
  144. package/skills/restore/SKILL.md +0 -55
  145. package/skills/security-review/SKILL.md +0 -87
  146. package/skills/session-end/SKILL.md +0 -100
  147. package/skills/session-init/SKILL.md +0 -45
  148. package/skills/slop-check/SKILL.md +0 -40
  149. package/skills/write-evals/SKILL.md +0 -34
  150. package/skills/write-tests/SKILL.md +0 -54
  151. /package/watchtower/{auto-checkpoint-prompt.md → legacy/auto-checkpoint-prompt.md} +0 -0
package/install.sh CHANGED
@@ -74,17 +74,23 @@ mkdir -p "$TARGET_DIR/skills"
74
74
  mkdir -p "$TARGET_DIR/hooks"
75
75
  mkdir -p "$TARGET_DIR/rules"
76
76
 
77
- # --- Install agents (Claude Code subagent definitions) ---
78
- echo "Installing 10 Claude Code agent definitions..."
77
+ # --- Install agents (Claude Code subagent definitions are the canonical source) ---
78
+ echo "Installing 8 Claude Code agent definitions..."
79
79
  cp "$UV_SUITE_DIR/agents/claude-code/"*.md "$TARGET_DIR/agents/"
80
80
  echo " ✓ cartographer, spec-writer, architect, reviewer, test-writer"
81
- echo " ✓ eval-writer, anti-slop-guard, prototype-builder, devops, security"
81
+ echo " ✓ eval-writer, anti-slop-guard, prototype-builder"
82
82
 
83
- # --- Install Codex agents (.codex/agents/*.toml + AGENTS.md) ---
83
+ # Codex (.toml) and Cursor (.mdc) agents are GENERATED from the canonical .md files
84
+ # so there is a single source of truth — edit agents/claude-code/<name>.md only.
84
85
  PROJECT_ROOT="$(dirname "$TARGET_DIR")"
85
- echo "Installing 10 Codex agent definitions..."
86
- mkdir -p "$PROJECT_ROOT/.codex/agents"
87
- cp "$UV_SUITE_DIR/agents/codex/"*.toml "$PROJECT_ROOT/.codex/agents/"
86
+ if ! command -v python3 &>/dev/null; then
87
+ echo " ⚠ python3 not found — skipping Codex/Cursor agent generation (Claude Code agents installed)"
88
+ else
89
+ echo "Generating Codex agent definitions from canonical..."
90
+ python3 "$UV_SUITE_DIR/agents/generate.py" codex "$PROJECT_ROOT/.codex/agents"
91
+ echo "Generating Cursor rule definitions from canonical..."
92
+ python3 "$UV_SUITE_DIR/agents/generate.py" cursor "$PROJECT_ROOT/.cursor/rules"
93
+ fi
88
94
 
89
95
  # Create AGENTS.md for Codex (it reads this instead of CLAUDE.md)
90
96
  if [ ! -f "$PROJECT_ROOT/AGENTS.md" ]; then
@@ -93,24 +99,19 @@ if [ ! -f "$PROJECT_ROOT/AGENTS.md" ]; then
93
99
  else
94
100
  echo " ✓ AGENTS.md already exists"
95
101
  fi
96
- echo " ✓ .codex/agents/*.toml installed"
97
-
98
- # --- Install Cursor rules (.cursor/rules/*.mdc) ---
99
- echo "Installing 10 Cursor rule definitions..."
100
- mkdir -p "$PROJECT_ROOT/.cursor/rules"
101
- cp "$UV_SUITE_DIR/agents/cursor/"*.mdc "$PROJECT_ROOT/.cursor/rules/"
102
- echo " ✓ .cursor/rules/*.mdc installed"
103
102
 
104
103
  # --- Install skills (slash commands) ---
105
104
  echo "Installing skills..."
106
105
  for skill_dir in "$UV_SUITE_DIR/skills/"*/; do
107
106
  skill_name=$(basename "$skill_dir")
108
107
  mkdir -p "$TARGET_DIR/skills/$skill_name"
109
- cp "$skill_dir/SKILL.md" "$TARGET_DIR/skills/$skill_name/"
108
+ # Copy the whole skill dir — SKILL.md plus any sub-folders the orchestrator
109
+ # routes into (specialists/, modes/, operations/).
110
+ cp -R "$skill_dir"* "$TARGET_DIR/skills/$skill_name/"
110
111
  done
111
- echo " ✓ /map-codebase, /spec, /architect, /review, /write-tests"
112
- echo " ✓ /write-evals, /slop-check, /prototype, /security-review"
113
- echo " ✓ /map-stack, /session-init"
112
+ echo " ✓ /understand (auto-detects repo vs stack), /spec, /architect, /test (--unit/--integration/--eval)"
113
+ echo " ✓ /review (--security/--slop/--architecture), /prototype, /qa, /investigate"
114
+ echo " ✓ /commit, /session (init|checkpoint|restore|end|auto), /confirm, /uv-help"
114
115
 
115
116
  # --- Install hooks ---
116
117
  echo "Installing hook scripts..."
@@ -122,8 +123,8 @@ echo " ✓ block-destructive.sh (PreToolUse: block rm -rf, force push, etc.)"
122
123
  echo " ✓ session-start.sh (SessionStart: track session start time)"
123
124
  echo " ✓ session-timer.sh (PostToolUse: warn at 45/90/180 min)"
124
125
  echo " ✓ session-end.sh (Stop: reflection + duration + review reminder)"
125
- echo " ✓ session-label-nag.sh (UserPromptSubmit: nudge to /session-init)"
126
- echo " ✓ session-meta.sh (helper used by /session-init)"
126
+ echo " ✓ session-label-nag.sh (UserPromptSubmit: nudge to /session init)"
127
+ echo " ✓ session-meta.sh (helper used by /session init)"
127
128
  echo " ✓ status-line.sh (statusLine: show session label + time)"
128
129
  echo " + Real-time slop check (Haiku prompt hook, wired in settings.json)"
129
130
 
@@ -210,15 +211,47 @@ This project uses [UV Suite](https://github.com/utsavanand/uv-suite) v${UV_VERSI
210
211
 
211
212
  ### Skills
212
213
 
213
- /map-codebase, /map-stack, /spec, /architect, /review, /write-tests, /write-evals, /slop-check, /prototype, /security-review, /checkpoint, /restore
214
+ /understand (auto-detects repo vs stack), /spec, /architect, /test (--unit/--integration/--eval), /review (--security/--slop/--architecture), /prototype, /qa, /investigate, /commit, /session (init|checkpoint|restore|end|auto), /confirm, /uv-help
215
+
216
+ ### When to use which skill (reach for these proactively)
217
+
218
+ Prefer the matching skill over doing the task ad hoc -- they carry the project's conventions,
219
+ anti-slop guardrails, and session-scoped artifacts. Don't wait to be told:
220
+ - Entering an unfamiliar codebase, or "how does this work" -> /understand
221
+ - New feature or vague requirements -> /spec, then /architect (which gates on the spec)
222
+ - After implementing, or coverage is low -> /test (--eval for LLM/AI features)
223
+ - Before merging, or reviewing a diff -> /review (--security for auth/payments/data;
224
+ --architecture to audit a design against its recorded constraints)
225
+ - A bug you can't explain -> /investigate
226
+ - Shipping a change -> /commit
227
+ - Session lifecycle -> /session init|checkpoint|restore|end
228
+ If unsure which fits, ask the user rather than guessing.
214
229
 
215
230
  ### Artifacts
216
231
 
217
- Agent output is written to uv-out/. Agents read prior artifacts automatically:
218
- - /map-codebase writes uv-out/map-codebase.md (read by /architect, /review, /security-review)
219
- - /spec writes uv-out/specs/ (read by /architect, /write-tests, /write-evals)
220
- - /architect writes uv-out/architecture/ (read by /review, /write-tests, /slop-check)
221
- - /review writes uv-out/review-*.md (read by /slop-check, /security-review)
232
+ Agent output is written to uv-out/, scoped by session: uv-out/sessions/<session-id>/.
233
+ uv-out/current symlinks to the active session's directory. The session id comes from
234
+ UVS_SESSION_ID (or .uv-suite-state/current-session.txt), so every artifact is attributable
235
+ to the session that produced it. Each artifact is also stamped with provenance frontmatter
236
+ (session, skill, created).
237
+
238
+ Downstream skills prefer the current session's artifacts but can use a prior session's when
239
+ the current one has none (they list current → prior → legacy and ask which to use). All
240
+ writers are session-scoped:
241
+ - /understand → uv-out/sessions/<sid>/map-codebase.md (repo) or map-stack.md (stack)
242
+ - /spec → uv-out/sessions/<sid>/specs/
243
+ - /architect → uv-out/sessions/<sid>/architecture/
244
+ - /review → uv-out/sessions/<sid>/review/state.md (flat pointer: uv-out/review-state.md)
245
+ - /review --slop → uv-out/sessions/<sid>/slop/report.md
246
+ - /review --security → uv-out/sessions/<sid>/security/report.md
247
+ - /investigate → uv-out/sessions/<sid>/investigate/report.md
248
+ - /test --eval → uv-out/sessions/<sid>/evals/
249
+ - /qa → uv-out/sessions/<sid>/qa/ (flat pointer: uv-out/qa-state.md)
250
+ - /session checkpoint → uv-out/sessions/<sid>/checkpoints/
251
+
252
+ Fixed-path consumers (/commit, /ship) read the flat pointer symlinks (uv-out/review-state.md,
253
+ uv-out/qa-state.md), which resolve into the current session. The Stop hook uv-out-notify.sh
254
+ prints the artifact path (and session id) to the terminal after each run.
222
255
 
223
256
  ### Hooks
224
257
 
@@ -244,7 +277,7 @@ ${HOOKS_TEXT}
244
277
 
245
278
  **Planning:** Use plan mode for complex tasks. Break work small enough to complete in under 50% context.
246
279
 
247
- **Session:** /compact at ~50% context. Past 90 min, take a break. Run /checkpoint before ending a session. Run /restore at the start of the next one.
280
+ **Session:** /compact at ~50% context. Past 90 min, take a break. Run /session checkpoint before ending a session. Run /session restore at the start of the next one.
248
281
 
249
282
  ### Launching sessions
250
283
 
@@ -263,6 +296,11 @@ if command -v pip3 &>/dev/null; then PIP_CMD="pip3"
263
296
  elif command -v pip &>/dev/null; then PIP_CMD="pip"
264
297
  fi
265
298
 
299
+ # `timeout` is absent on stock macOS (gtimeout via coreutils); fall back to no timeout.
300
+ TO=""
301
+ if command -v timeout &>/dev/null; then TO="timeout 60"
302
+ elif command -v gtimeout &>/dev/null; then TO="gtimeout 60"; fi
303
+
266
304
  if [ -n "$PIP_CMD" ]; then
267
305
  for pkg_info in "graphifyy:graphify:Graphify (knowledge graphs for Cartographer)" \
268
306
  "semgrep:semgrep:Semgrep (SAST for Security Agent)" \
@@ -274,7 +312,7 @@ if [ -n "$PIP_CMD" ]; then
274
312
  echo " ✓ $label (already installed)"
275
313
  else
276
314
  echo " Installing $label..."
277
- timeout 60 $PIP_CMD install "$pkg" --quiet 2>/dev/null
315
+ $TO $PIP_CMD install "$pkg" --quiet 2>/dev/null || true
278
316
  if command -v "$cmd" &>/dev/null || $PIP_CMD show "$pkg" &>/dev/null; then
279
317
  echo " ✓ $label installed"
280
318
  else
@@ -298,7 +336,7 @@ if command -v repomix &>/dev/null; then
298
336
  echo " ✓ Repomix (already installed)"
299
337
  else
300
338
  echo " Installing Repomix (codebase context packing)..."
301
- npm install -g repomix --quiet 2>/dev/null
339
+ $TO npm install -g repomix --quiet 2>/dev/null || true
302
340
  if command -v repomix &>/dev/null; then
303
341
  echo " ✓ Repomix installed"
304
342
  else
@@ -306,6 +344,16 @@ else
306
344
  fi
307
345
  fi
308
346
 
347
+ # tmux — required for Watchtower to OWN and control uvs sessions (approve/close/send-keys).
348
+ if command -v tmux &>/dev/null; then
349
+ echo " ✓ tmux (Watchtower can own + control uvs sessions)"
350
+ else
351
+ echo " ⚠ tmux not found — Watchtower control (approve/close from the dashboard) needs it."
352
+ echo " macOS: brew install tmux · Debian/Ubuntu: apt install tmux"
353
+ echo " Without tmux, uvs sessions launch normally but aren't Watchtower-controllable"
354
+ echo " (out-of-band checkpoint still works)."
355
+ fi
356
+
309
357
  # Go tools (Gitleaks, Trivy — brew or binary)
310
358
  if command -v brew &>/dev/null; then
311
359
  for tool_info in "gitleaks:Gitleaks (secret detection)" \
@@ -367,24 +415,27 @@ echo "╚═══════════════════════
367
415
  echo ""
368
416
  echo "What was installed:"
369
417
  echo ""
370
- echo " Claude Code .claude/agents/*.md + skills/ + hooks/ + rules/"
371
- echo " Codex .codex/agents/*.toml + AGENTS.md"
372
- echo " Cursor .cursor/rules/*.mdc"
418
+ echo " Claude Code .claude/agents/*.md (8 canonical) + skills/ + hooks/ + rules/"
419
+ echo " Codex .codex/agents/*.toml (generated from canonical) + AGENTS.md"
420
+ echo " Cursor .cursor/rules/*.mdc (generated from canonical)"
373
421
  echo " Personas (4) .claude/personas/*.json"
374
422
  echo " Launcher ./uv.sh"
375
423
  echo ""
376
424
 
377
- echo "Available slash commands:"
425
+ echo "Available slash commands (12 skills):"
378
426
  echo ""
379
- echo " /map-codebase [dir] Map a codebase (Cartographer)"
380
- echo " /spec [requirements] Write a technical spec (Spec Writer)"
381
- echo " /architect [spec] Design architecture + Acts (Architect)"
382
- echo " /review [file] Code review (Reviewer)"
383
- echo " /write-tests [file] Generate tests (Test Writer)"
384
- echo " /write-evals [prompt] Write AI evaluations (Eval Writer)"
385
- echo " /slop-check [file] Detect AI slop (Anti-Slop Guard)"
386
- echo " /prototype [concept] Build a prototype (Prototype Builder)"
387
- echo " /security-review [file] Security audit (Security Agent)"
427
+ echo " /understand Map a codebase or full stack (auto-detected) (Cartographer)"
428
+ echo " /spec [requirements] Write a technical spec (Spec Writer)"
429
+ echo " /architect [spec] Design architecture + Acts (Architect)"
430
+ echo " /test [--unit|--integration|--eval] Generate tests/evals (Test Writer, Eval Writer)"
431
+ echo " /review [--security|--slop] Code review, security audit, slop check (Reviewer, etc.)"
432
+ echo " /prototype [concept] Build a prototype (Prototype Builder)"
433
+ echo " /qa [target] Browser-based QA (Playwright MCP)"
434
+ echo " /investigate [question] Multi-step codebase investigation"
435
+ echo " /commit Stage and commit changes"
436
+ echo " /session <init|checkpoint|restore|end|auto> Manage session lifecycle"
437
+ echo " /confirm Confirm a HITL gate"
438
+ echo " /uv-help Show UV Suite help"
388
439
  echo ""
389
440
 
390
441
  if [ "$PERSONA" = "sport" ]; then
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "uv-suite",
3
- "version": "0.28.0",
4
- "description": "Portable framework for AI-assisted software development. 10 agents, 9 skills, 5 hooks, 4 personas. Works with Claude Code, Cursor, and Codex.",
3
+ "version": "0.30.0",
4
+ "description": "Anti-slop guardrails, specialized agents, and a live observability + control plane for AI-assisted coding. 8 agents, 12 skills, 27 hooks, 6 guardrails, 4 personas; Watchtower (Python/Postgres) for monitoring + checkpoint/close/approve from the browser. Works with Claude Code, Cursor, and Codex.",
5
5
  "author": "Utsav Anand",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -37,6 +37,17 @@
37
37
  "Bash(wc *)",
38
38
  "Bash(head *)",
39
39
  "Bash(tail *)",
40
+ "Bash(grep *)",
41
+ "Bash(rg *)",
42
+ "Bash(jq *)",
43
+ "Bash(sed -n *)",
44
+ "Bash(awk *)",
45
+ "Bash(tree *)",
46
+ "Bash(du *)",
47
+ "Bash(df *)",
48
+ "Bash(file *)",
49
+ "Bash(stat *)",
50
+ "Bash(diff *)",
40
51
  "Bash(curl *)",
41
52
  "Bash(chmod *)",
42
53
  "Bash(rm /tmp/*)",
@@ -70,6 +81,11 @@
70
81
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh SessionStart",
71
82
  "timeout": 2,
72
83
  "async": true
84
+ },
85
+ {
86
+ "type": "command",
87
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/auto-restore-on-start.sh",
88
+ "timeout": 3
73
89
  }
74
90
  ]
75
91
  }
@@ -88,6 +104,11 @@
88
104
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/session-label-nag.sh",
89
105
  "timeout": 3
90
106
  },
107
+ {
108
+ "type": "command",
109
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/lite-mode-inject.sh",
110
+ "timeout": 2
111
+ },
91
112
  {
92
113
  "type": "command",
93
114
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh UserPromptSubmit",
@@ -106,6 +127,12 @@
106
127
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh PermissionRequest",
107
128
  "timeout": 2,
108
129
  "async": true
130
+ },
131
+ {
132
+ "type": "command",
133
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-notify.sh",
134
+ "timeout": 2,
135
+ "async": true
109
136
  }
110
137
  ]
111
138
  }
@@ -180,6 +207,12 @@
180
207
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/auto-lint.sh",
181
208
  "timeout": 15,
182
209
  "statusMessage": "Auto-formatting..."
210
+ },
211
+ {
212
+ "type": "command",
213
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/slop-grep.sh",
214
+ "timeout": 3,
215
+ "statusMessage": "Slop check..."
183
216
  }
184
217
  ]
185
218
  }
@@ -192,6 +225,12 @@
192
225
  "type": "command",
193
226
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/session-end.sh",
194
227
  "timeout": 10
228
+ },
229
+ {
230
+ "type": "command",
231
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/uv-out-notify.sh",
232
+ "timeout": 5,
233
+ "statusMessage": "Locating UV Suite output..."
195
234
  }
196
235
  ]
197
236
  }
@@ -201,4 +240,4 @@
201
240
  "type": "command",
202
241
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/status-line.sh"
203
242
  }
204
- }
243
+ }
@@ -23,6 +23,29 @@
23
23
  "Bash(git log *)",
24
24
  "Bash(git show *)",
25
25
  "Bash(git ls-files *)",
26
+ "Bash(git branch *)",
27
+ "Bash(git blame *)",
28
+ "Bash(git remote *)",
29
+ "Bash(cat *)",
30
+ "Bash(ls *)",
31
+ "Bash(head *)",
32
+ "Bash(tail *)",
33
+ "Bash(find *)",
34
+ "Bash(wc *)",
35
+ "Bash(grep *)",
36
+ "Bash(rg *)",
37
+ "Bash(jq *)",
38
+ "Bash(sed -n *)",
39
+ "Bash(awk *)",
40
+ "Bash(tree *)",
41
+ "Bash(du *)",
42
+ "Bash(df *)",
43
+ "Bash(file *)",
44
+ "Bash(stat *)",
45
+ "Bash(diff *)",
46
+ "Bash(basename *)",
47
+ "Bash(dirname *)",
48
+ "Bash(realpath *)",
26
49
  "Bash(npm test *)",
27
50
  "Bash(npm run test *)",
28
51
  "Bash(npm run lint *)",
@@ -70,6 +93,11 @@
70
93
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh SessionStart",
71
94
  "timeout": 2,
72
95
  "async": true
96
+ },
97
+ {
98
+ "type": "command",
99
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/auto-restore-on-start.sh",
100
+ "timeout": 3
73
101
  }
74
102
  ]
75
103
  }
@@ -78,6 +106,11 @@
78
106
  {
79
107
  "matcher": "*",
80
108
  "hooks": [
109
+ {
110
+ "type": "command",
111
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/lite-mode-inject.sh",
112
+ "timeout": 2
113
+ },
81
114
  {
82
115
  "type": "command",
83
116
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/confirm-prompt.sh",
@@ -106,6 +139,12 @@
106
139
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh PermissionRequest",
107
140
  "timeout": 2,
108
141
  "async": true
142
+ },
143
+ {
144
+ "type": "command",
145
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-notify.sh",
146
+ "timeout": 2,
147
+ "async": true
109
148
  }
110
149
  ]
111
150
  }
@@ -210,6 +249,12 @@
210
249
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/session-end.sh",
211
250
  "timeout": 10,
212
251
  "statusMessage": "Wrapping up session..."
252
+ },
253
+ {
254
+ "type": "command",
255
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/uv-out-notify.sh",
256
+ "timeout": 5,
257
+ "statusMessage": "Locating UV Suite output..."
213
258
  }
214
259
  ]
215
260
  }
@@ -219,4 +264,4 @@
219
264
  "type": "command",
220
265
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/status-line.sh"
221
266
  }
222
- }
267
+ }
@@ -33,10 +33,18 @@
33
33
  "Bash(rm /tmp/*)",
34
34
  "Bash(cat *)",
35
35
  "Bash(ls *)",
36
+ "Bash(grep *)",
37
+ "Bash(rg *)",
38
+ "Bash(jq *)",
39
+ "Bash(less *)",
40
+ "Bash(sed -n *)",
41
+ "Bash(awk *)",
42
+ "Bash(file *)",
36
43
  "Bash(echo *)",
37
44
  "Bash(printf *)",
38
45
  "Bash(node --check *)",
39
- "Bash(bash -n *)"
46
+ "Bash(bash -n *)",
47
+ "WebFetch(*)"
40
48
  ],
41
49
  "deny": [
42
50
  "Bash(rm -rf /)",
@@ -63,6 +71,11 @@
63
71
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh SessionStart",
64
72
  "timeout": 2,
65
73
  "async": true
74
+ },
75
+ {
76
+ "type": "command",
77
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/auto-restore-on-start.sh",
78
+ "timeout": 3
66
79
  }
67
80
  ]
68
81
  }
@@ -81,6 +94,11 @@
81
94
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/session-label-nag.sh",
82
95
  "timeout": 3
83
96
  },
97
+ {
98
+ "type": "command",
99
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/lite-mode-inject.sh",
100
+ "timeout": 2
101
+ },
84
102
  {
85
103
  "type": "command",
86
104
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh UserPromptSubmit",
@@ -99,6 +117,12 @@
99
117
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh PermissionRequest",
100
118
  "timeout": 2,
101
119
  "async": true
120
+ },
121
+ {
122
+ "type": "command",
123
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-notify.sh",
124
+ "timeout": 2,
125
+ "async": true
102
126
  }
103
127
  ]
104
128
  }
@@ -167,6 +191,12 @@
167
191
  "type": "command",
168
192
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/session-end.sh",
169
193
  "timeout": 10
194
+ },
195
+ {
196
+ "type": "command",
197
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/uv-out-notify.sh",
198
+ "timeout": 5,
199
+ "statusMessage": "Locating UV Suite output..."
170
200
  }
171
201
  ]
172
202
  }
@@ -176,4 +206,4 @@
176
206
  "type": "command",
177
207
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/status-line.sh"
178
208
  }
179
- }
209
+ }
@@ -22,6 +22,21 @@
22
22
  "Bash(rm /tmp/*)",
23
23
  "Bash(cat *)",
24
24
  "Bash(ls *)",
25
+ "Bash(head *)",
26
+ "Bash(tail *)",
27
+ "Bash(find *)",
28
+ "Bash(wc *)",
29
+ "Bash(grep *)",
30
+ "Bash(rg *)",
31
+ "Bash(jq *)",
32
+ "Bash(sed -n *)",
33
+ "Bash(awk *)",
34
+ "Bash(tree *)",
35
+ "Bash(du *)",
36
+ "Bash(df *)",
37
+ "Bash(file *)",
38
+ "Bash(stat *)",
39
+ "Bash(diff *)",
25
40
  "Bash(echo *)",
26
41
  "Bash(printf *)",
27
42
  "Bash(node --check *)",
@@ -52,6 +67,11 @@
52
67
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh SessionStart",
53
68
  "timeout": 2,
54
69
  "async": true
70
+ },
71
+ {
72
+ "type": "command",
73
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/auto-restore-on-start.sh",
74
+ "timeout": 3
55
75
  }
56
76
  ]
57
77
  }
@@ -70,6 +90,11 @@
70
90
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/session-label-nag.sh",
71
91
  "timeout": 3
72
92
  },
93
+ {
94
+ "type": "command",
95
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/lite-mode-inject.sh",
96
+ "timeout": 2
97
+ },
73
98
  {
74
99
  "type": "command",
75
100
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh UserPromptSubmit",
@@ -88,6 +113,12 @@
88
113
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh PermissionRequest",
89
114
  "timeout": 2,
90
115
  "async": true
116
+ },
117
+ {
118
+ "type": "command",
119
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-notify.sh",
120
+ "timeout": 2,
121
+ "async": true
91
122
  }
92
123
  ]
93
124
  }
@@ -144,6 +175,12 @@
144
175
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/auto-lint.sh",
145
176
  "timeout": 15,
146
177
  "statusMessage": "Auto-formatting..."
178
+ },
179
+ {
180
+ "type": "command",
181
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/slop-grep.sh",
182
+ "timeout": 3,
183
+ "statusMessage": "Slop check..."
147
184
  }
148
185
  ]
149
186
  }
@@ -156,6 +193,12 @@
156
193
  "type": "command",
157
194
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/session-end.sh",
158
195
  "timeout": 10
196
+ },
197
+ {
198
+ "type": "command",
199
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/uv-out-notify.sh",
200
+ "timeout": 5,
201
+ "statusMessage": "Locating UV Suite output..."
159
202
  }
160
203
  ]
161
204
  }
@@ -165,4 +208,4 @@
165
208
  "type": "command",
166
209
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/status-line.sh"
167
210
  }
168
- }
211
+ }
package/settings.json CHANGED
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
3
-
4
3
  "permissions": {
5
4
  "allow": [
6
5
  "Read(*)",
@@ -45,7 +44,6 @@
45
44
  "Bash(git reset --hard origin/*)"
46
45
  ]
47
46
  },
48
-
49
47
  "hooks": {
50
48
  "PreToolUse": [
51
49
  {
@@ -99,6 +97,12 @@
99
97
  "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/session-review-reminder.sh",
100
98
  "timeout": 10,
101
99
  "statusMessage": "Checking for uncommitted changes..."
100
+ },
101
+ {
102
+ "type": "command",
103
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/uv-out-notify.sh",
104
+ "timeout": 5,
105
+ "statusMessage": "Locating UV Suite output..."
102
106
  }
103
107
  ]
104
108
  }