buildwithjpegg 1.0.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/.claude-plugin/marketplace.json +18 -0
- package/.claude-plugin/plugin.json +12 -0
- package/.codex/INSTALL.md +67 -0
- package/.opencode/INSTALL.md +118 -0
- package/.opencode/plugins/buildwithjpegg.js +95 -0
- package/LICENSE +24 -0
- package/README.md +134 -0
- package/RELEASE-NOTES.md +7 -0
- package/agents/code-reviewer.md +48 -0
- package/commands/evaluate.md +6 -0
- package/commands/run-build.md +6 -0
- package/commands/write-blueprint.md +6 -0
- package/hooks/hooks.json +16 -0
- package/hooks/run-hook.cmd +43 -0
- package/hooks/session-start.sh +46 -0
- package/lib/skills-core.js +208 -0
- package/package.json +39 -0
- package/rules/conventions.md +22 -0
- package/rules/git.md +18 -0
- package/rules/mcp-servers.md +28 -0
- package/rules/platform.md +10 -0
- package/rules/stack.md +29 -0
- package/rules/testing.md +18 -0
- package/rules/ui-ux.md +151 -0
- package/rules/workflow.md +48 -0
- package/skills/auto-release/SKILL.md +176 -0
- package/skills/blueprint/SKILL.md +116 -0
- package/skills/build/SKILL.md +84 -0
- package/skills/ci-loop/SKILL.md +98 -0
- package/skills/craft-skill/SKILL.md +655 -0
- package/skills/craft-skill/anthropic-best-practices.md +1150 -0
- package/skills/craft-skill/examples/CLAUDE_MD_TESTING.md +189 -0
- package/skills/craft-skill/graphviz-conventions.dot +172 -0
- package/skills/craft-skill/persuasion-principles.md +187 -0
- package/skills/craft-skill/render-graphs.js +168 -0
- package/skills/craft-skill/testing-skills-with-subagents.md +384 -0
- package/skills/delegate/SKILL.md +242 -0
- package/skills/delegate/code-quality-reviewer-prompt.md +20 -0
- package/skills/delegate/implementer-prompt.md +78 -0
- package/skills/delegate/spec-reviewer-prompt.md +61 -0
- package/skills/draft-prs/SKILL.md +132 -0
- package/skills/evaluate/SKILL.md +96 -0
- package/skills/fan-out/SKILL.md +180 -0
- package/skills/handle-review/SKILL.md +213 -0
- package/skills/onboard/SKILL.md +95 -0
- package/skills/pr-stack/SKILL.md +112 -0
- package/skills/pre-ship/SKILL.md +139 -0
- package/skills/root-cause/CREATION-LOG.md +119 -0
- package/skills/root-cause/SKILL.md +296 -0
- package/skills/root-cause/condition-based-waiting-example.ts +158 -0
- package/skills/root-cause/condition-based-waiting.md +115 -0
- package/skills/root-cause/defense-in-depth.md +122 -0
- package/skills/root-cause/find-polluter.sh +63 -0
- package/skills/root-cause/root-cause-tracing.md +169 -0
- package/skills/root-cause/test-academic.md +14 -0
- package/skills/root-cause/test-pressure-1.md +58 -0
- package/skills/root-cause/test-pressure-2.md +68 -0
- package/skills/root-cause/test-pressure-3.md +69 -0
- package/skills/seek-review/SKILL.md +105 -0
- package/skills/seek-review/code-reviewer.md +146 -0
- package/skills/test-first/SKILL.md +371 -0
- package/skills/test-first/testing-anti-patterns.md +299 -0
- package/skills/worktree/SKILL.md +218 -0
- package/skills/wrap-up/SKILL.md +200 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "buildwithjpegg",
|
|
3
|
+
"description": "Development workflow skills for Claude Code",
|
|
4
|
+
"owner": {
|
|
5
|
+
"name": "jpegg"
|
|
6
|
+
},
|
|
7
|
+
"plugins": [
|
|
8
|
+
{
|
|
9
|
+
"name": "buildwithjpegg",
|
|
10
|
+
"description": "Development workflow skills for Claude Code: TDD, debugging, collaboration patterns, and proven techniques",
|
|
11
|
+
"version": "1.0.0",
|
|
12
|
+
"source": "./",
|
|
13
|
+
"author": {
|
|
14
|
+
"name": "jpegg"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "buildwithjpegg",
|
|
3
|
+
"description": "Development workflow skills for Claude Code: TDD, debugging, collaboration patterns, and proven techniques",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "jpegg"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://github.com/jpeggdev/buildwithjpegg",
|
|
9
|
+
"repository": "https://github.com/jpeggdev/buildwithjpegg",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"keywords": ["skills", "tdd", "debugging", "collaboration", "best-practices", "workflows"]
|
|
12
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Installing buildwithjpegg for Codex
|
|
2
|
+
|
|
3
|
+
Enable buildwithjpegg skills in Codex via native skill discovery. Just clone and symlink.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Git
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
1. **Clone the buildwithjpegg repository:**
|
|
12
|
+
```bash
|
|
13
|
+
git clone https://github.com/jpeggdev/buildwithjpegg.git ~/.codex/buildwithjpegg
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
2. **Create the skills symlink:**
|
|
17
|
+
```bash
|
|
18
|
+
mkdir -p ~/.agents/skills
|
|
19
|
+
ln -s ~/.codex/buildwithjpegg/skills ~/.agents/skills/buildwithjpegg
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Windows (PowerShell):**
|
|
23
|
+
```powershell
|
|
24
|
+
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.agents\skills"
|
|
25
|
+
cmd /c mklink /J "$env:USERPROFILE\.agents\skills\buildwithjpegg" "$env:USERPROFILE\.codex\buildwithjpegg\skills"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
3. **Restart Codex** (quit and relaunch the CLI) to discover the skills.
|
|
29
|
+
|
|
30
|
+
## Migrating from old bootstrap
|
|
31
|
+
|
|
32
|
+
If you installed buildwithjpegg before native skill discovery, you need to:
|
|
33
|
+
|
|
34
|
+
1. **Update the repo:**
|
|
35
|
+
```bash
|
|
36
|
+
cd ~/.codex/buildwithjpegg && git pull
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
2. **Create the skills symlink** (step 2 above) -- this is the new discovery mechanism.
|
|
40
|
+
|
|
41
|
+
3. **Remove the old bootstrap block** from `~/.codex/AGENTS.md` -- any block referencing `buildwithjpegg bootstrap` is no longer needed.
|
|
42
|
+
|
|
43
|
+
4. **Restart Codex.**
|
|
44
|
+
|
|
45
|
+
## Verify
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
ls -la ~/.agents/skills/buildwithjpegg
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
You should see a symlink (or junction on Windows) pointing to your buildwithjpegg skills directory.
|
|
52
|
+
|
|
53
|
+
## Updating
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
cd ~/.codex/buildwithjpegg && git pull
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Skills update instantly through the symlink.
|
|
60
|
+
|
|
61
|
+
## Uninstalling
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
rm ~/.agents/skills/buildwithjpegg
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Optionally delete the clone: `rm -rf ~/.codex/buildwithjpegg`.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Installing buildwithjpegg for OpenCode
|
|
2
|
+
|
|
3
|
+
## Prerequisites
|
|
4
|
+
|
|
5
|
+
- [OpenCode.ai](https://opencode.ai) installed
|
|
6
|
+
- Git installed
|
|
7
|
+
|
|
8
|
+
## Installation Steps
|
|
9
|
+
|
|
10
|
+
### 1. Clone buildwithjpegg
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
git clone https://github.com/jpeggdev/buildwithjpegg.git ~/.config/opencode/buildwithjpegg
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### 2. Register the Plugin
|
|
17
|
+
|
|
18
|
+
Create a symlink so OpenCode discovers the plugin:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
mkdir -p ~/.config/opencode/plugins
|
|
22
|
+
rm -f ~/.config/opencode/plugins/buildwithjpegg.js
|
|
23
|
+
ln -s ~/.config/opencode/buildwithjpegg/.opencode/plugins/buildwithjpegg.js ~/.config/opencode/plugins/buildwithjpegg.js
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 3. Symlink Skills
|
|
27
|
+
|
|
28
|
+
Create a symlink so OpenCode's native skill tool discovers buildwithjpegg skills:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
mkdir -p ~/.config/opencode/skills
|
|
32
|
+
rm -rf ~/.config/opencode/skills/buildwithjpegg
|
|
33
|
+
ln -s ~/.config/opencode/buildwithjpegg/skills ~/.config/opencode/skills/buildwithjpegg
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 4. Restart OpenCode
|
|
37
|
+
|
|
38
|
+
Restart OpenCode. The plugin will automatically inject buildwithjpegg context.
|
|
39
|
+
|
|
40
|
+
Verify by asking: "do you have buildwithjpegg?"
|
|
41
|
+
|
|
42
|
+
## Usage
|
|
43
|
+
|
|
44
|
+
### Finding Skills
|
|
45
|
+
|
|
46
|
+
Use OpenCode's native `skill` tool to list available skills:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
use skill tool to list skills
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Loading a Skill
|
|
53
|
+
|
|
54
|
+
Use OpenCode's native `skill` tool to load a specific skill:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
use skill tool to load buildwithjpegg/evaluate
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Personal Skills
|
|
61
|
+
|
|
62
|
+
Create your own skills in `~/.config/opencode/skills/`:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
mkdir -p ~/.config/opencode/skills/my-skill
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Create `~/.config/opencode/skills/my-skill/SKILL.md`:
|
|
69
|
+
|
|
70
|
+
```markdown
|
|
71
|
+
---
|
|
72
|
+
name: my-skill
|
|
73
|
+
description: Use when [condition] - [what it does]
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
# My Skill
|
|
77
|
+
|
|
78
|
+
[Your skill content here]
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Project Skills
|
|
82
|
+
|
|
83
|
+
Create project-specific skills in `.opencode/skills/` within your project.
|
|
84
|
+
|
|
85
|
+
**Skill Priority:** Project skills > Personal skills > buildwithjpegg skills
|
|
86
|
+
|
|
87
|
+
## Updating
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
cd ~/.config/opencode/buildwithjpegg
|
|
91
|
+
git pull
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Troubleshooting
|
|
95
|
+
|
|
96
|
+
### Plugin not loading
|
|
97
|
+
|
|
98
|
+
1. Check plugin symlink: `ls -l ~/.config/opencode/plugins/buildwithjpegg.js`
|
|
99
|
+
2. Check source exists: `ls ~/.config/opencode/buildwithjpegg/.opencode/plugins/buildwithjpegg.js`
|
|
100
|
+
3. Check OpenCode logs for errors
|
|
101
|
+
|
|
102
|
+
### Skills not found
|
|
103
|
+
|
|
104
|
+
1. Check skills symlink: `ls -l ~/.config/opencode/skills/buildwithjpegg`
|
|
105
|
+
2. Verify it points to: `~/.config/opencode/buildwithjpegg/skills`
|
|
106
|
+
3. Use `skill` tool to list what's discovered
|
|
107
|
+
|
|
108
|
+
### Tool mapping
|
|
109
|
+
|
|
110
|
+
When skills reference Claude Code tools:
|
|
111
|
+
- `TodoWrite` -> `update_plan`
|
|
112
|
+
- `Task` with subagents -> `@mention` syntax
|
|
113
|
+
- `Skill` tool -> OpenCode's native `skill` tool
|
|
114
|
+
- File operations -> your native tools
|
|
115
|
+
|
|
116
|
+
## Getting Help
|
|
117
|
+
|
|
118
|
+
- Report issues: https://github.com/jpeggdev/buildwithjpegg/issues
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* buildwithjpegg plugin for OpenCode.ai
|
|
3
|
+
*
|
|
4
|
+
* Injects buildwithjpegg bootstrap context via system prompt transform.
|
|
5
|
+
* Skills are discovered via OpenCode's native skill tool from symlinked directory.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
import os from 'os';
|
|
11
|
+
import { fileURLToPath } from 'url';
|
|
12
|
+
|
|
13
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
14
|
+
|
|
15
|
+
// Simple frontmatter extraction (avoid dependency on skills-core for bootstrap)
|
|
16
|
+
const extractAndStripFrontmatter = (content) => {
|
|
17
|
+
const match = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
|
|
18
|
+
if (!match) return { frontmatter: {}, content };
|
|
19
|
+
|
|
20
|
+
const frontmatterStr = match[1];
|
|
21
|
+
const body = match[2];
|
|
22
|
+
const frontmatter = {};
|
|
23
|
+
|
|
24
|
+
for (const line of frontmatterStr.split('\n')) {
|
|
25
|
+
const colonIdx = line.indexOf(':');
|
|
26
|
+
if (colonIdx > 0) {
|
|
27
|
+
const key = line.slice(0, colonIdx).trim();
|
|
28
|
+
const value = line.slice(colonIdx + 1).trim().replace(/^["']|["']$/g, '');
|
|
29
|
+
frontmatter[key] = value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return { frontmatter, content: body };
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// Normalize a path: trim whitespace, expand ~, resolve to absolute
|
|
37
|
+
const normalizePath = (p, homeDir) => {
|
|
38
|
+
if (!p || typeof p !== 'string') return null;
|
|
39
|
+
let normalized = p.trim();
|
|
40
|
+
if (!normalized) return null;
|
|
41
|
+
if (normalized.startsWith('~/')) {
|
|
42
|
+
normalized = path.join(homeDir, normalized.slice(2));
|
|
43
|
+
} else if (normalized === '~') {
|
|
44
|
+
normalized = homeDir;
|
|
45
|
+
}
|
|
46
|
+
return path.resolve(normalized);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export const BuildwithjpeggPlugin = async ({ client, directory }) => {
|
|
50
|
+
const homeDir = os.homedir();
|
|
51
|
+
const pluginSkillsDir = path.resolve(__dirname, '../../skills');
|
|
52
|
+
const envConfigDir = normalizePath(process.env.OPENCODE_CONFIG_DIR, homeDir);
|
|
53
|
+
const configDir = envConfigDir || path.join(homeDir, '.config/opencode');
|
|
54
|
+
|
|
55
|
+
// Helper to generate bootstrap content
|
|
56
|
+
const getBootstrapContent = () => {
|
|
57
|
+
// Try to load onboard skill
|
|
58
|
+
const skillPath = path.join(pluginSkillsDir, 'onboard', 'SKILL.md');
|
|
59
|
+
if (!fs.existsSync(skillPath)) return null;
|
|
60
|
+
|
|
61
|
+
const fullContent = fs.readFileSync(skillPath, 'utf8');
|
|
62
|
+
const { content } = extractAndStripFrontmatter(fullContent);
|
|
63
|
+
|
|
64
|
+
const toolMapping = `**Tool Mapping for OpenCode:**
|
|
65
|
+
When skills reference tools you don't have, substitute OpenCode equivalents:
|
|
66
|
+
- \`TodoWrite\` → \`update_plan\`
|
|
67
|
+
- \`Task\` tool with subagents → Use OpenCode's subagent system (@mention)
|
|
68
|
+
- \`Skill\` tool → OpenCode's native \`skill\` tool
|
|
69
|
+
- \`Read\`, \`Write\`, \`Edit\`, \`Bash\` → Your native tools
|
|
70
|
+
|
|
71
|
+
**Skills location:**
|
|
72
|
+
buildwithjpegg skills are in \`${configDir}/skills/buildwithjpegg/\`
|
|
73
|
+
Use OpenCode's native \`skill\` tool to list and load skills.`;
|
|
74
|
+
|
|
75
|
+
return `<EXTREMELY_IMPORTANT>
|
|
76
|
+
You have buildwithjpegg.
|
|
77
|
+
|
|
78
|
+
**IMPORTANT: The onboard skill content is included below. It is ALREADY LOADED - you are currently following it. Do NOT use the skill tool to load "onboard" again - that would be redundant.**
|
|
79
|
+
|
|
80
|
+
${content}
|
|
81
|
+
|
|
82
|
+
${toolMapping}
|
|
83
|
+
</EXTREMELY_IMPORTANT>`;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
return {
|
|
87
|
+
// Use system prompt transform to inject bootstrap (fixes agent reset bug)
|
|
88
|
+
'experimental.chat.system.transform': async (_input, output) => {
|
|
89
|
+
const bootstrap = getBootstrapContent();
|
|
90
|
+
if (bootstrap) {
|
|
91
|
+
(output.system ||= []).push(bootstrap);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
};
|
package/LICENSE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 jpegg
|
|
4
|
+
|
|
5
|
+
Based on superpowers (https://github.com/obra/superpowers)
|
|
6
|
+
by Jesse Vincent, licensed under the MIT License.
|
|
7
|
+
|
|
8
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
10
|
+
in the Software without restriction, including without limitation the rights
|
|
11
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
13
|
+
furnished to do so, subject to the following conditions:
|
|
14
|
+
|
|
15
|
+
The above copyright notice and this permission notice shall be included in all
|
|
16
|
+
copies or substantial portions of the Software.
|
|
17
|
+
|
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
24
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# buildwithjpegg
|
|
2
|
+
|
|
3
|
+
A complete software development workflow for your coding agents, built on composable skills and automatic invocation.
|
|
4
|
+
|
|
5
|
+
## How it works
|
|
6
|
+
|
|
7
|
+
When you fire up your coding agent, it doesn't just jump into writing code. Instead, it steps back and asks what you're really trying to do.
|
|
8
|
+
|
|
9
|
+
Once it's teased a spec out of the conversation, it shows it to you in chunks short enough to actually read and digest.
|
|
10
|
+
|
|
11
|
+
After you've signed off on the design, your agent puts together an implementation plan that's clear enough for an enthusiastic junior engineer with no project context to follow. It emphasizes true red/green TDD, YAGNI, and DRY.
|
|
12
|
+
|
|
13
|
+
Next, it launches a task delegation process, having agents work through each engineering task, inspecting and reviewing their work, and continuing forward.
|
|
14
|
+
|
|
15
|
+
Because the skills trigger automatically, you don't need to do anything special.
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
**Note:** Installation differs by platform. Claude Code has a built-in plugin system. Codex and OpenCode require manual setup.
|
|
20
|
+
|
|
21
|
+
### Claude Code (via Plugin Marketplace)
|
|
22
|
+
|
|
23
|
+
In Claude Code, register the marketplace first:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
/plugin marketplace add jpeggdev/buildwithjpegg-marketplace
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Then install the plugin:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
/plugin install buildwithjpegg@buildwithjpegg-marketplace
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Verify Installation
|
|
36
|
+
|
|
37
|
+
Start a new session and ask Claude to help with something that would trigger a skill (e.g., "help me plan this feature" or "let's debug this issue"). Claude should automatically invoke the relevant skill.
|
|
38
|
+
|
|
39
|
+
### Codex
|
|
40
|
+
|
|
41
|
+
Tell Codex:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Fetch and follow instructions from https://raw.githubusercontent.com/jpeggdev/buildwithjpegg/refs/heads/main/.codex/INSTALL.md
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Detailed docs:** [.codex/INSTALL.md](.codex/INSTALL.md)
|
|
48
|
+
|
|
49
|
+
### OpenCode
|
|
50
|
+
|
|
51
|
+
Tell OpenCode:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
Fetch and follow instructions from https://raw.githubusercontent.com/jpeggdev/buildwithjpegg/refs/heads/main/.opencode/INSTALL.md
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Detailed docs:** [.opencode/INSTALL.md](.opencode/INSTALL.md)
|
|
58
|
+
|
|
59
|
+
## The Basic Workflow
|
|
60
|
+
|
|
61
|
+
1. **evaluate** - Activates before writing code. Refines rough ideas through questions, explores alternatives, presents design in sections for validation. Saves design document.
|
|
62
|
+
|
|
63
|
+
2. **worktree** - Activates after design approval. Creates isolated workspace on new branch, runs project setup, verifies clean test baseline.
|
|
64
|
+
|
|
65
|
+
3. **blueprint** - Activates with approved design. Breaks work into bite-sized tasks (2-5 minutes each). Every task has exact file paths, complete code, verification steps.
|
|
66
|
+
|
|
67
|
+
4. **delegate** or **build** - Activates with plan. Dispatches fresh subagent per task with two-stage review (spec compliance, then code quality), or executes in batches with human checkpoints.
|
|
68
|
+
|
|
69
|
+
5. **test-first** - Activates during implementation. Enforces RED-GREEN-REFACTOR: write failing test, watch it fail, write minimal code, watch it pass, commit.
|
|
70
|
+
|
|
71
|
+
6. **seek-review** - Activates between tasks. Reviews against plan, reports issues by severity. Critical issues block progress.
|
|
72
|
+
|
|
73
|
+
7. **wrap-up** - Activates when tasks complete. Verifies tests, presents options (merge/PR/keep/discard), cleans up worktree.
|
|
74
|
+
|
|
75
|
+
**The agent checks for relevant skills before any task.** Mandatory workflows, not suggestions.
|
|
76
|
+
|
|
77
|
+
## What's Inside
|
|
78
|
+
|
|
79
|
+
### Skills Library
|
|
80
|
+
|
|
81
|
+
**Testing**
|
|
82
|
+
- **test-first** - RED-GREEN-REFACTOR cycle (includes testing anti-patterns reference)
|
|
83
|
+
|
|
84
|
+
**Debugging**
|
|
85
|
+
- **root-cause** - 4-phase root cause process (includes root-cause-tracing, defense-in-depth, condition-based-waiting techniques)
|
|
86
|
+
- **pre-ship** - Ensure it's actually fixed
|
|
87
|
+
|
|
88
|
+
**Collaboration**
|
|
89
|
+
- **evaluate** - Socratic design refinement
|
|
90
|
+
- **blueprint** - Detailed implementation plans
|
|
91
|
+
- **build** - Batch execution with checkpoints
|
|
92
|
+
- **fan-out** - Concurrent subagent workflows
|
|
93
|
+
- **seek-review** - Pre-review checklist
|
|
94
|
+
- **handle-review** - Responding to feedback
|
|
95
|
+
- **worktree** - Parallel development branches
|
|
96
|
+
- **wrap-up** - Merge/PR decision workflow
|
|
97
|
+
- **delegate** - Fast iteration with two-stage review (spec compliance, then code quality)
|
|
98
|
+
|
|
99
|
+
**CI/CD**
|
|
100
|
+
- **ci-loop** - Monitor CI and automatically fix failures after PR creation
|
|
101
|
+
- **draft-prs** - Manage draft status for stacked PRs
|
|
102
|
+
- **pr-stack** - Track stacked PR state across sessions
|
|
103
|
+
- **auto-release** - Set up semantic versioning and automated releases
|
|
104
|
+
|
|
105
|
+
**Meta**
|
|
106
|
+
- **craft-skill** - Create new skills following best practices (includes testing methodology)
|
|
107
|
+
- **onboard** - Introduction to the skills system
|
|
108
|
+
|
|
109
|
+
## Philosophy
|
|
110
|
+
|
|
111
|
+
- **Test-Driven Development** - Write tests first, always
|
|
112
|
+
- **Systematic over ad-hoc** - Process over guessing
|
|
113
|
+
- **Complexity reduction** - Simplicity as primary goal
|
|
114
|
+
- **Evidence over claims** - Verify before declaring success
|
|
115
|
+
|
|
116
|
+
## Updating
|
|
117
|
+
|
|
118
|
+
Skills update automatically when you update the plugin:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
/plugin update buildwithjpegg
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Acknowledgment
|
|
125
|
+
|
|
126
|
+
buildwithjpegg is based on [superpowers](https://github.com/obra/superpowers) by Jesse Vincent, licensed under the MIT License. See [LICENSE](LICENSE) for details.
|
|
127
|
+
|
|
128
|
+
## License
|
|
129
|
+
|
|
130
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
131
|
+
|
|
132
|
+
## Support
|
|
133
|
+
|
|
134
|
+
- **Issues**: https://github.com/jpeggdev/buildwithjpegg/issues
|
package/RELEASE-NOTES.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-reviewer
|
|
3
|
+
description: |
|
|
4
|
+
Use this agent when a major project step has been completed and needs to be reviewed against the original plan and coding standards. Examples: <example>Context: The user is creating a code-review agent that should be called after a logical chunk of code is written. user: "I've finished implementing the user authentication system as outlined in step 3 of our plan" assistant: "Great work! Now let me use the code-reviewer agent to review the implementation against our plan and coding standards" <commentary>Since a major project step has been completed, use the code-reviewer agent to validate the work against the plan and identify any issues.</commentary></example> <example>Context: User has completed a significant feature implementation. user: "The API endpoints for the task management system are now complete - that covers step 2 from our architecture document" assistant: "Excellent! Let me have the code-reviewer agent examine this implementation to ensure it aligns with our plan and follows best practices" <commentary>A numbered step from the planning document has been completed, so the code-reviewer agent should review the work.</commentary></example>
|
|
5
|
+
model: inherit
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are a Senior Code Reviewer with expertise in software architecture, design patterns, and best practices. Your role is to review completed project steps against original plans and ensure code quality standards are met.
|
|
9
|
+
|
|
10
|
+
When reviewing completed work, you will:
|
|
11
|
+
|
|
12
|
+
1. **Plan Alignment Analysis**:
|
|
13
|
+
- Compare the implementation against the original planning document or step description
|
|
14
|
+
- Identify any deviations from the planned approach, architecture, or requirements
|
|
15
|
+
- Assess whether deviations are justified improvements or problematic departures
|
|
16
|
+
- Verify that all planned functionality has been implemented
|
|
17
|
+
|
|
18
|
+
2. **Code Quality Assessment**:
|
|
19
|
+
- Review code for adherence to established patterns and conventions
|
|
20
|
+
- Check for proper error handling, type safety, and defensive programming
|
|
21
|
+
- Evaluate code organization, naming conventions, and maintainability
|
|
22
|
+
- Assess test coverage and quality of test implementations
|
|
23
|
+
- Look for potential security vulnerabilities or performance issues
|
|
24
|
+
|
|
25
|
+
3. **Architecture and Design Review**:
|
|
26
|
+
- Ensure the implementation follows SOLID principles and established architectural patterns
|
|
27
|
+
- Check for proper separation of concerns and loose coupling
|
|
28
|
+
- Verify that the code integrates well with existing systems
|
|
29
|
+
- Assess scalability and extensibility considerations
|
|
30
|
+
|
|
31
|
+
4. **Documentation and Standards**:
|
|
32
|
+
- Verify that code includes appropriate comments and documentation
|
|
33
|
+
- Check that file headers, function documentation, and inline comments are present and accurate
|
|
34
|
+
- Ensure adherence to project-specific coding standards and conventions
|
|
35
|
+
|
|
36
|
+
5. **Issue Identification and Recommendations**:
|
|
37
|
+
- Clearly categorize issues as: Critical (must fix), Important (should fix), or Suggestions (nice to have)
|
|
38
|
+
- For each issue, provide specific examples and actionable recommendations
|
|
39
|
+
- When you identify plan deviations, explain whether they're problematic or beneficial
|
|
40
|
+
- Suggest specific improvements with code examples when helpful
|
|
41
|
+
|
|
42
|
+
6. **Communication Protocol**:
|
|
43
|
+
- If you find significant deviations from the plan, ask the coding agent to review and confirm the changes
|
|
44
|
+
- If you identify issues with the original plan itself, recommend plan updates
|
|
45
|
+
- For implementation problems, provide clear guidance on fixes needed
|
|
46
|
+
- Always acknowledge what was done well before highlighting issues
|
|
47
|
+
|
|
48
|
+
Your output should be structured, actionable, and focused on helping maintain high code quality while ensuring project goals are met. Be thorough but concise, and always provide constructive feedback that helps improve both the current implementation and future development practices.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores requirements and design before implementation."
|
|
3
|
+
disable-model-invocation: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Invoke the jpegg:evaluate skill and follow it exactly as presented to you
|
package/hooks/hooks.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
: << 'CMDBLOCK'
|
|
2
|
+
@echo off
|
|
3
|
+
REM ============================================================================
|
|
4
|
+
REM DEPRECATED: This polyglot wrapper is no longer used as of Claude Code 2.1.x
|
|
5
|
+
REM ============================================================================
|
|
6
|
+
REM
|
|
7
|
+
REM Claude Code 2.1.x changed the Windows execution model for hooks:
|
|
8
|
+
REM
|
|
9
|
+
REM Before (2.0.x): Hooks ran with shell:true, using the system default shell.
|
|
10
|
+
REM This wrapper provided cross-platform compatibility by
|
|
11
|
+
REM being both a valid .cmd file (Windows) and bash script.
|
|
12
|
+
REM
|
|
13
|
+
REM After (2.1.x): Claude Code now auto-detects .sh files in hook commands
|
|
14
|
+
REM and prepends "bash " on Windows. This broke the wrapper
|
|
15
|
+
REM because the command:
|
|
16
|
+
REM "run-hook.cmd" session-start.sh
|
|
17
|
+
REM became:
|
|
18
|
+
REM bash "run-hook.cmd" session-start.sh
|
|
19
|
+
REM ...and bash cannot execute a .cmd file.
|
|
20
|
+
REM
|
|
21
|
+
REM The fix: hooks.json now calls session-start.sh directly. Claude Code 2.1.x
|
|
22
|
+
REM handles the bash invocation automatically on Windows.
|
|
23
|
+
REM
|
|
24
|
+
REM This file is kept for reference and potential backward compatibility.
|
|
25
|
+
REM ============================================================================
|
|
26
|
+
REM
|
|
27
|
+
REM Original purpose: Polyglot wrapper to run .sh scripts cross-platform
|
|
28
|
+
REM Usage: run-hook.cmd <script-name> [args...]
|
|
29
|
+
REM The script should be in the same directory as this wrapper
|
|
30
|
+
|
|
31
|
+
if "%~1"=="" (
|
|
32
|
+
echo run-hook.cmd: missing script name >&2
|
|
33
|
+
exit /b 1
|
|
34
|
+
)
|
|
35
|
+
"C:\Program Files\Git\bin\bash.exe" -l "%~dp0%~1" %2 %3 %4 %5 %6 %7 %8 %9
|
|
36
|
+
exit /b
|
|
37
|
+
CMDBLOCK
|
|
38
|
+
|
|
39
|
+
# Unix shell runs from here
|
|
40
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
41
|
+
SCRIPT_NAME="$1"
|
|
42
|
+
shift
|
|
43
|
+
"${SCRIPT_DIR}/${SCRIPT_NAME}" "$@"
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# SessionStart hook for buildwithjpegg plugin
|
|
3
|
+
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
# Determine plugin root directory
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
|
|
8
|
+
PLUGIN_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
9
|
+
|
|
10
|
+
# Check if legacy skills directory exists and build warning
|
|
11
|
+
warning_message=""
|
|
12
|
+
legacy_skills_dir="${HOME}/.config/buildwithjpegg/skills"
|
|
13
|
+
if [ -d "$legacy_skills_dir" ]; then
|
|
14
|
+
warning_message="\n\n<important-reminder>IN YOUR FIRST REPLY AFTER SEEING THIS MESSAGE YOU MUST TELL THE USER: **WARNING:** buildwithjpegg now uses Claude Code's skills system. Custom skills in ~/.config/buildwithjpegg/skills will not be read. Move custom skills to ~/.claude/skills instead. To make this message go away, remove ~/.config/buildwithjpegg/skills</important-reminder>"
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# Read onboard content
|
|
18
|
+
onboard_content=$(cat "${PLUGIN_ROOT}/skills/onboard/SKILL.md" 2>&1 || echo "Error reading onboard skill")
|
|
19
|
+
|
|
20
|
+
# Escape string for JSON embedding using bash parameter substitution.
|
|
21
|
+
# Each ${s//old/new} is a single C-level pass - orders of magnitude
|
|
22
|
+
# faster than the character-by-character loop this replaces.
|
|
23
|
+
escape_for_json() {
|
|
24
|
+
local s="$1"
|
|
25
|
+
s="${s//\\/\\\\}"
|
|
26
|
+
s="${s//\"/\\\"}"
|
|
27
|
+
s="${s//$'\n'/\\n}"
|
|
28
|
+
s="${s//$'\r'/\\r}"
|
|
29
|
+
s="${s//$'\t'/\\t}"
|
|
30
|
+
printf '%s' "$s"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
onboard_escaped=$(escape_for_json "$onboard_content")
|
|
34
|
+
warning_escaped=$(escape_for_json "$warning_message")
|
|
35
|
+
|
|
36
|
+
# Output context injection as JSON
|
|
37
|
+
cat <<EOF
|
|
38
|
+
{
|
|
39
|
+
"hookSpecificOutput": {
|
|
40
|
+
"hookEventName": "SessionStart",
|
|
41
|
+
"additionalContext": "<EXTREMELY_IMPORTANT>\nYou have buildwithjpegg.\n\n**Below is the full content of your 'jpegg:onboard' skill - your introduction to using skills. For all other skills, use the 'Skill' tool:**\n\n${onboard_escaped}\n\n${warning_escaped}\n</EXTREMELY_IMPORTANT>"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
EOF
|
|
45
|
+
|
|
46
|
+
exit 0
|