waypoint-skills 1.3.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 +348 -0
- package/README.npm.md +56 -0
- package/cli/bin/cli.js +127 -0
- package/cli/bin/lib/paths.mjs +31 -0
- package/cli/bin/postinstall.mjs +25 -0
- package/manifest.json +107 -0
- package/package.json +44 -0
- package/packages/agents/inspiration-scout.md +105 -0
- package/packages/agents/orchestrator.md +186 -0
- package/packages/agents/scrutiny-validator.md +136 -0
- package/packages/agents/user-testing-validator.md +171 -0
- package/packages/agents/validator.md +102 -0
- package/packages/agents/worker.md +116 -0
- package/packages/agents/wp-router.md +69 -0
- package/packages/hooks/hooks.json.example +12 -0
- package/packages/hooks/templates/mission-worktree-bootstrap.sh +88 -0
- package/packages/hooks/templates/run-assertions.sh +48 -0
- package/packages/rules/adversarial-context-isolation.mdc +57 -0
- package/packages/rules/serial-git-enforcement.mdc +77 -0
- package/packages/skills/caveman/SKILL.md +78 -0
- package/packages/skills/design-taste-frontend/SKILL.md +1206 -0
- package/packages/skills/gpt-taste/SKILL.md +74 -0
- package/packages/skills/impeccable/SKILL.md +164 -0
- package/packages/skills/impeccable/reference/adapt.md +311 -0
- package/packages/skills/impeccable/reference/animate.md +201 -0
- package/packages/skills/impeccable/reference/audit.md +133 -0
- package/packages/skills/impeccable/reference/bolder.md +120 -0
- package/packages/skills/impeccable/reference/brand.md +108 -0
- package/packages/skills/impeccable/reference/clarify.md +288 -0
- package/packages/skills/impeccable/reference/codex.md +105 -0
- package/packages/skills/impeccable/reference/colorize.md +257 -0
- package/packages/skills/impeccable/reference/craft.md +123 -0
- package/packages/skills/impeccable/reference/critique.md +780 -0
- package/packages/skills/impeccable/reference/delight.md +302 -0
- package/packages/skills/impeccable/reference/distill.md +111 -0
- package/packages/skills/impeccable/reference/document.md +429 -0
- package/packages/skills/impeccable/reference/extract.md +69 -0
- package/packages/skills/impeccable/reference/harden.md +347 -0
- package/packages/skills/impeccable/reference/hooks.md +90 -0
- package/packages/skills/impeccable/reference/init.md +172 -0
- package/packages/skills/impeccable/reference/interaction-design.md +189 -0
- package/packages/skills/impeccable/reference/layout.md +161 -0
- package/packages/skills/impeccable/reference/live.md +718 -0
- package/packages/skills/impeccable/reference/onboard.md +234 -0
- package/packages/skills/impeccable/reference/optimize.md +258 -0
- package/packages/skills/impeccable/reference/overdrive.md +130 -0
- package/packages/skills/impeccable/reference/polish.md +241 -0
- package/packages/skills/impeccable/reference/product.md +60 -0
- package/packages/skills/impeccable/reference/quieter.md +99 -0
- package/packages/skills/impeccable/reference/shape.md +165 -0
- package/packages/skills/impeccable/reference/typeset.md +279 -0
- package/packages/skills/impeccable/scripts/command-metadata.json +94 -0
- package/packages/skills/impeccable/scripts/context-signals.mjs +225 -0
- package/packages/skills/impeccable/scripts/context.mjs +961 -0
- package/packages/skills/impeccable/scripts/critique-storage.mjs +242 -0
- package/packages/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/packages/skills/impeccable/scripts/detect.mjs +21 -0
- package/packages/skills/impeccable/scripts/detector/browser/injected/index.mjs +1937 -0
- package/packages/skills/impeccable/scripts/detector/cli/main.mjs +290 -0
- package/packages/skills/impeccable/scripts/detector/design-system.mjs +750 -0
- package/packages/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +5185 -0
- package/packages/skills/impeccable/scripts/detector/detect-antipatterns.mjs +50 -0
- package/packages/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +277 -0
- package/packages/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +568 -0
- package/packages/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +1015 -0
- package/packages/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +234 -0
- package/packages/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
- package/packages/skills/impeccable/scripts/detector/findings.mjs +12 -0
- package/packages/skills/impeccable/scripts/detector/node/file-system.mjs +198 -0
- package/packages/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
- package/packages/skills/impeccable/scripts/detector/registry/antipatterns.mjs +459 -0
- package/packages/skills/impeccable/scripts/detector/rules/checks.mjs +2707 -0
- package/packages/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
- package/packages/skills/impeccable/scripts/detector/shared/constants.mjs +101 -0
- package/packages/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
- package/packages/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
- package/packages/skills/impeccable/scripts/hook-admin.mjs +660 -0
- package/packages/skills/impeccable/scripts/hook-before-edit.mjs +476 -0
- package/packages/skills/impeccable/scripts/hook-lib.mjs +1632 -0
- package/packages/skills/impeccable/scripts/hook.mjs +61 -0
- package/packages/skills/impeccable/scripts/lib/design-parser.mjs +842 -0
- package/packages/skills/impeccable/scripts/lib/impeccable-config.mjs +638 -0
- package/packages/skills/impeccable/scripts/lib/impeccable-paths.mjs +128 -0
- package/packages/skills/impeccable/scripts/lib/is-generated.mjs +69 -0
- package/packages/skills/impeccable/scripts/lib/target-args.mjs +42 -0
- package/packages/skills/impeccable/scripts/live/browser-script-parts.mjs +49 -0
- package/packages/skills/impeccable/scripts/live/completion.mjs +19 -0
- package/packages/skills/impeccable/scripts/live/event-validation.mjs +137 -0
- package/packages/skills/impeccable/scripts/live/insert-ui.mjs +458 -0
- package/packages/skills/impeccable/scripts/live/manual-apply.mjs +939 -0
- package/packages/skills/impeccable/scripts/live/manual-edit-routes.mjs +357 -0
- package/packages/skills/impeccable/scripts/live/manual-edits-buffer.mjs +152 -0
- package/packages/skills/impeccable/scripts/live/session-store.mjs +289 -0
- package/packages/skills/impeccable/scripts/live/svelte-component.mjs +826 -0
- package/packages/skills/impeccable/scripts/live/sveltekit-adapter.mjs +274 -0
- package/packages/skills/impeccable/scripts/live/ui-core.mjs +180 -0
- package/packages/skills/impeccable/scripts/live/vocabulary.mjs +36 -0
- package/packages/skills/impeccable/scripts/live-accept.mjs +812 -0
- package/packages/skills/impeccable/scripts/live-browser-dom.js +146 -0
- package/packages/skills/impeccable/scripts/live-browser-session.js +123 -0
- package/packages/skills/impeccable/scripts/live-browser.js +11173 -0
- package/packages/skills/impeccable/scripts/live-commit-manual-edits.mjs +1241 -0
- package/packages/skills/impeccable/scripts/live-complete.mjs +75 -0
- package/packages/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
- package/packages/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
- package/packages/skills/impeccable/scripts/live-inject.mjs +583 -0
- package/packages/skills/impeccable/scripts/live-insert.mjs +272 -0
- package/packages/skills/impeccable/scripts/live-manual-edit-evidence.mjs +363 -0
- package/packages/skills/impeccable/scripts/live-poll.mjs +384 -0
- package/packages/skills/impeccable/scripts/live-resume.mjs +94 -0
- package/packages/skills/impeccable/scripts/live-server.mjs +1135 -0
- package/packages/skills/impeccable/scripts/live-status.mjs +61 -0
- package/packages/skills/impeccable/scripts/live-target.mjs +30 -0
- package/packages/skills/impeccable/scripts/live-wrap.mjs +894 -0
- package/packages/skills/impeccable/scripts/live.mjs +297 -0
- package/packages/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/packages/skills/impeccable/scripts/palette.mjs +633 -0
- package/packages/skills/impeccable/scripts/pin.mjs +214 -0
- package/packages/skills/ponytail/SKILL.md +117 -0
- package/packages/skills/stitch-design-taste/DESIGN.md +121 -0
- package/packages/skills/stitch-design-taste/SKILL.md +184 -0
- package/packages/skills/waypoint/SKILL.md +67 -0
- package/packages/skills/wp/SKILL.md +330 -0
- package/packages/skills/wp/caveman-wire.md +148 -0
- package/packages/skills/wp/reference.md +411 -0
- package/scripts/detect-platform.sh +32 -0
- package/scripts/install.sh +123 -0
- package/scripts/lib/common.sh +215 -0
- package/scripts/sync-skills.sh +21 -0
- package/scripts/uninstall.sh +38 -0
- package/scripts/waypoint +281 -0
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
# wp Reference
|
|
2
|
+
|
|
3
|
+
Authoritative bootstrap lives in [SKILL.md](SKILL.md). Part of **Waypoint Skills** (repo: `waypoint.sk`).
|
|
4
|
+
|
|
5
|
+
**Framework version:** 1.3.0 (multi-instance + git worktrees)
|
|
6
|
+
|
|
7
|
+
## Directory Layout (v1.3)
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
.wp/
|
|
11
|
+
├── registry.md
|
|
12
|
+
├── agents/orchestrator.md
|
|
13
|
+
├── skills/{_index.md,caveman-wire.md}
|
|
14
|
+
├── hooks/{run-assertions.sh,mission-worktree-bootstrap.sh}
|
|
15
|
+
├── archive/<mid>-YYYY-MM-DD-HHMM/
|
|
16
|
+
└── instances/
|
|
17
|
+
└── <mid>/
|
|
18
|
+
├── instance_meta.md
|
|
19
|
+
├── mission_profile.md
|
|
20
|
+
├── validation_contract.md
|
|
21
|
+
├── active_plan.md
|
|
22
|
+
├── mission_control.md
|
|
23
|
+
└── handoffs/
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Phase 1 — Bootstrap Templates
|
|
27
|
+
|
|
28
|
+
### registry.md
|
|
29
|
+
|
|
30
|
+
```markdown
|
|
31
|
+
# Mission Registry
|
|
32
|
+
|
|
33
|
+
| mid | objective | phase | pause | worktree_root | updated |
|
|
34
|
+
|-----|-----------|-------|-------|---------------|---------|
|
|
35
|
+
| default | | Scope | no | [project_root] | [ISO date] |
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Update row on instance bootstrap, phase change, pause/resume, abort (remove row).
|
|
39
|
+
|
|
40
|
+
### instance_meta.md
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
# Instance Meta
|
|
44
|
+
|
|
45
|
+
**mid:** [id]
|
|
46
|
+
**framework_version:** 1.3.0
|
|
47
|
+
**project_root:** [absolute path to git repo]
|
|
48
|
+
**worktree_root:** [absolute path — code edits happen here]
|
|
49
|
+
**branch:** mission/[mid] | main (default)
|
|
50
|
+
**worktree_parent:** [path or —]
|
|
51
|
+
**provisioned_at:** [ISO date]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
For `default` or `--no-worktree`: `worktree_root` equals `project_root`, `branch: —`.
|
|
55
|
+
|
|
56
|
+
### mission_profile.md
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
# Mission Profile
|
|
60
|
+
|
|
61
|
+
**mid:** [id]
|
|
62
|
+
**Objective:**
|
|
63
|
+
|
|
64
|
+
**Success definition:**
|
|
65
|
+
|
|
66
|
+
## In scope
|
|
67
|
+
|
|
68
|
+
-
|
|
69
|
+
|
|
70
|
+
## Out of scope
|
|
71
|
+
|
|
72
|
+
-
|
|
73
|
+
|
|
74
|
+
## Technical boundaries
|
|
75
|
+
- **Allowed paths:**
|
|
76
|
+
- **Forbidden paths:**
|
|
77
|
+
|
|
78
|
+
## Constraints
|
|
79
|
+
|
|
80
|
+
- **Implementation:** ponytail full (reuse before write; YAGNI; shortest diff)
|
|
81
|
+
- **Inter-agent comms:** caveman wire (see `.wp/skills/caveman-wire.md`)
|
|
82
|
+
- **Code root:** [worktree_root from instance_meta.md]
|
|
83
|
+
|
|
84
|
+
## Open questions
|
|
85
|
+
|
|
86
|
+
-
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### validation_contract.md
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
# Validation Contract
|
|
93
|
+
|
|
94
|
+
**mid:** [id]
|
|
95
|
+
**Status:** draft
|
|
96
|
+
**Approved:** no
|
|
97
|
+
|
|
98
|
+
## Assertions
|
|
99
|
+
|
|
100
|
+
| ID | Behavior (implementation-agnostic) | Verification method |
|
|
101
|
+
|----|-----------------------------------|---------------------|
|
|
102
|
+
| A-01 | | |
|
|
103
|
+
|
|
104
|
+
## Approval
|
|
105
|
+
|
|
106
|
+
Set `Approved: yes` only after user confirms with `approve contract` or equivalent.
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### active_plan.md
|
|
110
|
+
|
|
111
|
+
```markdown
|
|
112
|
+
# Active Plan
|
|
113
|
+
|
|
114
|
+
**mid:** [id]
|
|
115
|
+
**Status:** current task — | blocked — no
|
|
116
|
+
|
|
117
|
+
## Tasks
|
|
118
|
+
|
|
119
|
+
### Task 1: [title]
|
|
120
|
+
- **Status:** pending
|
|
121
|
+
- **Assertions:** A-01
|
|
122
|
+
- **Dependencies:** none
|
|
123
|
+
- **Done when:**
|
|
124
|
+
|
|
125
|
+
## Plan Changelog
|
|
126
|
+
|
|
127
|
+
| Date | Change | Reason |
|
|
128
|
+
|------|--------|--------|
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### mission_control.md
|
|
132
|
+
|
|
133
|
+
```markdown
|
|
134
|
+
# Mission Control
|
|
135
|
+
|
|
136
|
+
**framework_version:** 1.3.0
|
|
137
|
+
**mid:** [id]
|
|
138
|
+
**bootstrapped_at:** [ISO date]
|
|
139
|
+
**orchestrator_source:** ~/.cursor/agents/orchestrator.md
|
|
140
|
+
**Mission:** [from mission_profile.md objective]
|
|
141
|
+
**worktree_root:** [from instance_meta.md]
|
|
142
|
+
**Started:** [ISO date]
|
|
143
|
+
**Last updated:** [ISO date]
|
|
144
|
+
**Pause:** inactive
|
|
145
|
+
|
|
146
|
+
## Dashboard
|
|
147
|
+
|
|
148
|
+
| Metric | Value |
|
|
149
|
+
|--------|-------|
|
|
150
|
+
| Tasks complete | 0 / 0 |
|
|
151
|
+
| Feature completion | 0% |
|
|
152
|
+
| Cumulative tokens (known) | 0 |
|
|
153
|
+
| Validation follow-up tasks | 0 |
|
|
154
|
+
| Current task | — |
|
|
155
|
+
| Blocked | no |
|
|
156
|
+
|
|
157
|
+
## Validation Follow-ups
|
|
158
|
+
|
|
159
|
+
| Task ID | Created | Reason | Source report |
|
|
160
|
+
|---------|---------|--------|---------------|
|
|
161
|
+
|
|
162
|
+
## Token / Caching Log
|
|
163
|
+
|
|
164
|
+
| Date | Agent | Session notes | Tokens | Caching notes |
|
|
165
|
+
|------|-------|---------------|--------|---------------|
|
|
166
|
+
|
|
167
|
+
## Ledger
|
|
168
|
+
|
|
169
|
+
Append-only event log (newest at bottom).
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### skills/_index.md
|
|
173
|
+
|
|
174
|
+
```markdown
|
|
175
|
+
# Mission Skills Index
|
|
176
|
+
|
|
177
|
+
Mandatory for all mission agents:
|
|
178
|
+
|
|
179
|
+
| Skill | Path | Use |
|
|
180
|
+
|-------|------|-----|
|
|
181
|
+
| caveman-wire | .wp/skills/caveman-wire.md | Inter-agent handoffs, reports, ledger |
|
|
182
|
+
| caveman (full) | ~/.cursor/skills/caveman/SKILL.md | Style reference |
|
|
183
|
+
| ponytail (full) | ~/.cursor/skills/ponytail/SKILL.md | Worker implementation; orchestrator planning |
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Legacy Migration (v1.2 → v1.3)
|
|
187
|
+
|
|
188
|
+
Run once when flat files exist at `.wp/` root.
|
|
189
|
+
|
|
190
|
+
**Rename first:** if `.missions/` exists and `.wp/` does not, `mv .missions .wp` and update `.gitignore` (see SKILL.md §1b2).
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
set -euo pipefail
|
|
194
|
+
MID=default
|
|
195
|
+
INST=".wp/instances/$MID"
|
|
196
|
+
LEGACY_PROFILE=".wp/mission_profile.md"
|
|
197
|
+
|
|
198
|
+
[[ -f "$LEGACY_PROFILE" && ! -d "$INST" ]] || exit 0
|
|
199
|
+
|
|
200
|
+
mkdir -p "$INST/handoffs"
|
|
201
|
+
for f in mission_profile validation_contract active_plan mission_control; do
|
|
202
|
+
[[ -f ".wp/${f}.md" ]] && mv ".wp/${f}.md" "$INST/"
|
|
203
|
+
done
|
|
204
|
+
[[ -d .wp/handoffs ]] && mv .wp/handoffs/* "$INST/handoffs/" 2>/dev/null || true
|
|
205
|
+
rmdir .wp/handoffs 2>/dev/null || true
|
|
206
|
+
|
|
207
|
+
# instance_meta for default (no worktree)
|
|
208
|
+
PROJECT_ROOT="$(pwd)"
|
|
209
|
+
cat >"$INST/instance_meta.md" <<EOF
|
|
210
|
+
# Instance Meta
|
|
211
|
+
|
|
212
|
+
**mid:** default
|
|
213
|
+
**framework_version:** 1.3.0
|
|
214
|
+
**project_root:** ${PROJECT_ROOT}
|
|
215
|
+
**worktree_root:** ${PROJECT_ROOT}
|
|
216
|
+
**branch:** —
|
|
217
|
+
**worktree_parent:** —
|
|
218
|
+
**provisioned_at:** $(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
219
|
+
EOF
|
|
220
|
+
|
|
221
|
+
# Bump framework version in control file
|
|
222
|
+
sed -i.bak 's/framework_version:.*/framework_version:** 1.3.0/' "$INST/mission_control.md" 2>/dev/null \
|
|
223
|
+
|| sed -i '' 's/framework_version:.*/framework_version:** 1.3.0/' "$INST/mission_control.md"
|
|
224
|
+
rm -f "$INST/mission_control.md.bak"
|
|
225
|
+
|
|
226
|
+
echo "Migrated legacy .wp/ → instances/default/"
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Then seed or update `registry.md` with the `default` row.
|
|
230
|
+
|
|
231
|
+
## Worktree Policy
|
|
232
|
+
|
|
233
|
+
| mid | Worktree | Code edits in |
|
|
234
|
+
|-----|----------|---------------|
|
|
235
|
+
| `default` | none (unless user overrides) | `project_root` |
|
|
236
|
+
| any other `@id` | `../<ProjectName>-missions/<mid>/` | `worktree_root` |
|
|
237
|
+
| `--no-worktree` | none | `project_root` |
|
|
238
|
+
|
|
239
|
+
Worktree bootstrap:
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
.wp/hooks/mission-worktree-bootstrap.sh \
|
|
243
|
+
--project-root "$(pwd)" \
|
|
244
|
+
--mid "$MID" \
|
|
245
|
+
--meta-out ".wp/instances/$MID/instance_meta.md"
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
The script symlinks `.wp` from project root into the worktree so instance state stays centralized.
|
|
249
|
+
|
|
250
|
+
**gitignore** (recommend on first worktree):
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
PN="$(basename "$(pwd)")"
|
|
254
|
+
grep -qxF "${PN}-missions/" .gitignore 2>/dev/null || echo "${PN}-missions/" >> .gitignore
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## gitignore Rules
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
grep -qxF '.wp/' .gitignore 2>/dev/null || echo '.wp/' >> .gitignore
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## Objective Extraction Examples
|
|
264
|
+
|
|
265
|
+
| User input | mid | Objective |
|
|
266
|
+
|------------|-----|-----------|
|
|
267
|
+
| `/wp add checkout emails` | default | `add checkout emails` |
|
|
268
|
+
| `/wp @api-payments add Stripe webhooks` | api-payments | `add Stripe webhooks` |
|
|
269
|
+
| `wp: --id=web-ui checkout page` | web-ui | `checkout page` |
|
|
270
|
+
| `wp: @api status` | api | lifecycle → status |
|
|
271
|
+
| `wp: list` | — | lifecycle → list |
|
|
272
|
+
| `wp: resume @api-payments` | api-payments | lifecycle → resume |
|
|
273
|
+
|
|
274
|
+
## Phase Detection (full, per instance)
|
|
275
|
+
|
|
276
|
+
| Signal | Phase |
|
|
277
|
+
|--------|-------|
|
|
278
|
+
| `Pause: active` in `wp_root/mission_control.md` | Paused |
|
|
279
|
+
| mission_profile Objective empty | Scope |
|
|
280
|
+
| Profile filled; contract Approved: no | Contract |
|
|
281
|
+
| Approved: yes; no ### Task sections | Plan |
|
|
282
|
+
| One task in_progress; no handoff for it | Delegation |
|
|
283
|
+
| feature_[ID]_log.md or validation_[ID]_report.md for current task | Negotiation |
|
|
284
|
+
| All tasks complete | Complete |
|
|
285
|
+
|
|
286
|
+
## Resume Summary Template
|
|
287
|
+
|
|
288
|
+
```markdown
|
|
289
|
+
## Mission resumed — [Phase] (@[mid])
|
|
290
|
+
|
|
291
|
+
**Objective:** [from mission_profile.md]
|
|
292
|
+
**Instance:** [mid]
|
|
293
|
+
**Worktree:** [worktree_root]
|
|
294
|
+
**Framework:** v[framework_version]
|
|
295
|
+
**Last activity:** [from ledger or active_plan changelog]
|
|
296
|
+
**Current task:** [N — title] ([status])
|
|
297
|
+
**Gate:** [CLEAR | BLOCK | pending | —]
|
|
298
|
+
**Next:** [single concrete action]
|
|
299
|
+
|
|
300
|
+
[Phase-appropriate content — do NOT restart Scope unless user pivoted]
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## Scope Phase — First Reply Template
|
|
304
|
+
|
|
305
|
+
```markdown
|
|
306
|
+
## Scope Phase — [objective summary] (@[mid])
|
|
307
|
+
|
|
308
|
+
Framework initialized (or resumed at **[phase]**).
|
|
309
|
+
Worktree: [worktree_root]
|
|
310
|
+
|
|
311
|
+
To define scope before we write a validation contract:
|
|
312
|
+
|
|
313
|
+
1. [Success definition]
|
|
314
|
+
2. [Non-goals / out of scope]
|
|
315
|
+
3. [Constraints — stack, timeline, forbidden approaches]
|
|
316
|
+
|
|
317
|
+
**Draft scope** (edit as needed):
|
|
318
|
+
- In scope: …
|
|
319
|
+
- Out of scope: …
|
|
320
|
+
- Allowed paths: …
|
|
321
|
+
- Forbidden paths: …
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## Empty Objective Help
|
|
325
|
+
|
|
326
|
+
```markdown
|
|
327
|
+
## Mission — needs objective
|
|
328
|
+
|
|
329
|
+
Provide: `wp: [@id] [what you want built or fixed]`
|
|
330
|
+
|
|
331
|
+
**Lifecycle commands:**
|
|
332
|
+
- `wp: list` — all active instances
|
|
333
|
+
- `wp: status` — all instances (or `wp: @id status`)
|
|
334
|
+
- `wp: resume [@id]` — continue instance
|
|
335
|
+
- `wp: pause [@id]` — halt instance loop
|
|
336
|
+
- `wp: abort [@id]` — archive instance
|
|
337
|
+
- `wp: pivot: [new objective]` — change direction within instance
|
|
338
|
+
|
|
339
|
+
**Parallel missions:** use distinct `@id` per chat tab; each non-default id gets its own git worktree.
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
## Multi-Instance Status Dashboard
|
|
343
|
+
|
|
344
|
+
```markdown
|
|
345
|
+
## Mission Registry
|
|
346
|
+
|
|
347
|
+
| mid | phase | pause | objective | worktree |
|
|
348
|
+
|-----|-------|-------|-----------|----------|
|
|
349
|
+
| default | Delegation | no | … | [project root] |
|
|
350
|
+
| api-payments | Contract | no | … | …/HerbalTech-missions/api-payments |
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
## orchestrator.md Missing
|
|
354
|
+
|
|
355
|
+
1. Copy from `~/.cursor/agents/orchestrator.md` if present
|
|
356
|
+
2. Else Task → `orchestrator` subagent with hand-off payload from SKILL.md
|
|
357
|
+
|
|
358
|
+
## Verification Hooks (optional)
|
|
359
|
+
|
|
360
|
+
Offer to copy from `~/.cursor/hooks/`:
|
|
361
|
+
|
|
362
|
+
- `verification-checkpoint-on-handoff.sh`
|
|
363
|
+
- `verification-checkpoint-on-validation-report.sh`
|
|
364
|
+
- `verification-checkpoint-gate-plan.sh`
|
|
365
|
+
- `lib/verification-checkpoint-common.sh`
|
|
366
|
+
|
|
367
|
+
Project-local runner: `.wp/hooks/run-assertions.sh`
|
|
368
|
+
|
|
369
|
+
## Archive on abort (per instance)
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
MID="api-payments"
|
|
373
|
+
ARCHIVE=".wp/archive/${MID}-$(date +%Y-%m-%d-%H%M)"
|
|
374
|
+
INST=".wp/instances/${MID}"
|
|
375
|
+
|
|
376
|
+
mkdir -p "$ARCHIVE"
|
|
377
|
+
mv "$INST" "$ARCHIVE/"
|
|
378
|
+
|
|
379
|
+
# Optional: remove worktree (confirm with user first)
|
|
380
|
+
# META worktree path from archived instance_meta.md
|
|
381
|
+
# git worktree remove "$WORKTREE_PATH"
|
|
382
|
+
# git branch -D "mission/${MID}" # only if merged/abandoned
|
|
383
|
+
|
|
384
|
+
# Remove row from registry.md
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
Framework shell (`agents/`, `skills/`, `hooks/`, `registry.md`) stays in place.
|
|
388
|
+
|
|
389
|
+
## Subagent Return Format (caveman wire)
|
|
390
|
+
|
|
391
|
+
```markdown
|
|
392
|
+
## Subagent Summary
|
|
393
|
+
role: worker|validator|explore|shell
|
|
394
|
+
mid: [id]
|
|
395
|
+
status: complete|blocked|partial
|
|
396
|
+
artifacts: [paths under wp_root]
|
|
397
|
+
gate: CLEAR|BLOCK|—
|
|
398
|
+
block: [none|one line]
|
|
399
|
+
worktree: [path if worker]
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
## Ponytail in Mission
|
|
403
|
+
|
|
404
|
+
| Phase | Ponytail rule |
|
|
405
|
+
|-------|---------------|
|
|
406
|
+
| Scope | Ask: feature need exist? defer speculative work |
|
|
407
|
+
| Plan | Fewest tasks; no scaffolding "for later" |
|
|
408
|
+
| Worker | Full ladder in **worktree_root** |
|
|
409
|
+
| Validator | Reject over-engineered tests that shape to implementation |
|
|
410
|
+
|
|
411
|
+
Worker handoff `skip:` field documents YAGNI deferrals.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Detect AI assistant platforms with install paths on this machine.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
# shellcheck source=lib/common.sh
|
|
7
|
+
source "${SCRIPT_DIR}/lib/common.sh"
|
|
8
|
+
|
|
9
|
+
command -v jq >/dev/null 2>&1 || die "jq required"
|
|
10
|
+
|
|
11
|
+
echo "Waypoint Skills — platform detection"
|
|
12
|
+
echo ""
|
|
13
|
+
|
|
14
|
+
printf "%-14s %-8s %-40s %s\n" "PLATFORM" "FOUND?" "GLOBAL" "LOCAL (cwd)"
|
|
15
|
+
for p in $(list_platforms); do
|
|
16
|
+
gb="$(platform_config "$p" global_base)"
|
|
17
|
+
lb="$(platform_config "$p" local_base)"
|
|
18
|
+
found="no"
|
|
19
|
+
[[ -n "$gb" && "$gb" != "null" && -d "$(expand_path "$gb")" ]] && found="yes"
|
|
20
|
+
[[ "$found" == "no" && -n "$lb" && "$lb" != "null" && -d "$(expand_path "$lb")" ]] && found="yes"
|
|
21
|
+
label="$(platform_config "$p" label)"
|
|
22
|
+
printf "%-14s %-8s %-40s %s\n" "$p" "$found" "${gb:-—}" "${lb:-—} ($label)"
|
|
23
|
+
done
|
|
24
|
+
|
|
25
|
+
echo ""
|
|
26
|
+
installed="$(detect_installed_platforms | tr '\n' ' ')"
|
|
27
|
+
if [[ -n "${installed// /}" ]]; then
|
|
28
|
+
echo "Detected: $installed"
|
|
29
|
+
echo "Install all detected: ./scripts/install.sh --platform auto --global"
|
|
30
|
+
else
|
|
31
|
+
echo "No platform config dirs found. Install a target assistant first, or use --platform <name>."
|
|
32
|
+
fi
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Install Waypoint Skills into AI assistant config (Cursor, Claude, Codex, Antigravity, …)
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# ./scripts/install.sh [--platform NAME|auto|all] [--global|--local] [--copy] [--from PATH|URL]
|
|
6
|
+
# curl -fsSL https://raw.githubusercontent.com/USER/waypoint.sk/main/scripts/install.sh | bash -s -- --platform auto --global
|
|
7
|
+
#
|
|
8
|
+
set -euo pipefail
|
|
9
|
+
|
|
10
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
|
+
# shellcheck source=lib/common.sh
|
|
12
|
+
source "${SCRIPT_DIR}/lib/common.sh"
|
|
13
|
+
|
|
14
|
+
SCOPE="global"
|
|
15
|
+
MODE="symlink"
|
|
16
|
+
FROM=""
|
|
17
|
+
PLATFORM="auto"
|
|
18
|
+
REPO_ROOT=""
|
|
19
|
+
|
|
20
|
+
usage() {
|
|
21
|
+
cat <<'EOF'
|
|
22
|
+
Waypoint Skills installer
|
|
23
|
+
|
|
24
|
+
Usage: install.sh [options]
|
|
25
|
+
|
|
26
|
+
Options:
|
|
27
|
+
--platform NAME cursor | claude | codex | antigravity | copilot | gemini_cli | auto | all
|
|
28
|
+
auto = install to detected platforms (default)
|
|
29
|
+
--global User-level config (default)
|
|
30
|
+
--local Project-level config in current directory
|
|
31
|
+
--copy Copy files instead of symlinking
|
|
32
|
+
--from PATH Source repo path or git URL
|
|
33
|
+
-h, --help Show help
|
|
34
|
+
|
|
35
|
+
Examples:
|
|
36
|
+
./scripts/install.sh --platform auto --global
|
|
37
|
+
./scripts/install.sh --platform claude --global
|
|
38
|
+
./scripts/install.sh --platform cursor --local --copy
|
|
39
|
+
./scripts/detect-platform.sh
|
|
40
|
+
EOF
|
|
41
|
+
exit "${1:-0}"
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
while [[ $# -gt 0 ]]; do
|
|
45
|
+
case "$1" in
|
|
46
|
+
--platform) PLATFORM="$2"; shift 2 ;;
|
|
47
|
+
--global) SCOPE="global"; shift ;;
|
|
48
|
+
--local) SCOPE="local"; shift ;;
|
|
49
|
+
--copy) MODE="copy"; shift ;;
|
|
50
|
+
--from) FROM="$2"; shift 2 ;;
|
|
51
|
+
-h|--help) usage 0 ;;
|
|
52
|
+
*) die "Unknown option: $1 (try --help)" ;;
|
|
53
|
+
esac
|
|
54
|
+
done
|
|
55
|
+
|
|
56
|
+
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
57
|
+
|
|
58
|
+
if [[ -n "$FROM" ]]; then
|
|
59
|
+
if [[ "$FROM" =~ ^https?:// || "$FROM" =~ ^git@ ]]; then
|
|
60
|
+
TMPDIR="$(mktemp -d)"
|
|
61
|
+
trap 'rm -rf "$TMPDIR"' EXIT
|
|
62
|
+
log "cloning $FROM ..."
|
|
63
|
+
git clone --depth 1 "$FROM" "$TMPDIR/waypoint.sk"
|
|
64
|
+
REPO_ROOT="$TMPDIR/waypoint.sk"
|
|
65
|
+
WAYPOINT_REPO_ROOT="$REPO_ROOT"
|
|
66
|
+
elif [[ -d "$FROM" ]]; then
|
|
67
|
+
REPO_ROOT="$(cd "$FROM" && pwd)"
|
|
68
|
+
WAYPOINT_REPO_ROOT="$REPO_ROOT"
|
|
69
|
+
else
|
|
70
|
+
die "--from path not found: $FROM"
|
|
71
|
+
fi
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
command -v jq >/dev/null 2>&1 || die "jq required (brew install jq / apt install jq)"
|
|
75
|
+
|
|
76
|
+
resolve_platforms() {
|
|
77
|
+
case "$PLATFORM" in
|
|
78
|
+
auto)
|
|
79
|
+
detect_installed_platforms
|
|
80
|
+
;;
|
|
81
|
+
all)
|
|
82
|
+
list_platforms
|
|
83
|
+
;;
|
|
84
|
+
*)
|
|
85
|
+
list_platforms | grep -qxF "$PLATFORM" || die "Unknown platform: $PLATFORM"
|
|
86
|
+
echo "$PLATFORM"
|
|
87
|
+
;;
|
|
88
|
+
esac
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
PLATFORMS="$(resolve_platforms)"
|
|
92
|
+
[[ -n "${PLATFORMS// /}" ]] || die "No platforms to install. Run ./scripts/detect-platform.sh or pass --platform <name>."
|
|
93
|
+
|
|
94
|
+
INSTALLED=()
|
|
95
|
+
while IFS= read -r p; do
|
|
96
|
+
[[ -z "$p" ]] && continue
|
|
97
|
+
base="$(install_platform "$p" "$SCOPE" "$MODE" "$REPO_ROOT")"
|
|
98
|
+
INSTALLED+=("$p → $base")
|
|
99
|
+
done <<< "$PLATFORMS"
|
|
100
|
+
|
|
101
|
+
chmod +x "${REPO_ROOT}/scripts/waypoint" "${REPO_ROOT}/scripts/install.sh" \
|
|
102
|
+
"${REPO_ROOT}/scripts/uninstall.sh" "${REPO_ROOT}/scripts/detect-platform.sh" 2>/dev/null || true
|
|
103
|
+
|
|
104
|
+
cat <<EOF
|
|
105
|
+
|
|
106
|
+
✅ Waypoint Skills installed (scope=${SCOPE}, mode=${MODE})
|
|
107
|
+
|
|
108
|
+
$(printf ' %s\n' "${INSTALLED[@]}")
|
|
109
|
+
|
|
110
|
+
Skills: wp, caveman, ponytail, waypoint, impeccable, design-taste-frontend, gpt-taste, stitch-design-taste
|
|
111
|
+
Trigger: /wp [objective] or wp: list | status | resume
|
|
112
|
+
|
|
113
|
+
CLI:
|
|
114
|
+
npx waypoint-skills install -y
|
|
115
|
+
npx waypoint-skills doctor
|
|
116
|
+
npx waypoint-skills bootstrap
|
|
117
|
+
|
|
118
|
+
Skills only:
|
|
119
|
+
npx skills add quenginedev/waypoint.sk -g -y
|
|
120
|
+
|
|
121
|
+
Docs: docs/PLATFORMS.md, docs/WAYPOINT-FLOW.md
|
|
122
|
+
|
|
123
|
+
EOF
|