@hopla/claude-setup 1.11.2 → 1.12.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 +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/agents/code-reviewer.md +0 -1
- package/agents/codebase-researcher.md +0 -1
- package/agents/system-reviewer.md +0 -1
- package/cli.js +32 -21
- package/commands/guides/write-skill.md +1 -1
- package/hooks/session-prime.js +8 -8
- package/package.json +1 -1
- package/skills/{hopla-brainstorm → brainstorm}/SKILL.md +1 -1
- package/skills/{hopla-code-review → code-review}/SKILL.md +1 -1
- package/skills/{hopla-debug → debug}/SKILL.md +1 -1
- package/skills/{hopla-execution-report → execution-report}/SKILL.md +1 -2
- package/skills/{hopla-git → git}/SKILL.md +3 -3
- package/skills/{hopla-parallel-dispatch → parallel-dispatch}/SKILL.md +1 -1
- package/skills/{hopla-prime → prime}/SKILL.md +1 -2
- package/skills/{hopla-subagent-execution → subagent-execution}/SKILL.md +1 -1
- package/skills/{hopla-tdd → tdd}/SKILL.md +1 -1
- package/skills/{hopla-verify → verify}/SKILL.md +1 -1
- package/skills/{hopla-worktree → worktree}/SKILL.md +1 -1
- /package/commands/{hopla-code-review-fix.md → code-review-fix.md} +0 -0
- /package/commands/{hopla-create-prd.md → create-prd.md} +0 -0
- /package/commands/{hopla-end-to-end.md → end-to-end.md} +0 -0
- /package/commands/{hopla-execute.md → execute.md} +0 -0
- /package/commands/{hopla-git-commit.md → git-commit.md} +0 -0
- /package/commands/{hopla-git-pr.md → git-pr.md} +0 -0
- /package/commands/{hopla-guide.md → guide.md} +0 -0
- /package/commands/{hopla-init-project.md → init-project.md} +0 -0
- /package/commands/{hopla-plan-feature.md → plan-feature.md} +0 -0
- /package/commands/{hopla-rca.md → rca.md} +0 -0
- /package/commands/{hopla-review-plan.md → review-plan.md} +0 -0
- /package/commands/{hopla-system-review.md → system-review.md} +0 -0
- /package/commands/{hopla-validate.md → validate.md} +0 -0
- /package/skills/{hopla-git → git}/commit.md +0 -0
- /package/skills/{hopla-git → git}/pr.md +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hopla",
|
|
3
3
|
"description": "Agentic coding system for Claude Code: PIV loop (Plan → Implement → Validate), TDD, debugging, brainstorming, subagent execution, and team workflows",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.12.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Hopla Tools",
|
|
7
7
|
"email": "julio@hopla.tools"
|
package/agents/code-reviewer.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-reviewer
|
|
3
3
|
description: "Senior code reviewer agent for thorough code quality analysis. Use this agent to review completed code changes with fresh context, catching issues the implementer might miss."
|
|
4
|
-
model: sonnet
|
|
5
4
|
allowed-tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: codebase-researcher
|
|
3
3
|
description: "Fast codebase exploration agent for research tasks. Use this agent to investigate code, find patterns, map dependencies, or gather context without polluting the main conversation."
|
|
4
|
-
model: haiku
|
|
5
4
|
allowed-tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: system-reviewer
|
|
3
3
|
description: "System review agent that analyzes execution reports against plans to identify process improvements. Use after feature completion to find patterns and improve the development system."
|
|
4
|
-
model: sonnet
|
|
5
4
|
allowed-tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
package/cli.js
CHANGED
|
@@ -74,26 +74,30 @@ async function uninstall() {
|
|
|
74
74
|
log(`\n${BOLD}@hopla/claude-setup${RESET} — Uninstall\n`);
|
|
75
75
|
|
|
76
76
|
const srcEntries = fs.readdirSync(path.join(REPO_ROOT, "commands"));
|
|
77
|
-
const srcFiles = srcEntries.filter((f) =>
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
const srcFiles = srcEntries.filter((f) => {
|
|
78
|
+
if (f.startsWith(".")) return false;
|
|
79
|
+
return fs.statSync(path.join(REPO_ROOT, "commands", f)).isFile();
|
|
80
|
+
});
|
|
80
81
|
const srcDirs = srcEntries.filter((f) =>
|
|
81
82
|
fs.statSync(path.join(REPO_ROOT, "commands", f)).isDirectory()
|
|
82
83
|
);
|
|
83
84
|
|
|
85
|
+
// Map source files to their installed names (with hopla- prefix)
|
|
86
|
+
const installedNames = new Set(srcFiles.map((f) => withPrefix(f)));
|
|
87
|
+
|
|
84
88
|
// Also include any hopla-* files in ~/.claude/commands/ not in current source
|
|
85
89
|
// (leftovers from previous versions)
|
|
86
90
|
const installedHoplaFiles = fs.existsSync(COMMANDS_DIR)
|
|
87
91
|
? fs.readdirSync(COMMANDS_DIR).filter((f) =>
|
|
88
|
-
f.startsWith("hopla-") && fs.statSync(path.join(COMMANDS_DIR, f)).isFile() && !
|
|
92
|
+
f.startsWith("hopla-") && fs.statSync(path.join(COMMANDS_DIR, f)).isFile() && !installedNames.has(f)
|
|
89
93
|
)
|
|
90
94
|
: [];
|
|
91
95
|
|
|
92
96
|
const itemsToRemove = [
|
|
93
97
|
{ dest: path.join(CLAUDE_DIR, "CLAUDE.md"), label: "~/.claude/CLAUDE.md", isDir: false },
|
|
94
98
|
...srcFiles.map((file) => ({
|
|
95
|
-
dest: path.join(COMMANDS_DIR, file),
|
|
96
|
-
label: `~/.claude/commands/${file}`,
|
|
99
|
+
dest: path.join(COMMANDS_DIR, withPrefix(file)),
|
|
100
|
+
label: `~/.claude/commands/${withPrefix(file)}`,
|
|
97
101
|
isDir: false,
|
|
98
102
|
})),
|
|
99
103
|
...installedHoplaFiles.map((file) => ({
|
|
@@ -145,7 +149,7 @@ async function uninstall() {
|
|
|
145
149
|
|
|
146
150
|
function removeStaleCommands(currentCommandFiles) {
|
|
147
151
|
if (!fs.existsSync(COMMANDS_DIR)) return;
|
|
148
|
-
const currentSet = new Set(currentCommandFiles);
|
|
152
|
+
const currentSet = new Set(currentCommandFiles.map((f) => withPrefix(f)));
|
|
149
153
|
const removed = [];
|
|
150
154
|
for (const file of fs.readdirSync(COMMANDS_DIR)) {
|
|
151
155
|
const filePath = path.join(COMMANDS_DIR, file);
|
|
@@ -165,15 +169,20 @@ function removeStaleCommands(currentCommandFiles) {
|
|
|
165
169
|
}
|
|
166
170
|
|
|
167
171
|
const PLANNING_COMMANDS = [
|
|
168
|
-
"
|
|
169
|
-
"
|
|
170
|
-
"
|
|
171
|
-
"
|
|
172
|
-
"
|
|
173
|
-
"
|
|
174
|
-
"
|
|
172
|
+
"init-project.md",
|
|
173
|
+
"create-prd.md",
|
|
174
|
+
"plan-feature.md",
|
|
175
|
+
"review-plan.md",
|
|
176
|
+
"git-commit.md",
|
|
177
|
+
"git-pr.md",
|
|
178
|
+
"guide.md",
|
|
175
179
|
];
|
|
176
180
|
|
|
181
|
+
// CLI channel adds hopla- prefix so skills/commands keep their namespace
|
|
182
|
+
function withPrefix(name) {
|
|
183
|
+
return `hopla-${name}`;
|
|
184
|
+
}
|
|
185
|
+
|
|
177
186
|
async function install() {
|
|
178
187
|
const modeLabel = PLANNING ? "Planning Mode (Robert)" : "Full Install";
|
|
179
188
|
log(`\n${BOLD}@hopla/claude-setup${RESET} — Agentic Coding System ${CYAN}[${modeLabel}]${RESET}\n`);
|
|
@@ -209,10 +218,11 @@ async function install() {
|
|
|
209
218
|
|
|
210
219
|
log(`\n${CYAN}Installing commands...${RESET}`);
|
|
211
220
|
for (const file of commandFiles.sort()) {
|
|
221
|
+
const destFile = withPrefix(file);
|
|
212
222
|
await installFile(
|
|
213
223
|
path.join(REPO_ROOT, "commands", file),
|
|
214
|
-
path.join(COMMANDS_DIR,
|
|
215
|
-
`~/.claude/commands/${
|
|
224
|
+
path.join(COMMANDS_DIR, destFile),
|
|
225
|
+
`~/.claude/commands/${destFile}`
|
|
216
226
|
);
|
|
217
227
|
}
|
|
218
228
|
// Install subdirectories (e.g. guides/)
|
|
@@ -231,7 +241,7 @@ async function install() {
|
|
|
231
241
|
|
|
232
242
|
log(`\n${GREEN}${BOLD}Done!${RESET} Commands available in any Claude Code session:\n`);
|
|
233
243
|
for (const file of commandFiles.sort()) {
|
|
234
|
-
const name = file.replace(".md", "");
|
|
244
|
+
const name = withPrefix(file).replace(".md", "");
|
|
235
245
|
log(` ${CYAN}/${name}${RESET}`);
|
|
236
246
|
}
|
|
237
247
|
if (PLANNING) {
|
|
@@ -247,7 +257,7 @@ async function install() {
|
|
|
247
257
|
}
|
|
248
258
|
|
|
249
259
|
// Skills to install in planning mode (subset)
|
|
250
|
-
const PLANNING_SKILLS = ["
|
|
260
|
+
const PLANNING_SKILLS = ["prime", "brainstorm"];
|
|
251
261
|
|
|
252
262
|
async function installSkills() {
|
|
253
263
|
const skillsSrcDir = path.join(REPO_ROOT, "skills");
|
|
@@ -268,20 +278,21 @@ async function installSkills() {
|
|
|
268
278
|
log(`\n${CYAN}Installing skills...${RESET}`);
|
|
269
279
|
for (const skillName of skillsToInstall.sort()) {
|
|
270
280
|
const srcDir = path.join(skillsSrcDir, skillName);
|
|
271
|
-
const
|
|
281
|
+
const destName = withPrefix(skillName);
|
|
282
|
+
const destDir = path.join(SKILLS_DIR, destName);
|
|
272
283
|
fs.mkdirSync(destDir, { recursive: true });
|
|
273
284
|
for (const file of fs.readdirSync(srcDir).sort()) {
|
|
274
285
|
await installFile(
|
|
275
286
|
path.join(srcDir, file),
|
|
276
287
|
path.join(destDir, file),
|
|
277
|
-
`~/.claude/skills/${
|
|
288
|
+
`~/.claude/skills/${destName}/${file}`
|
|
278
289
|
);
|
|
279
290
|
}
|
|
280
291
|
}
|
|
281
292
|
|
|
282
293
|
log(`\n${GREEN}${BOLD}Skills installed!${RESET} Auto-activate without a slash command:\n`);
|
|
283
294
|
for (const skillName of skillsToInstall.sort()) {
|
|
284
|
-
log(` ${CYAN}${skillName}${RESET}`);
|
|
295
|
+
log(` ${CYAN}${withPrefix(skillName)}${RESET}`);
|
|
285
296
|
}
|
|
286
297
|
}
|
|
287
298
|
|
|
@@ -20,7 +20,7 @@ skill-name/
|
|
|
20
20
|
name: skill-name
|
|
21
21
|
description: "100-150 words. Start with what it does, then 'Use when...' + specific triggers. End with 'Do NOT use for...' anti-triggers."
|
|
22
22
|
allowed-tools: Read, Grep, Glob, Bash # Optional: restrict tools
|
|
23
|
-
model
|
|
23
|
+
# Do NOT hardcode `model:` — let skills inherit the user's configured model
|
|
24
24
|
---
|
|
25
25
|
```
|
|
26
26
|
|
package/hooks/session-prime.js
CHANGED
|
@@ -42,14 +42,14 @@ async function main() {
|
|
|
42
42
|
|
|
43
43
|
// Available skills reminder
|
|
44
44
|
lines.push(`📦 HOPLA Skills Available:
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
-
|
|
45
|
+
- prime: Project orientation (trigger: "orient", "get context", "load project")
|
|
46
|
+
- git: Git operations (trigger: "commit", "PR", "push")
|
|
47
|
+
- code-review: Code review (trigger: "review code", "code review")
|
|
48
|
+
- execution-report: Post-implementation docs (trigger: "generate report")
|
|
49
|
+
- verify: Completion verification (trigger: any "done"/"listo"/"finished" claim)
|
|
50
|
+
- brainstorm: Design exploration (trigger: "new feature", "brainstorm", "explore options")
|
|
51
|
+
- debug: Systematic debugging (trigger: "bug", "error", "debug")
|
|
52
|
+
- tdd: Test-driven development (trigger: implementing with tests)
|
|
53
53
|
|
|
54
54
|
⚠️ If a skill applies to the current task, you MUST use it.`);
|
|
55
55
|
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: brainstorm
|
|
3
3
|
description: "Design exploration and brainstorming before planning. Use when the user wants to explore options for a new feature, discuss approaches, design a solution, brainstorm ideas, or evaluate trade-offs. Trigger on: 'new feature', 'brainstorm', 'explore options', 'design', 'how should we', 'what approach', 'trade-offs', 'quiero agregar', 'diseñar', 'explorar opciones'. Do NOT use when the user already has a clear plan or is asking to execute existing work."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: code-review
|
|
3
3
|
description: "Technical code review on changed files. Use when the user says 'review code', 'code review', 'check my code', 'review changes', 'look for bugs', or 'audit code'. Also use after completing implementation when validation passes. Do NOT use for reviewing plans or documents — only code."
|
|
4
4
|
allowed-tools: Read, Grep, Glob, Bash
|
|
5
5
|
---
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: debug
|
|
3
3
|
description: "Systematic debugging methodology for finding and fixing bugs. Use when encountering errors, bugs, failures, unexpected behavior, or when the user says 'bug', 'error', 'not working', 'failing', 'debug', 'fix', 'broken', 'falla', 'no funciona', 'error'. Do NOT use for planned feature work or refactoring — only for diagnosing and fixing unexpected problems."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: execution-report
|
|
3
3
|
description: "Post-implementation documentation generator. Use when the user says 'generate report', 'document what was done', 'execution report', 'what changed', or after a feature implementation is complete and validated. Do NOT use during implementation — only after completion."
|
|
4
4
|
allowed-tools: Read, Grep, Glob, Bash
|
|
5
|
-
model: sonnet
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
> 🌐 **Language:** All user-facing output must match the user's language. Code, paths, and commands stay in English.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: git
|
|
3
3
|
description: "Git operations handler for commits and pull requests. Use when the user mentions 'commit', 'save changes', 'create commit', 'PR', 'pull request', 'push', 'merge request', or any git workflow action. Do NOT use for git status checks or branch management — only for commits and PRs."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -20,7 +20,7 @@ Detect the user's intent and execute the appropriate git workflow.
|
|
|
20
20
|
## File References
|
|
21
21
|
|
|
22
22
|
The full step-by-step instructions for each workflow are in:
|
|
23
|
-
-
|
|
24
|
-
-
|
|
23
|
+
- `commit.md` (in this skill's directory) — conventional commit with Git Flow awareness
|
|
24
|
+
- `pr.md` (in this skill's directory) — GitHub PR creation with structured description
|
|
25
25
|
|
|
26
26
|
Read the relevant file now and follow its instructions completely.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: parallel-dispatch
|
|
3
3
|
description: "Parallel agent dispatch for independent tasks. Use when 2+ tasks have no shared state and can run simultaneously, during brainstorming to explore multiple approaches, or when the user says 'in parallel', 'simultaneously', 'at the same time'. Do NOT use when tasks have dependencies or share state."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: prime
|
|
3
3
|
description: "Project orientation and context loading. Use when starting a session, onboarding to a project, needing to understand the codebase, or when the user says 'orient', 'get context', 'load project', 'what is this project', 'prime', or 'start'. Do NOT use mid-task when the project is already understood."
|
|
4
4
|
allowed-tools: Read, Grep, Glob, Bash
|
|
5
|
-
model: sonnet
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
> 🌐 **Language:** All user-facing output must match the user's language. Code, paths, and commands stay in English.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: subagent-execution
|
|
3
3
|
description: "Subagent-driven execution for large plans. Use when executing plans with 5+ tasks to maintain context quality, when the user says 'use subagents', 'parallel execution', or when context degradation is a concern in long implementations. Do NOT use for small plans (< 5 tasks) or quick fixes."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: tdd
|
|
3
3
|
description: "Test-driven development workflow using the RED-GREEN-REFACTOR cycle. Use when implementing features that require tests, when the plan specifies test tasks, when the user mentions 'TDD', 'test first', 'write tests', or when working on bug fixes that should have regression tests. Do NOT use for documentation, configuration, or tasks where tests don't apply."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: verify
|
|
3
3
|
description: "Verification gate that ensures all completion claims are backed by fresh evidence. Use when the agent is about to declare work as done, finished, complete, ready, or implemented. Also use when hearing 'listo', 'terminé', 'ya está', 'done', 'finished', 'all tests pass', 'everything works', or any completion claim. Do NOT use for intermediate progress updates or partial task completion."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: worktree
|
|
3
3
|
description: "Git worktree management for isolated feature development. Use when starting a new feature that benefits from isolation, when the user says 'worktree', 'isolated branch', 'parallel development', or when implementing multiple features simultaneously. Do NOT use for quick fixes or single-file changes."
|
|
4
4
|
---
|
|
5
5
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|