hub-launch 1.18.0 → 1.20.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 (64) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +101 -435
  3. package/dist/commands/{merge.d.ts → approve.d.ts} +2 -2
  4. package/dist/commands/approve.d.ts.map +1 -0
  5. package/dist/commands/{merge.js → approve.js} +4 -4
  6. package/dist/commands/approve.js.map +1 -0
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +10 -27
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/interactive.js +6 -6
  11. package/dist/commands/interactive.js.map +1 -1
  12. package/dist/commands/launch.d.ts +0 -2
  13. package/dist/commands/launch.d.ts.map +1 -1
  14. package/dist/commands/launch.js +1 -16
  15. package/dist/commands/launch.js.map +1 -1
  16. package/dist/commands/schedule.d.ts.map +1 -1
  17. package/dist/commands/schedule.js +5 -20
  18. package/dist/commands/schedule.js.map +1 -1
  19. package/dist/commands/script.d.ts +1 -1
  20. package/dist/commands/script.d.ts.map +1 -1
  21. package/dist/commands/script.js +2 -2
  22. package/dist/commands/script.js.map +1 -1
  23. package/dist/config/command-names.d.ts +1 -1
  24. package/dist/config/command-names.js +1 -1
  25. package/dist/config/command-names.js.map +1 -1
  26. package/dist/index.js +2 -2
  27. package/dist/index.js.map +1 -1
  28. package/dist/scripts/{merge-local.d.ts → approve-local.d.ts} +1 -1
  29. package/dist/scripts/approve-local.d.ts.map +1 -0
  30. package/dist/scripts/{merge-local.js → approve-local.js} +7 -7
  31. package/dist/scripts/approve-local.js.map +1 -0
  32. package/dist/scripts/{merge-remote.d.ts → approve-remote.d.ts} +3 -3
  33. package/dist/scripts/approve-remote.d.ts.map +1 -0
  34. package/dist/scripts/{merge-remote.js → approve-remote.js} +6 -6
  35. package/dist/scripts/approve-remote.js.map +1 -0
  36. package/dist/templates/planning-instructions.md +54 -0
  37. package/dist/templates/proceed-instructions.md +66 -8
  38. package/dist/templates/skills/{hula-merge → hula-approve}/SKILL.md +15 -15
  39. package/dist/templates/skills/hula-confirm/SKILL.md +18 -1
  40. package/dist/templates/skills/hula-create/SKILL.md +1 -1
  41. package/dist/templates/skills/hula-fix/SKILL.md +2 -2
  42. package/dist/templates/skills/hula-help/SKILL.md +3 -3
  43. package/dist/templates/skills/hula-info/SKILL.md +1 -1
  44. package/dist/templates/skills/hula-launch/SKILL.md +2 -2
  45. package/dist/templates/skills/hula-plan/SKILL.md +21 -12
  46. package/dist/templates/skills/hula-schedule/SKILL.md +1 -1
  47. package/dist/templates/skills/hula-upload/SKILL.md +1 -1
  48. package/dist/templates/skills/hula-verify/SKILL.md +1 -1
  49. package/dist/types/config.schema.d.ts +0 -6
  50. package/dist/types/config.schema.d.ts.map +1 -1
  51. package/dist/types/config.schema.js +0 -3
  52. package/dist/types/config.schema.js.map +1 -1
  53. package/dist/utils/ephemeral-credentials.d.ts +8 -10
  54. package/dist/utils/ephemeral-credentials.d.ts.map +1 -1
  55. package/dist/utils/ephemeral-credentials.js +8 -12
  56. package/dist/utils/ephemeral-credentials.js.map +1 -1
  57. package/package.json +1 -1
  58. package/scripts/postinstall.mjs +1 -1
  59. package/dist/commands/merge.d.ts.map +0 -1
  60. package/dist/commands/merge.js.map +0 -1
  61. package/dist/scripts/merge-local.d.ts.map +0 -1
  62. package/dist/scripts/merge-local.js.map +0 -1
  63. package/dist/scripts/merge-remote.d.ts.map +0 -1
  64. package/dist/scripts/merge-remote.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.20.0] - 2026-08-04
11
+
12
+ ### Added
13
+
14
+ - Added a one-plan-one-PR scope check to plan validation.
15
+ - Made `/hula-plan` output clearer with a summary, folded detail section, optional diagram, and pre-save checklist.
16
+
17
+ ### Changed
18
+
19
+ - Renamed the `hula-merge` Agent Skill to `hula-approve`, updating the CLI command, wrapper scripts, and docs.
20
+
21
+ ### Security
22
+
23
+ - Removed client-side Daytona API key handling.
24
+
25
+ ### Documentation
26
+
27
+ - Updated the plan/approve-first README, notifications guide, and skill descriptions.
28
+
29
+ ## [1.19.0] - 2026-07-29
30
+
31
+ ### Added
32
+
33
+ - Added `--autoLaunch` flag to `/hula-plan`.
34
+
35
+ ### Documentation
36
+
37
+ - Documented the `envVars: "all"` forwarding option everywhere it's surfaced to users (generated config, hooks README).
38
+
10
39
  ## [1.18.0] - 2026-07-28
