@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.
Files changed (35) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/agents/code-reviewer.md +0 -1
  4. package/agents/codebase-researcher.md +0 -1
  5. package/agents/system-reviewer.md +0 -1
  6. package/cli.js +32 -21
  7. package/commands/guides/write-skill.md +1 -1
  8. package/hooks/session-prime.js +8 -8
  9. package/package.json +1 -1
  10. package/skills/{hopla-brainstorm → brainstorm}/SKILL.md +1 -1
  11. package/skills/{hopla-code-review → code-review}/SKILL.md +1 -1
  12. package/skills/{hopla-debug → debug}/SKILL.md +1 -1
  13. package/skills/{hopla-execution-report → execution-report}/SKILL.md +1 -2
  14. package/skills/{hopla-git → git}/SKILL.md +3 -3
  15. package/skills/{hopla-parallel-dispatch → parallel-dispatch}/SKILL.md +1 -1
  16. package/skills/{hopla-prime → prime}/SKILL.md +1 -2
  17. package/skills/{hopla-subagent-execution → subagent-execution}/SKILL.md +1 -1
  18. package/skills/{hopla-tdd → tdd}/SKILL.md +1 -1
  19. package/skills/{hopla-verify → verify}/SKILL.md +1 -1
  20. package/skills/{hopla-worktree → worktree}/SKILL.md +1 -1
  21. /package/commands/{hopla-code-review-fix.md → code-review-fix.md} +0 -0
  22. /package/commands/{hopla-create-prd.md → create-prd.md} +0 -0
  23. /package/commands/{hopla-end-to-end.md → end-to-end.md} +0 -0
  24. /package/commands/{hopla-execute.md → execute.md} +0 -0
  25. /package/commands/{hopla-git-commit.md → git-commit.md} +0 -0
  26. /package/commands/{hopla-git-pr.md → git-pr.md} +0 -0
  27. /package/commands/{hopla-guide.md → guide.md} +0 -0
  28. /package/commands/{hopla-init-project.md → init-project.md} +0 -0
  29. /package/commands/{hopla-plan-feature.md → plan-feature.md} +0 -0
  30. /package/commands/{hopla-rca.md → rca.md} +0 -0
  31. /package/commands/{hopla-review-plan.md → review-plan.md} +0 -0
  32. /package/commands/{hopla-system-review.md → system-review.md} +0 -0
  33. /package/commands/{hopla-validate.md → validate.md} +0 -0
  34. /package/skills/{hopla-git → git}/commit.md +0 -0
  35. /package/skills/{hopla-git → git}/pr.md +0 -0
@@ -9,7 +9,7 @@
9
9
  {
10
10
  "name": "hopla",
11
11
  "description": "Agentic coding system: PIV loop, TDD, debugging, brainstorming, subagent execution, and team workflows",
12
- "version": "1.11.2",
12
+ "version": "1.12.0",
13
13
  "source": "./",
14
14
  "author": {
15
15
  "name": "Hopla Tools",
@@ -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.11.2",
4
+ "version": "1.12.0",
5
5
  "author": {
6
6
  "name": "Hopla Tools",
7
7
  "email": "julio@hopla.tools"
@@ -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
- fs.statSync(path.join(REPO_ROOT, "commands", f)).isFile()
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() && !srcFiles.includes(f)
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
- "hopla-init-project.md",
169
- "hopla-create-prd.md",
170
- "hopla-plan-feature.md",
171
- "hopla-review-plan.md",
172
- "hopla-git-commit.md",
173
- "hopla-git-pr.md",
174
- "hopla-guide.md",
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, file),
215
- `~/.claude/commands/${file}`
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 = ["hopla-prime", "hopla-brainstorm"];
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 destDir = path.join(SKILLS_DIR, skillName);
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/${skillName}/${file}`
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: sonnet # Optional: force specific model
23
+ # Do NOT hardcode `model:` let skills inherit the user's configured model
24
24
  ---
25
25
  ```
26
26
 
@@ -42,14 +42,14 @@ async function main() {
42
42
 
43
43
  // Available skills reminder
44
44
  lines.push(`📦 HOPLA Skills Available:
45
- - hopla-prime: Project orientation (trigger: "orient", "get context", "load project")
46
- - hopla-git: Git operations (trigger: "commit", "PR", "push")
47
- - hopla-code-review: Code review (trigger: "review code", "code review")
48
- - hopla-execution-report: Post-implementation docs (trigger: "generate report")
49
- - hopla-verify: Completion verification (trigger: any "done"/"listo"/"finished" claim)
50
- - hopla-brainstorm: Design exploration (trigger: "new feature", "brainstorm", "explore options")
51
- - hopla-debug: Systematic debugging (trigger: "bug", "error", "debug")
52
- - hopla-tdd: Test-driven development (trigger: implementing with tests)
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@hopla/claude-setup",
3
- "version": "1.11.2",
3
+ "version": "1.12.0",
4
4
  "description": "Hopla team agentic coding system for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: hopla-brainstorm
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: hopla-code-review
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: hopla-debug
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: hopla-execution-report
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: hopla-git
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
- - `~/.claude/skills/hopla-git/commit.md` — conventional commit with Git Flow awareness
24
- - `~/.claude/skills/hopla-git/pr.md` — GitHub PR creation with structured description
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: hopla-parallel-dispatch
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: hopla-prime
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: hopla-subagent-execution
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: hopla-tdd
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: hopla-verify
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: hopla-worktree
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