farmwork 1.0.1 → 1.1.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 (3) hide show
  1. package/README.md +40 -28
  2. package/package.json +2 -2
  3. package/src/init.js +415 -238
package/README.md CHANGED
@@ -1,11 +1,7 @@
1
1
  <img src="/init.png" alt="Farmwork - Developer Methodology" width="500" />
2
2
 
3
- # FARMWORK
4
-
5
3
  > A workflow framework for Claude Code by Wynter Jones
6
4
 
7
- ...because building software should feel like tending a well-organized farm.
8
-
9
5
  ## Quick Start
10
6
 
11
7
  ```bash
@@ -34,20 +30,20 @@ npx farmwork init
34
30
  1. **FARMHOUSE.md** - Central command for tracking framework metrics
35
31
  2. **Phrase Commands** - Natural language triggers for workflows
36
32
  3. **Agents** - Specialized AI subagents for specific tasks
37
- 4. **Commands** - User-invocable skills (triggered with `/command`)
38
- 5. **Issue Tracking** - Using beads (`bd`) for full visibility
39
- 6. **Living Audits** - Documents that track ongoing concerns
33
+ 4. **Autonomously Issue Tracking** - Using beads (`bd`) for full visibility
34
+ 5. **Living Audits** - Documents that track ongoing concerns
35
+ 6. **Plan & Implement** - You describe the outcome, the rest is handled, tracked and audited
36
+ 7. **Idea Garden & Compost** - Pre-plan creative stage for nurturing ideas or archiving rejected ones
40
37
 
41
38
  ### Phrase Commands
42
39
 
43
40
  **Farmwork Phrases** (Development Workflow):
44
41
  | Phrase | Action |
45
42
  |--------|--------|
46
- | `till the land` | Audit systems, update FARMHOUSE.md metrics |
47
- | `inspect the farm` | Full inspection (code review, performance, security, quality) |
48
- | `go to market` | i18n translation check |
49
- | `harvest crops` | Full push workflow (lint, test, build, commit, push) |
50
- | `open the farm` | Full audit cycle, then ask to proceed |
43
+ | `open the farm` | Audit systems, update FARMHOUSE.md metrics |
44
+ | `count the herd` | Full inspection and audit |
45
+ | `go to market` | i18n translation check + accessibility audit |
46
+ | `close the farm` | Full push workflow (lint, test, build, commit, push) |
51
47
 
52
48
  **Plan Phrases**:
53
49
  | Phrase | Action |
@@ -55,16 +51,22 @@ npx farmwork init
55
51
  | `make a plan for...` | Create implementation plan in `_PLANS/` |
56
52
  | `let's implement...` | Execute plan with issue tracking |
57
53
 
54
+ **Idea Phrases** (Pre-Plan Stage):
55
+ | Phrase | Action |
56
+ |--------|--------|
57
+ | `I have an idea for...` | Add new idea to `_AUDIT/GARDEN.md` |
58
+ | `let's plan this idea...` | Graduate idea from GARDEN → create plan |
59
+ | `compost this...` | Move rejected idea to `_AUDIT/COMPOST.md` |
60
+
58
61
  ### Slash Commands
59
62
 
60
63
  | Command | Description |
61
64
  |---------|-------------|
62
- | `/push` | Stage, lint, test, build, commit, push |
63
- | `/open-the-farm` | Full audit cycle with summary report |
65
+ | `/push` | Clean, stage, lint, test, build, commit, push, update metrics (11 steps) |
64
66
 
65
67
  ### Agents
66
68
 
67
- 9 specialized agents included:
69
+ 11 specialized agents included:
68
70
 
69
71
  | Agent | Purpose |
70
72
  |-------|---------|
@@ -73,18 +75,22 @@ npx farmwork init
73
75
  | `security-auditor` | OWASP vulnerability scanning |
74
76
  | `performance-auditor` | Memory leaks, re-renders, anti-patterns |
75
77
  | `code-smell-auditor` | DRY violations, complexity, naming |
78
+ | `accessibility-auditor` | WCAG 2.1 compliance, alt text, contrast |
76
79
  | `unused-code-cleaner` | Detect and remove dead code |
77
80
  | `code-cleaner` | Remove comments and console.logs |
78
81
  | `i18n-locale-translator` | Translate UI text to locales |
79
82
  | `storybook-maintainer` | Create/update Storybook stories |
83
+ | `idea-gardener` | Manage Idea Garden and Compost |
80
84
 
81
85
  ### Recommended Workflow
82
86
 
83
- 1. **Start Session**: Run `till the land` to audit current state
87
+ 1. **Start Session**: Run `open the farm` to audit current state
84
88
  2. **Plan Work**: Use `make a plan for...` for new features
85
89
  3. **Implement**: Use `let's implement...` to execute with tracking
86
- 4. **Quality Check**: Run `inspect the farm` or `/open-the-farm`
87
- 5. **Ship**: Run `harvest crops` or `/push` to push changes
90
+ 4. **Quality Check**: Run `count the herd` for full audit + dry run
91
+ 5. **Ship**: Run `close the farm` or `/push` to push changes
92
+
93
+ You can `go to market` when you have a production-ready app with international users.
88
94
 
89
95
  ## Directory Structure
90
96
 
@@ -92,25 +98,29 @@ npx farmwork init
92
98
  your-project/
93
99
  ├── CLAUDE.md # Main instructions & phrase commands
94
100
  ├── .claude/ # Claude Code configuration
95
- │ ├── agents/ # 9 specialized subagents
101
+ │ ├── agents/ # 11 specialized subagents
96
102
  │ │ ├── the-farmer.md
97
103
  │ │ ├── code-reviewer.md
98
104
  │ │ ├── security-auditor.md
99
105
  │ │ ├── performance-auditor.md
100
106
  │ │ ├── code-smell-auditor.md
107
+ │ │ ├── accessibility-auditor.md
101
108
  │ │ ├── unused-code-cleaner.md
102
109
  │ │ ├── code-cleaner.md
103
110
  │ │ ├── i18n-locale-translator.md
104
- │ │ └── storybook-maintainer.md
111
+ │ │ ├── storybook-maintainer.md
112
+ │ │ └── idea-gardener.md
105
113
  │ └── commands/ # User-invocable skills
106
- ├── push.md
107
- │ └── open-the-farm.md
114
+ └── push.md
108
115
  ├── _AUDIT/ # Living audit documents
109
116
  │ ├── FARMHOUSE.md # Framework command center
110
117
  │ ├── SECURITY.md # Security posture
111
118
  │ ├── PERFORMANCE.md # Performance metrics
119
+ │ ├── ACCESSIBILITY.md # WCAG 2.1 compliance
112
120
  │ ├── CODE_QUALITY.md # Code quality tracking