11
40
 
12
41
  ### Added
package/README.md CHANGED
@@ -1,506 +1,172 @@
1
1
  # hub-launch
2
2
 
3
- > **AI coding without the chaos**
3
+ > **You just plan and approve. AI does the rest.**
4
4
 
5
- AI coding agents write great code — but you're still stuck doing the busywork around them: creating issues, wrangling branches, monitoring runs, and cleaning up afterward. That constant context switching can be anything from disruptive to stressful. Anyone who knows how to code would agree that good development requires focus.
5
+ <p align="center">
6
+ <img src="./docs/assets/plan-approve-cycle.svg" alt="The cycle: you plan, AI implements, tests and opens a PR; you approve, AI merges and ships." width="640"/>
7
+ </p>
6
8
 
7
- hub-launch handles all of that by removing most of the interruptions and only requiring you to perform the critical steps of planning and review. Describe what you want to build, and it creates the GitHub issue, runs Claude Code in an isolated Daytona cloud container, and opens the PR for your review. Nothing touches your local machine or your current branch.
9
+ Describe what you want built. HubLaunch drafts an implementation plan with you,
10
+ validates it until it's self-contained, then implements it in a clean cloud
11
+ sandbox — tests run, PR opened, checked against the plan — and pings you when
12
+ it's your turn. Nothing runs on your machine, and nothing touches your current
13
+ branch.
8
14
 
