@haus-tech/haus-workflow 0.30.0 → 0.31.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/CHANGELOG.md +13 -0
- package/README.md +4 -0
- package/dist/cli.js +483 -244
- package/library/catalog/manifest.json +53 -21
- package/library/catalog/validation-rules.json +1 -1
- package/library/global/commands/haus-clone.md +4 -0
- package/library/global/commands/haus-cloneandsetup.md +4 -0
- package/library/global/commands/haus-doctor.md +4 -0
- package/library/global/commands/haus-fix.md +4 -0
- package/library/global/commands/haus-setup.md +33 -5
- package/library/global/skills/haus-workflow/SKILL.md +30 -0
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "3.0.0",
|
|
3
3
|
"items": [
|
|
4
4
|
{
|
|
5
5
|
"id": "haus.agentic-workflow-standard",
|
|
@@ -619,6 +619,8 @@
|
|
|
619
619
|
"originUrl": "https://github.com/affaan-m/ECC/blob/ec92b528471df708c2384ebbcc82b390b60f535a/skills/laravel-plugin-discovery/SKILL.md",
|
|
620
620
|
"pinnedRef": "ec92b528471df708c2384ebbcc82b390b60f535a",
|
|
621
621
|
"ecosystem": "laravel",
|
|
622
|
+
"optInTier": "ops",
|
|
623
|
+
"optInGroup": "Laravel plugin discovery",
|
|
622
624
|
"requiresAny": [
|
|
623
625
|
{
|
|
624
626
|
"role": "laravel-plugins"
|
|
@@ -753,6 +755,8 @@
|
|
|
753
755
|
"originUrl": "https://github.com/affaan-m/ECC/blob/5b173d2e6c11b976a0f13b2f59125e08956c1d47/agents/performance-optimizer.md",
|
|
754
756
|
"pinnedRef": "5b173d2e6c11b976a0f13b2f59125e08956c1d47",
|
|
755
757
|
"ecosystem": "ecc",
|
|
758
|
+
"optInTier": "review",
|
|
759
|
+
"optInGroup": "Performance review",
|
|
756
760
|
"default": false,
|
|
757
761
|
"requiresAny": [
|
|
758
762
|
{
|
|
@@ -986,6 +990,8 @@
|
|
|
986
990
|
"originUrl": "https://github.com/affaan-m/ECC/blob/5b173d2e6c11b976a0f13b2f59125e08956c1d47/.kiro/agents/refactor-cleaner.md",
|
|
987
991
|
"pinnedRef": "5b173d2e6c11b976a0f13b2f59125e08956c1d47",
|
|
988
992
|
"ecosystem": "ecc",
|
|
993
|
+
"optInTier": "review",
|
|
994
|
+
"optInGroup": "Refactor cleanup",
|
|
989
995
|
"default": false,
|
|
990
996
|
"requiresAny": [
|
|
991
997
|
{
|
|
@@ -1015,6 +1021,8 @@
|
|
|
1015
1021
|
"tags": ["agent", "review", "security"],
|
|
1016
1022
|
"tokenEstimate": 1369,
|
|
1017
1023
|
"ecosystem": "security",
|
|
1024
|
+
"optInTier": "review",
|
|
1025
|
+
"optInGroup": "Security review",
|
|
1018
1026
|
"originUrl": "https://github.com/affaan-m/ECC/blob/ec92b528471df708c2384ebbcc82b390b60f535a/agents/security-reviewer.md",
|
|
1019
1027
|
"requiresAny": [
|
|
1020
1028
|
{
|
|
@@ -1042,7 +1050,7 @@
|
|
|
1042
1050
|
"title": "TypeScript Reviewer",
|
|
1043
1051
|
"purpose": "Expert TypeScript/JavaScript code reviewer specializing in type safety, async correctness, Node/web security, and idiomatic patterns. Use for all TypeScript and JavaScript code changes. MUST BE USED for TypeScript/JavaScript projects.",
|
|
1044
1052
|
"whenToUse": "Expert TypeScript/JavaScript code reviewer specializing in type safety, async correctness, Node/web security, and idiomatic patterns. Use for all TypeScript and JavaScript code changes. MUST BE USED for TypeScript/JavaScript projects.",
|
|
1045
|
-
"tags": ["agent", "review", "
|
|
1053
|
+
"tags": ["agent", "review", "typescript"],
|
|
1046
1054
|
"tokenEstimate": 2270,
|
|
1047
1055
|
"ecosystem": "typescript",
|
|
1048
1056
|
"originUrl": "https://github.com/affaan-m/ECC/blob/ec92b528471df708c2384ebbcc82b390b60f535a/agents/typescript-reviewer.md",
|
|
@@ -1324,18 +1332,18 @@
|
|
|
1324
1332
|
"riskLevel": "medium"
|
|
1325
1333
|
},
|
|
1326
1334
|
{
|
|
1327
|
-
"id": "haus.
|
|
1328
|
-
"version": "1.0
|
|
1335
|
+
"id": "haus.nx-monorepo-patterns",
|
|
1336
|
+
"version": "1.1.0",
|
|
1329
1337
|
"source": "haus",
|
|
1330
1338
|
"type": "skill",
|
|
1331
|
-
"path": "skills/haus-owned/stack-patterns/
|
|
1332
|
-
"title": "Haus Nx
|
|
1339
|
+
"path": "skills/haus-owned/stack-patterns/nx-monorepo-patterns",
|
|
1340
|
+
"title": "Haus Nx monorepo patterns",
|
|
1333
1341
|
"purpose": "Guide Nx project graph, target pipeline, and workspace boundaries.",
|
|
1334
1342
|
"whenToUse": "Use for Nx workspace graph, target, and generator configuration updates.",
|
|
1335
1343
|
"whenNotToUse": "Do not use for app-only feature edits without workspace impact.",
|
|
1336
1344
|
"references": ["https://nx.dev/llms.txt"],
|
|
1337
1345
|
"tokenBudget": 1200,
|
|
1338
|
-
"tags": ["
|
|
1346
|
+
"tags": ["nx", "yarn4"],
|
|
1339
1347
|
"repoRoles": ["nx-monorepo"],
|
|
1340
1348
|
"requiresAny": [
|
|
1341
1349
|
{
|
|
@@ -1374,6 +1382,8 @@
|
|
|
1374
1382
|
"originUrl": "https://github.com/yeachan-heo/oh-my-claudecode/blob/50f6ff05eb5d9ebed66f05d8c4580c0b119f37af/agents/designer.md",
|
|
1375
1383
|
"pinnedRef": "50f6ff05eb5d9ebed66f05d8c4580c0b119f37af",
|
|
1376
1384
|
"ecosystem": "oh-my-claudecode",
|
|
1385
|
+
"optInTier": "design",
|
|
1386
|
+
"optInGroup": "UI design",
|
|
1377
1387
|
"default": false,
|
|
1378
1388
|
"requiresAny": [
|
|
1379
1389
|
{
|
|
@@ -1437,6 +1447,8 @@
|
|
|
1437
1447
|
"originUrl": "https://github.com/yeachan-heo/oh-my-claudecode/blob/50f6ff05eb5d9ebed66f05d8c4580c0b119f37af/agents/tracer.md",
|
|
1438
1448
|
"pinnedRef": "50f6ff05eb5d9ebed66f05d8c4580c0b119f37af",
|
|
1439
1449
|
"ecosystem": "oh-my-claudecode",
|
|
1450
|
+
"optInTier": "review",
|
|
1451
|
+
"optInGroup": "Incident tracing",
|
|
1440
1452
|
"default": false,
|
|
1441
1453
|
"requiresAny": [
|
|
1442
1454
|
{
|
|
@@ -1609,6 +1621,8 @@
|
|
|
1609
1621
|
"originUrl": "https://github.com/redis/agent-skills/blob/5ca2e1a2d82a768221e8f71a02e3ca095a37d38e/skills/redis-observability/SKILL.md",
|
|
1610
1622
|
"pinnedRef": "5ca2e1a2d82a768221e8f71a02e3ca095a37d38e",
|
|
1611
1623
|
"ecosystem": "redis",
|
|
1624
|
+
"optInTier": "ops",
|
|
1625
|
+
"optInGroup": "Redis security & observability",
|
|
1612
1626
|
"requiresAny": [
|
|
1613
1627
|
{
|
|
1614
1628
|
"role": "redis-ops"
|
|
@@ -1639,6 +1653,8 @@
|
|
|
1639
1653
|
"originUrl": "https://github.com/redis/agent-skills/blob/5ca2e1a2d82a768221e8f71a02e3ca095a37d38e/skills/redis-security/SKILL.md",
|
|
1640
1654
|
"pinnedRef": "5ca2e1a2d82a768221e8f71a02e3ca095a37d38e",
|
|
1641
1655
|
"ecosystem": "redis",
|
|
1656
|
+
"optInTier": "ops",
|
|
1657
|
+
"optInGroup": "Redis security & observability",
|
|
1642
1658
|
"requiresAny": [
|
|
1643
1659
|
{
|
|
1644
1660
|
"role": "redis-ops"
|
|
@@ -1714,7 +1730,7 @@
|
|
|
1714
1730
|
},
|
|
1715
1731
|
{
|
|
1716
1732
|
"id": "haus.sentry-sentry-nextjs-sdk",
|
|
1717
|
-
"version": "1.0.
|
|
1733
|
+
"version": "1.0.1",
|
|
1718
1734
|
"source": "curated",
|
|
1719
1735
|
"type": "skill",
|
|
1720
1736
|
"path": "skills/sentry/sentry-nextjs-sdk",
|
|
@@ -1724,7 +1740,7 @@
|
|
|
1724
1740
|
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
1725
1741
|
"tags": ["workflow", "sentry", "nextjs", "observability"],
|
|
1726
1742
|
"repoRoles": [],
|
|
1727
|
-
"tokenEstimate":
|
|
1743
|
+
"tokenEstimate": 4544,
|
|
1728
1744
|
"installMode": "copy-selected",
|
|
1729
1745
|
"default": false,
|
|
1730
1746
|
"reviewStatus": "approved",
|
|
@@ -1733,8 +1749,8 @@
|
|
|
1733
1749
|
"license": "MIT",
|
|
1734
1750
|
"licenseConfidence": "high",
|
|
1735
1751
|
"originSourceId": "getsentry-sentry-for-ai",
|
|
1736
|
-
"originUrl": "https://github.com/getsentry/sentry-for-ai/blob/
|
|
1737
|
-
"pinnedRef": "
|
|
1752
|
+
"originUrl": "https://github.com/getsentry/sentry-for-ai/blob/bd84576db74e3e1d13361c7eda3bb303ae017b90/skills/sentry-nextjs-sdk/SKILL.md",
|
|
1753
|
+
"pinnedRef": "bd84576db74e3e1d13361c7eda3bb303ae017b90",
|
|
1738
1754
|
"ecosystem": "sentry",
|
|
1739
1755
|
"requiresAny": [
|
|
1740
1756
|
{
|
|
@@ -1747,7 +1763,7 @@
|
|
|
1747
1763
|
},
|
|
1748
1764
|
{
|
|
1749
1765
|
"id": "haus.sentry-sentry-node-sdk",
|
|
1750
|
-
"version": "1.0.
|
|
1766
|
+
"version": "1.0.1",
|
|
1751
1767
|
"source": "curated",
|
|
1752
1768
|
"type": "skill",
|
|
1753
1769
|
"path": "skills/sentry/sentry-node-sdk",
|
|
@@ -1757,7 +1773,7 @@
|
|
|
1757
1773
|
"whenNotToUse": "Prefer sentry-nestjs-sdk for NestJS apps using @sentry/nestjs.",
|
|
1758
1774
|
"tags": ["workflow", "sentry", "backend", "observability"],
|
|
1759
1775
|
"repoRoles": [],
|
|
1760
|
-
"tokenEstimate":
|
|
1776
|
+
"tokenEstimate": 8087,
|
|
1761
1777
|
"installMode": "copy-selected",
|
|
1762
1778
|
"default": false,
|
|
1763
1779
|
"reviewStatus": "approved",
|
|
@@ -1766,8 +1782,8 @@
|
|
|
1766
1782
|
"license": "MIT",
|
|
1767
1783
|
"licenseConfidence": "high",
|
|
1768
1784
|
"originSourceId": "getsentry-sentry-for-ai",
|
|
1769
|
-
"originUrl": "https://github.com/getsentry/sentry-for-ai/blob/
|
|
1770
|
-
"pinnedRef": "
|
|
1785
|
+
"originUrl": "https://github.com/getsentry/sentry-for-ai/blob/bd84576db74e3e1d13361c7eda3bb303ae017b90/skills/sentry-node-sdk/SKILL.md",
|
|
1786
|
+
"pinnedRef": "bd84576db74e3e1d13361c7eda3bb303ae017b90",
|
|
1771
1787
|
"ecosystem": "sentry",
|
|
1772
1788
|
"requiresAny": [
|
|
1773
1789
|
{
|
|
@@ -2124,6 +2140,8 @@
|
|
|
2124
2140
|
"originSourceId": "superpowers-pcvelz",
|
|
2125
2141
|
"originUrl": "https://github.com/pcvelz/superpowers/tree/bd000c6ec1df53449a74397f55305b22802b9a2b/skills/finishing-a-development-branch",
|
|
2126
2142
|
"ecosystem": "superpowers",
|
|
2143
|
+
"optInTier": "workflow",
|
|
2144
|
+
"optInGroup": "Git worktrees & branch finishing",
|
|
2127
2145
|
"requiresAny": [
|
|
2128
2146
|
{
|
|
2129
2147
|
"role": "branch-completion"
|
|
@@ -2153,6 +2171,8 @@
|
|
|
2153
2171
|
"originSourceId": "superpowers-pcvelz",
|
|
2154
2172
|
"originUrl": "https://github.com/pcvelz/superpowers/tree/bd000c6ec1df53449a74397f55305b22802b9a2b/skills/receiving-code-review",
|
|
2155
2173
|
"ecosystem": "superpowers",
|
|
2174
|
+
"optInTier": "workflow",
|
|
2175
|
+
"optInGroup": "Code review workflow",
|
|
2156
2176
|
"requiresAny": [
|
|
2157
2177
|
{
|
|
2158
2178
|
"role": "code-review"
|
|
@@ -2182,6 +2202,8 @@
|
|
|
2182
2202
|
"originSourceId": "superpowers-pcvelz",
|
|
2183
2203
|
"originUrl": "https://github.com/pcvelz/superpowers/tree/bd000c6ec1df53449a74397f55305b22802b9a2b/skills/requesting-code-review",
|
|
2184
2204
|
"ecosystem": "superpowers",
|
|
2205
|
+
"optInTier": "workflow",
|
|
2206
|
+
"optInGroup": "Code review workflow",
|
|
2185
2207
|
"requiresAny": [
|
|
2186
2208
|
{
|
|
2187
2209
|
"role": "code-review"
|
|
@@ -2211,6 +2233,8 @@
|
|
|
2211
2233
|
"originSourceId": "superpowers-pcvelz",
|
|
2212
2234
|
"originUrl": "https://github.com/pcvelz/superpowers/tree/bd000c6ec1df53449a74397f55305b22802b9a2b/skills/specifying-gates",
|
|
2213
2235
|
"ecosystem": "superpowers",
|
|
2236
|
+
"optInTier": "workflow",
|
|
2237
|
+
"optInGroup": "Quality gates",
|
|
2214
2238
|
"requiresAny": [
|
|
2215
2239
|
{
|
|
2216
2240
|
"role": "user-gate"
|
|
@@ -2240,6 +2264,8 @@
|
|
|
2240
2264
|
"originSourceId": "superpowers-pcvelz",
|
|
2241
2265
|
"originUrl": "https://github.com/pcvelz/superpowers/tree/48f5123e18a1a92dfba962da8dc2509391c821ee/skills/subagent-driven-development",
|
|
2242
2266
|
"ecosystem": "superpowers",
|
|
2267
|
+
"optInTier": "workflow",
|
|
2268
|
+
"optInGroup": "Subagent-driven development",
|
|
2243
2269
|
"pinnedRef": "48f5123e18a1a92dfba962da8dc2509391c821ee",
|
|
2244
2270
|
"requiresAny": [
|
|
2245
2271
|
{
|
|
@@ -2294,6 +2320,8 @@
|
|
|
2294
2320
|
"originSourceId": "superpowers-pcvelz",
|
|
2295
2321
|
"originUrl": "https://github.com/pcvelz/superpowers/tree/bd000c6ec1df53449a74397f55305b22802b9a2b/skills/test-driven-development",
|
|
2296
2322
|
"ecosystem": "superpowers",
|
|
2323
|
+
"optInTier": "workflow",
|
|
2324
|
+
"optInGroup": "TDD workflow",
|
|
2297
2325
|
"requiresAny": [
|
|
2298
2326
|
{
|
|
2299
2327
|
"role": "tdd-workflow"
|
|
@@ -2323,6 +2351,8 @@
|
|
|
2323
2351
|
"originSourceId": "superpowers-pcvelz",
|
|
2324
2352
|
"originUrl": "https://github.com/pcvelz/superpowers/tree/20c0b1ed71cb073c847432fe01379f48c5278a5f/skills/using-git-worktrees",
|
|
2325
2353
|
"ecosystem": "superpowers",
|
|
2354
|
+
"optInTier": "workflow",
|
|
2355
|
+
"optInGroup": "Git worktrees & branch finishing",
|
|
2326
2356
|
"pinnedRef": "20c0b1ed71cb073c847432fe01379f48c5278a5f",
|
|
2327
2357
|
"requiresAny": [
|
|
2328
2358
|
{
|
|
@@ -2427,6 +2457,8 @@
|
|
|
2427
2457
|
"originSourceId": "superpowers-pcvelz",
|
|
2428
2458
|
"originUrl": "https://github.com/pcvelz/superpowers/tree/bd000c6ec1df53449a74397f55305b22802b9a2b/skills/writing-skills",
|
|
2429
2459
|
"ecosystem": "superpowers",
|
|
2460
|
+
"optInTier": "workflow",
|
|
2461
|
+
"optInGroup": "Skill authoring",
|
|
2430
2462
|
"requiresAny": [
|
|
2431
2463
|
{
|
|
2432
2464
|
"role": "skill-authoring"
|
|
@@ -2466,7 +2498,7 @@
|
|
|
2466
2498
|
},
|
|
2467
2499
|
{
|
|
2468
2500
|
"id": "haus.turbo-monorepo-patterns",
|
|
2469
|
-
"version": "1.0.
|
|
2501
|
+
"version": "1.0.1",
|
|
2470
2502
|
"source": "haus",
|
|
2471
2503
|
"type": "skill",
|
|
2472
2504
|
"path": "skills/haus-owned/stack-patterns/turbo-monorepo-patterns",
|
|
@@ -2493,12 +2525,12 @@
|
|
|
2493
2525
|
"riskLevel": "low"
|
|
2494
2526
|
},
|
|
2495
2527
|
{
|
|
2496
|
-
"id": "haus.
|
|
2497
|
-
"version": "1.
|
|
2528
|
+
"id": "haus.typescript-patterns",
|
|
2529
|
+
"version": "1.2.0",
|
|
2498
2530
|
"source": "haus",
|
|
2499
2531
|
"type": "skill",
|
|
2500
|
-
"path": "skills/haus-owned/stack-patterns/
|
|
2501
|
-
"title": "Haus TypeScript
|
|
2532
|
+
"path": "skills/haus-owned/stack-patterns/typescript-patterns",
|
|
2533
|
+
"title": "Haus TypeScript patterns",
|
|
2502
2534
|
"purpose": "Guide TypeScript contract and migration-safe typing changes.",
|
|
2503
2535
|
"whenToUse": "Use for shared types, DTOs, interface boundaries, and type-safe refactors.",
|
|
2504
2536
|
"whenNotToUse": "Do not use for runtime-only changes without type-contract impact.",
|
|
@@ -2804,7 +2836,7 @@
|
|
|
2804
2836
|
"title": "Wshobson Typescript Advanced Types",
|
|
2805
2837
|
"purpose": "Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications. Use when implementing complex type logic, creating reusable type utilities, or ensuring compile-time type safety in TypeScript projects.",
|
|
2806
2838
|
"whenToUse": "Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications. Use when implementing complex type logic, creating reusable type utilities, or ensuring compile-time type safety in TypeScript projects.",
|
|
2807
|
-
"whenNotToUse": "Use haus.
|
|
2839
|
+
"whenNotToUse": "Use haus.typescript-patterns for contract boundaries and migration-safe typing.",
|
|
2808
2840
|
"tags": ["workflow", "typescript", "frontend", "backend"],
|
|
2809
2841
|
"repoRoles": [
|
|
2810
2842
|
"next-app",
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Clone this project's repositories onto disk (per-repo setup is separate).
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
Clone repositories for this project. Per-repo setup (install, Docker, `.env`) is a separate step that isn't wired yet — this command only gets repos onto disk.
|
|
2
6
|
|
|
3
7
|
Cloning a single repo is always `haus clone <url> [dir]`. This command picks _which_ repos to clone and runs that primitive for each. There are two modes, chosen by whether a name was given.
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Clone a project's repos and set each one up for local development.
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
Clone a project's repos **and** set each one up for local development — node version, dependencies, databases, cross-repo links, and env. This is `project:clone` followed by a per-repo setup pass and a localdev orchestration pass.
|
|
2
6
|
|
|
3
7
|
**Always ask before doing work — never assume.** Cloning and setup hit the network, need auth, and can touch databases; confirm before each phase, and respect repos the user already has.
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Set up this project with haus, conversationally — no terminal needed.
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
Set up this project with haus, conversationally. The person you're helping may
|
|
2
6
|
not be a developer — never make them open a terminal or read JSON. You run the
|
|
3
7
|
commands; they read plain language and approve.
|
|
@@ -31,13 +35,37 @@ Do this in order:
|
|
|
31
35
|
deep read discovered. You MUST run this before the next apply — `haus apply`
|
|
32
36
|
does not re-calculate recommendations on its own.
|
|
33
37
|
|
|
34
|
-
5. **
|
|
35
|
-
|
|
38
|
+
5. **Offer optional helpers.** Read `.haus-workflow/recommendation.json` yourself
|
|
39
|
+
(never show the JSON). Two kinds of optional extras may be listed; offer only
|
|
40
|
+
the ones present, all **unchecked** by default — these are opt-in:
|
|
41
|
+
- **Optional skills & agents** (`optInEligible[]`): workflow/ops/review/design
|
|
42
|
+
helpers that don't auto-install for this stack. Group them by their
|
|
43
|
+
`optInGroup` label and present one `AskUserQuestion` option per group
|
|
44
|
+
(use each item's `purpose` and `tokenEstimate` to describe it in plain
|
|
45
|
+
language, e.g. "Code review workflow — request/receive structured reviews").
|
|
46
|
+
Collect the item ids from **all** the groups the user picked into one list
|
|
47
|
+
and run a **single** `haus recommend --include <id> <id> …` (one command with
|
|
48
|
+
every chosen id). Don't run it once per group — each run rewrites
|
|
49
|
+
`recommendation.json`, so repeated calls would drop the earlier includes.
|
|
50
|
+
- **Project config** (entries in `recommended[]` with `install: false`, e.g.
|
|
51
|
+
Haus ESLint / Prettier baselines): offer each as a plain choice ("Add the
|
|
52
|
+
Haus ESLint baseline"). On confirm, run `haus scaffold <id>`. `haus scaffold`
|
|
53
|
+
**preserves existing config files by default** and tells you when a file
|
|
54
|
+
already exists — only re-run with `haus scaffold <id> --force` if the user
|
|
55
|
+
explicitly chooses to **replace** their current config.
|
|
56
|
+
|
|
57
|
+
If neither list has anything, skip this step silently — don't ask an empty
|
|
58
|
+
question.
|
|
59
|
+
|
|
60
|
+
6. **Apply the rest.** Run `haus apply --write` again. It only writes what changed,
|
|
61
|
+
so this adds the newly-matched helpers from step 4 plus any opt-ins from step 5.
|
|
36
62
|
|
|
37
|
-
|
|
63
|
+
7. **Confirm.** End with one plain-language line, for example:
|
|
38
64
|
"✅ Your project is configured — I wrote your project docs, added N guardrails
|
|
39
|
-
and M coding helpers (K matched after reading your code in depth)
|
|
40
|
-
`/haus-doctor` any time to
|
|
65
|
+
and M coding helpers (K matched after reading your code in depth), plus the J
|
|
66
|
+
optional helpers you chose: <name them>. Run `/haus-doctor` any time to
|
|
67
|
+
re-check." Fill the numbers from the apply output, and name the opt-ins the
|
|
68
|
+
user picked in step 5 (omit that clause if they chose none).
|
|
41
69
|
|
|
42
70
|
If anything fails, explain what happened in plain language and what you'll try
|
|
43
71
|
next — don't dump raw errors.
|
|
@@ -26,6 +26,7 @@ The short legacy aliases still work but the names below are canonical.
|
|
|
26
26
|
| `project:init` (`setup`, `init`) | _Setup procedure below_ | project | First-time setup of an **existing** repo: adds AI skills, commands, workflow + project docs |
|
|
27
27
|
| `project:clone [name]` (`clone`) | _Clone procedure below_ | project | No name: clone a **workspace**'s repos from `repos.manifest.json`. With a `name`: find & clone one repo by name from GitHub |
|
|
28
28
|
| `project:cloneandsetup [name]` (`cloneandsetup`) | _Clone & setup procedure below_ | project | Run `project:clone`, then set up each repo for local dev — deps, databases, cross-repo links, and env — via each repo's `.haus-workflow/localdev.yml` (+ the workspace's order/links/env) |
|
|
29
|
+
| `project:add-skills` (`add-skills`, `opt-in`) | _Add-skills procedure below_ | project | Add optional skills, agents, or config (ESLint/Prettier) to an already-set-up project without re-running full setup |
|
|
29
30
|
| `project:refresh` (`apply`, `refresh`, `claude-md`, `regenerate`) | `haus apply --write` | project | Re-run setup / refresh `.claude/` context + regenerate root `CLAUDE.md` import block |
|
|
30
31
|
| `project:doctor` (`doctor`, `check`) | `haus doctor` | project | Check for install drift |
|
|
31
32
|
| `update` (`upgrade`) | `haus update` | global | Update npm package + catalog + `~/.claude/` (also refreshes this project) |
|
|
@@ -51,6 +52,8 @@ Options:
|
|
|
51
52
|
(no name: clone a workspace from repos.manifest.json; with a name: find & clone one repo by name from GitHub)
|
|
52
53
|
5. [project] project:cloneandsetup [name] — clone repos, then set them up for local dev
|
|
53
54
|
(project:clone, then per-repo deps + databases + cross-repo links + env from localdev.yml)
|
|
55
|
+
6. [project] project:add-skills — add optional skills, agents, or config to this project
|
|
56
|
+
(offers opt-in helpers matching your stack that aren't installed yet — no full re-setup)
|
|
54
57
|
```
|
|
55
58
|
|
|
56
59
|
Map the user's selection to the command from the alias table, then continue to Step 2.
|
|
@@ -65,6 +68,8 @@ Run the mapped command via Bash. Quote the exact command you are running before
|
|
|
65
68
|
|
|
66
69
|
**Exception — `project:cloneandsetup` (`cloneandsetup`):** clone followed by a per-repo setup pass, with confirmations. Skip to **Clone & setup (`project:cloneandsetup`)** under Step 3 and follow it.
|
|
67
70
|
|
|
71
|
+
**Exception — `project:add-skills` (`add-skills` / `opt-in`):** a short scan → recommend → choose → apply procedure. Skip to **Add optional skills (`project:add-skills`)** under Step 3 and follow it.
|
|
72
|
+
|
|
68
73
|
## Step 3 — Post-run steps
|
|
69
74
|
|
|
70
75
|
After the command completes, follow the relevant post-run steps below.
|
|
@@ -82,6 +87,31 @@ After the command completes, follow the relevant post-run steps below.
|
|
|
82
87
|
|
|
83
88
|
1. Open and follow `~/.claude/commands/haus-cloneandsetup.md` — it runs the full `project:clone` flow, then sets up each cloned repo locally: selects the node version (`nvm install` from `.nvmrc`), enables corepack, installs JS/PHP dependencies, and seeds `.env`, confirming before each phase. It does not start servers.
|
|
84
89
|
|
|
90
|
+
### Add optional skills (`project:add-skills`)
|
|
91
|
+
|
|
92
|
+
For a project that's already set up but where the user wants more helpers later —
|
|
93
|
+
without re-running the full `project:init` flow. Never show raw JSON; offer plain
|
|
94
|
+
choices.
|
|
95
|
+
|
|
96
|
+
1. Refresh the picture: run `haus scan --json` then `haus recommend` (it re-reads
|
|
97
|
+
`.haus-workflow/deep-context.json` if present).
|
|
98
|
+
2. Read `.haus-workflow/recommendation.json` and `.haus-workflow/haus.lock.json`
|
|
99
|
+
yourself. Build the choices from items **not already installed** (lock ids):
|
|
100
|
+
- **Optional skills & agents** — `optInEligible[]`, grouped by `optInGroup`
|
|
101
|
+
(each carries `purpose` + `tokenEstimate` for a plain-language label).
|
|
102
|
+
- **Project config** — `recommended[]` entries with `install: false` (Haus
|
|
103
|
+
ESLint / Prettier) whose files aren't already present.
|
|
104
|
+
3. If nothing is eligible, say so plainly and stop — e.g. "Everything matching
|
|
105
|
+
your stack is already installed" or "No optional helpers for this stack."
|
|
106
|
+
4. Otherwise present a single `AskUserQuestion` (multi-select, all unchecked)
|
|
107
|
+
with one option per group / config item. Then:
|
|
108
|
+
- Skills/agents → `haus recommend --include <id> <id> …`, then
|
|
109
|
+
`haus apply --write`.
|
|
110
|
+
- Config → `haus scaffold <id>` (add `--force` only if the user chose to
|
|
111
|
+
replace an existing file; scaffold preserves files by default).
|
|
112
|
+
5. Confirm with the names added and their combined token estimate, e.g.
|
|
113
|
+
"Added 2 optional helpers: Code review workflow, TDD workflow (~3k tokens)."
|
|
114
|
+
|
|
85
115
|
### After `haus apply --write`
|
|
86
116
|
|
|
87
117
|
Verify that the root `CLAUDE.md` imports all three haus files:
|