113
- └── TESTS.md # Test coverage
121
+ ├── TESTS.md # Test coverage
122
+ │ ├── GARDEN.md # Idea nursery (pre-plan stage)
123
+ │ └── COMPOST.md # Rejected ideas archive
114
124
  ├── _PLANS/ # Implementation plans
115
125
  │ └── FEATURE_NAME.md
116
126
  ├── .beads/ # Issue tracking
@@ -142,15 +152,17 @@ If you enable Storybook (for React/Vue projects), the wizard will also ask for:
142
152
  **Creates:**
143
153
  - `CLAUDE.md` - Main instructions and phrase commands
144
154
  - `.claude/` - Claude Code configuration directory
145
- - `settings.json` - Project settings
146
- - `agents/` - 9 specialized subagents
147
- - `commands/` - 2 user-invocable skills
155
+ - `agents/` - 11 specialized subagents
156
+ - `commands/` - 1 user-invocable skill (/push)
148
157
  - `_AUDIT/` - Living audit documents
149
158
  - `FARMHOUSE.md` - Framework command center
150
159
  - `SECURITY.md` - Security posture tracking
151
160
  - `PERFORMANCE.md` - Performance metrics
161
+ - `ACCESSIBILITY.md` - WCAG 2.1 compliance
152
162
  - `CODE_QUALITY.md` - Code quality tracking
153
163
  - `TESTS.md` - Test coverage tracking
164
+ - `GARDEN.md` - Idea nursery (pre-plan stage)
165
+ - `COMPOST.md` - Rejected ideas archive
154
166
  - `_PLANS/` - Implementation plans directory
155
167
  - `justfile` - Navigation and task commands
156
168
 
@@ -204,5 +216,5 @@ MIT
204
216
 
205
217
  ## Links
206
218
 
