@hopla/claude-setup 1.2.9 → 1.3.1
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/README.md
CHANGED
|
@@ -4,15 +4,29 @@ Hopla team agentic coding system for Claude Code. Installs global rules and comm
|
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
7
|
+
### Full install — for the implementer (Julio)
|
|
8
|
+
|
|
7
9
|
```bash
|
|
8
10
|
npm install -g @hopla/claude-setup
|
|
9
11
|
claude-setup
|
|
10
12
|
```
|
|
11
13
|
|
|
14
|
+
Installs all commands: planning + execution + review.
|
|
15
|
+
|
|
16
|
+
### Planning-only install — for the planner/non-technical role (Robert)
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install -g @hopla/claude-setup
|
|
20
|
+
claude-setup --planning
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Installs only planning commands: `init-project`, `prime`, `create-prd`, `plan-feature`, `review-plan`, `git-commit`, `git-pr`. No execution or review commands. No bash permission prompts during planning.
|
|
24
|
+
|
|
12
25
|
To overwrite existing files without prompting:
|
|
13
26
|
|
|
14
27
|
```bash
|
|
15
28
|
claude-setup --force
|
|
29
|
+
claude-setup --planning --force
|
|
16
30
|
```
|
|
17
31
|
|
|
18
32
|
## Update
|
package/cli.js
CHANGED
|
@@ -7,6 +7,7 @@ import readline from "readline";
|
|
|
7
7
|
|
|
8
8
|
const FORCE = process.argv.includes("--force");
|
|
9
9
|
const UNINSTALL = process.argv.includes("--uninstall");
|
|
10
|
+
const PLANNING = process.argv.includes("--planning");
|
|
10
11
|
const VERSION = process.argv.includes("--version") || process.argv.includes("-v");
|
|
11
12
|
|
|
12
13
|
if (VERSION) {
|
|
@@ -129,8 +130,38 @@ function removeLegacyFiles() {
|
|
|
129
130
|
}
|
|
130
131
|
}
|
|
131
132
|
|
|
133
|
+
const PLANNING_COMMANDS = [
|
|
134
|
+
"hopla-init-project.md",
|
|
135
|
+
"hopla-prime.md",
|
|
136
|
+
"hopla-create-prd.md",
|
|
137
|
+
"hopla-plan-feature.md",
|
|
138
|
+
"hopla-review-plan.md",
|
|
139
|
+
"hopla-git-commit.md",
|
|
140
|
+
"hopla-git-pr.md",
|
|
141
|
+
];
|
|
142
|
+
|
|
143
|
+
function removeExecutionCommands() {
|
|
144
|
+
const planningSet = new Set(PLANNING_COMMANDS);
|
|
145
|
+
const removed = [];
|
|
146
|
+
if (!fs.existsSync(COMMANDS_DIR)) return;
|
|
147
|
+
for (const file of fs.readdirSync(COMMANDS_DIR)) {
|
|
148
|
+
if (file.startsWith("hopla-") && !planningSet.has(file)) {
|
|
149
|
+
fs.rmSync(path.join(COMMANDS_DIR, file));
|
|
150
|
+
removed.push(file);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (removed.length > 0) {
|
|
154
|
+
log(`${CYAN}Removing execution commands (planning mode)...${RESET}`);
|
|
155
|
+
for (const file of removed) {
|
|
156
|
+
log(` ${RED}✕${RESET} Removed: ~/.claude/commands/${file}`);
|
|
157
|
+
}
|
|
158
|
+
log("");
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
132
162
|
async function install() {
|
|
133
|
-
|
|
163
|
+
const modeLabel = PLANNING ? "Planning Mode (Robert)" : "Full Install";
|
|
164
|
+
log(`\n${BOLD}@hopla/claude-setup${RESET} — Agentic Coding System ${CYAN}[${modeLabel}]${RESET}\n`);
|
|
134
165
|
|
|
135
166
|
// Create directories if needed
|
|
136
167
|
fs.mkdirSync(CLAUDE_DIR, { recursive: true });
|
|
@@ -139,6 +170,9 @@ async function install() {
|
|
|
139
170
|
// Remove old non-prefixed commands from previous versions
|
|
140
171
|
removeLegacyFiles();
|
|
141
172
|
|
|
173
|
+
// In planning mode, remove any execution commands left from a previous full install
|
|
174
|
+
if (PLANNING) removeExecutionCommands();
|
|
175
|
+
|
|
142
176
|
log(`${CYAN}Installing global rules...${RESET}`);
|
|
143
177
|
await installFile(
|
|
144
178
|
path.join(FILES_DIR, "CLAUDE.md"),
|
|
@@ -147,7 +181,10 @@ async function install() {
|
|
|
147
181
|
);
|
|
148
182
|
|
|
149
183
|
log(`\n${CYAN}Installing commands...${RESET}`);
|
|
150
|
-
const
|
|
184
|
+
const allCommandFiles = fs.readdirSync(path.join(FILES_DIR, "commands"));
|
|
185
|
+
const commandFiles = PLANNING
|
|
186
|
+
? allCommandFiles.filter((f) => PLANNING_COMMANDS.includes(f))
|
|
187
|
+
: allCommandFiles;
|
|
151
188
|
for (const file of commandFiles.sort()) {
|
|
152
189
|
await installFile(
|
|
153
190
|
path.join(FILES_DIR, "commands", file),
|
|
@@ -161,7 +198,11 @@ async function install() {
|
|
|
161
198
|
const name = file.replace(".md", "");
|
|
162
199
|
log(` ${CYAN}/${name}${RESET}`);
|
|
163
200
|
}
|
|
164
|
-
|
|
201
|
+
if (PLANNING) {
|
|
202
|
+
log(`\n${YELLOW}Planning mode:${RESET} Only planning commands installed. Run without ${BOLD}--planning${RESET} for the full set.\n`);
|
|
203
|
+
} else {
|
|
204
|
+
log(`\nRun with ${BOLD}--force${RESET} to overwrite all files without prompting.\n`);
|
|
205
|
+
}
|
|
165
206
|
|
|
166
207
|
await setupPermissions();
|
|
167
208
|
}
|
|
@@ -74,10 +74,8 @@ Ask one topic at a time and wait for the answer before continuing. Adapt follow-
|
|
|
74
74
|
|
|
75
75
|
First, explore the codebase to understand what's already built:
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
git
|
|
79
|
-
git log --oneline -10
|
|
80
|
-
```
|
|
77
|
+
Use the Glob tool to list project files (pattern: `**/*`, head_limit: 60).
|
|
78
|
+
Run `git log --oneline -10` to understand recent history.
|
|
81
79
|
|
|
82
80
|
Read key files: entry points, main modules, config files, existing tests.
|
|
83
81
|
|
|
@@ -42,9 +42,7 @@ Investigate the areas of the codebase relevant to this feature:
|
|
|
42
42
|
- Find the entry points that will need to be modified or extended
|
|
43
43
|
- Identify potential conflicts or dependencies
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
git ls-files | grep -i <relevant-keyword>
|
|
47
|
-
```
|
|
45
|
+
Use the Grep tool to find relevant files (pattern: relevant keyword, case-insensitive).
|
|
48
46
|
|
|
49
47
|
Read the key files in their entirety — not just the parts that seem relevant.
|
|
50
48
|
|
|
@@ -146,4 +144,4 @@ Before saving the draft, review the plan against these criteria:
|
|
|
146
144
|
|
|
147
145
|
**Finalize:**
|
|
148
146
|
1. Rename `.agents/plans/[feature-name].draft.md` → `.agents/plans/[feature-name].md`
|
|
149
|
-
2. Confirm: "✅ Plan saved to `.agents/plans/[feature-name].md`. Run `/hopla-
|
|
147
|
+
2. Confirm: "✅ Plan saved to `.agents/plans/[feature-name].md`. Run `/hopla-git-commit` to commit it, then share with the team to execute with `/hopla-execute .agents/plans/[feature-name].md`."
|
|
@@ -6,13 +6,13 @@ Get oriented in this project before doing any work.
|
|
|
6
6
|
|
|
7
7
|
## Step 1: Project Structure
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
```
|
|
9
|
+
Use the Glob tool to list project files (up to 60):
|
|
10
|
+
- Pattern: `**/*` with head_limit: 60
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
Use the Glob tool to find key config files:
|
|
13
|
+
- `**/CLAUDE.md`
|
|
14
|
+
- `**/AGENTS.md`
|
|
15
|
+
- `**/README.md`
|
|
16
16
|
|
|
17
17
|
## Step 2: Read Key Files
|
|
18
18
|
|
|
@@ -31,9 +31,8 @@ git status
|
|
|
31
31
|
|
|
32
32
|
## Step 4: Check Pending Work
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
```
|
|
34
|
+
Use the Glob tool to check for pending plans:
|
|
35
|
+
- Pattern: `.agents/plans/*.md`
|
|
37
36
|
|
|
38
37
|
If `.agents/plans/` exists, identify:
|
|
39
38
|
- `.draft.md` files — unfinished drafts waiting for review
|