@damian87/omp 0.1.0 → 0.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/.github/copilot-instructions.md +15 -0
- package/.github/skills/caveman/SKILL.md +22 -11
- package/.github/skills/code-review/SKILL.md +27 -13
- package/.github/skills/debug/SKILL.md +29 -13
- package/.github/skills/grill-me/SKILL.md +19 -7
- package/.github/skills/jira-ticket/SKILL.md +34 -12
- package/.github/skills/omp-autopilot/SKILL.md +67 -12
- package/.github/skills/prototype/SKILL.md +30 -12
- package/.github/skills/ralph/SKILL.md +62 -13
- package/.github/skills/ralplan/SKILL.md +21 -12
- package/.github/skills/research-codebase/SKILL.md +58 -0
- package/.github/skills/research-codebase/reference/agent-prompts.md +38 -0
- package/.github/skills/research-codebase/reference/follow-up.md +21 -0
- package/.github/skills/research-codebase/reference/permalink.md +26 -0
- package/.github/skills/research-codebase/reference/template.md +75 -0
- package/.github/skills/tdd/SKILL.md +27 -10
- package/.github/skills/team/SKILL.md +95 -13
- package/.github/skills/team/scripts/team-launch.sh +132 -0
- package/.github/skills/ultraqa/SKILL.md +55 -11
- package/.github/skills/ultrawork/SKILL.md +66 -13
- package/.github/skills/verify/SKILL.md +29 -11
- package/.github/skills/worktree/SKILL.md +51 -0
- package/README.md +28 -14
- package/catalog/capabilities.json +104 -12
- package/catalog/skills-general.json +62 -10
- package/dist/src/cli.js +30 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/copilot/launch.js +42 -2
- package/dist/src/copilot/launch.js.map +1 -1
- package/dist/src/mode-state/paths.d.ts +6 -0
- package/dist/src/mode-state/paths.js +12 -0
- package/dist/src/mode-state/paths.js.map +1 -1
- package/dist/src/team/api.d.ts +60 -1
- package/dist/src/team/api.js +101 -0
- package/dist/src/team/api.js.map +1 -1
- package/dist/src/team/config.d.ts +7 -0
- package/dist/src/team/config.js +16 -0
- package/dist/src/team/config.js.map +1 -0
- package/dist/src/team/mailbox.d.ts +30 -0
- package/dist/src/team/mailbox.js +188 -0
- package/dist/src/team/mailbox.js.map +1 -0
- package/dist/src/team/runtime.d.ts +9 -1
- package/dist/src/team/runtime.js +18 -12
- package/dist/src/team/runtime.js.map +1 -1
- package/dist/src/team/types.d.ts +25 -0
- package/dist/src/team/worker-bootstrap.js +29 -0
- package/dist/src/team/worker-bootstrap.js.map +1 -1
- package/dist/test/catalog.test.d.ts +1 -0
- package/dist/test/catalog.test.js +21 -0
- package/dist/test/catalog.test.js.map +1 -0
- package/dist/test/jira.test.d.ts +1 -0
- package/dist/test/jira.test.js +26 -0
- package/dist/test/jira.test.js.map +1 -0
- package/dist/test/lint.test.d.ts +1 -0
- package/dist/test/lint.test.js +9 -0
- package/dist/test/lint.test.js.map +1 -0
- package/dist/test/sync.test.d.ts +1 -0
- package/dist/test/sync.test.js +15 -0
- package/dist/test/sync.test.js.map +1 -0
- package/docs/general-skills.md +5 -4
- package/docs/plans/2026-05-29-team-messaging-and-nudge-gating-design.md +170 -0
- package/docs/self-evolve.md +2 -2
- package/package.json +1 -1
- package/scripts/lib/version-check.mjs +82 -0
- package/scripts/session-start.mjs +8 -2
- package/.github/skills/codebase-research/SKILL.md +0 -20
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Research Document Template
|
|
2
|
+
|
|
3
|
+
Use this template for all research documents written to `docs/research/`.
|
|
4
|
+
|
|
5
|
+
## Filename convention
|
|
6
|
+
|
|
7
|
+
- With ticket: `YYYY-MM-DD-PROJ-1234-description.md`
|
|
8
|
+
- Without ticket: `YYYY-MM-DD-description.md`
|
|
9
|
+
|
|
10
|
+
## Frontmatter
|
|
11
|
+
|
|
12
|
+
```yaml
|
|
13
|
+
---
|
|
14
|
+
date: [ISO datetime with timezone from git/system]
|
|
15
|
+
researcher: [git user.name]
|
|
16
|
+
git_commit: [commit hash]
|
|
17
|
+
branch: [branch name]
|
|
18
|
+
repository: [repo name]
|
|
19
|
+
topic: "[User's question/topic]"
|
|
20
|
+
tags: [research, codebase, relevant-component-names]
|
|
21
|
+
status: complete
|
|
22
|
+
last_updated: [YYYY-MM-DD]
|
|
23
|
+
last_updated_by: [git user.name]
|
|
24
|
+
---
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Gather metadata
|
|
28
|
+
|
|
29
|
+
Run these commands — never write placeholder values:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
echo "date: $(date -u +%Y-%m-%dT%H:%M:%S%z)"
|
|
33
|
+
echo "user: $(git config user.name)"
|
|
34
|
+
echo "commit: $(git rev-parse HEAD)"
|
|
35
|
+
echo "branch: $(git branch --show-current)"
|
|
36
|
+
echo "repo: $(basename $(git rev-parse --show-toplevel))"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Document structure
|
|
40
|
+
|
|
41
|
+
```markdown
|
|
42
|
+
# Research: [User's Question/Topic]
|
|
43
|
+
|
|
44
|
+
**Date**: [datetime]
|
|
45
|
+
**Researcher**: [name]
|
|
46
|
+
**Git Commit**: [hash]
|
|
47
|
+
**Branch**: [branch]
|
|
48
|
+
**Repository**: [repo]
|
|
49
|
+
|
|
50
|
+
## Research Question
|
|
51
|
+
[Original user query]
|
|
52
|
+
|
|
53
|
+
## Summary
|
|
54
|
+
[High-level documentation of what was found — describe what exists]
|
|
55
|
+
|
|
56
|
+
## Detailed Findings
|
|
57
|
+
|
|
58
|
+
### [Component/Area 1]
|
|
59
|
+
- Description of what exists (`file.ext:line`)
|
|
60
|
+
- How it connects to other components
|
|
61
|
+
- Current implementation details (without evaluation)
|
|
62
|
+
|
|
63
|
+
### [Component/Area 2]
|
|
64
|
+
...
|
|
65
|
+
|
|
66
|
+
## Code References
|
|
67
|
+
- `path/to/file.py:123` — Description of what's there
|
|
68
|
+
- `another/file.ts:45-67` — Description of the code block
|
|
69
|
+
|
|
70
|
+
## Architecture Documentation
|
|
71
|
+
[Current patterns, conventions, and design implementations]
|
|
72
|
+
|
|
73
|
+
## Open Questions
|
|
74
|
+
[Areas that need further investigation]
|
|
75
|
+
```
|
|
@@ -7,13 +7,30 @@ description: Red-green-refactor loop for behavior changes where tests are practi
|
|
|
7
7
|
|
|
8
8
|
Use `/tdd` when a change can be specified by tests.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
## When to use
|
|
11
|
+
|
|
12
|
+
- You're implementing a feature or fixing a bug that has clear expected behaviour
|
|
13
|
+
- The codebase has an existing test framework
|
|
14
|
+
- You want to prove correctness incrementally
|
|
15
|
+
|
|
16
|
+
## Loop (repeat until done)
|
|
17
|
+
|
|
18
|
+
1. **Red** — write or identify a failing test that describes the desired behaviour
|
|
19
|
+
2. **Green** — write the minimal code to make the test pass
|
|
20
|
+
3. **Refactor** — clean up the code while keeping tests green
|
|
21
|
+
4. **Run** — run the full related test suite to check for regressions
|
|
22
|
+
|
|
23
|
+
## Rules
|
|
24
|
+
|
|
25
|
+
- Test **behaviour** through public surfaces, not implementation details
|
|
26
|
+
- Each test should describe one behaviour — name it clearly (e.g. "returns 404 when user not found")
|
|
27
|
+
- Avoid brittle tests that break when implementation changes but behaviour doesn't
|
|
28
|
+
- If TDD is impractical for the change (e.g. UI layout, infra config), explain why and use `/verify` instead
|
|
29
|
+
- Don't write tests for trivial getters/setters — focus on logic
|
|
30
|
+
|
|
31
|
+
## Output
|
|
32
|
+
|
|
33
|
+
- `Tests written` — list of test names and what they cover
|
|
34
|
+
- `Implementation` — what was changed to make tests pass
|
|
35
|
+
- `Refactoring` — what was cleaned up
|
|
36
|
+
- `Final test run` — all tests passing (output or summary)
|
|
@@ -1,20 +1,102 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: team
|
|
3
|
-
description: Split an approved plan into parallel
|
|
3
|
+
description: Split an approved plan into parallel tmux panes, each running an independent Copilot CLI agent. Use when work has independent lanes and you want visual parallel execution in split terminals. Use when user says /team, team, or wants parallel agent execution.
|
|
4
|
+
argument-hint: "<number of lanes or plan reference>"
|
|
4
5
|
---
|
|
5
6
|
|
|
6
|
-
# Team
|
|
7
|
+
# Team — tmux-based parallel agent execution
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
`/team` splits work into parallel tmux panes in the **current window**, each running an independent interactive agent session. You see all agents working side-by-side immediately.
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
- Require a plan or clear task.
|
|
12
|
-
- Split into lanes with owners, files, and tests.
|
|
13
|
-
- Identify dependencies and conflict risks.
|
|
14
|
-
- Keep it as a coordination brief, not a runtime.
|
|
11
|
+
## When to use
|
|
15
12
|
|
|
16
|
-
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
- Work has **independent lanes** (no shared files, no ordering constraints)
|
|
14
|
+
- You want visual, demo-friendly parallel execution in split terminals
|
|
15
|
+
|
|
16
|
+
## Agent execution steps (FOLLOW EXACTLY)
|
|
17
|
+
|
|
18
|
+
When `/team` is invoked, you MUST execute these steps in order:
|
|
19
|
+
|
|
20
|
+
### Step 1 — Identify lanes
|
|
21
|
+
|
|
22
|
+
Collect independent work lanes from the conversation context. Each lane needs:
|
|
23
|
+
- `id`: short kebab-case identifier (e.g. `lane-a`, `fix-auth`)
|
|
24
|
+
- `name`: human-readable name (e.g. `Upgrade dependencies`)
|
|
25
|
+
- `prompt`: complete task prompt — must be self-contained with all context the agent needs (files to change, what to do, commit message)
|
|
26
|
+
|
|
27
|
+
If no plan or lanes exist yet, ask the user what work to split.
|
|
28
|
+
|
|
29
|
+
### Step 2 — Write lanes JSON
|
|
30
|
+
|
|
31
|
+
Write a temporary lanes file at `/tmp/team-lanes-<timestamp>.json`:
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
[
|
|
35
|
+
{
|
|
36
|
+
"id": "lane-a",
|
|
37
|
+
"name": "Short descriptive name",
|
|
38
|
+
"prompt": "Complete self-contained task prompt for the agent..."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "lane-b",
|
|
42
|
+
"name": "Another lane name",
|
|
43
|
+
"prompt": "Another complete task prompt..."
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Step 3 — Launch the team
|
|
49
|
+
|
|
50
|
+
Run the launch script, passing the session name and lanes file path:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
.github/skills/team/scripts/team-launch.sh --session "team-<name>" --lanes <lanes-file>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
This will:
|
|
57
|
+
- Split the **current tmux window** into panes (leader keeps its pane)
|
|
58
|
+
- Launch `omp --madmax` interactively in each pane, then send the prompt
|
|
59
|
+
- Arrange panes in a tiled grid layout
|
|
60
|
+
- Print pane IDs and navigation commands
|
|
61
|
+
|
|
62
|
+
### Step 4 — Report to user
|
|
63
|
+
|
|
64
|
+
Show the user:
|
|
65
|
+
- Which panes were created and what each is working on
|
|
66
|
+
- Navigation: `Ctrl-b + arrow keys` to move between panes
|
|
67
|
+
- How to check output: `tmux capture-pane -t <pane-id> -p -S -50`
|
|
68
|
+
- How to kill panes when done
|
|
69
|
+
|
|
70
|
+
## Prerequisites
|
|
71
|
+
|
|
72
|
+
- `tmux` installed and running inside a tmux session
|
|
73
|
+
- `omp` (oh-my-copilot) on PATH — preferred, launches with `omp --madmax`
|
|
74
|
+
- Falls back to `copilot` if `omp` is not available
|
|
75
|
+
- `jq` for JSON parsing
|
|
76
|
+
|
|
77
|
+
## Prompt guidelines
|
|
78
|
+
|
|
79
|
+
Each lane prompt must be **self-contained**. The agent in that pane has no context from this session. Include:
|
|
80
|
+
- Exact files or directories to work in
|
|
81
|
+
- What to do (fix, upgrade, accept, etc.)
|
|
82
|
+
- How to verify (run tests, npm audit, etc.)
|
|
83
|
+
- Commit message to use
|
|
84
|
+
|
|
85
|
+
### Good prompt example
|
|
86
|
+
|
|
87
|
+
> You are working in /Users/me/project. In src/auth/login.ts, replace the bcrypt password check with argon2. Update the import, change the verify call, and run `npm test -- --grep auth` to confirm. Commit with message "refactor: switch password hashing to argon2".
|
|
88
|
+
|
|
89
|
+
### Bad prompt example
|
|
90
|
+
|
|
91
|
+
> Fix the auth module. (Too vague — which file? What fix? How to verify?)
|
|
92
|
+
|
|
93
|
+
## Composition
|
|
94
|
+
|
|
95
|
+
Use `/ralplan` before `/team` to produce the plan that defines lanes. Use `/verify` after all panes complete to confirm combined results don't conflict.
|
|
96
|
+
|
|
97
|
+
## Limitations
|
|
98
|
+
|
|
99
|
+
- Each pane is an independent agent session — no shared state or messaging
|
|
100
|
+
- Agents cannot communicate with each other — if tasks depend on each other, use `/ralph` instead
|
|
101
|
+
- Leader (you) must manually verify results after all panes complete
|
|
102
|
+
- Best for independent, non-conflicting work streams
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# team-launch.sh — split the CURRENT tmux window into panes, each running
|
|
5
|
+
# an interactive Copilot CLI agent session.
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# team-launch.sh --session <name> --lanes <lanes.json>
|
|
9
|
+
#
|
|
10
|
+
# Each pane launches an interactive `omp --madmax` (or `copilot`) session,
|
|
11
|
+
# then sends the lane prompt via tmux send-keys so the agent stays alive
|
|
12
|
+
# for follow-up interaction.
|
|
13
|
+
|
|
14
|
+
SESSION=""
|
|
15
|
+
LANES_FILE=""
|
|
16
|
+
|
|
17
|
+
while [[ $# -gt 0 ]]; do
|
|
18
|
+
case "$1" in
|
|
19
|
+
--session) SESSION="$2"; shift 2 ;;
|
|
20
|
+
--lanes) LANES_FILE="$2"; shift 2 ;;
|
|
21
|
+
*) echo "Unknown arg: $1" >&2; exit 1 ;;
|
|
22
|
+
esac
|
|
23
|
+
done
|
|
24
|
+
|
|
25
|
+
if [[ -z "$SESSION" || -z "$LANES_FILE" ]]; then
|
|
26
|
+
echo "Usage: team-launch.sh --session <name> --lanes <lanes.json>" >&2
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
if [[ ! -f "$LANES_FILE" ]]; then
|
|
31
|
+
echo "Lanes file not found: $LANES_FILE" >&2
|
|
32
|
+
exit 1
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
if ! command -v tmux &>/dev/null; then
|
|
36
|
+
echo "tmux not found" >&2
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
if [[ -z "${TMUX:-}" ]]; then
|
|
41
|
+
echo "Not inside a tmux session. Run this from within tmux." >&2
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
if command -v omp &>/dev/null; then
|
|
46
|
+
AGENT_CMD="omp --madmax"
|
|
47
|
+
elif command -v copilot &>/dev/null; then
|
|
48
|
+
AGENT_CMD="copilot"
|
|
49
|
+
else
|
|
50
|
+
echo "Neither omp nor copilot CLI found" >&2
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
LANE_COUNT=$(jq length "$LANES_FILE")
|
|
55
|
+
if [[ "$LANE_COUNT" -lt 1 ]]; then
|
|
56
|
+
echo "No lanes defined in $LANES_FILE" >&2
|
|
57
|
+
exit 1
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
CWD=$(pwd)
|
|
61
|
+
WAIT_SECS="${TEAM_AGENT_WAIT:-5}"
|
|
62
|
+
|
|
63
|
+
echo "🚀 Splitting current window into $LANE_COUNT panes ($SESSION)"
|
|
64
|
+
echo ""
|
|
65
|
+
|
|
66
|
+
# Collect pane IDs as we create them
|
|
67
|
+
PANE_IDS=()
|
|
68
|
+
|
|
69
|
+
for i in $(seq 0 $((LANE_COUNT - 1))); do
|
|
70
|
+
LANE_NAME=$(jq -r ".[$i].name" "$LANES_FILE")
|
|
71
|
+
LANE_PROMPT=$(jq -r ".[$i].prompt" "$LANES_FILE")
|
|
72
|
+
LANE_ID=$(jq -r ".[$i].id" "$LANES_FILE")
|
|
73
|
+
|
|
74
|
+
# Split: alternate horizontal/vertical for a grid
|
|
75
|
+
if (( i == 0 )); then
|
|
76
|
+
PANE_ID=$(tmux split-window -h -c "$CWD" -P -F '#{pane_id}')
|
|
77
|
+
elif (( i % 2 == 1 )); then
|
|
78
|
+
PANE_ID=$(tmux split-window -v -t "${PANE_IDS[$((i-1))]}" -c "$CWD" -P -F '#{pane_id}')
|
|
79
|
+
else
|
|
80
|
+
PANE_ID=$(tmux split-window -v -t "${PANE_IDS[$((i-2))]}" -c "$CWD" -P -F '#{pane_id}')
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
PANE_IDS+=("$PANE_ID")
|
|
84
|
+
|
|
85
|
+
# Set pane title
|
|
86
|
+
tmux select-pane -t "$PANE_ID" -T "$LANE_ID: $LANE_NAME"
|
|
87
|
+
|
|
88
|
+
# Launch interactive agent session (NOT with -p)
|
|
89
|
+
tmux send-keys -t "$PANE_ID" "echo '═══ $LANE_NAME ═══' && $AGENT_CMD" C-m
|
|
90
|
+
|
|
91
|
+
echo " ✅ Pane $PANE_ID → $LANE_NAME (launching agent...)"
|
|
92
|
+
done
|
|
93
|
+
|
|
94
|
+
# Rebalance layout
|
|
95
|
+
tmux select-layout tiled
|
|
96
|
+
|
|
97
|
+
# Wait for agents to start up before sending prompts
|
|
98
|
+
echo ""
|
|
99
|
+
echo "⏳ Waiting ${WAIT_SECS}s for agents to initialise..."
|
|
100
|
+
sleep "$WAIT_SECS"
|
|
101
|
+
|
|
102
|
+
# Now send prompts to each interactive session
|
|
103
|
+
for i in $(seq 0 $((LANE_COUNT - 1))); do
|
|
104
|
+
LANE_PROMPT=$(jq -r ".[$i].prompt" "$LANES_FILE")
|
|
105
|
+
LANE_NAME=$(jq -r ".[$i].name" "$LANES_FILE")
|
|
106
|
+
PANE_ID="${PANE_IDS[$i]}"
|
|
107
|
+
|
|
108
|
+
# Write prompt to temp file and use tmux load-buffer + paste for reliable delivery
|
|
109
|
+
PROMPT_FILE="/tmp/team-prompt-${SESSION}-${i}.txt"
|
|
110
|
+
printf '%s' "$LANE_PROMPT" > "$PROMPT_FILE"
|
|
111
|
+
|
|
112
|
+
# Send via tmux send-keys -l (literal) then Enter
|
|
113
|
+
tmux send-keys -t "$PANE_ID" -l "$(cat "$PROMPT_FILE")"
|
|
114
|
+
tmux send-keys -t "$PANE_ID" C-m
|
|
115
|
+
|
|
116
|
+
echo " 📨 Sent prompt to $PANE_ID ($LANE_NAME)"
|
|
117
|
+
done
|
|
118
|
+
|
|
119
|
+
# Switch focus back to the original (leader) pane
|
|
120
|
+
tmux select-pane -t '{left}'
|
|
121
|
+
|
|
122
|
+
echo ""
|
|
123
|
+
echo "✅ $LANE_COUNT interactive agent sessions running in split panes"
|
|
124
|
+
echo ""
|
|
125
|
+
echo "Pane IDs: ${PANE_IDS[*]}"
|
|
126
|
+
echo ""
|
|
127
|
+
echo "Commands:"
|
|
128
|
+
echo " tmux select-layout tiled # rebalance layout"
|
|
129
|
+
echo " tmux capture-pane -t <pane-id> -p -S -50 # read pane output"
|
|
130
|
+
echo " Ctrl-b + arrow keys # navigate between panes"
|
|
131
|
+
echo ""
|
|
132
|
+
echo "💡 Agents are interactive — you can send follow-up prompts to any pane"
|
|
@@ -7,14 +7,58 @@ description: Adversarial QA pass that tests behavior, failures, and regressions.
|
|
|
7
7
|
|
|
8
8
|
Use `/ultraqa` after implementation when shallow checks are not enough.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- `
|
|
19
|
-
-
|
|
20
|
-
|
|
10
|
+
## When to use
|
|
11
|
+
|
|
12
|
+
- Changes are complete but you're not confident they're correct
|
|
13
|
+
- The change touches critical paths (auth, payments, data integrity)
|
|
14
|
+
- You need to verify edge cases, error paths, and regressions
|
|
15
|
+
|
|
16
|
+
## Do not use when
|
|
17
|
+
|
|
18
|
+
- A simple `npm test` is sufficient — use `/verify`
|
|
19
|
+
- You're still implementing — finish first, then QA
|
|
20
|
+
|
|
21
|
+
## Steps
|
|
22
|
+
|
|
23
|
+
### Cycle 1 (and each subsequent cycle)
|
|
24
|
+
|
|
25
|
+
Number every cycle explicitly: "Cycle 1", "Cycle 2", etc.
|
|
26
|
+
|
|
27
|
+
1. **Identify test surface** — what changed, what could break
|
|
28
|
+
2. **Run existing tests** — baseline must pass before adversarial testing
|
|
29
|
+
3. **Test happy path** — primary use case works
|
|
30
|
+
4. **Test edge cases** — empty inputs, boundary values, concurrent access
|
|
31
|
+
5. **Test error paths** — timeouts, bad data, missing deps
|
|
32
|
+
6. **Test regressions** — did anything that previously worked now break?
|
|
33
|
+
|
|
34
|
+
### After each cycle
|
|
35
|
+
|
|
36
|
+
- If issues found → fix and start next cycle
|
|
37
|
+
- If clean → report PASS and stop
|
|
38
|
+
- Track which issues were found and fixed per cycle
|
|
39
|
+
|
|
40
|
+
## Early exit conditions
|
|
41
|
+
|
|
42
|
+
- **5 cycles reached** — stop, report remaining issues as known gaps
|
|
43
|
+
- **Same failure 3 consecutive cycles** — stop, this is a design issue not a bug. Report it for `/ralplan`
|
|
44
|
+
- **Critical regression found** — stop immediately, report before fixing anything else
|
|
45
|
+
|
|
46
|
+
## Severity routing
|
|
47
|
+
|
|
48
|
+
- **Critical** (data loss, security, crash) → immediate stop, fix before continuing
|
|
49
|
+
- **Major** (broken feature, wrong output) → fix in current cycle
|
|
50
|
+
- **Minor** (cosmetic, non-blocking) → log and continue, fix at end if time permits
|
|
51
|
+
|
|
52
|
+
## Rules
|
|
53
|
+
|
|
54
|
+
- Prefer runnable checks over inspection — run tests, don't just read code
|
|
55
|
+
- If tests don't exist, write minimal ones that cover the change
|
|
56
|
+
- Route fixes back to `/ralph` or `/ultrawork` if they're substantial
|
|
57
|
+
|
|
58
|
+
## Output
|
|
59
|
+
|
|
60
|
+
- `Cycles` — how many iterations, what was found/fixed in each
|
|
61
|
+
- `Scenarios` — what was tested (happy, edge, error, regression)
|
|
62
|
+
- `Results` — PASS/FAIL with trend across cycles
|
|
63
|
+
- `Regressions` — anything that used to work but now doesn't
|
|
64
|
+
- `Known gaps` — remaining issues after max cycles
|
|
@@ -5,16 +5,69 @@ description: High-throughput execution for many independent small tasks. Use wit
|
|
|
5
5
|
|
|
6
6
|
# Ultrawork
|
|
7
7
|
|
|
8
|
-
Use `/ultrawork` when there are many independent, low-conflict work items.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- `
|
|
19
|
-
- `
|
|
20
|
-
-
|
|
8
|
+
Use `/ultrawork` when there are many independent, low-conflict work items that can be batched.
|
|
9
|
+
|
|
10
|
+
## When to use
|
|
11
|
+
|
|
12
|
+
- 5+ independent tasks with no shared files
|
|
13
|
+
- Work is mechanical or repetitive (e.g. "fix all type errors", "update all imports")
|
|
14
|
+
- Each task can be verified independently
|
|
15
|
+
|
|
16
|
+
## Do not use when
|
|
17
|
+
|
|
18
|
+
- Tasks share files or have ordering constraints — use `/ralph`
|
|
19
|
+
- Tasks need design decisions — use `/ralplan` first
|
|
20
|
+
- Fewer than 5 items — just do them inline
|
|
21
|
+
|
|
22
|
+
## Composition
|
|
23
|
+
|
|
24
|
+
Ultrawork is the **parallelism primitive** in the skill stack:
|
|
25
|
+
```
|
|
26
|
+
/omp-autopilot → /ralph (persistence) → /ultrawork (parallelism)
|
|
27
|
+
```
|
|
28
|
+
Ralph wraps ultrawork when a persistent verify loop is needed around batched work.
|
|
29
|
+
|
|
30
|
+
## Steps
|
|
31
|
+
|
|
32
|
+
### 1. Inventory
|
|
33
|
+
|
|
34
|
+
List all tasks. For each, note the files it touches. Flag any collisions.
|
|
35
|
+
|
|
36
|
+
### 2. Dependency check
|
|
37
|
+
|
|
38
|
+
If tasks have ordering constraints, group them into **waves**:
|
|
39
|
+
- Wave 1: tasks with no dependencies (fire all at once)
|
|
40
|
+
- Wave 2: tasks that depend on wave 1 results
|
|
41
|
+
- Complete each wave before starting the next
|
|
42
|
+
|
|
43
|
+
If all tasks are independent, use a single wave.
|
|
44
|
+
|
|
45
|
+
### 3. Execute
|
|
46
|
+
|
|
47
|
+
Process each wave. For each task in the wave:
|
|
48
|
+
- Execute the change
|
|
49
|
+
- Verify it individually (test, lint, type-check)
|
|
50
|
+
- Mark as done or failed
|
|
51
|
+
|
|
52
|
+
### 4. Report
|
|
53
|
+
|
|
54
|
+
Summarise: completed, failed, blocked.
|
|
55
|
+
|
|
56
|
+
## Stop conditions
|
|
57
|
+
|
|
58
|
+
- **Failure rate > 30%** — stop remaining tasks, report what failed and why
|
|
59
|
+
- **Shared file collision discovered** — stop, re-partition, or escalate to `/ralph`
|
|
60
|
+
- **Ambiguous task** — skip it, escalate to `/ralplan`
|
|
61
|
+
|
|
62
|
+
## Rules
|
|
63
|
+
|
|
64
|
+
- Verify each batch before moving to the next
|
|
65
|
+
- If a task is ambiguous or risky, escalate — don't guess
|
|
66
|
+
- Commit after each successful wave, not at the end
|
|
67
|
+
|
|
68
|
+
## Output
|
|
69
|
+
|
|
70
|
+
- `Waves` — how tasks were grouped
|
|
71
|
+
- `Completed` — items done with evidence
|
|
72
|
+
- `Failed/blockers` — items that couldn't be completed and why
|
|
73
|
+
- `Verification` — test/lint/build results per wave
|
|
@@ -7,14 +7,32 @@ description: Prove completion claims with fresh evidence. Use with /verify befor
|
|
|
7
7
|
|
|
8
8
|
Use `/verify` before saying done.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
- `
|
|
10
|
+
## When to use
|
|
11
|
+
|
|
12
|
+
- You've completed a task and need to prove it works
|
|
13
|
+
- Someone claims "it's done" and you need to confirm
|
|
14
|
+
- Before creating a PR or handing off work
|
|
15
|
+
|
|
16
|
+
## Steps
|
|
17
|
+
|
|
18
|
+
1. **State the claim** — what is being verified (e.g. "auth flow works end-to-end")
|
|
19
|
+
2. **Run checks** — the smallest set of commands/inspections that prove the claim:
|
|
20
|
+
- Tests: `npm test`, `pytest`, etc.
|
|
21
|
+
- Build: does it compile/build without errors?
|
|
22
|
+
- Lint: any new warnings?
|
|
23
|
+
- Behaviour: does the feature work as described?
|
|
24
|
+
3. **Read outputs** — don't assume green means pass; read the actual results
|
|
25
|
+
4. **Report honestly** — if there are gaps, say so
|
|
26
|
+
|
|
27
|
+
## Rules
|
|
28
|
+
|
|
29
|
+
- Fresh evidence only — don't rely on previous test runs
|
|
30
|
+
- If a check fails, report it as a gap, don't hide it
|
|
31
|
+
- Verify what was asked for, not more and not less
|
|
32
|
+
|
|
33
|
+
## Output
|
|
34
|
+
|
|
35
|
+
- `PASS` or `FAIL`
|
|
36
|
+
- `Evidence` — command output, screenshots, or behaviour description
|
|
37
|
+
- `Known gaps` — anything not verified and why
|
|
38
|
+
- `Stop condition` — what would need to change for a different verdict
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: worktree
|
|
3
|
+
description: Guides worktree-based workflow for parallel branch work. Use when user wants to start a new ticket, review a PR, or work on a branch without switching. Also use when user mentions worktree, branch switching, or parallel branch work.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Worktree Workflow
|
|
7
|
+
|
|
8
|
+
Use `/worktree` to set up a git worktree for a new ticket, PR review, or any branch work.
|
|
9
|
+
|
|
10
|
+
## Why worktrees?
|
|
11
|
+
|
|
12
|
+
- Your `main` branch stays untouched
|
|
13
|
+
- Work on multiple tickets or reviews in parallel — no stashing, no context-switching
|
|
14
|
+
- Each worktree is a full working copy — run tests, build, etc. independently
|
|
15
|
+
|
|
16
|
+
## New ticket
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
cd <repo>
|
|
20
|
+
git fetch origin
|
|
21
|
+
git worktree add ../<repo>-<ticket-id> -b <ticket-id>
|
|
22
|
+
cd ../<repo>-<ticket-id>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## PR review
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
cd <repo>
|
|
29
|
+
git fetch origin
|
|
30
|
+
git worktree add ../<repo>-review-<branch> origin/<branch>
|
|
31
|
+
cd ../<repo>-review-<branch>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Cleanup
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
cd <repo>
|
|
38
|
+
git worktree remove ../<repo>-<ticket-id>
|
|
39
|
+
# or list all worktrees
|
|
40
|
+
git worktree list
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Agent behaviour
|
|
44
|
+
|
|
45
|
+
When the user asks to work on a ticket or review a PR:
|
|
46
|
+
|
|
47
|
+
1. `cd` into the repo's main clone
|
|
48
|
+
2. `git fetch origin`
|
|
49
|
+
3. Create a worktree with a descriptive name (ticket number or PR branch)
|
|
50
|
+
4. Do all work inside the worktree, not the main clone
|
|
51
|
+
5. Remind the user to clean up when the work is done
|