207
- - [Farmwork Documentation](https://farmwork.wynter.ai)
208
- - [GitHub Repository](https://github.com/wynterjones/farmwork)
219
+ - [Farmwork Website](https://farmwork.dev)
220
+ - [Wynter Jones](https://wynter.ai)
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "farmwork",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "type": "module",
5
- "description": "Farmwork - Agentic development harness for AI-assisted projects",
5
+ "description": "Farmwork - A workflow framework for Claude Code by Wynter Jones",
6
6
  "main": "src/index.js",
7
7
  "bin": {
8
8
  "farmwork": "./bin/farmwork.js"
package/src/init.js CHANGED
@@ -126,7 +126,8 @@ export async function init(options) {
126
126
  const farmworkConfig = path.join(cwd, ".farmwork.json");
127
127
  const claudeMd = path.join(cwd, "CLAUDE.md");
128
128
 
129
- const isAlreadyInstalled = fs.existsSync(claudeDir) &&
129
+ const isAlreadyInstalled =
130
+ fs.existsSync(claudeDir) &&
130
131
  (fs.existsSync(farmworkConfig) || fs.existsSync(claudeMd));
131
132
 
132
133
  if (isAlreadyInstalled && !options.force) {
@@ -146,12 +147,15 @@ export async function init(options) {
146
147
  name: "continueInit",
147
148
  message: "What would you like to do?",
148
149
  choices: [
149
- { name: "🐴 Re-initialize (will backup existing files)", value: "reinit" },
150
+ {
151
+ name: "🐴 Re-initialize (will backup existing files)",
152
+ value: "reinit",
153
+ },
150
154
  { name: "🐮 Run doctor instead (check health)", value: "doctor" },
151
155
  { name: "🌾 Run status instead (view metrics)", value: "status" },
152
- { name: "🐔 Exit", value: "exit" }
153
- ]
154
- }
156
+ { name: "🐔 Exit", value: "exit" },
157
+ ],
158
+ },
155
159
  ]);
156
160
 
157
161
  if (continueInit === "exit") {
@@ -179,7 +183,9 @@ export async function init(options) {
179
183
  }
180
184
 
181
185
  farmTerm.header("FARMWORK INITIALIZATION", "primary");
182
- farmTerm.info("Let's set up your farm! Answer a few questions to get started.\n");
186
+ farmTerm.info(
187
+ "Let's set up your farm! Answer a few questions to get started.\n",
188
+ );
183
189
 
184
190
  const answers = await inquirer.prompt(QUESTIONS);
185
191
 
@@ -187,8 +193,12 @@ export async function init(options) {
187
193
  if (answers.includeStorybook) {
188
194
  farmTerm.nl();
189
195
  farmTerm.section("Storybook Deployment", "🐄");
190
- farmTerm.gray(" We recommend deploying Storybook to Netlify with password protection.\n");
191
- farmTerm.gray(" This keeps your component docs private but accessible to your team.\n\n");
196
+ farmTerm.gray(
197
+ " We recommend deploying Storybook to Netlify with password protection.\n",
198
+ );
199
+ farmTerm.gray(
200
+ " This keeps your component docs private but accessible to your team.\n\n",
201
+ );
192
202
 
193
203
  const storybookAnswers = await inquirer.prompt(STORYBOOK_QUESTIONS);
194
204
  Object.assign(answers, storybookAnswers);
@@ -203,12 +213,39 @@ export async function init(options) {
203
213
  // Check for existing files
204
214
  const existingFiles = [];
205
215
  const filesToCheck = [
206
- { path: path.join(cwd, "CLAUDE.md"), name: "CLAUDE.md", backup: "OLD_CLAUDE.md" },
207
- { path: path.join(cwd, "justfile"), name: "justfile", backup: "OLD_justfile" },
208
- { path: path.join(cwd, ".farmwork.json"), name: ".farmwork.json", backup: null },
209
- { path: path.join(cwd, ".claude", "commands"), name: ".claude/commands/", backup: null, isDir: true },
210
- { path: path.join(cwd, ".claude", "agents"), name: ".claude/agents/", backup: null, isDir: true },
211
- { path: path.join(cwd, "_AUDIT"), name: "_AUDIT/", backup: null, isDir: true },
216
+ {
217
+ path: path.join(cwd, "CLAUDE.md"),
218
+ name: "CLAUDE.md",
219
+ backup: "OLD_CLAUDE.md",
220
+ },
221
+ {
222
+ path: path.join(cwd, "justfile"),
223
+ name: "justfile",
224
+ backup: "OLD_justfile",
225
+ },
226
+ {
227
+ path: path.join(cwd, ".farmwork.json"),
228
+ name: ".farmwork.json",
229
+ backup: null,
230
+ },
231
+ {
232
+ path: path.join(cwd, ".claude", "commands"),
233
+ name: ".claude/commands/",
234
+ backup: null,
235
+ isDir: true,
236
+ },
237
+ {
238
+ path: path.join(cwd, ".claude", "agents"),
239
+ name: ".claude/agents/",
240
+ backup: null,
241
+ isDir: true,
242
+ },
243
+ {
244
+ path: path.join(cwd, "_AUDIT"),
245
+ name: "_AUDIT/",
246
+ backup: null,
247
+ isDir: true,
248
+ },
212
249
  ];
213
250
 
214
251
  for (const file of filesToCheck) {
@@ -244,7 +281,10 @@ export async function init(options) {
244
281
  name: "overwriteChoice",
245
282
  message: "How would you like to proceed?",
246
283
  choices: [
247
- { name: "🌱 Continue (backup files, add to existing folders)", value: "overwrite" },
284
+ {
285
+ name: "🌱 Continue (backup files, add to existing folders)",
286
+ value: "overwrite",
287
+ },
248
288
  { name: "🐔 Cancel installation", value: "cancel" },
249
289
  ],
250
290
  },
@@ -279,20 +319,32 @@ export async function init(options) {
279
319
  try {
280
320
  // Create folder structure with animations
281
321
  const steps = [
282
- { name: "Creating directories", fn: async () => {
283
- await fs.ensureDir(path.join(cwd, "_AUDIT"));
284
- await fs.ensureDir(path.join(cwd, "_PLANS"));
285
- await fs.ensureDir(path.join(cwd, ".claude", "commands"));
286
- await fs.ensureDir(path.join(cwd, ".claude", "agents"));
287
- }},
322
+ {
323
+ name: "Creating directories",
324
+ fn: async () => {
325
+ await fs.ensureDir(path.join(cwd, "_AUDIT"));
326
+ await fs.ensureDir(path.join(cwd, "_PLANS"));
327
+ await fs.ensureDir(path.join(cwd, ".claude", "commands"));
328
+ await fs.ensureDir(path.join(cwd, ".claude", "agents"));
329
+ },
330
+ },
288
331
  { name: "Planting CLAUDE.md", fn: () => createClaudeMd(cwd, answers) },
289
- { name: "Building FARMHOUSE.md", fn: () => createFarmhouseMd(cwd, answers) },
290
- { name: "Creating audit documents", fn: () => createAuditDocs(cwd, answers) },
332
+ {
333
+ name: "Building FARMHOUSE.md",
334
+ fn: () => createFarmhouseMd(cwd, answers),
335
+ },
336
+ {
337
+ name: "Creating audit documents",
338
+ fn: () => createAuditDocs(cwd, answers),
339
+ },
291
340
  { name: "Laying out justfile", fn: () => createJustfile(cwd, answers) },
292
341
  { name: "Training agents", fn: () => createAgents(cwd, answers) },
293
342
  { name: "Setting up commands", fn: () => createCommands(cwd, answers) },
294
343
  { name: "Configuring settings", fn: () => createSettings(cwd, answers) },
295
- { name: "Writing .farmwork.json", fn: () => createProduceConfig(cwd, answers) },
344
+ {
345
+ name: "Writing .farmwork.json",
346
+ fn: () => createProduceConfig(cwd, answers),
347
+ },
296
348
  ];
297
349
 
298
350
  for (const step of steps) {
@@ -376,15 +428,18 @@ export async function init(options) {
376
428
 
377
429
  // Show created structure
378
430
  farmTerm.section("Created Structure", emojis.corn);
379
- await farmTerm.planting([
380
- "_AUDIT/",
381
- "_PLANS/",
382
- ".claude/commands/",
383
- ".claude/agents/",
384
- "CLAUDE.md",
385
- "justfile",
386
- ".farmwork.json",
387
- ], "Files planted");
431
+ await farmTerm.planting(
432
+ [
433
+ "_AUDIT/",
434
+ "_PLANS/",
435
+ ".claude/commands/",
436
+ ".claude/agents/",
437
+ "CLAUDE.md",
438
+ "justfile",
439
+ ".farmwork.json",
440
+ ],
441
+ "Files planted",
442
+ );
388
443
 
389
444
  // Next steps
390
445
  farmTerm.section("Next Steps", emojis.carrot);
@@ -393,7 +448,7 @@ export async function init(options) {
393
448
  farmTerm.yellow("just --list");
394
449
  farmTerm.gray(" → See available commands\n");
395
450
  farmTerm.white(" 2. ");
396
- farmTerm.yellow('"till the land"');
451
+ farmTerm.yellow('"open the farm"');
397
452
  farmTerm.gray(" → Audit your setup\n");
398
453
  farmTerm.white(" 3. ");
399
454
  farmTerm.yellow('"make a plan for <feature>"');
@@ -404,35 +459,44 @@ export async function init(options) {
404
459
  farmTerm.section("Get Claude Comfortable", emojis.wheat);
405
460
  farmTerm.gray(" Copy and paste this prompt to Claude Code:\n\n");
406
461
 
407
- farmTerm.box("Prompt for Claude", [
408
- "Hey Claude, I am using the Farmwork framework,",
409
- "please go through the justfile and create",
410
- "project-specific commands, and go through my",
411
- "app and suggest project-specific subagents",
412
- "that would work well.",
413
- ], "secondary");
462
+ farmTerm.box(
463
+ "Prompt for Claude",
464
+ [
465
+ "Hey Claude, I am using the Farmwork framework,",
466
+ "please go through the justfile and create",
467
+ "project-specific commands, and go through my",
468
+ "app and suggest project-specific subagents",
469
+ "that would work well.",
470
+ ],
471
+ "secondary",
472
+ );
414
473
 
415
474
  // Show merge prompt if we backed up CLAUDE.md
416
475
  if (answers._didBackupClaudeMd) {
417
476
  farmTerm.nl();
418
477
  farmTerm.section("Merge Your Old Instructions", "🥬");
419
- farmTerm.gray(" Your old CLAUDE.md was backed up. Use this prompt to merge:\n\n");
420
-
421
- farmTerm.box("Merge Prompt", [
422
- "Hey Claude, look at my CLAUDE.md file and",
423
- "merge the project-specific instructions from",
424
- "OLD_CLAUDE.md into it, so I have one file",
425
- "with all the Farmwork instructions plus my",
426
- "original project setup. Then delete the OLD",
427
- "files when done.",
428
- ], "accent");
478
+ farmTerm.gray(
479
+ " Your old CLAUDE.md was backed up. Use this prompt to merge:\n\n",
480
+ );
481
+
482
+ farmTerm.box(
483
+ "Merge Prompt",
484
+ [
485
+ "Hey Claude, look at my CLAUDE.md file and",
486
+ "merge the project-specific instructions from",
487
+ "OLD_CLAUDE.md into it, so I have one file",
488
+ "with all the Farmwork instructions plus my",
489
+ "original project setup. Then delete the OLD",
490
+ "files when done.",
491
+ ],
492
+ "accent",
493
+ );
429
494
  }
430
495
 
431
496
  // Final tractor drive
432
497
  farmTerm.nl();
433
498
  await farmTerm.tractorAnimation("Your farm is ready!", 1500);
434
499
  farmTerm.nl();
435
-
436
500
  } catch (error) {
437
501
  farmTerm.error("Failed to initialize Farmwork");
438
502
  console.error(error);
@@ -476,11 +540,10 @@ Run these in order for a complete development cycle:
476
540
 
477
541
  | Phrase | Action |
478
542
  |--------|--------|
479
- | **till the land** | Audit systems, update \`_AUDIT/FARMHOUSE.md\` with current metrics |
480
- | **inspect the farm** | Full inspection: code review, cleanup, performance, security, code quality |
481
- | **go to market** | i18n scan + translator for missing translations |
482
- | **harvest crops** | Execute \`/push\` (lint, test, build, commit, push) |
483
- | **open the farm** | Full audit cycle (everything except push), then ask to proceed |
543
+ | **open the farm** | Audit systems, update \`_AUDIT/FARMHOUSE.md\` with current metrics |
544
+ | **count the herd** | Full inspection + dry run: code review, cleanup, performance, security, code quality, accessibility |
545
+ | **go to market** | i18n scan + accessibility audit for missing translations and a11y issues |
546
+ | **close the farm** | Execute \`/push\` (lint, test, build, commit, push) |
484
547
 
485
548
  ---
486
549
 
@@ -493,30 +556,68 @@ Run these in order for a complete development cycle:
493
556
 
494
557
  ---
495
558
 
559
+ ### Idea Phrases (Pre-Plan Stage)
560
+
561
+ | Phrase | Action |
562
+ |--------|--------|
563
+ | **I have an idea for...** | Add new idea to \`_AUDIT/GARDEN.md\` (title, description, bullets) |
564
+ | **let's plan this idea...** | Graduate idea from GARDEN → create plan in \`_PLANS/\` |
565
+ | **I dont want to do this idea...** | Reject idea → move from GARDEN to COMPOST |
566
+ | **remove this feature...** | Archive feature idea to COMPOST |
567
+ | **compost this...** | Move idea from GARDEN to COMPOST |
568
+
569
+ ---
570
+
496
571
  ### Farmwork Phrase Details
497
572
 
498
- **till the land**
573
+ **open the farm**
499
574
  1. Launch \`the-farmer\` agent to audit all systems
500
575
  2. Run \`bd list --status closed | wc -l\` to get total completed issues
501
576
  3. Updates \`_AUDIT/FARMHOUSE.md\` with current metrics
502
577
 
503
- **inspect the farm** (Full Inspection)
504
- Runs all inspection agents in parallel:
578
+ **count the herd** (Full Audit Cycle)
579
+ Runs all inspection agents in parallel, then dry run quality gates. No push.
580
+
505
581
  1. **Code Review & Cleanup** - \`code-reviewer\` + \`unused-code-cleaner\`
506
- 2. **Performance Audit** - Tests + \`performance-auditor\`, updates \`_AUDIT/PERFORMANCE.md\`
582
+ 2. **Performance Audit** - \`performance-auditor\`, updates \`_AUDIT/PERFORMANCE.md\`
507
583
  3. **Security Audit** - \`security-auditor\` for OWASP Top 10, updates \`_AUDIT/SECURITY.md\`
508
584
  4. **Code Quality** - \`code-smell-auditor\` for DRY violations, updates \`_AUDIT/CODE_QUALITY.md\`
509
- 5. **Summary Report** - Consolidate findings
585
+ 5. **Accessibility** - \`accessibility-auditor\` for WCAG 2.1, updates \`_AUDIT/ACCESSIBILITY.md\`
586
+ 6. **Dry Run** - lint, tests, build (but NOT commit/push)
587
+ 7. **Summary Report** - Consolidate findings, ask user next steps
510
588
 
511
- **harvest crops**
589
+ **go to market**
590
+ 1. Scan for hardcoded text not using i18n
591
+ 2. Launch \`i18n-locale-translator\` agent
592
+ 3. Launch \`accessibility-auditor\` for WCAG 2.1 compliance
593
+ 4. Updates \`_AUDIT/ACCESSIBILITY.md\`
594
+
595
+ **close the farm**
512
596
  - Invoke the \`push\` skill immediately
513
597
 
514
- **open the farm** (Full Audit Cycle)
515
- 1. **Till the Land** - Run \`the-farmer\` agent
516
- 2. **Inspect the Farm** - Full inspection (code review, cleanup, performance, security, code quality)
517
- 3. **Dry Run Harvest** - Run lint, tests, build (but NOT commit/push)
518
- 4. **Summary Report** - Present consolidated findings
519
- 5. **Ask User** - Ready to harvest (push)?
598
+ ---
599
+
600
+ ### Idea Phrase Details
601
+
602
+ **I have an idea for...**
603
+ 1. Launch \`idea-gardener\` agent
604
+ 2. Parse idea title from user input
605
+ 3. Ask for short description and bullet points
606
+ 4. Add to \`_AUDIT/GARDEN.md\` under ## Ideas section
607
+
608
+ **let's plan this idea...**
609
+ 1. Launch \`idea-gardener\` agent
610
+ 2. Find the idea in GARDEN.md
611
+ 3. Create plan in \`_PLANS/\` using plan mode
612
+ 4. Move to "Graduated to Plans" table
613
+ 5. Remove from ## Ideas section
614
+
615
+ **compost this...** / **I dont want to do this idea...**
616
+ 1. Launch \`idea-gardener\` agent
617
+ 2. Find idea in GARDEN.md (or accept new rejection)
618
+ 3. Ask for rejection reason
619
+ 4. Add to \`_AUDIT/COMPOST.md\` with reason
620
+ 5. Remove from GARDEN.md if it was there
520
621
 
521
622
  ---
522
623
 
@@ -573,7 +674,7 @@ async function createFarmhouseMd(cwd, answers) {
573
674
  const content = `# Farmwork Farmhouse
574
675
 
575
676
  > Central command for the Farmwork agentic harness.
576
- > Updated automatically by \`the-farmer\` agent during \`/push\` or via "till the land" phrase.
677
+ > Updated automatically by \`the-farmer\` agent during \`/push\` or via "open the farm" phrase.
577
678
 
578
679
  **Last Updated:** ${today}
579
680
  **Score:** 5.0/10
@@ -585,8 +686,8 @@ async function createFarmhouseMd(cwd, answers) {
585
686
 
586
687
  | Metric | Count |
587
688
  |--------|-------|
588
- | Commands | 2 |
589
- | Agents | 9 |
689
+ | Commands | 1 |
690
+ | Agents | 11 |
590
691
  | Justfile Recipes | 10 |
591
692
  | Unit Tests | 0 |
592
693
  | E2E Tests | 0 |
@@ -604,8 +705,7 @@ All Claude Code commands and agents are documented, phrase triggers are tested a
604
705
 
605
706
  | Command | Description |
606
707
  |---------|-------------|
607
- | \`/push\` | Clean, lint, test, build, commit, push |
608
- | \`/open-the-farm\` | Full audit cycle, then ask user next steps |
708
+ | \`/push\` | Clean, lint, test, build, commit, push, update metrics |
609
709
 
610
710
  ---
611
711
 
@@ -618,10 +718,12 @@ All Claude Code commands and agents are documented, phrase triggers are tested a
618
718
  | \`security-auditor\` | OWASP vulnerability scanning |
619
719
  | \`performance-auditor\` | Performance anti-patterns |
620
720
  | \`code-smell-auditor\` | DRY violations, complexity, naming |
721
+ | \`accessibility-auditor\` | WCAG 2.1 compliance, alt text, contrast |
621
722
  | \`unused-code-cleaner\` | Detect and remove dead code |
622
723
  | \`code-cleaner\` | Remove comments and console.logs |
623
724
  | \`i18n-locale-translator\` | Translate UI text to locales |
624
725
  | \`storybook-maintainer\` | Create/update Storybook stories |
726
+ | \`idea-gardener\` | Manage Idea Garden and Compost |
625
727
 
626
728
  ---
627
729
 
@@ -631,11 +733,10 @@ All Claude Code commands and agents are documented, phrase triggers are tested a
631
733
 
632
734
  | Phrase | Action |
633
735
  |--------|--------|
634
- | \`till the land\` | Audit systems, update FARMHOUSE.md |
635
- | \`inspect the farm\` | Full inspection: code review, cleanup, performance, security, code quality |
636
- | \`go to market\` | i18n scan + translator |
637
- | \`harvest crops\` | Execute /push |
638
- | \`open the farm\` | Full audit cycle |
736
+ | \`open the farm\` | Audit systems, update FARMHOUSE.md |
737
+ | \`count the herd\` | Full inspection + dry run (no push) |
738
+ | \`go to market\` | i18n scan + accessibility audit |
739
+ | \`close the farm\` | Execute /push |
639
740
 
640
741
  ### Plan Phrases
641
742
 
@@ -644,6 +745,14 @@ All Claude Code commands and agents are documented, phrase triggers are tested a
644
745
  | \`make a plan for...\` | Create plan in _PLANS/ |
645
746
  | \`let's implement...\` | Load plan, create Epic |
646
747
 
748
+ ### Idea Phrases
749
+
750
+ | Phrase | Action |
751
+ |--------|--------|
752
+ | \`I have an idea for...\` | Add idea to GARDEN.md |
753
+ | \`let's plan this idea...\` | Graduate idea to _PLANS/ |
754
+ | \`compost this...\` | Move idea to COMPOST.md |
755
+
647
756
  ---
648
757
 
649
758
  ## Issue Tracking (\`.beads/\`)
@@ -679,10 +788,31 @@ async function createAuditDocs(cwd, answers) {
679
788
  const today = new Date().toISOString().split("T")[0];
680
789
 
681
790
  const audits = [
682
- { name: "SECURITY.md", title: "Security Audit", description: "Security posture and vulnerability tracking" },
683
- { name: "PERFORMANCE.md", title: "Performance Audit", description: "Performance metrics and optimization tracking" },
684
- { name: "CODE_QUALITY.md", title: "Code Quality Audit", description: "Code quality and standards tracking" },
685
- { name: "TESTS.md", title: "Test Coverage Audit", description: "Test coverage and gaps tracking" },
791
+ {
792
+ name: "SECURITY.md",
793
+ title: "Security Audit",
794
+ description: "Security posture and vulnerability tracking",
795
+ },
796
+ {
797
+ name: "PERFORMANCE.md",
798
+ title: "Performance Audit",
799
+ description: "Performance metrics and optimization tracking",
800
+ },
801
+ {
802
+ name: "ACCESSIBILITY.md",
803
+ title: "Accessibility Audit",
804
+ description: "WCAG 2.1 Level AA compliance tracking",
805
+ },
806
+ {
807
+ name: "CODE_QUALITY.md",
808
+ title: "Code Quality Audit",
809
+ description: "Code quality and standards tracking",
810
+ },
811
+ {
812
+ name: "TESTS.md",
813
+ title: "Test Coverage Audit",
814
+ description: "Test coverage and gaps tracking",
815
+ },
686
816
  ];
687
817
 
688
818
  for (const audit of audits) {
@@ -725,6 +855,67 @@ _None currently_
725
855
 
726
856
  await fs.writeFile(path.join(cwd, "_AUDIT", audit.name), content);
727
857
  }
858
+
859
+ // Create GARDEN.md (Idea nursery - custom format)
860
+ const gardenContent = `# Idea Garden
861
+
862
+ > Nursery for new ideas and concepts. The pre-plan creative thinking stage.
863
+
864
+ **Last Updated:** ${today}
865
+ **Active Ideas:** 0
866
+
867
+ ---
868
+
869
+ ## How to Use
870
+
871
+ | Phrase | Action |
872
+ |--------|--------|
873
+ | \`I have an idea for...\` | Plant a new idea here |
874
+ | \`let's plan this idea...\` | Graduate idea to _PLANS/ |
875
+ | \`compost this...\` | Reject idea, move to COMPOST |
876
+
877
+ ---
878
+
879
+ ## Ideas
880
+
881
+ _No ideas planted yet. Start with "I have an idea for..."_
882
+
883
+ ---
884
+
885
+ ## Graduated to Plans
886
+
887
+ | Idea | Plan | Date |
888
+ |------|------|------|
889
+ `;
890
+
891
+ await fs.writeFile(path.join(cwd, "_AUDIT", "GARDEN.md"), gardenContent);
892
+
893
+ // Create COMPOST.md (Rejected ideas archive - custom format)
894
+ const compostContent = `# Idea Compost
895
+
896
+ > Archive of rejected ideas. Reference to avoid re-proposing and remember why we didn't pursue something.
897
+
898
+ **Last Updated:** ${today}
899
+ **Composted Ideas:** 0
900
+
901
+ ---
902
+
903
+ ## How to Use
904
+
905
+ | Phrase | Action |
906
+ |--------|--------|
907
+ | \`I dont want to do this idea...\` | Reject an idea |
908
+ | \`remove this feature...\` | Archive a feature idea |
909
+ | \`compost this...\` | Move idea from GARDEN here |
910
+
911
+ ---
912
+
913
+ ## Composted Ideas
914
+
915
+ _No composted ideas yet._
916
+ `;
917
+
918
+ await fs.writeFile(path.join(cwd, "_AUDIT", "COMPOST.md"), compostContent);
728
919
  }
729
920
 
730
921
  async function createJustfile(cwd, answers) {
@@ -816,7 +1007,7 @@ async function createAgents(cwd, answers) {
816
1007
  name: the-farmer
817
1008
  description: Audit and update FARMHOUSE.md with current project metrics
818
1009
  tools: Read, Grep, Glob, Edit, Bash
819
- model: haiku
1010
+ model: opus
820
1011
  ---
821
1012
 
822
1013
  # The Farmer Agent
@@ -850,7 +1041,7 @@ Maintains \`_AUDIT/FARMHOUSE.md\` - the living document tracking all systems and
850
1041
  name: code-reviewer
851
1042
  description: Review code for quality, security, and maintainability
852
1043
  tools: Read, Grep, Glob, Bash
853
- model: sonnet
1044
+ model: opus
854
1045
  ---
855
1046
 
856
1047
  # Code Reviewer Agent
@@ -867,7 +1058,7 @@ Reports findings with severity (CRITICAL, HIGH, MEDIUM, LOW) and remediation ste
867
1058
  name: security-auditor
868
1059
  description: OWASP security vulnerability scanning
869
1060
  tools: Read, Grep, Glob, Edit
870
- model: haiku
1061
+ model: opus
871
1062
  ---
872
1063
 
873
1064
  # Security Auditor Agent
@@ -886,7 +1077,7 @@ Updates \`_AUDIT/SECURITY.md\` with results.
886
1077
  name: performance-auditor
887
1078
  description: Find memory leaks, unnecessary re-renders, and anti-patterns
888
1079
  tools: Read, Grep, Glob, Edit
889
- model: haiku
1080
+ model: opus
890
1081
  ---
891
1082
 
892
1083
  # Performance Auditor Agent
@@ -905,7 +1096,7 @@ Updates \`_AUDIT/PERFORMANCE.md\` with results.
905
1096
  name: code-smell-auditor
906
1097
  description: Detect DRY violations, complexity issues, naming problems, and technical debt
907
1098
  tools: Read, Grep, Glob, Edit
908
- model: haiku
1099
+ model: opus
909
1100
  ---
910
1101
 
911
1102
  # Code Smell Auditor Agent
@@ -919,12 +1110,32 @@ Scans for code quality issues:
919
1110
 
920
1111
  Reports code health as GOOD / FAIR / NEEDS ATTENTION.
921
1112
  Updates \`_AUDIT/CODE_QUALITY.md\` with results.
1113
+ `,
1114
+ "accessibility-auditor.md": `---
1115
+ name: accessibility-auditor
1116
+ description: WCAG 2.1 accessibility auditing for React/Next.js applications
1117
+ tools: Read, Grep, Glob, Edit
1118
+ model: opus
1119
+ ---
1120
+
1121
+ # Accessibility Auditor Agent
1122
+
1123
+ Scans for WCAG 2.1 Level AA compliance issues:
1124
+ - Missing or inadequate alt text on images
1125
+ - Color contrast issues
1126
+ - Keyboard navigation problems
1127
+ - Missing ARIA labels and roles
1128
+ - Form accessibility (labels, error messages)
1129
+ - Focus management issues
1130
+
1131
+ Reports findings by severity (CRITICAL, HIGH, MEDIUM, LOW).
1132
+ Updates \`_AUDIT/ACCESSIBILITY.md\` with results.
922
1133
  `,
923
1134
  "unused-code-cleaner.md": `---
924
1135
  name: unused-code-cleaner
925
1136
  description: Detect and remove unused code (imports, functions, variables)
926
1137
  tools: Read, Write, Edit, Bash, Grep, Glob
927
- model: haiku
1138
+ model: opus
928
1139
  ---
929
1140
 
930
1141
  # Unused Code Cleaner Agent
@@ -943,7 +1154,7 @@ Use after refactoring, when removing features, or before production deployment.
943
1154
  name: code-cleaner
944
1155
  description: Fast removal of comments, console.logs, and debug code while preserving JSDoc
945
1156
  tools: Read, Edit, Glob, Grep
946
- model: haiku
1157
+ model: opus
947
1158
  ---
948
1159
 
949
1160
  # Code Cleaner Agent
@@ -963,7 +1174,7 @@ Fast cleanup of TypeScript/JavaScript files:
963
1174
  name: i18n-locale-translator
964
1175
  description: Translate UI text content into English (en) and Japanese (jp) using i18n locale system
965
1176
  tools: Read, Write, Edit, Glob, Grep
966
- model: sonnet
1177
+ model: opus
967
1178
  ---
968
1179
 
969
1180
  # i18n Locale Translator Agent
@@ -980,7 +1191,7 @@ Use when adding new features or internationalizing existing hardcoded text.
980
1191
  name: storybook-maintainer
981
1192
  description: Create and update Storybook stories for UI components
982
1193
  tools: Read, Write, Edit, Glob, Grep
983
- model: haiku
1194
+ model: opus
984
1195
  ---
985
1196
 
986
1197
  # Storybook Maintainer Agent
@@ -992,6 +1203,43 @@ Manages Storybook stories for UI components:
992
1203
  - Add controls for interactive props
993
1204
 
994
1205
  Use when adding new components or when existing components change significantly.
1206
+ `,
1207
+ "idea-gardener.md": `---
1208
+ name: idea-gardener
1209
+ description: Manage the Idea Garden and Compost - add, graduate, or reject ideas
1210
+ tools: Read, Edit, Glob, Grep
1211
+ model: opus
1212
+ ---
1213
+
1214
+ # Idea Gardener Agent
1215
+
1216
+ Manages \`_AUDIT/GARDEN.md\` and \`_AUDIT/COMPOST.md\` for idea lifecycle tracking.
1217
+
1218
+ ## Commands
1219
+
1220
+ ### Plant an Idea (from "I have an idea for...")
1221
+ 1. Parse the idea title from user input
1222
+ 2. Ask user for short description and key bullet points
1223
+ 3. Add to GARDEN.md under ## Ideas section with format:
1224
+ ### [Idea Title]
1225
+ [Short description]
1226
+ - Bullet point 1
1227
+ - Bullet point 2
1228
+
1229
+ ### Graduate an Idea (from "let's plan this idea...")
1230
+ 1. Find idea in GARDEN.md
1231
+ 2. Create plan file in _PLANS/ using plan mode
1232
+ 3. Move idea to "Graduated to Plans" table with date and plan link
1233
+ 4. Remove from ## Ideas section
1234
+
1235
+ ### Compost an Idea (from "compost this..." / "I dont want...")
1236
+ 1. Find idea in GARDEN.md (or accept new rejection)
1237
+ 2. Ask for rejection reason
1238
+ 3. Add to COMPOST.md with reason and date
1239
+ 4. Remove from GARDEN.md if it was there
1240
+
1241
+ ## Output Format
1242
+ Confirm action taken and show updated file section.
995
1243
  `,
996
1244
  };
997
1245
 
@@ -1006,201 +1254,130 @@ async function createCommands(cwd, answers) {
1006
1254
  const storybookSteps = answers.includeStorybook
1007
1255
  ? `
1008
1256
 
1009
- ### Step 6: Build & Deploy Storybook
1010
-
1011
- Build Storybook for production:
1012
- \`\`\`bash
1013
- ${pm} run build-storybook
1014
- \`\`\`
1257
+ ### Step 9: Deploy Storybook to Netlify
1015
1258
 
1016
- Deploy to Netlify (requires NETLIFY_AUTH_TOKEN and NETLIFY_STORYBOOK_SITE_ID in .claude/settings.local.json):
1259
+ Deploy the Storybook documentation site:
1017
1260
  \`\`\`bash
1018
1261
  npx netlify deploy --dir=storybook-static --site=$NETLIFY_STORYBOOK_SITE_ID --prod
1019
1262
  \`\`\`
1020
1263
 
1264
+ Note: Requires \`NETLIFY_AUTH_TOKEN\` and \`NETLIFY_STORYBOOK_SITE_ID\` in \`.claude/settings.local.json\`.
1265
+ If not configured, skip this step and inform the user to add the env vars.
1266
+
1021
1267
  Storybook URL: https://${answers.storybookUrl || "storybook.example.com"}
1022
1268
  ${answers.passwordProtect ? "**Note:** This Storybook is password protected." : ""}
1023
1269
  `
1024
1270
  : "";
1025
1271
 
1026
- const finalStep = answers.includeStorybook
1027
- ? "### Step 7: Report Success"
1028
- : "### Step 6: Report Success";
1029
- const reportContent = answers.includeStorybook
1030
- ? `
1031
- Show summary:
1032
- - Files changed
1033
- - Commit hash
1034
- - Push status
1035
- - Storybook deploy status
1036
- `
1037
- : `
1038
- Show summary:
1039
- - Files changed
1040
- - Commit hash
1041
- - Push status
1042
- `;
1043
-
1044
1272
  const pushCommand = `---
1045
- description: Clean, lint, test, build, commit, and push${answers.includeStorybook ? " (+ deploy Storybook)" : ""}
1046
- allowed-tools: Bash(git:*), Bash(${pm}:*), Bash(npx:*)
1273
+ description: Clean, stage, lint, test, build, commit, push, and update metrics
1274
+ argument-hint: [optional: commit message override]
1275
+ allowed-tools: Bash(find:*), Bash(git:*), Bash(${pm}:*), Bash(npx:*)${answers.includeStorybook ? ", Bash(npx netlify:*)" : ""}, Task
1047
1276
  ---
1048
1277
 
1049
1278
  # Push Command
1050
1279
 
1051
- Run quality gates, commit changes, and push to remote.${answers.includeStorybook ? " Then deploy Storybook." : ""}
1280
+ Run code cleanup, all quality gates, commit changes, and push to remote.
1052
1281
 
1053
1282
  ## Workflow
1054
1283
 
1055
1284
  Execute these steps in order. **Stop immediately if any step fails.**
1056
1285
 
1057
- ### Step 1: Stage All Changes
1286
+ ### Step 1: Clean Up System Files
1287
+ Remove any .DS_Store files from the repository:
1058
1288
  \`\`\`bash
1059
- git add -A
1289
+ find . -name '.DS_Store' -type f -delete
1060
1290
  \`\`\`
1061
1291
 
1062
- ### Step 2: Check for Changes
1063
- Run \`git status\` to verify there are staged changes. If nothing to commit, stop.
1064
-
1065
- ### Step 3: Run Quality Gates
1066
-
1067
- 1. **Lint**: \`${answers.lintCommand}\`
1068
- 2. **Tests**: \`${answers.testCommand}\`
1069
- 3. **Build**: \`${answers.buildCommand}\`
1070
-
1071
- ### Step 4: Generate Commit Message
1072
-
1073
- Analyze staged changes and generate a concise commit message:
1074
- - Starts with a type (feat, fix, refactor, docs, style, test, chore)
1075
- - Summarizes the "why" not the "what"
1076
- - 1-2 sentences maximum
1077
-
1078
- ### Step 5: Commit and Push
1079
-
1080
- Create the commit with footer:
1081
-
1292
+ ### Step 2: Sync Packages
1293
+ Clean and reinstall node_modules to ensure package-lock.json stays in sync:
1294
+ \`\`\`bash
1295
+ rm -rf node_modules && ${pm} install
1082
1296
  \`\`\`
1083
- 🌽 Generated with [Claude Code](https://claude.com/claude-code)
1297
+ This prevents \`${pm} ci\` failures in CI/CD due to lock file drift.
1084
1298
 
1085
- Co-Authored-By: Claude <noreply@anthropic.com>
1086
- \`\`\`
1299
+ If package-lock.json was modified, it will be staged in the next step.
1087
1300
 
1088
- Then push: \`git push\`
1089
- ${storybookSteps}
1090
- ${finalStep}
1091
- ${reportContent}`;
1092
-
1093
- await fs.writeFile(
1094
- path.join(cwd, ".claude", "commands", "push.md"),
1095
- pushCommand,
1096
- );
1097
-
1098
- // Create open-the-farm command
1099
- const openTheFarmCommand = `---
1100
- description: Full audit cycle - till, inspect, dry run harvest, then ask user next steps
1101
- allowed-tools: Bash(${pm}:*), Bash(just:*), Task
1102
- ---
1103
-
1104
- # Open the Farm Command
1105
-
1106
- Complete development audit workflow. Runs all audits and quality checks without committing, then asks the user what to do next.
1107
-
1108
- Trigger phrase: "open the farm"
1109
-
1110
- ## Workflow
1111
-
1112
- Execute these steps in order. Track findings from each step for the final summary.
1113
-
1114
- ### Step 1: Till the Land
1115
-
1116
- Update the harness documentation with current metrics.
1301
+ ### Step 3: Stage All Changes
1302
+ \`\`\`bash
1303
+ git add -A
1304
+ \`\`\`
1117
1305
 
1118
- Launch the \`the-farmer\` agent to audit and update \`_AUDIT/FARMHOUSE.md\`:
1119
- - Commands and agents inventory
1120
- - Test counts
1121
- - Completed issues count
1306
+ ### Step 4: Check for Changes
1307
+ Run \`git status\` to verify there are staged changes. If nothing to commit, inform the user and stop.
1122
1308
 
1123
- Record the Farmhouse score for the summary.
1309
+ ### Step 5: Clean Code
1124
1310
 
1125
- ### Step 2: Inspect the Farm
1311
+ Run the code-cleaner agent on staged TypeScript files to remove comments and console.logs.
1126
1312
 
1127
- Run all inspection agents in parallel for comprehensive code quality check.
1313
+ This removes:
1314
+ - Line comments (\`//\`) and block comments (\`/* */\`)
1315
+ - \`console.log\` statements
1128
1316
 
1129
- #### 2a. Code Review & Cleanup
1130
- Launch these agents in parallel:
1131
- - \`code-reviewer\` agent on recently modified files
1132
- - \`unused-code-cleaner\` to detect dead code, unused imports
1317
+ It preserves:
1318
+ - JSDoc comments (\`/** */\`)
1319
+ - \`console.error\`, \`console.warn\`, \`console.info\`
1133
1320
 
1134
- #### 2b. Performance Audit
1135
- - Launch \`performance-auditor\` agent for anti-patterns
1321
+ After cleaning, re-stage the modified files:
1322
+ \`\`\`bash
1323
+ git add -A
1324
+ \`\`\`
1136
1325
 
1137
- #### 2c. Security Audit
1138
- - Launch \`security-auditor\` agent for OWASP Top 10 vulnerabilities
1139
- - Note findings by severity (CRITICAL, HIGH, MEDIUM, LOW)
1326
+ ### Step 6: Run Quality Gates (in order)
1140
1327
 
1141
- #### 2d. Code Quality Audit
1142
- - Launch \`code-smell-auditor\` agent for DRY violations, complexity, naming issues
1143
- - Note code health rating (GOOD / FAIR / NEEDS ATTENTION)
1328
+ Run each check. If any fails, stop and report which check failed:
1144
1329
 
1145
- ### Step 3: Dry Run Harvest
1330
+ 1. **Lint**: \`${answers.lintCommand}\`${answers.includeStorybook ? `\n2. **Storybook**: \`${pm} run build-storybook\`` : ""}
1331
+ ${answers.includeStorybook ? "3" : "2"}. **Unit Tests**: \`${answers.testCommand}\`
1332
+ ${answers.includeStorybook ? "4" : "3"}. **Build**: \`${answers.buildCommand}\`
1146
1333
 
1147
- Run quality gates WITHOUT committing or pushing:
1334
+ ### Step 7: Generate Commit Message
1148
1335
 
1149
- 1. **Lint**: \`${answers.lintCommand}\`
1150
- 2. **Tests**: \`${answers.testCommand}\`
1151
- 3. **Build**: \`${answers.buildCommand}\`
1336
+ If \`$ARGUMENTS\` is provided, use it as the commit message.
1152
1337
 
1153
- Record pass/fail status for each gate.
1338
+ Otherwise, analyze the staged changes:
1339
+ 1. Run \`git diff --cached --stat\` to see changed files
1340
+ 2. Run \`git diff --cached\` to see actual changes
1341
+ 3. Run \`git log -5 --oneline\` to match the repository's commit style
1342
+ 4. Generate a concise, descriptive commit message that:
1343
+ - Starts with a type (feat, fix, refactor, docs, style, test, chore)
1344
+ - Summarizes the "why" not the "what"
1345
+ - Is 1-2 sentences maximum
1154
1346
 
1155
- ### Step 4: Summary Report
1347
+ ### Step 8: Commit and Push
1156
1348
 
1157
- Present a consolidated report of all findings:
1349
+ Create the commit with the message, including the standard footer:
1158
1350
 
1159
1351
  \`\`\`
1160
- ## Farm Audit Complete
1161
-
1162
- ### Harness Status
1163
- - Farmhouse Score: X/10
1164
- - Commands: X | Agents: X | Tests: X
1165
-
1166
- ### Code Quality
1167
- - Security: X issues (Y critical, Z high)
1168
- - Performance: X issues
1169
- - Code Smells: [GOOD/FAIR/NEEDS ATTENTION]
1170
- - Unused Code: X items flagged
1171
-
1172
- ### Quality Gates
1173
- - Lint: ✅/❌
1174
- - Tests: ✅/❌ (X passed, Y failed)
1175
- - Build: ✅/❌
1176
-
1177
- ### Open Items
1178
- [List top 3-5 issues that should be addressed]
1352
+ 🌽 Generated with FARMWORK
1179
1353
  \`\`\`
1180
1354
 
1181
- ### Step 5: Ask User
1182
-
1183
- After presenting the summary, ask:
1355
+ Then push to remote:
1356
+ \`\`\`bash
1357
+ git push
1358
+ \`\`\`
1359
+ ${storybookSteps}
1360
+ ### Step 10: Update Farmhouse Metrics
1184
1361
 
1185
- > "All audits complete. What would you like to do?"
1186
- >
1187
- > Options:
1188
- > - **harvest crops** - Commit and push all changes
1189
- > - **review audits** - Show detailed findings from a specific audit
1190
- > - **fix issues first** - Address the open items before pushing
1362
+ Run the-farmer agent to update \`_AUDIT/FARMHOUSE.md\` with current metrics:
1363
+ - Commands and agents inventory
1364
+ - Test counts (unit, e2e)
1365
+ - Completed issues count
1191
1366
 
1192
- Wait for user response before proceeding.
1367
+ This keeps the harness documentation in sync with the codebase.
1193
1368
 
1194
- ## Notes
1369
+ ### Step 11: Report Success
1195
1370
 
1196
- - This command does NOT modify files or commit changes
1197
- - All audit agents update their respective \`_AUDIT/*.md\` files
1198
- - Use this before major releases or after significant development
1371
+ Show a summary:
1372
+ - Files changed
1373
+ - Commit hash
1374
+ - Push status${answers.includeStorybook ? "\n- Storybook deploy status (if deployed)" : ""}
1375
+ - Harness metrics updated
1199
1376
  `;
1200
1377
 
1201
1378
  await fs.writeFile(
1202
- path.join(cwd, ".claude", "commands", "open-the-farm.md"),
1203
- openTheFarmCommand,
1379
+ path.join(cwd, ".claude", "commands", "push.md"),
1380
+ pushCommand,
1204
1381
  );
1205
1382
  }
1206
1383
 
@@ -1246,7 +1423,7 @@ async function createSettings(cwd, answers) {
1246
1423
 
1247
1424
  async function createProduceConfig(cwd, answers) {
1248
1425
  const config = {
1249
- version: "1.0.0",
1426
+ version: "1.1.0",
1250
1427
  projectName: answers.projectName,
1251
1428
  commands: {
1252
1429
  test: answers.testCommand,
@@ -1257,7 +1434,7 @@ async function createProduceConfig(cwd, answers) {
1257
1434
  storybook: answers.includeStorybook || false,
1258
1435
  i18n: answers.includeI18n || false,
1259
1436
  },
1260
- audits: ["FARMHOUSE", "SECURITY", "PERFORMANCE", "CODE_QUALITY", "TESTS"],
1437
+ audits: ["FARMHOUSE", "SECURITY", "PERFORMANCE", "ACCESSIBILITY", "CODE_QUALITY", "TESTS", "GARDEN", "COMPOST"],
1261
1438
  };
1262
1439
 
1263
1440
  if (answers.includeStorybook) {