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.
- package/LICENSE +21 -0
- package/README.md +58 -35
- package/agents/claude-code/anti-slop-guard.md +14 -1
- package/agents/claude-code/architect.md +30 -4
- package/agents/claude-code/cartographer.md +18 -6
- package/agents/claude-code/eval-writer.md +7 -2
- package/agents/claude-code/reviewer.md +5 -1
- package/agents/claude-code/spec-writer.md +30 -7
- package/agents/generate.py +88 -0
- package/bin/cli.js +51 -48
- package/hooks/auto-checkpoint-helper.sh +2 -2
- package/hooks/auto-checkpoint.sh +3 -3
- package/hooks/auto-restore-on-start.sh +30 -0
- package/hooks/checkpoint-helper.sh +40 -35
- package/hooks/git-context.sh +41 -0
- package/hooks/lite-mode-inject.sh +26 -0
- package/hooks/session-end-helper.sh +2 -2
- package/hooks/session-end.sh +2 -2
- package/hooks/session-label-nag.sh +2 -2
- package/hooks/session-meta.sh +18 -1
- package/hooks/session-review-reminder.sh +2 -2
- package/hooks/session-start.sh +16 -0
- package/hooks/slop-grep.sh +12 -31
- package/hooks/uv-out-best.sh +20 -0
- package/hooks/uv-out-collect.sh +52 -0
- package/hooks/uv-out-notify.sh +28 -0
- package/hooks/uv-out-pointer.sh +16 -0
- package/hooks/uv-out-session.sh +24 -0
- package/hooks/watchtower-notify.sh +45 -0
- package/hooks/watchtower-send.sh +4 -0
- package/install.sh +93 -42
- package/package.json +2 -2
- package/personas/auto.json +40 -1
- package/personas/professional.json +46 -1
- package/personas/spike.json +32 -2
- package/personas/sport.json +44 -1
- package/settings.json +6 -2
- package/skills/architect/SKILL.md +109 -8
- package/skills/architect/specialists/distributed-systems.md +84 -0
- package/skills/architect/specialists/full-stack.md +92 -0
- package/skills/architect/specialists/llm-ai-engineering.md +86 -0
- package/skills/architect/specialists/ml-systems.md +81 -0
- package/skills/commit/SKILL.md +5 -2
- package/skills/confirm/SKILL.md +3 -3
- package/skills/investigate/SKILL.md +14 -4
- package/skills/lite/SKILL.md +45 -0
- package/skills/qa/SKILL.md +274 -0
- package/skills/review/SKILL.md +187 -8
- package/skills/review/specialists/api-contract.md +122 -0
- package/skills/review/specialists/architecture-trace.md +64 -0
- package/skills/review/specialists/data-migration.md +113 -0
- package/skills/review/specialists/maintainability.md +138 -0
- package/skills/review/specialists/performance.md +115 -0
- package/skills/review/specialists/security.md +132 -0
- package/skills/review/specialists/testing.md +109 -0
- package/skills/session/SKILL.md +87 -0
- package/skills/session/operations/auto.md +22 -0
- package/skills/session/operations/checkpoint.md +43 -0
- package/skills/session/operations/end.md +35 -0
- package/skills/session/operations/init.md +16 -0
- package/skills/session/operations/restore.md +16 -0
- package/skills/spec/SKILL.md +40 -1
- package/skills/test/SKILL.md +89 -0
- package/skills/test/specialists/eval.md +46 -0
- package/skills/test/specialists/integration.md +42 -0
- package/skills/test/specialists/unit.md +39 -0
- package/skills/understand/SKILL.md +118 -0
- package/skills/understand/modes/repo.md +38 -0
- package/skills/understand/modes/stack.md +41 -0
- package/skills/uv-help/SKILL.md +43 -20
- package/uv.sh +36 -3
- package/watchtower/Dockerfile +9 -0
- package/watchtower/README.md +78 -0
- package/watchtower/app/__init__.py +0 -0
- package/watchtower/app/__pycache__/__init__.cpython-314.pyc +0 -0
- package/watchtower/app/__pycache__/db.cpython-314.pyc +0 -0
- package/watchtower/app/__pycache__/main.cpython-314.pyc +0 -0
- package/watchtower/app/__pycache__/models.cpython-314.pyc +0 -0
- package/watchtower/app/db.py +85 -0
- package/watchtower/app/main.py +45 -0
- package/watchtower/app/models.py +49 -0
- package/watchtower/app/routers/__init__.py +0 -0
- package/watchtower/app/routers/__pycache__/__init__.cpython-314.pyc +0 -0
- package/watchtower/app/routers/__pycache__/control.cpython-314.pyc +0 -0
- package/watchtower/app/routers/__pycache__/ingest.cpython-314.pyc +0 -0
- package/watchtower/app/routers/__pycache__/query.cpython-314.pyc +0 -0
- package/watchtower/app/routers/__pycache__/stream.cpython-314.pyc +0 -0
- package/watchtower/app/routers/control.py +144 -0
- package/watchtower/app/routers/ingest.py +102 -0
- package/watchtower/app/routers/query.py +84 -0
- package/watchtower/app/routers/stream.py +30 -0
- package/watchtower/app/services/__init__.py +0 -0
- package/watchtower/app/services/__pycache__/__init__.cpython-314.pyc +0 -0
- package/watchtower/app/services/__pycache__/checkpoint.cpython-314.pyc +0 -0
- package/watchtower/app/services/__pycache__/tmux.cpython-314.pyc +0 -0
- package/watchtower/app/services/checkpoint.py +107 -0
- package/watchtower/app/services/tmux.py +54 -0
- package/watchtower/docker-compose.yml +22 -0
- package/watchtower/events.json +10373 -1
- package/watchtower/{auto-checkpoint-runner.js → legacy/auto-checkpoint-runner.js} +29 -2
- package/watchtower/{dashboard.html → legacy/dashboard.html} +261 -0
- package/watchtower/{server.js → legacy/server.js} +63 -0
- package/watchtower/legacy/snapshot-manager.js +305 -0
- package/watchtower/requirements.txt +3 -0
- package/watchtower/schema.sql +43 -0
- package/watchtower/static/dashboard.html +449 -0
- package/agents/claude-code/devops.md +0 -50
- package/agents/claude-code/security.md +0 -75
- package/agents/codex/anti-slop-guard.toml +0 -12
- package/agents/codex/architect.toml +0 -11
- package/agents/codex/cartographer.toml +0 -16
- package/agents/codex/devops.toml +0 -8
- package/agents/codex/eval-writer.toml +0 -11
- package/agents/codex/prototype-builder.toml +0 -10
- package/agents/codex/reviewer.toml +0 -16
- package/agents/codex/security.toml +0 -14
- package/agents/codex/spec-writer.toml +0 -11
- package/agents/codex/test-writer.toml +0 -13
- package/agents/cursor/anti-slop-guard.mdc +0 -22
- package/agents/cursor/architect.mdc +0 -24
- package/agents/cursor/cartographer.mdc +0 -28
- package/agents/cursor/devops.mdc +0 -16
- package/agents/cursor/eval-writer.mdc +0 -21
- package/agents/cursor/prototype-builder.mdc +0 -25
- package/agents/cursor/reviewer.mdc +0 -26
- package/agents/cursor/security.mdc +0 -20
- package/agents/cursor/spec-writer.mdc +0 -27
- package/agents/cursor/test-writer.mdc +0 -28
- package/agents/portable/anti-slop-guard.md +0 -71
- package/agents/portable/architect.md +0 -83
- package/agents/portable/cartographer.md +0 -64
- package/agents/portable/devops.md +0 -56
- package/agents/portable/eval-writer.md +0 -70
- package/agents/portable/prototype-builder.md +0 -70
- package/agents/portable/reviewer.md +0 -79
- package/agents/portable/security.md +0 -63
- package/agents/portable/spec-writer.md +0 -89
- package/agents/portable/test-writer.md +0 -56
- package/hooks/context-warning.sh +0 -4
- package/skills/auto-checkpoint/SKILL.md +0 -47
- package/skills/checkpoint/SKILL.md +0 -105
- package/skills/map-codebase/SKILL.md +0 -54
- package/skills/map-stack/SKILL.md +0 -121
- package/skills/restore/SKILL.md +0 -55
- package/skills/security-review/SKILL.md +0 -87
- package/skills/session-end/SKILL.md +0 -100
- package/skills/session-init/SKILL.md +0 -45
- package/skills/slop-check/SKILL.md +0 -40
- package/skills/write-evals/SKILL.md +0 -34
- package/skills/write-tests/SKILL.md +0 -54
- /package/watchtower/{auto-checkpoint-prompt.md → legacy/auto-checkpoint-prompt.md} +0 -0
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: map-stack
|
|
3
|
-
description: >
|
|
4
|
-
Map an entire tech stack across multiple codebases/services. Shows how services
|
|
5
|
-
relate — API calls, shared databases, message queues, shared libraries, deployment
|
|
6
|
-
topology. Use when you need to understand how multiple repos/services fit together.
|
|
7
|
-
argument-hint: "[parent-directory-or-service-list]"
|
|
8
|
-
user-invocable: true
|
|
9
|
-
context: fork
|
|
10
|
-
agent: cartographer
|
|
11
|
-
model: claude-opus-4-6
|
|
12
|
-
effort: max
|
|
13
|
-
allowed-tools:
|
|
14
|
-
- Read(*)
|
|
15
|
-
- Grep(*)
|
|
16
|
-
- Glob(*)
|
|
17
|
-
- Bash(graphify *)
|
|
18
|
-
- Bash(repomix *)
|
|
19
|
-
- Bash(find *)
|
|
20
|
-
- Bash(git *)
|
|
21
|
-
- Bash(wc *)
|
|
22
|
-
- Bash(head *)
|
|
23
|
-
- Bash(ls *)
|
|
24
|
-
- Bash(cat *)
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Target
|
|
28
|
-
|
|
29
|
-
$ARGUMENTS
|
|
30
|
-
|
|
31
|
-
If no target specified, scan the current directory for subdirectories that look like services (contain package.json, pom.xml, go.mod, Cargo.toml, requirements.txt, Dockerfile, etc.).
|
|
32
|
-
|
|
33
|
-
## Mode: Multi-Codebase Stack Mapping
|
|
34
|
-
|
|
35
|
-
This is NOT a single-repo mapping. You are mapping an entire tech stack — multiple services, how they connect, and the system-level architecture.
|
|
36
|
-
|
|
37
|
-
## Project context
|
|
38
|
-
|
|
39
|
-
!`cat CLAUDE.md 2>/dev/null || echo "No CLAUDE.md found"`
|
|
40
|
-
|
|
41
|
-
## Prior codebase maps (from /map-codebase runs)
|
|
42
|
-
|
|
43
|
-
!`cat uv-out/map-codebase.md 2>/dev/null | head -80 || echo "No prior codebase map — will scan from scratch"`
|
|
44
|
-
|
|
45
|
-
## Discover services
|
|
46
|
-
|
|
47
|
-
```!
|
|
48
|
-
find . -maxdepth 3 \( -name "package.json" -o -name "pom.xml" -o -name "go.mod" -o -name "Cargo.toml" -o -name "requirements.txt" -o -name "setup.py" -o -name "pyproject.toml" \) -not -path "*/node_modules/*" -not -path "*/.git/*" 2>/dev/null | head -30
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## Dockerfiles and compose
|
|
52
|
-
|
|
53
|
-
```!
|
|
54
|
-
find . -maxdepth 3 \( -name "Dockerfile" -o -name "docker-compose*" \) -not -path "*/node_modules/*" 2>/dev/null | head -20
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## Infrastructure (Helm, Terraform, K8s)
|
|
58
|
-
|
|
59
|
-
```!
|
|
60
|
-
find . -maxdepth 4 \( -name "*.tf" -o -name "Chart.yaml" -o -name "values.yaml" -o -name "*.k8s.yaml" -o -name "kustomization.yaml" \) -not -path "*/node_modules/*" 2>/dev/null | head -20
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## API contracts (OpenAPI, gRPC, GraphQL)
|
|
64
|
-
|
|
65
|
-
```!
|
|
66
|
-
find . -maxdepth 4 \( -name "*.proto" -o -name "openapi*" -o -name "swagger*" -o -name "*.graphql" -o -name "schema.graphql" \) -not -path "*/node_modules/*" 2>/dev/null | head -20
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Process
|
|
70
|
-
|
|
71
|
-
Follow this sequence:
|
|
72
|
-
|
|
73
|
-
### 1. Inventory every service
|
|
74
|
-
For each directory that contains a build file, identify:
|
|
75
|
-
- Service name
|
|
76
|
-
- Language / framework
|
|
77
|
-
- What it does (from README, main entry point, or package description)
|
|
78
|
-
- How it's deployed (Docker, K8s, serverless)
|
|
79
|
-
|
|
80
|
-
### 2. Map connections BETWEEN services
|
|
81
|
-
This is the hard part. Look for:
|
|
82
|
-
- **HTTP/REST calls** — grep for base URLs, API client configs, fetch/axios calls referencing other services
|
|
83
|
-
- **gRPC/Protobuf** — shared .proto files, client stubs
|
|
84
|
-
- **Message queues** — Kafka topics, RabbitMQ queues, SQS queues referenced across services
|
|
85
|
-
- **Shared databases** — same DB connection strings or schema references across services
|
|
86
|
-
- **Shared libraries** — internal packages imported by multiple services
|
|
87
|
-
- **Environment variables** — service URLs configured via env vars (SERVICE_A_URL, etc.)
|
|
88
|
-
|
|
89
|
-
### 3. Identify the data flow
|
|
90
|
-
- Where does data enter the system? (API gateway, webhook, user upload)
|
|
91
|
-
- How does it flow through services?
|
|
92
|
-
- Where does it end up? (database, external API, user response)
|
|
93
|
-
|
|
94
|
-
### 4. Produce the stack map
|
|
95
|
-
|
|
96
|
-
Output a **System Architecture Diagram** (Mermaid) showing:
|
|
97
|
-
- Every service as a node
|
|
98
|
-
- Connections between them (labeled: REST, gRPC, Kafka, shared DB, etc.)
|
|
99
|
-
- External dependencies (third-party APIs, managed services)
|
|
100
|
-
- Data stores (databases, caches, queues)
|
|
101
|
-
|
|
102
|
-
Then a **Stack Inventory Table**:
|
|
103
|
-
|
|
104
|
-
| Service | Language | Framework | Database | Deploys to | Depends on | Depended on by |
|
|
105
|
-
|---------|----------|-----------|----------|------------|------------|----------------|
|
|
106
|
-
|
|
107
|
-
Then a **Connection Matrix** showing which services talk to which:
|
|
108
|
-
|
|
109
|
-
| | Service A | Service B | Service C | DB-1 | Kafka |
|
|
110
|
-
|---|-----------|-----------|-----------|------|-------|
|
|
111
|
-
| Service A | — | REST | — | R/W | produce |
|
|
112
|
-
| Service B | — | — | gRPC | R | consume |
|
|
113
|
-
|
|
114
|
-
Then **Danger Zones** at the stack level:
|
|
115
|
-
- Single points of failure
|
|
116
|
-
- Services with the most inbound dependencies (change carefully)
|
|
117
|
-
- Shared databases (schema changes affect multiple services)
|
|
118
|
-
- Missing monitoring or health checks
|
|
119
|
-
|
|
120
|
-
### 5. If Graphify is available
|
|
121
|
-
Run `graphify run [parent-dir] --directed` on the entire parent directory to get a unified knowledge graph across all services. The graph will show cross-service relationships that are hard to find manually.
|
package/skills/restore/SKILL.md
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: restore
|
|
3
|
-
description: >
|
|
4
|
-
Restore the latest checkpoint for the current session — shows what was done,
|
|
5
|
-
key decisions, current state, and what's next. With no arguments, picks the
|
|
6
|
-
current `UVS_SESSION_ID`'s most recent checkpoint. Pass a session id prefix
|
|
7
|
-
or name to restore from a different session.
|
|
8
|
-
argument-hint: "[<session-id-prefix> | <session-name> | list]"
|
|
9
|
-
user-invocable: true
|
|
10
|
-
allowed-tools:
|
|
11
|
-
- Read(*)
|
|
12
|
-
- Bash(ls *)
|
|
13
|
-
- Bash(cat *)
|
|
14
|
-
- Bash(grep *)
|
|
15
|
-
- Bash(find *)
|
|
16
|
-
- Bash(git rev-parse *)
|
|
17
|
-
- Bash("$CLAUDE_PROJECT_DIR"/.claude/hooks/checkpoint-helper.sh *)
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## Available sessions with checkpoints
|
|
21
|
-
|
|
22
|
-
!`"$CLAUDE_PROJECT_DIR"/.claude/hooks/checkpoint-helper.sh list`
|
|
23
|
-
|
|
24
|
-
(`*` marks the current session.)
|
|
25
|
-
|
|
26
|
-
## Latest checkpoint for the current session
|
|
27
|
-
|
|
28
|
-
!`"$CLAUDE_PROJECT_DIR"/.claude/hooks/checkpoint-helper.sh latest`
|
|
29
|
-
|
|
30
|
-
## Argument
|
|
31
|
-
|
|
32
|
-
$ARGUMENTS
|
|
33
|
-
|
|
34
|
-
## Instructions
|
|
35
|
-
|
|
36
|
-
1. **If `$ARGUMENTS` is empty or "latest"**: read the checkpoint shown above (the
|
|
37
|
-
current session's `latest.md`). Summarize it in 3-4 sentences: what was
|
|
38
|
-
done, current state, what's next. Then ask: "Ready to pick up from here, or
|
|
39
|
-
do you want to take a different direction?"
|
|
40
|
-
|
|
41
|
-
2. **If `$ARGUMENTS` is "list"**: just show the user the available-sessions
|
|
42
|
-
list above and ask which one they want to restore.
|
|
43
|
-
|
|
44
|
-
3. **If `$ARGUMENTS` looks like a session id prefix** (8-char hex / UUID-ish)
|
|
45
|
-
**or a session name**: match it against the list above. Read the
|
|
46
|
-
matching session's `latest.md` from
|
|
47
|
-
`<project>/uv-out/checkpoints/<full-session-id>/latest.md` using the Read
|
|
48
|
-
tool, then summarize as in (1).
|
|
49
|
-
|
|
50
|
-
4. If no match is found, list the available sessions and ask the user to
|
|
51
|
-
pick one.
|
|
52
|
-
|
|
53
|
-
When summarizing, include the session's name and purpose from the
|
|
54
|
-
frontmatter at the top of the checkpoint — that's the context the next
|
|
55
|
-
session needs to know what it's picking up.
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: security-review
|
|
3
|
-
description: >
|
|
4
|
-
OWASP-informed security review. Uses Semgrep, Gitleaks, and Trivy when available.
|
|
5
|
-
Falls back to AI-only analysis. Use on code touching auth, payments, data access,
|
|
6
|
-
or external inputs.
|
|
7
|
-
argument-hint: "[file-or-directory]"
|
|
8
|
-
user-invocable: true
|
|
9
|
-
context: fork
|
|
10
|
-
agent: security
|
|
11
|
-
model: claude-opus-4-6
|
|
12
|
-
effort: high
|
|
13
|
-
allowed-tools:
|
|
14
|
-
- Read(*)
|
|
15
|
-
- Grep(*)
|
|
16
|
-
- Glob(*)
|
|
17
|
-
- Bash(git diff *)
|
|
18
|
-
- Bash(semgrep *)
|
|
19
|
-
- Bash(gitleaks *)
|
|
20
|
-
- Bash(trivy *)
|
|
21
|
-
- Bash(npm audit *)
|
|
22
|
-
- Bash(pip audit *)
|
|
23
|
-
- Bash(go vuln *)
|
|
24
|
-
- Bash(cargo audit *)
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Target
|
|
28
|
-
|
|
29
|
-
$ARGUMENTS
|
|
30
|
-
|
|
31
|
-
## Changes to review
|
|
32
|
-
|
|
33
|
-
!`git diff --cached --stat 2>/dev/null || git diff --stat 2>/dev/null || echo "Reviewing full project"`
|
|
34
|
-
|
|
35
|
-
### Full diff
|
|
36
|
-
|
|
37
|
-
!`git diff --cached 2>/dev/null || git diff 2>/dev/null || echo ""`
|
|
38
|
-
|
|
39
|
-
## Danger zones
|
|
40
|
-
|
|
41
|
-
!`cat DANGER-ZONES.md 2>/dev/null || echo "No DANGER-ZONES.md found"`
|
|
42
|
-
|
|
43
|
-
## Prior analysis
|
|
44
|
-
|
|
45
|
-
### Codebase map
|
|
46
|
-
|
|
47
|
-
!`cat uv-out/map-codebase.md 2>/dev/null | head -80 || echo "No codebase map found"`
|
|
48
|
-
|
|
49
|
-
### Recent code review findings
|
|
50
|
-
|
|
51
|
-
!`cat $(ls -t uv-out/review-*.md 2>/dev/null | head -1) 2>/dev/null | head -60 || echo "No prior review found"`
|
|
52
|
-
|
|
53
|
-
### Recent slop check
|
|
54
|
-
|
|
55
|
-
!`cat $(ls -t uv-out/slop-check-*.md 2>/dev/null | head -1) 2>/dev/null | head -40 || echo "No prior slop check found"`
|
|
56
|
-
|
|
57
|
-
## Available security tools
|
|
58
|
-
|
|
59
|
-
```!
|
|
60
|
-
echo "=== Semgrep ===" && semgrep --version 2>/dev/null || echo "not installed (pip install semgrep)"
|
|
61
|
-
echo "=== Gitleaks ===" && gitleaks version 2>/dev/null || echo "not installed (brew install gitleaks)"
|
|
62
|
-
echo "=== Trivy ===" && trivy --version 2>/dev/null || echo "not installed (brew install trivy)"
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## SAST scan (Semgrep, if available)
|
|
66
|
-
|
|
67
|
-
```!
|
|
68
|
-
semgrep --config auto --json --quiet . 2>/dev/null | head -100 || echo "Semgrep not available — will use AI-only analysis"
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
## Secret detection (Gitleaks, if available)
|
|
72
|
-
|
|
73
|
-
```!
|
|
74
|
-
gitleaks detect --source . --no-git --report-format json 2>/dev/null | head -50 || echo "Gitleaks not available — falling back to grep"
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
## Grep-based secret scan (fallback)
|
|
78
|
-
|
|
79
|
-
```!
|
|
80
|
-
grep -rn "password\s*=\|api_key\s*=\|secret\s*=\|token\s*=" --include="*.ts" --include="*.js" --include="*.py" --include="*.java" --include="*.go" . 2>/dev/null | head -20 || echo "No obvious secrets found"
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Dependency audit
|
|
84
|
-
|
|
85
|
-
```!
|
|
86
|
-
trivy fs --scanners vuln --format json . 2>/dev/null | head -80 || npm audit --json 2>/dev/null | head -50 || pip audit 2>/dev/null | head -50 || echo "No dependency scanner found"
|
|
87
|
-
```
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: session-end
|
|
3
|
-
description: >
|
|
4
|
-
Cleanly close the current UV Suite session: write a final manual checkpoint
|
|
5
|
-
(full conversation context), then mark the session as terminated so the
|
|
6
|
-
Watchtower dashboard flips its lifecycle badge to Terminated. Use before
|
|
7
|
-
closing the terminal when you want a deliberate end-of-session beat.
|
|
8
|
-
argument-hint: "[optional-label]"
|
|
9
|
-
user-invocable: true
|
|
10
|
-
allowed-tools:
|
|
11
|
-
- Write(*)
|
|
12
|
-
- Read(*)
|
|
13
|
-
- Bash(git status *)
|
|
14
|
-
- Bash(git diff *)
|
|
15
|
-
- Bash(git log *)
|
|
16
|
-
- Bash(git branch *)
|
|
17
|
-
- Bash(git rev-parse *)
|
|
18
|
-
- Bash(date *)
|
|
19
|
-
- Bash(ls *)
|
|
20
|
-
- Bash(mkdir *)
|
|
21
|
-
- Bash(cat *)
|
|
22
|
-
- Bash(echo *)
|
|
23
|
-
- Bash("$CLAUDE_PROJECT_DIR"/.claude/hooks/checkpoint-helper.sh *)
|
|
24
|
-
- Bash("$CLAUDE_PROJECT_DIR"/.claude/hooks/session-end-helper.sh *)
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Resolve checkpoint directory + session metadata
|
|
28
|
-
|
|
29
|
-
!`"$CLAUDE_PROJECT_DIR"/.claude/hooks/checkpoint-helper.sh dir`
|
|
30
|
-
|
|
31
|
-
!`"$CLAUDE_PROJECT_DIR"/.claude/hooks/checkpoint-helper.sh frontmatter`
|
|
32
|
-
|
|
33
|
-
## Git state
|
|
34
|
-
|
|
35
|
-
!`git branch --show-current 2>/dev/null || echo "(not a git repo)"`
|
|
36
|
-
|
|
37
|
-
!`git status --short 2>/dev/null | head -20 || echo "(no git)"`
|
|
38
|
-
|
|
39
|
-
!`git log --oneline -5 2>/dev/null || echo "(no git history)"`
|
|
40
|
-
|
|
41
|
-
## Step 1 — Write the final checkpoint
|
|
42
|
-
|
|
43
|
-
Write a file at `<checkpoint-dir>/final-YYYY-MM-DD-HHMM.md` using the current
|
|
44
|
-
timestamp. **Override** the frontmatter line `checkpoint_kind: auto-mechanical`
|
|
45
|
-
to read `checkpoint_kind: final-manual` so it's distinguishable from the
|
|
46
|
-
auto-checkpoints. Also write/overwrite `<checkpoint-dir>/latest.md` with the
|
|
47
|
-
same content so `/restore` picks it up.
|
|
48
|
-
|
|
49
|
-
If a label was provided, include it in the filename:
|
|
50
|
-
`<checkpoint-dir>/final-YYYY-MM-DD-HHMM-[label].md`
|
|
51
|
-
|
|
52
|
-
### Label
|
|
53
|
-
|
|
54
|
-
$ARGUMENTS
|
|
55
|
-
|
|
56
|
-
### Body structure (after the frontmatter)
|
|
57
|
-
|
|
58
|
-
```markdown
|
|
59
|
-
# Final checkpoint: [date] [time] [label if provided]
|
|
60
|
-
|
|
61
|
-
## What was accomplished
|
|
62
|
-
- Concrete things done across the whole session — files, commits, decisions
|
|
63
|
-
- One bullet per significant artifact; don't pad
|
|
64
|
-
|
|
65
|
-
## Key decisions made
|
|
66
|
-
- Decision: Why — what was considered, what was rejected
|
|
67
|
-
|
|
68
|
-
## Current state
|
|
69
|
-
- Branch / uncommitted changes / tests status / blockers
|
|
70
|
-
|
|
71
|
-
## Open threads
|
|
72
|
-
- Anything left in flight that the next session needs to pick up
|
|
73
|
-
- Pending reviews, awaiting input, deferred work
|
|
74
|
-
|
|
75
|
-
## Context the next session needs
|
|
76
|
-
- Non-obvious facts, workarounds, "this looks wrong but it's intentional because…"
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
Be specific. This is the last record before the session closes — anything
|
|
80
|
-
not written here is lost unless it's in code or the auto-checkpoints.
|
|
81
|
-
|
|
82
|
-
## Step 2 — Mark the session terminated
|
|
83
|
-
|
|
84
|
-
Once the file is written, run:
|
|
85
|
-
|
|
86
|
-
!`"$CLAUDE_PROJECT_DIR"/.claude/hooks/session-end-helper.sh`
|
|
87
|
-
|
|
88
|
-
Show the user the two-line output. Don't add commentary — the file write
|
|
89
|
-
and the termination signal together speak for themselves.
|
|
90
|
-
|
|
91
|
-
## Notes
|
|
92
|
-
|
|
93
|
-
- `/session-end` does **not** close the terminal or exit Claude Code. After
|
|
94
|
-
it runs, the badge flips to Terminated in the Watchtower; the user
|
|
95
|
-
closes the terminal manually.
|
|
96
|
-
- The final checkpoint uses the live session's full conversation context —
|
|
97
|
-
higher fidelity than the auto-checkpoint summaries because Claude has
|
|
98
|
-
everything in working memory at this moment.
|
|
99
|
-
- If you only want to terminate without a checkpoint, run
|
|
100
|
-
`hooks/session-end-helper.sh` directly from bash and skip this skill.
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: session-init
|
|
3
|
-
description: >
|
|
4
|
-
Label or relabel the current UV Suite session — sets name, kind (long-running
|
|
5
|
-
vs outcome), purpose, and priority (low/med/high). Metadata appears in the
|
|
6
|
-
watchtower dashboard. Use when you skipped the launcher prompt or want to
|
|
7
|
-
rename a session mid-flight.
|
|
8
|
-
argument-hint: "<name> | --kind long|outcome | --purpose <text> | --priority low|med|high | show | clear"
|
|
9
|
-
user-invocable: true
|
|
10
|
-
allowed-tools:
|
|
11
|
-
- Bash("$CLAUDE_PROJECT_DIR"/.claude/hooks/session-meta.sh *)
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Apply /session-init $ARGUMENTS
|
|
15
|
-
|
|
16
|
-
!`HELPER="$CLAUDE_PROJECT_DIR/.claude/hooks/session-meta.sh"; ARGS="$ARGUMENTS"; if [ -z "$ARGS" ] || [ "$ARGS" = "show" ]; then "$HELPER" show; elif [ "$ARGS" = "clear" ]; then "$HELPER" clear; else FIRST=$(printf '%s' "$ARGS" | awk '{print $1}'); REST=$(printf '%s' "$ARGS" | sed 's/^[^ ]* *//'); case "$FIRST" in --kind) "$HELPER" set-kind "$REST" ;; --priority) "$HELPER" set-priority "$REST" ;; --purpose) "$HELPER" set-purpose "$REST" ;; --name) "$HELPER" set-name "$REST" ;; *) "$HELPER" set-name "$ARGS" ;; esac; fi`
|
|
17
|
-
|
|
18
|
-
## Instructions
|
|
19
|
-
|
|
20
|
-
Show the user the output of the command above. Do not add commentary — the
|
|
21
|
-
command itself confirms what changed. The dashboard reflects changes within
|
|
22
|
-
a few seconds (next event refreshes session metadata).
|
|
23
|
-
|
|
24
|
-
## Usage
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
/session-init show current values
|
|
28
|
-
/session-init show show current values
|
|
29
|
-
/session-init <free-text name> set the name (default action)
|
|
30
|
-
/session-init --kind long set kind: long-running
|
|
31
|
-
/session-init --kind outcome set kind: outcome
|
|
32
|
-
/session-init --priority high set priority: low | med | high
|
|
33
|
-
/session-init --purpose <free text> set the purpose
|
|
34
|
-
/session-init clear clear name, kind, purpose, priority
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Notes
|
|
38
|
-
|
|
39
|
-
- The session id is generated by `uv.sh` at launch and exported as
|
|
40
|
-
`UVS_SESSION_ID`. If you launched `claude` directly, this falls back
|
|
41
|
-
to an `ad-hoc-<timestamp>` id.
|
|
42
|
-
- Metadata lives at `.uv-suite-state/sessions/<id>.json`.
|
|
43
|
-
- Persona is captured at launch time and is not editable from here —
|
|
44
|
-
re-launch with a different `uv` persona to change it.
|
|
45
|
-
- Each invocation sets one field at a time. Run multiple times to set more.
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: slop-check
|
|
3
|
-
description: >
|
|
4
|
-
Detect AI-generated slop in code, tests, docs, and architecture.
|
|
5
|
-
Run before merging any AI-generated changes.
|
|
6
|
-
argument-hint: "[file-or-directory]"
|
|
7
|
-
user-invocable: true
|
|
8
|
-
context: fork
|
|
9
|
-
agent: anti-slop-guard
|
|
10
|
-
model: claude-opus-4-6
|
|
11
|
-
effort: high
|
|
12
|
-
allowed-tools:
|
|
13
|
-
- Read(*)
|
|
14
|
-
- Grep(*)
|
|
15
|
-
- Glob(*)
|
|
16
|
-
- Bash(git diff *)
|
|
17
|
-
- Bash(git log *)
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## Target
|
|
21
|
-
|
|
22
|
-
$ARGUMENTS
|
|
23
|
-
|
|
24
|
-
## Changes to scan
|
|
25
|
-
|
|
26
|
-
!`git diff --cached --stat 2>/dev/null || git diff --stat 2>/dev/null || echo "No changes — scan target files directly"`
|
|
27
|
-
|
|
28
|
-
### Full diff
|
|
29
|
-
|
|
30
|
-
!`git diff --cached 2>/dev/null || git diff 2>/dev/null || echo ""`
|
|
31
|
-
|
|
32
|
-
## Prior analysis
|
|
33
|
-
|
|
34
|
-
### Architecture decisions (check code against stated rationale)
|
|
35
|
-
|
|
36
|
-
!`cat uv-out/architecture/decisions.md 2>/dev/null | head -40 || echo "No architecture decisions found"`
|
|
37
|
-
|
|
38
|
-
### Recent review findings
|
|
39
|
-
|
|
40
|
-
!`cat $(ls -t uv-out/review-*.md 2>/dev/null | head -1) 2>/dev/null | head -40 || echo "No prior review found"`
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: write-evals
|
|
3
|
-
description: >
|
|
4
|
-
Write evaluations for AI system prompts and inferencing layers.
|
|
5
|
-
Use when building or modifying LLM-powered features.
|
|
6
|
-
argument-hint: "[prompt-file-or-description]"
|
|
7
|
-
user-invocable: true
|
|
8
|
-
context: fork
|
|
9
|
-
agent: eval-writer
|
|
10
|
-
model: claude-opus-4-6
|
|
11
|
-
effort: high
|
|
12
|
-
allowed-tools:
|
|
13
|
-
- Read(*)
|
|
14
|
-
- Grep(*)
|
|
15
|
-
- Glob(*)
|
|
16
|
-
- Write(*)
|
|
17
|
-
- Edit(*)
|
|
18
|
-
- Bash(npm run eval *)
|
|
19
|
-
- Bash(pytest *)
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## Target
|
|
23
|
-
|
|
24
|
-
$ARGUMENTS
|
|
25
|
-
|
|
26
|
-
## Existing eval framework
|
|
27
|
-
|
|
28
|
-
!`find . -name "*eval*" -o -name "*evals*" 2>/dev/null | head -10 || echo "No eval files found"`
|
|
29
|
-
|
|
30
|
-
## Prior analysis
|
|
31
|
-
|
|
32
|
-
### Spec (requirements to evaluate against)
|
|
33
|
-
|
|
34
|
-
!`cat $(ls -t uv-out/specs/*.md 2>/dev/null | head -1) 2>/dev/null | head -60 || echo "No spec found"`
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: write-tests
|
|
3
|
-
description: >
|
|
4
|
-
Generate meaningful tests that verify behavior. Use after implementing a feature or when
|
|
5
|
-
coverage is low. Matches project test conventions.
|
|
6
|
-
argument-hint: "[file-or-module-to-test]"
|
|
7
|
-
user-invocable: true
|
|
8
|
-
context: fork
|
|
9
|
-
agent: test-writer
|
|
10
|
-
model: claude-sonnet-4-6
|
|
11
|
-
effort: high
|
|
12
|
-
allowed-tools:
|
|
13
|
-
- Read(*)
|
|
14
|
-
- Grep(*)
|
|
15
|
-
- Glob(*)
|
|
16
|
-
- Write(*)
|
|
17
|
-
- Edit(*)
|
|
18
|
-
- Bash(npm test *)
|
|
19
|
-
- Bash(npm run test *)
|
|
20
|
-
- Bash(npx jest *)
|
|
21
|
-
- Bash(npx vitest *)
|
|
22
|
-
- Bash(pytest *)
|
|
23
|
-
- Bash(go test *)
|
|
24
|
-
- Bash(cargo test *)
|
|
25
|
-
- Bash(mvn test *)
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## Target
|
|
29
|
-
|
|
30
|
-
$ARGUMENTS
|
|
31
|
-
|
|
32
|
-
## Existing test patterns (match these)
|
|
33
|
-
|
|
34
|
-
!`find . -name "*.test.*" -o -name "*.spec.*" -o -name "test_*" 2>/dev/null | head -5`
|
|
35
|
-
|
|
36
|
-
!`cat $(find . -name "*.test.*" -o -name "*.spec.*" 2>/dev/null | head -1) 2>/dev/null | head -40 || echo "No existing tests found"`
|
|
37
|
-
|
|
38
|
-
## Project test command
|
|
39
|
-
|
|
40
|
-
!`cat package.json 2>/dev/null | grep -A2 '"test"' || echo "No package.json test script"`
|
|
41
|
-
|
|
42
|
-
## Prior analysis
|
|
43
|
-
|
|
44
|
-
### Spec (what to test against)
|
|
45
|
-
|
|
46
|
-
!`cat $(ls -t uv-out/specs/*.md 2>/dev/null | head -1) 2>/dev/null | head -60 || echo "No spec found — test based on code behavior"`
|
|
47
|
-
|
|
48
|
-
### Acts plan (current task context)
|
|
49
|
-
|
|
50
|
-
!`cat uv-out/architecture/acts-plan.md 2>/dev/null | head -40 || echo "No acts plan found"`
|
|
51
|
-
|
|
52
|
-
### Session checkpoint
|
|
53
|
-
|
|
54
|
-
!`cat uv-out/checkpoints/latest.md 2>/dev/null | head -40 || echo "No checkpoint"`
|
|
File without changes
|