9
- ```bash
10
- /hula-plan Add password reset support # generates plan, auto-validates
11
- /hula-launch password-reset-support # creates issue, starts AI session
12
- # (Claude Code writes the code, runs tests, pushes branch, opens PR)
13
- /hula-fix # perform any follow-up needed locally in a worktree
14
- /hula-merge # merge, close issue, restore branch
15
- ```
16
-
17
- That's the whole fundamental workflow.
18
-
19
- ## Demo
20
-
21
- <a href="https://www.youtube.com/watch?v=4-YRVB7mQZ8" target="_blank">
22
- <img src="./docs/assets/demo-preview.svg" alt="Watch hub-launch demo on YouTube" width="100%"/>
23
- </a>
24
-
25
- ## Why hub-launch?
26
-
27
- | Without hub-launch | With hub-launch |
28
- | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
29
- | Several steps in the AI cycle, requiring interruptions | complete integration into Github, and many automated validation steps |
30
- | AI agent runs on your machine, taxing your local resources | ralph-like script on a container in a cloud — zero local overhead |
31
- | Coding work and progress clutters your workspace | Each issue runs in its own isolated container — safe and clean |
32
- | frequent switching between tools and sites | Everything orchestrated from your local agent session |
33
-
34
- ## Features
35
-
36
- - 🤖 **AI-Powered Workflow** — plan → launch → verify → merge skills that are run by your agent
37
- - 🔄 **Github Integration** — creating issues, hand-off if needed, generating PRs, merging and cleaning up
38
- - ☁️ **Cloud Container Isolation** — each issue runs in a dedicated cloud container, keeping your branch and environment clean
39
- - **Configurable** — we use a Ralph script which can be extended with custom lifecycle hooks, and you can configure locally several options
40
- - 🖥️ **Client Agnostic** — based on skills that can be adapted to most agent harnesses
41
- - 🔔 **Notifications** - you can configure an endpoint for notifications about progress. For instance, a slack channel.
42
- - 📋 **Logging** - run `hula-info` for progress in the container. Also pushes several documents within each PR showing logging.
43
- - 🧭 **Guided Help** — run `/hula-help` anytime for an interactive walkthrough of setup, the workflow, and any command or skill
44
- - 🖥️ **Dashboard** — track all your active plans at [https://www.hublaunch.site/dashboard](https://www.hublaunch.site/dashboard)
45
- - 🔒 **Safe** - tokens are maintained by you locally in your config file, and on our server securely protected and removed when no longer needed.
46
-
47
- ### The Workflow
48
-
49
- All users follow the same workflow:
50
-
51
- ```
52
- /hula-plan → /hula-launch → /hula-verify → /hula-fix (if needed)
53
- ```
54
-
55
- `/hula-launch` runs a full automated pipeline in a cloud container (Claude Code via Daytona) — it creates the GitHub issue, runs the implementation, executes tests, and opens a PR, all without touching your local machine. `/hula-verify` checks the PR against the plan's acceptance criteria, and `/hula-fix` addresses any gaps. `/hula-merge` merges and cleans up when you're ready.
56
-
57
- Visit [https://www.hublaunch.site](https://www.hublaunch.site) for plans and pricing.
58
-
59
- > ℹ️ Historically, HubLaunch offered a Free tier (`/hula-create`, which assigned issues to GitHub Copilot) alongside a Pro tier. The current workflow unifies on Claude Code via `/hula-launch` for all users. The legacy `/hula-create` command remains available for backward compatibility but is no longer the recommended path.
60
-
61
- ## Quick Start
62
-
63
- ```bash
64
- # 1. Install
65
- npm install -g hub-launch
66
- # or with pnpm
67
- pnpm add -g hub-launch
68
-
69
- # 2. Initialize in your project
70
- cd <your-project>
71
- hula init
72
-
73
- # 3. Use it
74
- hula launch <branch-name> # create the issue and start the AI coding session
75
- hula --help
76
- ```
77
-
78
- ### Upgrading
79
-
80
- After upgrading the CLI:
81
-
82
- ```bash
83
- npm install -g hub-launch@latest # or: pnpm add -g hub-launch
84
- ```
85
-
86
- re-run `hula init` inside each project to refresh the bundled Agent Skills and
87
- config scaffolding (workflow scripts and instruction docs now ship with the
88
- package, so they update automatically with the CLI):
15
+ ## The two commands
89
16
 
90
- ```bash
91
- cd <your-project>
92
- hula init # safe to re-run; preserves your keys and team settings
93
- ```
94
-
95
- The CLI reminds you automatically when a project was initialized with a
96
- different version than the one currently installed.
17
+ Everything happens inside your coding agent (e.g. Claude Code), as slash
18
+ commands. There are only two you need.
97
19
 
98
- ## Core Workflow
20
+ ### 1. Plan
99
21
 
100
- The primary use case is AI-assisted issue development via the hula-project server:
101
-
102
- ```bash
103
- # 1. Plan the feature
104
- # Validation runs automatically in the same session after the plan is saved.
105
- # When validation finishes, the assistant offers to launch right away with a
106
- # default issue name derived from the plan (reply "yes" to launch, or decline
107
- # and run /hula-launch <name> yourself later).
22
+ ```text
108
23
  /hula-plan Add password reset support
109
-
110
- # 2. Upload the plan to origin/main
111
- # (Optional — /hula-launch runs this automatically if skipped)
112
- # The upload auto-retries (fetch + rebase, up to 3 attempts) if origin/main
113
- # advances mid-push; a genuine conflict fails fast with a clear message.
114
- /hula-upload
115
-
116
- # 3. Launch — creates the issue and starts the AI coding session
117
- # Includes /hula-upload automatically, so step 2 can be omitted
118
- /hula-launch password-reset-support
119
-
120
- # 4. (AI coding agent works on the issue, creates a PR automatically)
121
-
122
- # 5. Apply any fixes needed on the PR branch
123
- /hula-fix the email validation is rejecting valid addresses
124
-
125
- # 6. Verify all acceptance criteria are met
126
- /hula-verify
127
-
128
- # 7. Merge and clean up
129
- # Equivalent to merging the PR manually on GitHub
130
- /hula-merge
131
- ```
132
-
133
- > 💡 `/hula-confirm` remains available as a standalone command for re-validating a plan you've edited by hand.
134
-
135
- Or directly via CLI:
136
-
137
- ```bash
138
- hula launch password-reset-support .hublaunch/plans/2026-05-07-17:00-password-reset.md
139
24
  ```
140
25
 
141
- ## Commands
142
-
143
- Top-level commands:
26
+ The plan skill asks clarifying questions, studies your codebase, and writes a
27
+ detailed implementation plan with acceptance criteria. It then validates the
28
+ plan until it stands completely on its own — no hidden chat context — and asks
29
+ one question: **ready to launch?**
144
30
 
145
- | Command | Alias | Description |
146
- | -------------- | ----- | ---------------------------------------------------------------- |
147
- | `hula` | `hl` | Main CLI |
148
- | `hula login` | — | Authenticate with GitHub + hula-project |
149
- | `hula init` | — | Initialize configuration |
150
- | `hula create` | — | Create issue from plan file |
151
- | `hula merge` | — | Merge PR and clean up |
152
- | `hula launch` | — | Trigger AI coding session on hula-project server |
153
- | `hula schedule` | — | Trigger or schedule an execute-action (e.g. `--built-in harden`) |
154
- | `hula script <name>` | — | Run a bundled cross-platform workflow script (used by the Agent Skills) |
155
- | `hula instructions <name>` | — | Print a bundled instruction doc (`planning`, `proceed`, `skill-creation`) |
156
- | `hula session-hook` | — | Claude Code PreToolUse hook that captures launch-session provenance |
31
+ Say yes, and the rest is automatic: a GitHub issue is created, a cloud sandbox
32
+ implements the plan, runs your checks and tests, opens a pull request, and
33
+ verifies the result against the plan — posting a merge-safety score so you know
34
+ what you're looking at before you look.
157
35
 
158
- Run `hula <command> --help` for details, or see the full [Commands Reference](./docs/commands.md).
36
+ Planning something big? One plan is one PR if a plan is really several PRs'
37
+ worth of work, validation says so and offers to split it into a sequence of
38
+ right-sized plans, each independently launched, verified, and approved.
159
39
 
160
- ### Cross-platform, low-footprint tooling
40
+ ### 2. Approve
161
41
 
162
- The workflow scripts and instruction documents that power the Agent Skills ship
163
- **inside the `hula` package** as cross-platform Node — they are no longer copied
164
- into your repo, and they need **no `bash` and no `jq`**, so they run identically
165
- on macOS, Linux, and Windows. `hula init` therefore does not write
166
- `.github/scripts/*.sh` or `.hublaunch/*-instructions.md`.
167
-
168
- Skills invoke them via the global bin:
169
-
170
- ```bash
171
- # Run a bundled workflow script (cross-platform, no bash/jq)
172
- hula script merge-local -- 42 ".hula-worktrees/issue-42" "fix(#42): message"
173
-
174
- # Print a bundled instruction document
175
- hula instructions planning
42
+ ```text
43
+ /hula-approve
176
44
  ```
177
45
 
178
- **Migration:** upgrading from an older version? Existing
179
- `.github/scripts/hula-*.sh` and `.hublaunch/*-instructions.md` keep working, but
180
- are now obsolete and safe to delete — `hula init` prints a reminder listing them
181
- (it never deletes anything).
182
-
183
- **Claude Code commands:** the `/hula-*` commands are available as a Claude Code
184
- plugin so they load globally, so `hula init` no longer writes `.claude/commands/*`
185
- symlinks by default. Prefer repo-local command files instead? Run
186
- `hula init --with-claude-commands`. The committed `.agents/skills/` directory
187
- (read by GitHub Copilot, Cursor, Codex, and 30+ tools) is unchanged.
188
-
189
- ## `hula launch` and Resume
190
-
191
- `hula launch` submits a job to the hula-project server, which runs an AI coding agent (Claude Code) through a fixed 9-step pipeline:
192
-
193
- | Step | Description |
194
- | ---- | ----------------------------------------------------------------------------- |
195
- | 1 | Change to worktree directory (worktree is created before the pipeline starts) |
196
- | 2 | Bug review & fix loop (LLM-based review with iterative fixes) |
197
- | 3 | Commit remaining changes |
198
- | 4 | TypeScript / lint check (`pnpm check`) |
199
- | 5 | Production build (`pnpm build`) |
200
- | 6 | Regression tests |
201
- | 7 | Push branch to origin |
202
- | 8 | Merge latest main |
203
- | 9 | Cleanup & create PR |
204
-
205
- > 💡 After a PR is merged, `hula merge` automatically fast-forwards your **local**
206
- > `main` at the project root to match `origin/main` — no manual `git pull` needed.
207
- > It is non-destructive (fast-forward only) and works even when run from inside a
208
- > worktree; it is skipped safely if local `main` can't fast-forward. When it is
209
- > skipped, `/hula-merge` reports the specific reason and the exact command to fix it.
210
-
211
- #### Troubleshooting `/hula-merge`
212
-
213
- **Q: My local `main` wasn't updated after the merge.**
214
-
215
- The fast-forward is best-effort and is skipped (never failing the merge) when:
216
-
217
- - **Uncommitted changes** at the project root — commit or stash them first:
218
- `git commit -am 'wip'` or `git stash`.
219
- - **On a different branch** — the project root isn't checked out on the default
220
- branch. Switch to it: `git checkout main`.
221
- - **Non-standard git config** — the project root worktree couldn't be located.
222
- Inspect with `git worktree list`.
223
- - **`git pull --ff-only` couldn't fast-forward** (e.g. diverged history or a
224
- network issue). Run it manually: `git pull --ff-only origin main`.
225
-
226
- `/hula-merge` prints the specific reason and remediation in its output, and its
227
- summary shows ⚠️ when the local update was skipped.
228
-
229
- Use `--resume <step>` to re-run from a specific step after a failure, without re-doing earlier steps:
230
-
231
- ```bash
232
- # Resume from step 4 (skips setup, bug review, and commit)
233
- hula launch my-issue .hublaunch/plans/my-plan.md --resume 4
234
-
235
- # Resume from step 7 with fix instructions
236
- hula launch my-issue .hublaunch/plans/my-plan.md --resume 7 --fix "address build warning in src/utils/shell.ts"
237
- ```
46
+ Review the verified PR and approve it. HubLaunch merges, closes the issue,
47
+ cleans up branches and worktrees, and fast-forwards your local `main`. Plan the
48
+ next thing.
238
49
 
239
- > **Note**: `--fix` requires `--resume` and passes instructions to the AI agent for that stage.
50
+ That's the whole loop. Everything between the two commands happens without you.
240
51
 
241
- Use `--test` for a fast end-to-end run: the server runs the full production
242
- pipeline but swaps the real Claude CLI for a mock, so it finishes in milliseconds
243
- without consuming Anthropic credits. **A real GitHub PR is still created**, so
244
- clean it up afterward.
52
+ ## Why it's different
245
53
 
246
- ```bash
247
- hula launch my-branch .hublaunch/plans/my-plan.md --test
248
- ```
54
+ - **Close your laptop** — work runs remotely in a clean sandbox. Nothing to
55
+ install in your project's environment, nothing hogging your machine; the run
56
+ keeps going when you walk away.
57
+ - **Real artifacts, not chat** — every task lands as a GitHub issue, branch,
58
+ and pull request in your repo. Your history reads like engineering, not
59
+ transcripts.
60
+ - **Verified before you see it** — every PR is checked against its plan's
61
+ acceptance criteria and scored before it reaches you. Approving is an
62
+ informed decision.
63
+ - **Interrupted only on purpose** — you're notified when it's your turn — plan
64
+ ready, PR verified — and only then.
249
65
 
250
- ### Stopping or replacing an in-flight task
66
+ ## Setup
251
67
 
252
- Use `--kill-and-relaunch` to cancel the task currently running for a tracking
253
- name and immediately launch a fresh one (stale state is reset server-side):
68
+ Once per machine:
254
69
 
255
70
  ```bash
256
- hula launch feature-auth .hublaunch/plans/2026-07-07-feature-auth.md --kill-and-relaunch
71
+ npm install -g hub-launch # or: pnpm add -g hub-launch
72
+ hula login # authenticate with GitHub + HubLaunch
257
73
  ```
258
74
 
259
- Use `--kill` to just stop the in-flight task without relaunching. It needs
260
- **only the branch name** — no plan path, and it sends no credentials:
75
+ Once per project:
261
76
 
262
77
  ```bash
263
- hula launch feature-auth --kill
264
- ```
265
-
266
- When there is nothing to cancel, `--kill` prints "No active task to cancel…" and
267
- exits 0 (a no-op is a success). `--kill` and `--kill-and-relaunch` are mutually
268
- exclusive, and `--kill` cannot be combined with launch-only flags (`--resume`,
269
- `--fix`, `--test`, `--handoff`, `--regression`).
270
-
271
- If you run a normal `hula launch` while a task is already running for that
272
- tracking name, the behavior depends on the context:
273
-
274
- - **In an interactive terminal**, you're shown recovery options — kill and
275
- relaunch, just stop the running task, resume from a step, or cancel — and the
276
- launch is re-invoked with the flag you pick.
277
- - **Non-interactively** (from the `/hula-launch` skill wrapper, CI, or a pipe),
278
- the server's message (which names the recovery flags) is printed and the
279
- process exits non-zero — no prompt, no hang.
280
-
281
- ### Forwarding environment variables to the container
282
-
283
- Tests that need credentials (a test user login, a third-party API key, etc.) can
284
- have those values forwarded from your local `.env` into the launch container.
285
- Configure this by listing the variable **names** in `envVars` in
286
- `.hublaunch/hublaunch.config.js`:
287
-
288
- ```js
289
- export const config = {
290
- // ...
291
- envVars: ["TEST_USER_EMAIL", "API_KEY"], // names only — values are read from .env
292
- };
78
+ cd <your-project>
79
+ hula init
293
80
  ```
294
81
 
295
- To forward **every** non-reserved variable from `.env` without listing each one,
296
- set `envVars` to the string `"all"`:
297
-
298
- ```js
299
- export const config = {
300
- // ...
301
- envVars: "all", // forward all non-reserved variables found in .env
302
- };
303
- ```
82
+ `hula init` walks you through configuration interactively and installs the
83
+ slash commands (Agent Skills) into your project, so `/hula-plan` and friends are
84
+ available the next time you open your agent. It's safe to re-run any time —
85
+ your keys and team settings are preserved — and you should re-run it after
86
+ upgrading the CLI.
304
87
 
305
- At launch time `hula launch` reads your project's `.env`, picks out exactly those
306
- variables, and includes them in the request to the server. Notes:
88
+ That's the only time you'll meaningfully touch the `hula` CLI: the rest of it
89
+ exists mostly for your agent to call on your behalf.
307
90
 
308
- - **Opt-in** only the names you list are forwarded (or, with `"all"`, every
309
- non-reserved variable in `.env`); nothing is sent by default, so existing
310
- configs are unaffected.
311
- - **Validated early** — if a listed variable is missing from `.env`, or the `.env`
312
- file is absent, `hula launch` fails before submitting the job.
313
- - **Reserved names blocked** — system/internal variables (e.g. `PATH`, `HOME`,
314
- `ANTHROPIC_API_KEY`, `AWS_SECRET_ACCESS_KEY`) cannot be forwarded.
315
- - Only forward variables your tests actually need; treat anything you list as
316
- leaving your machine.
91
+ **Requirements:** Node.js 18, the GitHub CLI (`gh`) authenticated via
92
+ `gh auth login`, and a Claude subscription (Pro or Max) for the sandbox agent.
317
93
 
318
- ### Configuring per-step model & iteration overrides
94
+ ## Notifications
319
95
 
320
- `hula launch` runs your plan through a fixed 9-step server-side pipeline. By
321
- default every step uses the server's built-in model, loop-iteration cap, and
322
- skip behavior. To override those per step for your project, add a `steps` block
323
- to `.hublaunch/hublaunch.config.js` (config-file only — this is a persistent
324
- project setting, not a per-launch flag):
96
+ HubLaunch tells you when it's your turn. Set `updateNotificationUrl` in
97
+ `.hublaunch/hublaunch.config.js` to any webhook a Slack channel works out of
98
+ the box, and Telegram or anything else works through a tiny bridge:
325
99
 
326
100
  ```js
327
101
  export const config = {
328
102
  // ...
329
- steps: {
330
- implementation: { model: "opus" },
331
- lintfix: { model: "haiku", maxIterations: 2 },
332
- regression: { skip: true },
333
- },
103
+ updateNotificationUrl: "https://hooks.slack.com/services/T0/B0/secret",
334
104
  };
335
105
  ```
336
106
 
337
- Each of the 9 keys maps to a pipeline step. All fields are optional; omit a step
338
- (or the whole `steps` block) to keep the server default:
339
-
340
- | Step key | `model` | `maxIterations` | `skip` | Other |
341
- | ---------------- | :-----: | :-------------: | :----: | ----- |
342
- | `implementation` | ✅ | | | |
343
- | `findBugs` | ✅ | ✅ (1–20) | | `diffMaxLines` (≥1), `excludeRegex` (string) |
344
- | `bugfix` | ✅ | | | |
345
- | `lintfix` | ✅ | ✅ (1–20) | | |
346
- | `build` | ✅ | ✅ (1–20) | | |
347
- | `regression` | | | ✅ | |
348
- | `mergeConflict` | ✅ | | | |
349
- | `summary` | ✅ | ✅ (1–20) | | |
350
- | `verify` | ✅ | ✅ (1–20) | ✅ | |
351
-
352
- `model` values are free-form strings passed straight through to the server
353
- (`claude --model <value>`); no allowlist is enforced. Values are validated at
354
- config-load time — an out-of-range `maxIterations`, a non-boolean `skip`, or an
355
- empty `model` string fails immediately with a clear error.
356
-
357
- #### `--skip-regression`
358
-
359
- As a per-launch counterpart to the config `steps.regression.skip`, `hula launch`
360
- accepts a `--skip-regression` flag that force-skips the regression-tests step for
361
- that one invocation (it wins over whatever `steps.regression.skip` is set to in
362
- config):
107
+ You'll get a message when the task starts, when the issue is created, and when
108
+ the PR is ready (with its verification score). See
109
+ [Notifications](./docs/notifications.md) for the payloads, a Telegram setup,
110
+ and ideas for automating your side of the loop with `hula info`.
363
111
 
364
- ```bash
365
- # Skip regression tests for a single launch
366
- hula launch feature-auth .hublaunch/plans/my-plan.md --skip-regression
367
- ```
112
+ ## Other commands
368
113
 
369
- #### Conflict rules (validated locally before any network call)
114
+ You'll rarely need these the two commands above cover the normal loop — but
115
+ they're there when you want them:
370
116
 
371
- Two combinations are rejected client-side — `hula launch` exits `1` immediately
372
- with the same message the server would return, so misconfigurations fail fast:
117
+ | Command | What it's for |
118
+ | ---------------- | ----------------------------------------------------------------------------------- |
119
+ | `/hula-fix` | Fix a gap or bug on the PR branch in an isolated worktree — describe the problem |
120
+ | `/hula-verify` | Full verification report, criterion by criterion (a summary score is auto-posted) |
121
+ | `/hula-info` | Peek at a run: live logs, PR diff, initial summary, lessons |
122
+ | `/hula-launch` | Launch a plan manually (normally offered automatically after `/hula-plan`) |
123
+ | `/hula-confirm` | Re-validate a plan you've edited by hand |
124
+ | `/hula-upload` | Sync a plan to `origin/main` (normally automatic during launch) |
125
+ | `/hula-schedule` | Run or schedule autonomous actions (e.g. a nightly `harden` security audit) |
126
+ | `/hula-help` | Interactive onboarding and reference — walks through setup, the workflow, or any command/skill |
127
+ | `/hula-create` | Legacy: create an issue without launching (the modern flow is `/hula-plan` → launch) |
373
128
 
374
- - **`bugfix.model` `mergeConflict.model`** — both map to the same
375
- `RALPH_BUGFIX_MODEL` env var on the server, so they cannot be set to different
376
- values:
377
- `bugfix.model and mergeConflict.model both map to RALPH_BUGFIX_MODEL and cannot conflict`
378
- - **`regression.skip: true` combined with the legacy `--regression` flag** — one
379
- forces the step off, the other forces it on. This also covers passing both
380
- `--skip-regression` and `--regression`, and a config `steps.regression.skip:
381
- true` combined with a one-off `--regression`:
382
- `regression.skip and the legacy regression flag are contradictory`
129
+ Full details: [Commands Reference](./docs/commands.md) ·
130
+ [Advanced Usage](./docs/advanced.md) (launch pipeline internals, resume,
131
+ test mode, env forwarding, scheduling).
383
132
 
384
- ## `hula schedule`
385
-
386
- `hula schedule` triggers a built-in or custom execute-action (e.g. the `harden` security audit) on the hula-project server, which provisions a sandbox to run it and opens a PR / plan / feedback as the outcome.
387
-
388
- ```bash
389
- # Run the built-in harden action against src/
390
- hula schedule --built-in harden --entry-point src/
391
-
392
- # Run a custom action file
393
- hula schedule --action-path skills/my-action.md
394
-
395
- # Recurring schedule (cron)
396
- hula schedule --built-in harden --entry-point src/ --schedule "0 3 * * *"
397
- ```
398
-
399
- > **Tip**: prefer the `/hula-schedule` agent skill to drive this command from plain
400
- > language — e.g. `/hula-schedule harden src/ every night and open a PR`. It
401
- > translates schedule phrasing into cron and confirms before running.
402
- >
403
- > The skill can also **author an action from a description** and **manage** runs
404
- > and schedules conversationally:
405
- >
406
- > ```text
407
- > # Describe an action — the skill asks questions, writes & publishes the file, then runs it
408
- > /hula-schedule remove unreachable code in src/ every night and open a PR
409
- >
410
- > # Manage
411
- > /hula-schedule list
412
- > /hula-schedule show <runId>
413
- > /hula-schedule run now <scheduleId>
414
- > /hula-schedule cancel <scheduleId> # offers to delete the related action file
415
- > /hula-schedule update <scheduleId> cron to every Monday 9am
416
- > /hula-schedule update the skill file for <scheduleId> to also remove unused imports
417
- > ```
418
- >
419
- > Authored actions are written to `.hublaunch/skills/<YYYY-MM-DD-HH:MM-slug>.md`
420
- > and pushed to `origin/main` via a temporary worktree **before** the run (the
421
- > server reads the file from the default branch at run time).
422
-
423
- Required (provide exactly one):
424
-
425
- - **`--built-in <name>`** — a built-in action name (e.g. `harden`).
426
- - **`--action-path <path>`** — a repo-relative path or `https://` URL to a custom action file.
427
-
428
- Optional flags include `--entry-point <path>`, `--outcome-type <pr|plan|feedback>`, and `--schedule "<cron>"`. Run `hula schedule --help` for the full grouped list and cron examples.
429
-
430
- Defaults and requirements:
431
-
432
- - **Server URL**: defaults to `https://www.hublaunch.site`. Override with `--url <url>` or the `HULA_PROJECT_URL` environment variable.
433
- - **`--outcome-type`**: defaults to `pr`. Valid values are `pr`, `plan`, and `feedback`.
434
- - **GitHub login**: run `hula login` first so your GitHub token is attached to the request automatically (the server requires it). Alternatively, set the `GITHUB_TOKEN` environment variable.
435
- - **Anthropic OAuth token**: an OAuth token (`sk-ant-oat…`) is required — the sandbox needs it as `CLAUDE_CODE_OAUTH_TOKEN`. It is resolved from `--anthropic-key <key>`, then `config.anthropicApiKey` in `.hublaunch/hublaunch.config.js`, then the `ANTHROPIC_API_KEY` environment variable. Get a token at [claude.ai/settings](https://claude.ai/settings) (requires a paid Claude.ai plan — Pro or Max). Standard API keys (`sk-ant-api03-…`) are not accepted.
436
- - **Daytona API key**: required by the server. Resolved from `--daytona-key <key>`, then `config.daytonaApiKey`, then the `DAYTONA_API_KEY` environment variable.
437
-
438
- ## `hula info`
439
-
440
- `hula info <trackingName>` surfaces facts about a tracked plan. Each flag adds a
441
- key to the request:
442
-
443
- | Flag | Meaning |
444
- | ------------------- | -------------------------------------------------------- |
445
- | `--logs` | Full stored run log |
446
- | `--lastLogs` | Last N lines of live output (see `--lines`) |
447
- | `--diff` | PR unified diff (fetched server-side from GitHub) |
448
- | `--initial` | Initial PR body / AI summary |
449
- | `--lessons` | Lessons-learned content |
450
- | `--clientSessionId` | Claude Code session id that launched the plan |
451
- | `--lines <n>` | Trailing line count for `--lastLogs` (default: 100) |
452
- | `-r, --raw` | For a single content key, print raw content to stdout |
133
+ ## Demo
453
134
 
454
- ```bash
455
- hula info my-feature --logs # opens the full run log in the editor
456
- hula info my-feature --lastLogs --lines 50 # opens the last 50 lines of live output
457
- hula info my-feature --diff # opens the PR diff
458
- hula info my-feature --clientSessionId # prints the launching session id (plain)
459
- hula info my-feature --logs --diff # prints a merged JSON object {logs, diff}
460
- hula info my-feature --logs --raw # prints the raw run log to stdout
461
- ```
135
+ <a href="https://www.youtube.com/watch?v=4-YRVB7mQZ8" target="_blank">
136
+ <img src="./docs/assets/demo-preview.svg" alt="Watch hub-launch demo on YouTube" width="100%"/>
137
+ </a>
462
138
 
463
- **Output rules** (let K = number of requested keys):
139
+ > Some command names in the video predate the current flow — the cycle you'll
140
+ > use today is the two-command loop above.
464
141
 
465
- - **K == 1, content key** → the content is formatted, written to a temp file,
466
- and opened in your editor. With `--raw` the raw content is printed to stdout.
467
- - **K == 1, `--clientSessionId`** → the session id (or `null`) is printed plain.
468
- - **K >= 2** → the keys are merged into one JSON object printed to stdout.
142
+ ## Dashboard
469
143
 
470
- Content keys route to `GET /api/v1/info/:planName`; `--clientSessionId` routes to
471
- the status endpoint. `--diff`/`--initial` can be `null` when there is no PR yet.
472
- See the [Commands Reference](./docs/commands.md#hula-info) for details.
144
+ Track all your active plans, runs, and PRs at
145
+ [hublaunch.site/dashboard](https://www.hublaunch.site/dashboard). Visit
146
+ [hublaunch.site](https://www.hublaunch.site) for plans and pricing.
473
147
 
474
148
  ## Documentation
475
149
 
476
- | Document | Description |
477
- | ---------------------------------------- | ------------------------------------------- |
478
- | [Commands Reference](./docs/commands.md) | Every CLI command with options and examples |
150
+ | Document | Description |
151
+ | ------------------------------------------- | ----------------------------------------------- |
152
+ | [Commands Reference](./docs/commands.md) | Every CLI command with options and examples |
153
+ | [Advanced Usage](./docs/advanced.md) | Pipeline internals, resume, env forwarding |
154
+ | [Notifications](./docs/notifications.md) | Slack, Telegram, and automating your responses |
479
155
 
480
156
  The full documentation index is at [docs/README.md](./docs/README.md).
481
157
 
482
- ## Requirements
483
-
484
- - **Node.js** >= 18.0.0
485
- - **pnpm** (or npm)
486
- - **GitHub CLI (`gh`)** >= 2.4.0, authenticated via `gh auth login`
487
- - **Playwright Chromium** — `npx playwright install chromium`
488
-
489
158
  ## Contributing
490
159
 
491
160
  1. Fork and create a feature branch
492
161
  2. Run `pnpm run typecheck`
493
162
  3. Submit a pull request
494
163
 
495
- See the [Commands Reference](./docs/commands.md) for available commands.
496
-
497
164
  ## Links
498
165
 
499
166
  - [HubLaunch Website](https://www.hublaunch.site)
500
167
  - [Dashboard](https://www.hublaunch.site/dashboard)
501
168
  - [GitHub Repository](https://github.com/NoStackApp/hub-launch)
502
169
  - [Issue Tracker](https://github.com/NoStackApp/hub-launch/issues)
503
- - [Documentation](./docs/README.md)
504
170
 
505
171
  ## License
506
172
 
@@ -3,5 +3,5 @@ import type { Config } from "../types/index.js";
3
3
  /**
4
4
  * Merge command - Merge PR, delete branch, remove from tracking
5
5
  */
6
- export declare function mergeCommand(program: Command, config: Config): void;
7
- //# sourceMappingURL=merge.d.ts.map
6
+ export declare function approveCommand(program: Command, config: Config): void;
7
+ //# sourceMappingURL=approve.d.ts.map