@fro.bot/systematic 1.18.7 → 1.19.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/agents/docs/ankane-readme-writer.md +67 -0
- package/agents/review/julik-frontend-races-reviewer.md +223 -0
- package/agents/review/kieran-python-reviewer.md +135 -0
- package/agents/review/schema-drift-detector.md +156 -0
- package/agents/workflow/every-style-editor.md +66 -0
- package/commands/agent-native-audit.md +4 -2
- package/commands/changelog.md +139 -0
- package/commands/create-agent-skill.md +5 -2
- package/commands/deepen-plan.md +50 -20
- package/commands/deploy-docs.md +120 -0
- package/commands/feature-video.md +352 -0
- package/commands/generate_command.md +164 -0
- package/commands/heal-skill.md +149 -0
- package/commands/lfg.md +14 -8
- package/commands/report-bug.md +151 -0
- package/commands/reproduce-bug.md +100 -0
- package/commands/resolve_parallel.md +36 -0
- package/commands/resolve_todo_parallel.md +37 -0
- package/commands/slfg.md +33 -0
- package/commands/test-browser.md +340 -0
- package/commands/test-xcode.md +333 -0
- package/commands/triage.md +311 -0
- package/commands/workflows/brainstorm.md +6 -1
- package/commands/workflows/compound.md +16 -13
- package/commands/workflows/plan.md +49 -1
- package/commands/workflows/review.md +28 -24
- package/commands/workflows/work.md +60 -25
- package/package.json +1 -1
- package/skills/andrew-kane-gem-writer/SKILL.md +185 -0
- package/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
- package/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
- package/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
- package/skills/andrew-kane-gem-writer/references/resources.md +119 -0
- package/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
- package/skills/dhh-rails-style/SKILL.md +186 -0
- package/skills/dhh-rails-style/references/architecture.md +653 -0
- package/skills/dhh-rails-style/references/controllers.md +303 -0
- package/skills/dhh-rails-style/references/frontend.md +510 -0
- package/skills/dhh-rails-style/references/gems.md +266 -0
- package/skills/dhh-rails-style/references/models.md +359 -0
- package/skills/dhh-rails-style/references/testing.md +338 -0
- package/skills/dspy-ruby/SKILL.md +738 -0
- package/skills/dspy-ruby/assets/config-template.rb +187 -0
- package/skills/dspy-ruby/assets/module-template.rb +300 -0
- package/skills/dspy-ruby/assets/signature-template.rb +221 -0
- package/skills/dspy-ruby/references/core-concepts.md +674 -0
- package/skills/dspy-ruby/references/observability.md +366 -0
- package/skills/dspy-ruby/references/optimization.md +603 -0
- package/skills/dspy-ruby/references/providers.md +418 -0
- package/skills/dspy-ruby/references/toolsets.md +502 -0
- package/skills/every-style-editor/SKILL.md +135 -0
- package/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
- package/skills/gemini-imagegen/SKILL.md +238 -0
- package/skills/gemini-imagegen/requirements.txt +2 -0
- package/skills/gemini-imagegen/scripts/compose_images.py +157 -0
- package/skills/gemini-imagegen/scripts/edit_image.py +144 -0
- package/skills/gemini-imagegen/scripts/gemini_images.py +263 -0
- package/skills/gemini-imagegen/scripts/generate_image.py +133 -0
- package/skills/gemini-imagegen/scripts/multi_turn_chat.py +216 -0
- package/skills/rclone/SKILL.md +151 -0
- package/skills/rclone/scripts/check_setup.sh +60 -0
- package/skills/resolve-pr-parallel/SKILL.md +90 -0
- package/skills/resolve-pr-parallel/scripts/get-pr-comments +68 -0
- package/skills/resolve-pr-parallel/scripts/resolve-pr-thread +23 -0
- package/skills/setup/SKILL.md +168 -0
- package/skills/skill-creator/SKILL.md +211 -0
- package/skills/skill-creator/scripts/init_skill.py +303 -0
- package/skills/skill-creator/scripts/package_skill.py +110 -0
- package/skills/skill-creator/scripts/quick_validate.py +65 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rclone
|
|
3
|
+
description: Upload, sync, and manage files across cloud storage providers using rclone. Use when uploading files (images, videos, documents) to S3, Cloudflare R2, Backblaze B2, Google Drive, Dropbox, or any S3-compatible storage. Triggers on "upload to S3", "sync to cloud", "rclone", "backup files", "upload video/image to bucket", or requests to transfer files to remote storage.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# rclone File Transfer Skill
|
|
7
|
+
|
|
8
|
+
## Setup Check (Always Run First)
|
|
9
|
+
|
|
10
|
+
Before any rclone operation, verify installation and configuration:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# Check if rclone is installed
|
|
14
|
+
command -v rclone >/dev/null 2>&1 && echo "rclone installed: $(rclone version | head -1)" || echo "NOT INSTALLED"
|
|
15
|
+
|
|
16
|
+
# List configured remotes
|
|
17
|
+
rclone listremotes 2>/dev/null || echo "NO REMOTES CONFIGURED"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### If rclone is NOT installed
|
|
21
|
+
|
|
22
|
+
Guide the user to install:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# macOS
|
|
26
|
+
brew install rclone
|
|
27
|
+
|
|
28
|
+
# Linux (script install)
|
|
29
|
+
curl https://rclone.org/install.sh | sudo bash
|
|
30
|
+
|
|
31
|
+
# Or via package manager
|
|
32
|
+
sudo apt install rclone # Debian/Ubuntu
|
|
33
|
+
sudo dnf install rclone # Fedora
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### If NO remotes are configured
|
|
37
|
+
|
|
38
|
+
Walk the user through interactive configuration:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
rclone config
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Common provider setup quick reference:**
|
|
45
|
+
|
|
46
|
+
| Provider | Type | Key Settings |
|
|
47
|
+
|----------|------|--------------|
|
|
48
|
+
| AWS S3 | `s3` | access_key_id, secret_access_key, region |
|
|
49
|
+
| Cloudflare R2 | `s3` | access_key_id, secret_access_key, endpoint (account_id.r2.cloudflarestorage.com) |
|
|
50
|
+
| Backblaze B2 | `b2` | account (keyID), key (applicationKey) |
|
|
51
|
+
| DigitalOcean Spaces | `s3` | access_key_id, secret_access_key, endpoint (region.digitaloceanspaces.com) |
|
|
52
|
+
| Google Drive | `drive` | OAuth flow (opens browser) |
|
|
53
|
+
| Dropbox | `dropbox` | OAuth flow (opens browser) |
|
|
54
|
+
|
|
55
|
+
**Example: Configure Cloudflare R2**
|
|
56
|
+
```bash
|
|
57
|
+
rclone config create r2 s3 \
|
|
58
|
+
provider=Cloudflare \
|
|
59
|
+
access_key_id=YOUR_ACCESS_KEY \
|
|
60
|
+
secret_access_key=YOUR_SECRET_KEY \
|
|
61
|
+
endpoint=ACCOUNT_ID.r2.cloudflarestorage.com \
|
|
62
|
+
acl=private
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Example: Configure AWS S3**
|
|
66
|
+
```bash
|
|
67
|
+
rclone config create aws s3 \
|
|
68
|
+
provider=AWS \
|
|
69
|
+
access_key_id=YOUR_ACCESS_KEY \
|
|
70
|
+
secret_access_key=YOUR_SECRET_KEY \
|
|
71
|
+
region=us-east-1
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Common Operations
|
|
75
|
+
|
|
76
|
+
### Upload single file
|
|
77
|
+
```bash
|
|
78
|
+
rclone copy /path/to/file.mp4 remote:bucket/path/ --progress
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Upload directory
|
|
82
|
+
```bash
|
|
83
|
+
rclone copy /path/to/folder remote:bucket/folder/ --progress
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Sync directory (mirror, deletes removed files)
|
|
87
|
+
```bash
|
|
88
|
+
rclone sync /local/path remote:bucket/path/ --progress
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### List remote contents
|
|
92
|
+
```bash
|
|
93
|
+
rclone ls remote:bucket/
|
|
94
|
+
rclone lsd remote:bucket/ # directories only
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Check what would be transferred (dry run)
|
|
98
|
+
```bash
|
|
99
|
+
rclone copy /path remote:bucket/ --dry-run
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Useful Flags
|
|
103
|
+
|
|
104
|
+
| Flag | Purpose |
|
|
105
|
+
|------|---------|
|
|
106
|
+
| `--progress` | Show transfer progress |
|
|
107
|
+
| `--dry-run` | Preview without transferring |
|
|
108
|
+
| `-v` | Verbose output |
|
|
109
|
+
| `--transfers=N` | Parallel transfers (default 4) |
|
|
110
|
+
| `--bwlimit=RATE` | Bandwidth limit (e.g., `10M`) |
|
|
111
|
+
| `--checksum` | Compare by checksum, not size/time |
|
|
112
|
+
| `--exclude="*.tmp"` | Exclude patterns |
|
|
113
|
+
| `--include="*.mp4"` | Include only matching |
|
|
114
|
+
| `--min-size=SIZE` | Skip files smaller than SIZE |
|
|
115
|
+
| `--max-size=SIZE` | Skip files larger than SIZE |
|
|
116
|
+
|
|
117
|
+
## Large File Uploads
|
|
118
|
+
|
|
119
|
+
For videos and large files, use chunked uploads:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# S3 multipart upload (automatic for >200MB)
|
|
123
|
+
rclone copy large_video.mp4 remote:bucket/ --s3-chunk-size=64M --progress
|
|
124
|
+
|
|
125
|
+
# Resume interrupted transfers
|
|
126
|
+
rclone copy /path remote:bucket/ --progress --retries=5
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Verify Upload
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# Check file exists and matches
|
|
133
|
+
rclone check /local/file remote:bucket/file
|
|
134
|
+
|
|
135
|
+
# Get file info
|
|
136
|
+
rclone lsl remote:bucket/path/to/file
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Troubleshooting
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# Test connection
|
|
143
|
+
rclone lsd remote:
|
|
144
|
+
|
|
145
|
+
# Debug connection issues
|
|
146
|
+
rclone lsd remote: -vv
|
|
147
|
+
|
|
148
|
+
# Check config
|
|
149
|
+
rclone config show remote
|
|
150
|
+
```
|
|
151
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# rclone setup checker - verifies installation and configuration
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "=== rclone Setup Check ==="
|
|
7
|
+
echo
|
|
8
|
+
|
|
9
|
+
# Check if rclone is installed
|
|
10
|
+
if command -v rclone >/dev/null 2>&1; then
|
|
11
|
+
echo "✓ rclone installed"
|
|
12
|
+
rclone version | head -1
|
|
13
|
+
echo
|
|
14
|
+
else
|
|
15
|
+
echo "✗ rclone NOT INSTALLED"
|
|
16
|
+
echo
|
|
17
|
+
echo "Install with:"
|
|
18
|
+
echo " macOS: brew install rclone"
|
|
19
|
+
echo " Linux: curl https://rclone.org/install.sh | sudo bash"
|
|
20
|
+
echo " or: sudo apt install rclone"
|
|
21
|
+
exit 1
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
# Check for configured remotes
|
|
25
|
+
REMOTES=$(rclone listremotes 2>/dev/null || true)
|
|
26
|
+
|
|
27
|
+
if [ -z "$REMOTES" ]; then
|
|
28
|
+
echo "✗ No remotes configured"
|
|
29
|
+
echo
|
|
30
|
+
echo "Run 'rclone config' to set up a remote, or use:"
|
|
31
|
+
echo
|
|
32
|
+
echo " # Cloudflare R2"
|
|
33
|
+
echo " rclone config create r2 s3 provider=Cloudflare \\"
|
|
34
|
+
echo " access_key_id=KEY secret_access_key=SECRET \\"
|
|
35
|
+
echo " endpoint=ACCOUNT_ID.r2.cloudflarestorage.com"
|
|
36
|
+
echo
|
|
37
|
+
echo " # AWS S3"
|
|
38
|
+
echo " rclone config create aws s3 provider=AWS \\"
|
|
39
|
+
echo " access_key_id=KEY secret_access_key=SECRET region=us-east-1"
|
|
40
|
+
echo
|
|
41
|
+
exit 1
|
|
42
|
+
else
|
|
43
|
+
echo "✓ Configured remotes:"
|
|
44
|
+
echo "$REMOTES" | sed 's/^/ /'
|
|
45
|
+
echo
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
# Test connectivity for each remote
|
|
49
|
+
echo "Testing remote connectivity..."
|
|
50
|
+
for remote in $REMOTES; do
|
|
51
|
+
remote_name="${remote%:}"
|
|
52
|
+
if rclone lsd "$remote" >/dev/null 2>&1; then
|
|
53
|
+
echo " ✓ $remote_name - connected"
|
|
54
|
+
else
|
|
55
|
+
echo " ✗ $remote_name - connection failed (check credentials)"
|
|
56
|
+
fi
|
|
57
|
+
done
|
|
58
|
+
|
|
59
|
+
echo
|
|
60
|
+
echo "=== Setup Complete ==="
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: resolve_pr_parallel
|
|
3
|
+
description: Resolve all PR comments using parallel processing. Use when addressing PR review feedback, resolving review threads, or batch-fixing PR comments.
|
|
4
|
+
argument-hint: '[optional: PR number or current PR]'
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
allowed-tools: Bash(gh *), Bash(git *), Read
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Resolve PR Comments in Parallel
|
|
10
|
+
|
|
11
|
+
Resolve all unresolved PR review comments by spawning parallel agents for each thread.
|
|
12
|
+
|
|
13
|
+
## Context Detection
|
|
14
|
+
|
|
15
|
+
OpenCode automatically detects git context:
|
|
16
|
+
- Current branch and associated PR
|
|
17
|
+
- All PR comments and review threads
|
|
18
|
+
- Works with any PR by specifying the number
|
|
19
|
+
|
|
20
|
+
## Workflow
|
|
21
|
+
|
|
22
|
+
### 1. Analyze
|
|
23
|
+
|
|
24
|
+
Fetch unresolved review threads using the GraphQL script:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
bash ${OPENCODE_PLUGIN_ROOT}/skills/resolve-pr-parallel/scripts/get-pr-comments PR_NUMBER
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
This returns only **unresolved, non-outdated** threads with file paths, line numbers, and comment bodies.
|
|
31
|
+
|
|
32
|
+
If the script fails, fall back to:
|
|
33
|
+
```bash
|
|
34
|
+
gh pr view PR_NUMBER --json reviews,comments
|
|
35
|
+
gh api repos/{owner}/{repo}/pulls/PR_NUMBER/comments
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 2. Plan
|
|
39
|
+
|
|
40
|
+
Create a todowrite list of all unresolved items grouped by type:
|
|
41
|
+
- Code changes requested
|
|
42
|
+
- Questions to answer
|
|
43
|
+
- Style/convention fixes
|
|
44
|
+
- Test additions needed
|
|
45
|
+
|
|
46
|
+
### 3. Implement (PARALLEL)
|
|
47
|
+
|
|
48
|
+
Spawn a `pr-comment-resolver` agent for each unresolved item in parallel.
|
|
49
|
+
|
|
50
|
+
If there are 3 comments, spawn 3 agents:
|
|
51
|
+
|
|
52
|
+
1. task pr-comment-resolver(comment1)
|
|
53
|
+
2. task pr-comment-resolver(comment2)
|
|
54
|
+
3. task pr-comment-resolver(comment3)
|
|
55
|
+
|
|
56
|
+
Always run all in parallel subagents/Tasks for each Todo item.
|
|
57
|
+
|
|
58
|
+
### 4. Commit & Resolve
|
|
59
|
+
|
|
60
|
+
- Commit changes with a clear message referencing the PR feedback
|
|
61
|
+
- Resolve each thread programmatically:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
bash ${OPENCODE_PLUGIN_ROOT}/skills/resolve-pr-parallel/scripts/resolve-pr-thread THREAD_ID
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
- Push to remote
|
|
68
|
+
|
|
69
|
+
### 5. Verify
|
|
70
|
+
|
|
71
|
+
Re-fetch comments to confirm all threads are resolved:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
bash ${OPENCODE_PLUGIN_ROOT}/skills/resolve-pr-parallel/scripts/get-pr-comments PR_NUMBER
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Should return an empty array `[]`. If threads remain, repeat from step 1.
|
|
78
|
+
|
|
79
|
+
## Scripts
|
|
80
|
+
|
|
81
|
+
- [scripts/get-pr-comments](scripts/get-pr-comments) - GraphQL query for unresolved review threads
|
|
82
|
+
- [scripts/resolve-pr-thread](scripts/resolve-pr-thread) - GraphQL mutation to resolve a thread by ID
|
|
83
|
+
|
|
84
|
+
## Success Criteria
|
|
85
|
+
|
|
86
|
+
- All unresolved review threads addressed
|
|
87
|
+
- Changes committed and pushed
|
|
88
|
+
- Threads resolved via GraphQL (marked as resolved on GitHub)
|
|
89
|
+
- Empty result from get-pr-comments on verify
|
|
90
|
+
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
if [ $# -lt 1 ]; then
|
|
6
|
+
echo "Usage: get-pr-comments PR_NUMBER [OWNER/REPO]"
|
|
7
|
+
echo "Example: get-pr-comments 123"
|
|
8
|
+
echo "Example: get-pr-comments 123 owner/repo"
|
|
9
|
+
exit 1
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
PR_NUMBER=$1
|
|
13
|
+
|
|
14
|
+
if [ -n "$2" ]; then
|
|
15
|
+
OWNER=$(echo "$2" | cut -d/ -f1)
|
|
16
|
+
REPO=$(echo "$2" | cut -d/ -f2)
|
|
17
|
+
else
|
|
18
|
+
OWNER=$(gh repo view --json owner -q .owner.login 2>/dev/null)
|
|
19
|
+
REPO=$(gh repo view --json name -q .name 2>/dev/null)
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
if [ -z "$OWNER" ] || [ -z "$REPO" ]; then
|
|
23
|
+
echo "Error: Could not detect repository. Pass OWNER/REPO as second argument."
|
|
24
|
+
exit 1
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
gh api graphql -f owner="$OWNER" -f repo="$REPO" -F pr="$PR_NUMBER" -f query='
|
|
28
|
+
query FetchUnresolvedComments($owner: String!, $repo: String!, $pr: Int!) {
|
|
29
|
+
repository(owner: $owner, name: $repo) {
|
|
30
|
+
pullRequest(number: $pr) {
|
|
31
|
+
title
|
|
32
|
+
url
|
|
33
|
+
reviewThreads(first: 100) {
|
|
34
|
+
totalCount
|
|
35
|
+
edges {
|
|
36
|
+
node {
|
|
37
|
+
id
|
|
38
|
+
isResolved
|
|
39
|
+
isOutdated
|
|
40
|
+
isCollapsed
|
|
41
|
+
path
|
|
42
|
+
line
|
|
43
|
+
startLine
|
|
44
|
+
diffSide
|
|
45
|
+
comments(first: 100) {
|
|
46
|
+
totalCount
|
|
47
|
+
nodes {
|
|
48
|
+
id
|
|
49
|
+
author {
|
|
50
|
+
login
|
|
51
|
+
}
|
|
52
|
+
body
|
|
53
|
+
createdAt
|
|
54
|
+
updatedAt
|
|
55
|
+
url
|
|
56
|
+
outdated
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
pageInfo {
|
|
62
|
+
hasNextPage
|
|
63
|
+
endCursor
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}' | jq '.data.repository.pullRequest.reviewThreads.edges | map(select(.node.isResolved == false and .node.isOutdated == false))'
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
if [ $# -eq 0 ]; then
|
|
6
|
+
echo "Usage: resolve-pr-thread THREAD_ID"
|
|
7
|
+
echo "Example: resolve-pr-thread PRRT_kwDOABC123"
|
|
8
|
+
exit 1
|
|
9
|
+
fi
|
|
10
|
+
|
|
11
|
+
THREAD_ID=$1
|
|
12
|
+
|
|
13
|
+
gh api graphql -f threadId="$THREAD_ID" -f query='
|
|
14
|
+
mutation ResolveReviewThread($threadId: ID!) {
|
|
15
|
+
resolveReviewThread(input: {threadId: $threadId}) {
|
|
16
|
+
thread {
|
|
17
|
+
id
|
|
18
|
+
isResolved
|
|
19
|
+
path
|
|
20
|
+
line
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}'
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: setup
|
|
3
|
+
description: Configure which review agents run for your project. Auto-detects stack and writes systematic.local.md.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Systematic Setup
|
|
8
|
+
|
|
9
|
+
Interactive setup for `systematic.local.md` — configures which agents run during `/workflows:review` and `/workflows:work`.
|
|
10
|
+
|
|
11
|
+
## Step 1: Check Existing Config
|
|
12
|
+
|
|
13
|
+
Read `systematic.local.md` in the project root. If it exists, display current settings summary and use question:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
question: "Settings file already exists. What would you like to do?"
|
|
17
|
+
header: "Config"
|
|
18
|
+
options:
|
|
19
|
+
- label: "Reconfigure"
|
|
20
|
+
description: "Run the interactive setup again from scratch"
|
|
21
|
+
- label: "View current"
|
|
22
|
+
description: "Show the file contents, then stop"
|
|
23
|
+
- label: "Cancel"
|
|
24
|
+
description: "Keep current settings"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If "View current": read and display the file, then stop.
|
|
28
|
+
If "Cancel": stop.
|
|
29
|
+
|
|
30
|
+
## Step 2: Detect and Ask
|
|
31
|
+
|
|
32
|
+
Auto-detect the project stack:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
test -f Gemfile && test -f config/routes.rb && echo "rails" || \
|
|
36
|
+
test -f Gemfile && echo "ruby" || \
|
|
37
|
+
test -f tsconfig.json && echo "typescript" || \
|
|
38
|
+
test -f package.json && echo "javascript" || \
|
|
39
|
+
test -f pyproject.toml && echo "python" || \
|
|
40
|
+
test -f requirements.txt && echo "python" || \
|
|
41
|
+
echo "general"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Use question:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
question: "Detected {type} project. How would you like to configure?"
|
|
48
|
+
header: "Setup"
|
|
49
|
+
options:
|
|
50
|
+
- label: "Auto-configure (Recommended)"
|
|
51
|
+
description: "Use smart defaults for {type}. Done in one click."
|
|
52
|
+
- label: "Customize"
|
|
53
|
+
description: "Choose stack, focus areas, and review depth."
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### If Auto-configure → Skip to Step 4 with defaults
|
|
57
|
+
|
|
58
|
+
- **Rails:** `[kieran-rails-reviewer, dhh-rails-reviewer, code-simplicity-reviewer, security-sentinel, performance-oracle]`
|
|
59
|
+
- **Python:** `[kieran-python-reviewer, code-simplicity-reviewer, security-sentinel, performance-oracle]`
|
|
60
|
+
- **TypeScript:** `[kieran-typescript-reviewer, code-simplicity-reviewer, security-sentinel, performance-oracle]`
|
|
61
|
+
- **General:** `[code-simplicity-reviewer, security-sentinel, performance-oracle, architecture-strategist]`
|
|
62
|
+
|
|
63
|
+
### If Customize → Step 3
|
|
64
|
+
|
|
65
|
+
## Step 3: Customize (3 questions)
|
|
66
|
+
|
|
67
|
+
**a. Stack** — confirm or override:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
question: "Which stack should we optimize for?"
|
|
71
|
+
header: "Stack"
|
|
72
|
+
options:
|
|
73
|
+
- label: "{detected_type} (Recommended)"
|
|
74
|
+
description: "Auto-detected from project files"
|
|
75
|
+
- label: "Rails"
|
|
76
|
+
description: "Ruby on Rails — adds DHH-style and Rails-specific reviewers"
|
|
77
|
+
- label: "Python"
|
|
78
|
+
description: "Python — adds Pythonic pattern reviewer"
|
|
79
|
+
- label: "TypeScript"
|
|
80
|
+
description: "TypeScript — adds type safety reviewer"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Only show options that differ from the detected type.
|
|
84
|
+
|
|
85
|
+
**b. Focus areas** — multiSelect:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
question: "Which review areas matter most?"
|
|
89
|
+
header: "Focus"
|
|
90
|
+
multiSelect: true
|
|
91
|
+
options:
|
|
92
|
+
- label: "Security"
|
|
93
|
+
description: "Vulnerability scanning, auth, input validation (security-sentinel)"
|
|
94
|
+
- label: "Performance"
|
|
95
|
+
description: "N+1 queries, memory leaks, complexity (performance-oracle)"
|
|
96
|
+
- label: "Architecture"
|
|
97
|
+
description: "Design patterns, SOLID, separation of concerns (architecture-strategist)"
|
|
98
|
+
- label: "Code simplicity"
|
|
99
|
+
description: "Over-engineering, YAGNI violations (code-simplicity-reviewer)"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**c. Depth:**
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
question: "How thorough should reviews be?"
|
|
106
|
+
header: "Depth"
|
|
107
|
+
options:
|
|
108
|
+
- label: "Thorough (Recommended)"
|
|
109
|
+
description: "Stack reviewers + all selected focus agents."
|
|
110
|
+
- label: "Fast"
|
|
111
|
+
description: "Stack reviewers + code simplicity only. Less context, quicker."
|
|
112
|
+
- label: "Comprehensive"
|
|
113
|
+
description: "All above + git history, data integrity, agent-native checks."
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Step 4: Build Agent List and Write File
|
|
117
|
+
|
|
118
|
+
**Stack-specific agents:**
|
|
119
|
+
- Rails → `kieran-rails-reviewer, dhh-rails-reviewer`
|
|
120
|
+
- Python → `kieran-python-reviewer`
|
|
121
|
+
- TypeScript → `kieran-typescript-reviewer`
|
|
122
|
+
- General → (none)
|
|
123
|
+
|
|
124
|
+
**Focus area agents:**
|
|
125
|
+
- Security → `security-sentinel`
|
|
126
|
+
- Performance → `performance-oracle`
|
|
127
|
+
- Architecture → `architecture-strategist`
|
|
128
|
+
- Code simplicity → `code-simplicity-reviewer`
|
|
129
|
+
|
|
130
|
+
**Depth:**
|
|
131
|
+
- Thorough: stack + selected focus areas
|
|
132
|
+
- Fast: stack + `code-simplicity-reviewer` only
|
|
133
|
+
- Comprehensive: all above + `git-history-analyzer, data-integrity-guardian, agent-native-reviewer`
|
|
134
|
+
|
|
135
|
+
**Plan review agents:** stack-specific reviewer + `code-simplicity-reviewer`.
|
|
136
|
+
|
|
137
|
+
Write `systematic.local.md`:
|
|
138
|
+
|
|
139
|
+
```markdown
|
|
140
|
+
---
|
|
141
|
+
review_agents: [{computed agent list}]
|
|
142
|
+
plan_review_agents: [{computed plan agent list}]
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
# Review Context
|
|
146
|
+
|
|
147
|
+
Add project-specific review instructions here.
|
|
148
|
+
These notes are passed to all review agents during /workflows:review and /workflows:work.
|
|
149
|
+
|
|
150
|
+
Examples:
|
|
151
|
+
- "We use Turbo Frames heavily — check for frame-busting issues"
|
|
152
|
+
- "Our API is public — extra scrutiny on input validation"
|
|
153
|
+
- "Performance-critical: we serve 10k req/s on this endpoint"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Step 5: Confirm
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
Saved to systematic.local.md
|
|
160
|
+
|
|
161
|
+
Stack: {type}
|
|
162
|
+
Review depth: {depth}
|
|
163
|
+
Agents: {count} configured
|
|
164
|
+
{agent list, one per line}
|
|
165
|
+
|
|
166
|
+
Tip: Edit the "Review Context" section to add project-specific instructions.
|
|
167
|
+
Re-run this setup anytime to reconfigure.
|
|
168
|
+
```
|