@haus-tech/haus-workflow 0.16.0 → 0.16.2
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.16.2](https://github.com/WeAreHausTech/haus-workflow/compare/v0.16.1...v0.16.2) (2026-06-09)
|
|
4
|
+
|
|
5
|
+
## [0.16.1](https://github.com/WeAreHausTech/haus-workflow/compare/v0.16.0...v0.16.1) (2026-06-09)
|
|
6
|
+
|
|
3
7
|
## [0.16.0](https://github.com/WeAreHausTech/haus-workflow/compare/v0.15.0...v0.16.0) (2026-06-05)
|
|
4
8
|
|
|
5
9
|
### Features
|
package/README.md
CHANGED
|
@@ -29,13 +29,17 @@ and configures the repo for you.
|
|
|
29
29
|
|
|
30
30
|
Once installed, Claude Code gains a `/haus-workflow` slash command.
|
|
31
31
|
|
|
32
|
+
The `project:*` tasks act on the current repo. The unprefixed verbs (`update`,
|
|
33
|
+
`catalog`, `install`, `uninstall`) manage the haus tool itself on your machine
|
|
34
|
+
(`~/.claude` + npm), like `npm install -g`. The short legacy names still work.
|
|
35
|
+
|
|
32
36
|
```
|
|
33
|
-
/haus-workflow
|
|
34
|
-
/haus-workflow init
|
|
35
|
-
/haus-workflow
|
|
36
|
-
/haus-workflow
|
|
37
|
-
/haus-workflow
|
|
38
|
-
/haus-workflow
|
|
37
|
+
/haus-workflow # interactive menu — pick a task
|
|
38
|
+
/haus-workflow project:init # [project] add haus to an EXISTING repo — AI skills, commands, workflow + docs
|
|
39
|
+
/haus-workflow project:refresh # [project] refresh .claude/ and regenerate CLAUDE.md imports
|
|
40
|
+
/haus-workflow project:doctor # [project] health check for drift
|
|
41
|
+
/haus-workflow update # [global] update npm package + catalog + ~/.claude/
|
|
42
|
+
/haus-workflow catalog # [global] fetch only the latest catalog
|
|
39
43
|
```
|
|
40
44
|
|
|
41
45
|
Without an argument, the skill presents a menu so you can pick the task. With an argument, it runs immediately.
|
package/dist/cli.js
CHANGED
|
@@ -3290,45 +3290,10 @@ async function runSetupCore(root, opts) {
|
|
|
3290
3290
|
}
|
|
3291
3291
|
|
|
3292
3292
|
// src/commands/setup-project.ts
|
|
3293
|
-
var GUIDED_QUESTIONS = [
|
|
3294
|
-
"What is this project for?",
|
|
3295
|
-
"Is it for a client, internal Haus work, or experimentation?",
|
|
3296
|
-
"What should Claude help with most?",
|
|
3297
|
-
"Is this project connected to other repositories?",
|
|
3298
|
-
"Are there parts of the project Claude should avoid touching?",
|
|
3299
|
-
"Are there client-specific rules or sensitive areas?",
|
|
3300
|
-
"Do you want a minimal, standard, or strict setup?"
|
|
3301
|
-
];
|
|
3302
3293
|
async function runSetupProject(options) {
|
|
3303
3294
|
const root = process.cwd();
|
|
3304
|
-
let mode = options.guided ? "guided" : "fast";
|
|
3305
|
-
if (!options.guided && !options.fast && !options.json) {
|
|
3306
|
-
log("How do you want to set this project up?");
|
|
3307
|
-
log("1. Guided setup - I'll ask a few simple questions, then scan the project.");
|
|
3308
|
-
log("2. Fast setup - I'll only scan the project and recommend defaults.");
|
|
3309
|
-
const choice = await ask("Choose 1 or 2");
|
|
3310
|
-
mode = choice === "1" ? "guided" : "fast";
|
|
3311
|
-
}
|
|
3312
|
-
if (mode === "guided") {
|
|
3313
|
-
const existing = await readJson(hausPath(root, "setup-answers.json")) ?? {};
|
|
3314
|
-
const merged = {};
|
|
3315
|
-
for (const question of GUIDED_QUESTIONS) {
|
|
3316
|
-
if (options.json) {
|
|
3317
|
-
merged[question] = existing[question] ?? "pending-user-answer";
|
|
3318
|
-
continue;
|
|
3319
|
-
}
|
|
3320
|
-
const prefilled = existing[question];
|
|
3321
|
-
if (prefilled && prefilled !== "pending-user-answer" && prefilled !== "no-answer") {
|
|
3322
|
-
merged[question] = prefilled;
|
|
3323
|
-
continue;
|
|
3324
|
-
}
|
|
3325
|
-
const answer = await ask(question);
|
|
3326
|
-
merged[question] = answer || prefilled || "no-answer";
|
|
3327
|
-
}
|
|
3328
|
-
await writeJson(hausPath(root, "setup-answers.json"), merged);
|
|
3329
|
-
}
|
|
3330
3295
|
await runSetupCore(root, {
|
|
3331
|
-
mode,
|
|
3296
|
+
mode: "fast",
|
|
3332
3297
|
json: options.json,
|
|
3333
3298
|
apply: !options.json,
|
|
3334
3299
|
dryRun: false,
|
|
@@ -4963,7 +4928,7 @@ validateRuntimeNodeVersion();
|
|
|
4963
4928
|
program.name("haus").description("Haus AI workflow CLI").version(cliVersion());
|
|
4964
4929
|
program.command("scan").option("--json").action(runScan);
|
|
4965
4930
|
program.command("recommend").option("--json").action(runRecommend);
|
|
4966
|
-
program.command("setup-project").option("--
|
|
4931
|
+
program.command("setup-project").option("--json").action(runSetupProject);
|
|
4967
4932
|
program.command("doctor").option("--hooks", "Verify .claude/settings.json matches the hook contract").action(runDoctor);
|
|
4968
4933
|
program.command("apply").option("--dry-run").option("--write").option("--select", "Interactively select catalog items before applying").option(
|
|
4969
4934
|
"--allow-empty-cache",
|
|
@@ -4975,7 +4940,7 @@ program.command("apply").option("--dry-run").option("--write").option("--select"
|
|
|
4975
4940
|
program.command("undo").option("-y, --yes", "Skip confirmation").action(runUndo);
|
|
4976
4941
|
program.command("explain-recommendation").option("--json").action(runExplainRecommendation);
|
|
4977
4942
|
program.command("context").option("--task <task>").option("--from-hook").option("--json").option("--verbose").action(runContext);
|
|
4978
|
-
program.command("init").option("--
|
|
4943
|
+
program.command("init").option("--json").action(runInit);
|
|
4979
4944
|
program.command("refresh").action(runRefresh);
|
|
4980
4945
|
program.command("catalog-audit").action(runCatalogAudit);
|
|
4981
4946
|
program.command("validate-catalog").argument("[manifest]").action(runValidateCatalog);
|
|
@@ -4,7 +4,7 @@ commands; they read plain language and approve.
|
|
|
4
4
|
|
|
5
5
|
Do this in order:
|
|
6
6
|
|
|
7
|
-
1. **Detect.** Run `haus setup-project --
|
|
7
|
+
1. **Detect.** Run `haus setup-project --json`. Read the JSON yourself —
|
|
8
8
|
do not show it. Translate what was detected into one or two plain sentences,
|
|
9
9
|
e.g. "This looks like a Next.js website using Yarn. I found unit tests but no
|
|
10
10
|
end-to-end tests." If the detection status is `unknown` or `partial`, say so
|
|
@@ -17,16 +17,21 @@ All-in-one entry point for the Haus AI workflow.
|
|
|
17
17
|
|
|
18
18
|
## Task aliases → commands
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
| `
|
|
29
|
-
| `claude-md`, `regenerate`
|
|
20
|
+
Task names use an asymmetric scope convention. The **project:** namespace marks tasks that
|
|
21
|
+
act on **this repo** (`./.claude`, `./.haus-workflow`) — type `project:` to see them all.
|
|
22
|
+
The unprefixed verbs (`update`, `catalog`, `install`, `uninstall`) act on **this machine's
|
|
23
|
+
haus install** (`~/.claude`, npm) — they manage the haus tool itself, like `npm install -g`.
|
|
24
|
+
The short legacy aliases still work but the names below are canonical.
|
|
25
|
+
|
|
26
|
+
| Task name (legacy aliases) | Command | Scope | What it does |
|
|
27
|
+
| ----------------------------------------------------------------- | ----------------------- | ------- | ------------------------------------------------------------------------------------------- |
|
|
28
|
+
| `project:init` (`setup`, `init`) | _Setup procedure below_ | project | First-time setup of an **existing** repo: adds AI skills, commands, workflow + project docs |
|
|
29
|
+
| `project:refresh` (`apply`, `refresh`, `claude-md`, `regenerate`) | `haus apply --write` | project | Re-run setup / refresh `.claude/` context + regenerate root `CLAUDE.md` import block |
|
|
30
|
+
| `project:doctor` (`doctor`, `check`) | `haus doctor` | project | Check for install drift |
|
|
31
|
+
| `update` (`upgrade`) | `haus update` | global | Update npm package + catalog + `~/.claude/` (also refreshes this project) |
|
|
32
|
+
| `catalog` | `haus update` | global | Fetch latest catalog (same command as update) |
|
|
33
|
+
| `install` (`global`) | `haus install` | global | Seed `~/.claude/` with haus-owned files |
|
|
34
|
+
| `uninstall` | `haus uninstall` | global | Remove all haus global files from `~/.claude/` |
|
|
30
35
|
|
|
31
36
|
## Step 1 — Determine the task
|
|
32
37
|
|
|
@@ -37,16 +42,14 @@ All-in-one entry point for the Haus AI workflow.
|
|
|
37
42
|
```
|
|
38
43
|
Question: "What would you like to do?"
|
|
39
44
|
Options:
|
|
40
|
-
1.
|
|
41
|
-
(
|
|
42
|
-
2.
|
|
45
|
+
1. [project] project:init — add haus to an existing project for the first time
|
|
46
|
+
(AI skills + commands + workflow into a repo you already have, then a deep read to write the CLAUDE.md docs body + docs/)
|
|
47
|
+
2. [project] project:refresh — refresh this project's setup
|
|
43
48
|
(haus apply --write — re-runs setup, regenerates CLAUDE.md imports)
|
|
44
|
-
3.
|
|
49
|
+
3. [global] update — update haus package + catalog + global files
|
|
45
50
|
(haus update — checks npm for new version, fetches catalog, refreshes ~/.claude/)
|
|
46
|
-
4.
|
|
51
|
+
4. [global] catalog — fetch catalog updates only
|
|
47
52
|
(haus update — same command; pulls latest workflow templates and lockfile)
|
|
48
|
-
5. Regenerate CLAUDE.md import block
|
|
49
|
-
(haus apply --write — rewrites the @-import block at the root CLAUDE.md)
|
|
50
53
|
```
|
|
51
54
|
|
|
52
55
|
Map the user's selection to the command from the alias table, then continue to Step 2.
|
|
@@ -55,21 +58,16 @@ Map the user's selection to the command from the alias table, then continue to S
|
|
|
55
58
|
|
|
56
59
|
Run the mapped command via Bash. Quote the exact command you are running before executing it.
|
|
57
60
|
|
|
61
|
+
**Exception — `project:init` (`setup` / `init`):** this maps to a multi-step procedure, not a single command. Do not run a bare `haus init`. Skip to **Setup (`project:init`)** under Step 3 and follow it.
|
|
62
|
+
|
|
58
63
|
## Step 3 — Post-run steps
|
|
59
64
|
|
|
60
65
|
After the command completes, follow the relevant post-run steps below.
|
|
61
66
|
|
|
62
|
-
###
|
|
63
|
-
|
|
64
|
-
1. Open `.haus-workflow/
|
|
65
|
-
2.
|
|
66
|
-
- Test, lint, typecheck, build commands — confirm against `package.json` scripts.
|
|
67
|
-
- Docs paths — check whether `docs/SPEC.md`, `docs/DESIGN.md`, `docs/UX.md` exist.
|
|
68
|
-
- Validation library — check `package.json` dependencies for `zod`, `yup`, `joi`, `valibot`.
|
|
69
|
-
- Pre-commit tool — check for `.husky/`, `lefthook.yml`, `.pre-commit-config.yaml`.
|
|
70
|
-
- Highest-stakes logic — ask the user if unclear.
|
|
71
|
-
3. Fill in every unfilled field. Do not leave placeholders.
|
|
72
|
-
4. Confirm with the user that `workflow-config.md` is complete before proceeding.
|
|
67
|
+
### Setup (`project:init`)
|
|
68
|
+
|
|
69
|
+
1. Open and follow `~/.claude/commands/haus-setup.md` — the installed `haus-setup` command (in some projects also `.claude/commands/haus-setup.md`). Run every step in order. It detects the stack, asks the guided questions, runs `haus apply --write` (scaffolding, skills, commands, rules, docs skill), writes the **project docs** (`CLAUDE.md` body + `docs/`) and `.haus-workflow/deep-context.json`, runs `haus recommend`, applies the newly-matched helpers, and confirms.
|
|
70
|
+
2. Then fill `.haus-workflow/workflow-config.md` — replace every placeholder (`TODO`, `n/a`, empty): test/lint/typecheck/build commands (check `package.json`), docs paths, validation library, pre-commit tool, highest-stakes logic (ask if unclear). Leave none.
|
|
73
71
|
|
|
74
72
|
### After `haus apply --write`
|
|
75
73
|
|