claude-ketchup 0.7.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.
- package/README.md +172 -0
- package/bin/cli.ts +6 -0
- package/bin/postinstall.ts +8 -0
- package/bin/preuninstall.ts +8 -0
- package/commands/ketchup.md +107 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +7 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/bin/postinstall.d.ts +3 -0
- package/dist/bin/postinstall.d.ts.map +1 -0
- package/dist/bin/postinstall.js +9 -0
- package/dist/bin/postinstall.js.map +1 -0
- package/dist/bin/preuninstall.d.ts +3 -0
- package/dist/bin/preuninstall.d.ts.map +1 -0
- package/dist/bin/preuninstall.js +9 -0
- package/dist/bin/preuninstall.js.map +1 -0
- package/dist/scripts/auto-continue.d.ts +3 -0
- package/dist/scripts/auto-continue.d.ts.map +1 -0
- package/dist/scripts/auto-continue.js +62 -0
- package/dist/scripts/auto-continue.js.map +1 -0
- package/dist/scripts/generate-changeset.d.ts +13 -0
- package/dist/scripts/generate-changeset.d.ts.map +1 -0
- package/dist/scripts/generate-changeset.js +322 -0
- package/dist/scripts/generate-changeset.js.map +1 -0
- package/dist/scripts/pre-tool-use.d.ts +3 -0
- package/dist/scripts/pre-tool-use.d.ts.map +1 -0
- package/dist/scripts/pre-tool-use.js +68 -0
- package/dist/scripts/pre-tool-use.js.map +1 -0
- package/dist/scripts/session-start.d.ts +3 -0
- package/dist/scripts/session-start.d.ts.map +1 -0
- package/dist/scripts/session-start.js +71 -0
- package/dist/scripts/session-start.js.map +1 -0
- package/dist/scripts/user-prompt-submit.d.ts +3 -0
- package/dist/scripts/user-prompt-submit.d.ts.map +1 -0
- package/dist/scripts/user-prompt-submit.js +71 -0
- package/dist/scripts/user-prompt-submit.js.map +1 -0
- package/dist/src/activity-logger.d.ts +2 -0
- package/dist/src/activity-logger.d.ts.map +1 -0
- package/dist/src/activity-logger.js +47 -0
- package/dist/src/activity-logger.js.map +1 -0
- package/dist/src/activity-logger.test.d.ts +2 -0
- package/dist/src/activity-logger.test.d.ts.map +1 -0
- package/dist/src/activity-logger.test.js +121 -0
- package/dist/src/activity-logger.test.js.map +1 -0
- package/dist/src/clean-logs.d.ts +6 -0
- package/dist/src/clean-logs.d.ts.map +1 -0
- package/dist/src/clean-logs.js +38 -0
- package/dist/src/clean-logs.js.map +1 -0
- package/dist/src/clean-logs.test.d.ts +2 -0
- package/dist/src/clean-logs.test.d.ts.map +1 -0
- package/dist/src/clean-logs.test.js +101 -0
- package/dist/src/clean-logs.test.js.map +1 -0
- package/dist/src/cli/cli.d.ts +3 -0
- package/dist/src/cli/cli.d.ts.map +1 -0
- package/dist/src/cli/cli.js +26 -0
- package/dist/src/cli/cli.js.map +1 -0
- package/dist/src/cli/cli.test.d.ts +2 -0
- package/dist/src/cli/cli.test.d.ts.map +1 -0
- package/dist/src/cli/cli.test.js +20 -0
- package/dist/src/cli/cli.test.js.map +1 -0
- package/dist/src/cli/doctor.d.ts +7 -0
- package/dist/src/cli/doctor.d.ts.map +1 -0
- package/dist/src/cli/doctor.js +67 -0
- package/dist/src/cli/doctor.js.map +1 -0
- package/dist/src/cli/doctor.test.d.ts +2 -0
- package/dist/src/cli/doctor.test.d.ts.map +1 -0
- package/dist/src/cli/doctor.test.js +87 -0
- package/dist/src/cli/doctor.test.js.map +1 -0
- package/dist/src/cli/install.d.ts +8 -0
- package/dist/src/cli/install.d.ts.map +1 -0
- package/dist/src/cli/install.js +8 -0
- package/dist/src/cli/install.js.map +1 -0
- package/dist/src/cli/install.test.d.ts +2 -0
- package/dist/src/cli/install.test.d.ts.map +1 -0
- package/dist/src/cli/install.test.js +106 -0
- package/dist/src/cli/install.test.js.map +1 -0
- package/dist/src/cli/reminders.d.ts +12 -0
- package/dist/src/cli/reminders.d.ts.map +1 -0
- package/dist/src/cli/reminders.js +52 -0
- package/dist/src/cli/reminders.js.map +1 -0
- package/dist/src/cli/reminders.test.d.ts +2 -0
- package/dist/src/cli/reminders.test.d.ts.map +1 -0
- package/dist/src/cli/reminders.test.js +72 -0
- package/dist/src/cli/reminders.test.js.map +1 -0
- package/dist/src/cli/repair.d.ts +11 -0
- package/dist/src/cli/repair.d.ts.map +1 -0
- package/dist/src/cli/repair.js +91 -0
- package/dist/src/cli/repair.js.map +1 -0
- package/dist/src/cli/repair.test.d.ts +2 -0
- package/dist/src/cli/repair.test.d.ts.map +1 -0
- package/dist/src/cli/repair.test.js +96 -0
- package/dist/src/cli/repair.test.js.map +1 -0
- package/dist/src/cli/status.d.ts +10 -0
- package/dist/src/cli/status.d.ts.map +1 -0
- package/dist/src/cli/status.js +55 -0
- package/dist/src/cli/status.js.map +1 -0
- package/dist/src/cli/status.test.d.ts +2 -0
- package/dist/src/cli/status.test.d.ts.map +1 -0
- package/dist/src/cli/status.test.js +83 -0
- package/dist/src/cli/status.test.js.map +1 -0
- package/dist/src/clue-collector.d.ts +23 -0
- package/dist/src/clue-collector.d.ts.map +1 -0
- package/dist/src/clue-collector.js +221 -0
- package/dist/src/clue-collector.js.map +1 -0
- package/dist/src/clue-collector.test.d.ts +2 -0
- package/dist/src/clue-collector.test.d.ts.map +1 -0
- package/dist/src/clue-collector.test.js +278 -0
- package/dist/src/clue-collector.test.js.map +1 -0
- package/dist/src/commit-validator.d.ts +35 -0
- package/dist/src/commit-validator.d.ts.map +1 -0
- package/dist/src/commit-validator.js +147 -0
- package/dist/src/commit-validator.js.map +1 -0
- package/dist/src/commit-validator.test.d.ts +2 -0
- package/dist/src/commit-validator.test.d.ts.map +1 -0
- package/dist/src/commit-validator.test.js +443 -0
- package/dist/src/commit-validator.test.js.map +1 -0
- package/dist/src/config-loader.d.ts +15 -0
- package/dist/src/config-loader.d.ts.map +1 -0
- package/dist/src/config-loader.js +12 -0
- package/dist/src/config-loader.js.map +1 -0
- package/dist/src/config-loader.test.d.ts +2 -0
- package/dist/src/config-loader.test.d.ts.map +1 -0
- package/dist/src/config-loader.test.js +69 -0
- package/dist/src/config-loader.test.js.map +1 -0
- package/dist/src/debug-logger.d.ts +2 -0
- package/dist/src/debug-logger.d.ts.map +1 -0
- package/dist/src/debug-logger.js +23 -0
- package/dist/src/debug-logger.js.map +1 -0
- package/dist/src/debug-logger.test.d.ts +2 -0
- package/dist/src/debug-logger.test.d.ts.map +1 -0
- package/dist/src/debug-logger.test.js +63 -0
- package/dist/src/debug-logger.test.js.map +1 -0
- package/dist/src/default-validators.test.d.ts +2 -0
- package/dist/src/default-validators.test.d.ts.map +1 -0
- package/dist/src/default-validators.test.js +119 -0
- package/dist/src/default-validators.test.js.map +1 -0
- package/dist/src/deny-list.d.ts +3 -0
- package/dist/src/deny-list.d.ts.map +1 -0
- package/dist/src/deny-list.js +62 -0
- package/dist/src/deny-list.js.map +1 -0
- package/dist/src/deny-list.test.d.ts +2 -0
- package/dist/src/deny-list.test.d.ts.map +1 -0
- package/dist/src/deny-list.test.js +93 -0
- package/dist/src/deny-list.test.js.map +1 -0
- package/dist/src/e2e.test.d.ts +2 -0
- package/dist/src/e2e.test.d.ts.map +1 -0
- package/dist/src/e2e.test.js +89 -0
- package/dist/src/e2e.test.js.map +1 -0
- package/dist/src/gitignore-manager.d.ts +2 -0
- package/dist/src/gitignore-manager.d.ts.map +1 -0
- package/dist/src/gitignore-manager.js +45 -0
- package/dist/src/gitignore-manager.js.map +1 -0
- package/dist/src/gitignore-manager.test.d.ts +2 -0
- package/dist/src/gitignore-manager.test.d.ts.map +1 -0
- package/dist/src/gitignore-manager.test.js +65 -0
- package/dist/src/gitignore-manager.test.js.map +1 -0
- package/dist/src/hook-input.d.ts +9 -0
- package/dist/src/hook-input.d.ts.map +1 -0
- package/dist/src/hook-input.js +7 -0
- package/dist/src/hook-input.js.map +1 -0
- package/dist/src/hook-input.test.d.ts +2 -0
- package/dist/src/hook-input.test.d.ts.map +1 -0
- package/dist/src/hook-input.test.js +20 -0
- package/dist/src/hook-input.test.js.map +1 -0
- package/dist/src/hook-logger.d.ts +16 -0
- package/dist/src/hook-logger.d.ts.map +1 -0
- package/dist/src/hook-logger.js +91 -0
- package/dist/src/hook-logger.js.map +1 -0
- package/dist/src/hook-logger.test.d.ts +2 -0
- package/dist/src/hook-logger.test.d.ts.map +1 -0
- package/dist/src/hook-logger.test.js +184 -0
- package/dist/src/hook-logger.test.js.map +1 -0
- package/dist/src/hook-state.d.ts +43 -0
- package/dist/src/hook-state.d.ts.map +1 -0
- package/dist/src/hook-state.js +124 -0
- package/dist/src/hook-state.js.map +1 -0
- package/dist/src/hook-state.test.d.ts +2 -0
- package/dist/src/hook-state.test.d.ts.map +1 -0
- package/dist/src/hook-state.test.js +190 -0
- package/dist/src/hook-state.test.js.map +1 -0
- package/dist/src/hooks/auto-continue.d.ts +21 -0
- package/dist/src/hooks/auto-continue.d.ts.map +1 -0
- package/dist/src/hooks/auto-continue.js +70 -0
- package/dist/src/hooks/auto-continue.js.map +1 -0
- package/dist/src/hooks/auto-continue.test.d.ts +2 -0
- package/dist/src/hooks/auto-continue.test.d.ts.map +1 -0
- package/dist/src/hooks/auto-continue.test.js +171 -0
- package/dist/src/hooks/auto-continue.test.js.map +1 -0
- package/dist/src/hooks/pre-tool-use.d.ts +14 -0
- package/dist/src/hooks/pre-tool-use.d.ts.map +1 -0
- package/dist/src/hooks/pre-tool-use.js +62 -0
- package/dist/src/hooks/pre-tool-use.js.map +1 -0
- package/dist/src/hooks/pre-tool-use.test.d.ts +2 -0
- package/dist/src/hooks/pre-tool-use.test.d.ts.map +1 -0
- package/dist/src/hooks/pre-tool-use.test.js +168 -0
- package/dist/src/hooks/pre-tool-use.test.js.map +1 -0
- package/dist/src/hooks/session-start.d.ts +20 -0
- package/dist/src/hooks/session-start.d.ts.map +1 -0
- package/dist/src/hooks/session-start.js +27 -0
- package/dist/src/hooks/session-start.js.map +1 -0
- package/dist/src/hooks/session-start.test.d.ts +2 -0
- package/dist/src/hooks/session-start.test.d.ts.map +1 -0
- package/dist/src/hooks/session-start.test.js +125 -0
- package/dist/src/hooks/session-start.test.js.map +1 -0
- package/dist/src/hooks/user-prompt-submit.d.ts +17 -0
- package/dist/src/hooks/user-prompt-submit.d.ts.map +1 -0
- package/dist/src/hooks/user-prompt-submit.js +28 -0
- package/dist/src/hooks/user-prompt-submit.js.map +1 -0
- package/dist/src/hooks/user-prompt-submit.test.d.ts +2 -0
- package/dist/src/hooks/user-prompt-submit.test.d.ts.map +1 -0
- package/dist/src/hooks/user-prompt-submit.test.js +119 -0
- package/dist/src/hooks/user-prompt-submit.test.js.map +1 -0
- package/dist/src/hooks/validate-commit.d.ts +12 -0
- package/dist/src/hooks/validate-commit.d.ts.map +1 -0
- package/dist/src/hooks/validate-commit.js +58 -0
- package/dist/src/hooks/validate-commit.js.map +1 -0
- package/dist/src/hooks/validate-commit.test.d.ts +2 -0
- package/dist/src/hooks/validate-commit.test.d.ts.map +1 -0
- package/dist/src/hooks/validate-commit.test.js +150 -0
- package/dist/src/hooks/validate-commit.test.js.map +1 -0
- package/dist/src/index.d.ts +15 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +39 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/linker.d.ts +6 -0
- package/dist/src/linker.d.ts.map +1 -0
- package/dist/src/linker.js +78 -0
- package/dist/src/linker.js.map +1 -0
- package/dist/src/linker.test.d.ts +2 -0
- package/dist/src/linker.test.d.ts.map +1 -0
- package/dist/src/linker.test.js +192 -0
- package/dist/src/linker.test.js.map +1 -0
- package/dist/src/logger.d.ts +21 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +117 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/logger.test.d.ts +2 -0
- package/dist/src/logger.test.d.ts.map +1 -0
- package/dist/src/logger.test.js +159 -0
- package/dist/src/logger.test.js.map +1 -0
- package/dist/src/npm-install.test.d.ts +2 -0
- package/dist/src/npm-install.test.d.ts.map +1 -0
- package/dist/src/npm-install.test.js +70 -0
- package/dist/src/npm-install.test.js.map +1 -0
- package/dist/src/path-resolver.d.ts +11 -0
- package/dist/src/path-resolver.d.ts.map +1 -0
- package/dist/src/path-resolver.js +65 -0
- package/dist/src/path-resolver.js.map +1 -0
- package/dist/src/postinstall.d.ts +8 -0
- package/dist/src/postinstall.d.ts.map +1 -0
- package/dist/src/postinstall.js +112 -0
- package/dist/src/postinstall.js.map +1 -0
- package/dist/src/postinstall.test.d.ts +2 -0
- package/dist/src/postinstall.test.d.ts.map +1 -0
- package/dist/src/postinstall.test.js +203 -0
- package/dist/src/postinstall.test.js.map +1 -0
- package/dist/src/preuninstall.d.ts +3 -0
- package/dist/src/preuninstall.d.ts.map +1 -0
- package/dist/src/preuninstall.js +85 -0
- package/dist/src/preuninstall.js.map +1 -0
- package/dist/src/preuninstall.test.d.ts +2 -0
- package/dist/src/preuninstall.test.d.ts.map +1 -0
- package/dist/src/preuninstall.test.js +114 -0
- package/dist/src/preuninstall.test.js.map +1 -0
- package/dist/src/reminder-loader.d.ts +24 -0
- package/dist/src/reminder-loader.d.ts.map +1 -0
- package/dist/src/reminder-loader.js +84 -0
- package/dist/src/reminder-loader.js.map +1 -0
- package/dist/src/reminder-loader.test.d.ts +2 -0
- package/dist/src/reminder-loader.test.d.ts.map +1 -0
- package/dist/src/reminder-loader.test.js +152 -0
- package/dist/src/reminder-loader.test.js.map +1 -0
- package/dist/src/root-finder.d.ts +2 -0
- package/dist/src/root-finder.d.ts.map +1 -0
- package/dist/src/root-finder.js +71 -0
- package/dist/src/root-finder.js.map +1 -0
- package/dist/src/root-finder.test.d.ts +2 -0
- package/dist/src/root-finder.test.d.ts.map +1 -0
- package/dist/src/root-finder.test.js +111 -0
- package/dist/src/root-finder.test.js.map +1 -0
- package/dist/src/settings-merger.d.ts +2 -0
- package/dist/src/settings-merger.d.ts.map +1 -0
- package/dist/src/settings-merger.js +133 -0
- package/dist/src/settings-merger.js.map +1 -0
- package/dist/src/settings-merger.test.d.ts +2 -0
- package/dist/src/settings-merger.test.d.ts.map +1 -0
- package/dist/src/settings-merger.test.js +379 -0
- package/dist/src/settings-merger.test.js.map +1 -0
- package/dist/src/settings-template.test.d.ts +2 -0
- package/dist/src/settings-template.test.d.ts.map +1 -0
- package/dist/src/settings-template.test.js +88 -0
- package/dist/src/settings-template.test.js.map +1 -0
- package/dist/src/state-manager.d.ts +5 -0
- package/dist/src/state-manager.d.ts.map +1 -0
- package/dist/src/state-manager.js +55 -0
- package/dist/src/state-manager.js.map +1 -0
- package/dist/src/state-manager.test.d.ts +2 -0
- package/dist/src/state-manager.test.d.ts.map +1 -0
- package/dist/src/state-manager.test.js +85 -0
- package/dist/src/state-manager.test.js.map +1 -0
- package/dist/src/subagent-classifier.d.ts +4 -0
- package/dist/src/subagent-classifier.d.ts.map +1 -0
- package/dist/src/subagent-classifier.js +53 -0
- package/dist/src/subagent-classifier.js.map +1 -0
- package/dist/src/subagent-classifier.test.d.ts +2 -0
- package/dist/src/subagent-classifier.test.d.ts.map +1 -0
- package/dist/src/subagent-classifier.test.js +84 -0
- package/dist/src/subagent-classifier.test.js.map +1 -0
- package/dist/src/validator-loader.d.ts +9 -0
- package/dist/src/validator-loader.d.ts.map +1 -0
- package/dist/src/validator-loader.js +71 -0
- package/dist/src/validator-loader.js.map +1 -0
- package/dist/src/validator-loader.test.d.ts +2 -0
- package/dist/src/validator-loader.test.d.ts.map +1 -0
- package/dist/src/validator-loader.test.js +140 -0
- package/dist/src/validator-loader.test.js.map +1 -0
- package/package.json +90 -0
- package/reminders/ketchup.md +24 -0
- package/reminders/reminder-documentation.md +30 -0
- package/reminders/reminder-emergent-design.md +41 -0
- package/reminders/reminder-extreme-ownership.md +27 -0
- package/reminders/reminder-ide-diagnostics.md +25 -0
- package/reminders/reminder-ketchup.md +145 -0
- package/reminders/reminder-parallelization.md +27 -0
- package/reminders/reminder-rethink-after-revert.md +25 -0
- package/reminders/reminder-sub-agent-rules.md +27 -0
- package/reminders/reminder-test-title-matches-spec.md +37 -0
- package/scripts/auto-continue.ts +34 -0
- package/scripts/generate-changeset.ts +405 -0
- package/scripts/pre-tool-use.ts +35 -0
- package/scripts/session-start.ts +38 -0
- package/scripts/tail-logs.sh +17 -0
- package/scripts/test-hooks.sh +910 -0
- package/scripts/user-prompt-submit.ts +38 -0
- package/templates/settings.json +48 -0
- package/validators/appeal-system.md +55 -0
- package/validators/backwards-compat.md +33 -0
- package/validators/burst-atomicity.md +37 -0
- package/validators/coverage-rules.md +34 -0
- package/validators/dead-code.md +36 -0
- package/validators/hygiene.md +34 -0
- package/validators/infra-commit-format.md +37 -0
- package/validators/ketchup-plan-format.md +42 -0
- package/validators/new-code-requires-tests.md +36 -0
- package/validators/no-comments.md +35 -0
- package/validators/no-dangerous-git.md +35 -0
- package/validators/tcr-workflow.md +31 -0
- package/validators/testing-no-state-peeking.md +37 -0
- package/validators/testing-structure.md +37 -0
- package/validators/testing-stubs-over-mocks.md +42 -0
- package/validators/testing-weak-assertions.md +36 -0
- package/validators/type-organization.md +30 -0
package/README.md
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# Claude Ketchup
|
|
2
|
+
|
|
3
|
+
**Stop Babysitting. Start Parallelizing.**
|
|
4
|
+
|
|
5
|
+
[](LICENSE) []()
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## The Problem: You're an AI Babysitter
|
|
10
|
+
|
|
11
|
+
AI-assisted coding captured your cognitive load.
|
|
12
|
+
|
|
13
|
+
Every session demands your full attention. Watching, nudging, correcting. You can't walk away because you don't trust the system.
|
|
14
|
+
|
|
15
|
+
- You can't context-switch while supervising
|
|
16
|
+
- One task at a time, full attention required
|
|
17
|
+
- The bottleneck is your attention, not AI's speed
|
|
18
|
+
|
|
19
|
+
That's not multiplication. That's marginally faster serial work.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The Solution: The Quality Stack
|
|
24
|
+
|
|
25
|
+
Claude Ketchup creates trust. Trust enables parallelization.
|
|
26
|
+
|
|
27
|
+
| Component | What It Does | Result |
|
|
28
|
+
| ------------------ | -------------------------------------------- | ------------------------------- |
|
|
29
|
+
| **Auto-Planner** | Generates plan from your requirements | No need to specify every detail |
|
|
30
|
+
| **Supervisor AI** | Validates every commit against your criteria | Automated review |
|
|
31
|
+
| **TCR Discipline** | Test && Commit \|\| Revert | Bad code auto-reverts |
|
|
32
|
+
| **Auto-Continue** | Keeps going until the plan is done | No nudging required |
|
|
33
|
+
|
|
34
|
+
The system is trustworthy. That's what frees you.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## The Multiplier: Git Worktrees
|
|
39
|
+
|
|
40
|
+
Git worktrees let you run multiple isolated workspaces from the same repo.
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Create worktrees for parallel features
|
|
44
|
+
git worktree add ../feature-auth feature/auth
|
|
45
|
+
git worktree add ../feature-payments feature/payments
|
|
46
|
+
git worktree add ../feature-dashboard feature/dashboard
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Each runs a Ketchup instance. All quality-validated.
|
|
50
|
+
|
|
51
|
+
| Approach | Features/Week |
|
|
52
|
+
| ------------------------- | ------------- |
|
|
53
|
+
| Manual coding | 1 |
|
|
54
|
+
| AI-assisted (babysitting) | 1-2 |
|
|
55
|
+
| **Ketchup + Worktrees** | **5-10** |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Three Steps
|
|
60
|
+
|
|
61
|
+
### 1. Install
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
npx claude-ketchup install
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Feed your requirements. Ketchup auto-generates the plan with Bottles, Bursts, and Dependencies.
|
|
68
|
+
|
|
69
|
+
### 2. Release
|
|
70
|
+
|
|
71
|
+
Start execution and walk away. The Supervisor validates every commit. Auto-continue keeps it going until done.
|
|
72
|
+
|
|
73
|
+
### 3. Multiply
|
|
74
|
+
|
|
75
|
+
Open another worktree. Start another instance. Three features. Five features. All in parallel.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## The Transformation
|
|
80
|
+
|
|
81
|
+
| Before (Babysitter) | After (Bionic) |
|
|
82
|
+
| -------------------------------- | ------------------------------ |
|
|
83
|
+
| Watching one AI session | Directing multiple workstreams |
|
|
84
|
+
| Nudging, correcting in real-time | Defining, approving, releasing |
|
|
85
|
+
| Serial productivity | Parallel productivity |
|
|
86
|
+
| Marginal gains (1.5x) | Multiplicative gains (5-10x) |
|
|
87
|
+
| Brain captured by supervision | Brain freed for the next thing |
|
|
88
|
+
|
|
89
|
+
From Babysitter to Bionic.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Installation
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# Install Claude Ketchup
|
|
97
|
+
npx claude-ketchup install
|
|
98
|
+
|
|
99
|
+
# Verify installation
|
|
100
|
+
npx claude-ketchup doctor
|
|
101
|
+
|
|
102
|
+
# You're ready to become Bionic
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
After installation, claude-ketchup automatically:
|
|
106
|
+
|
|
107
|
+
- Injects hooks that validate every commit
|
|
108
|
+
- Creates reminders that inject your guidelines
|
|
109
|
+
- Sets up file protection via deny-lists
|
|
110
|
+
- Merges settings with smart project/local overrides
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Authority: Battle-Tested
|
|
115
|
+
|
|
116
|
+
Built on foundations from Kent Beck's TCR and Extreme Programming principles. Refined through production features at Auto.
|
|
117
|
+
|
|
118
|
+
The on.auto team ships 5-10 features per week. Not 1-2.
|
|
119
|
+
|
|
120
|
+
**[Read the origin story →](./docs/origin-story.md)**
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## CLI Reference
|
|
125
|
+
|
|
126
|
+
| Command | Description |
|
|
127
|
+
| ------------------------- | --------------------------------------------------- |
|
|
128
|
+
| `claude-ketchup install` | Install and configure claude-ketchup in your project |
|
|
129
|
+
| `claude-ketchup init` | Initialize ketchup configuration |
|
|
130
|
+
| `claude-ketchup status` | Show symlink status for hook scripts and reminders |
|
|
131
|
+
| `claude-ketchup doctor` | Diagnose installation health |
|
|
132
|
+
| `claude-ketchup repair` | Recreate broken or missing symlinks |
|
|
133
|
+
| `claude-ketchup reminders`| List active reminders with metadata |
|
|
134
|
+
| `claude-ketchup clean-logs`| Remove old log files (use `--older-than=N` to keep N recent logs) |
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Documentation
|
|
139
|
+
|
|
140
|
+
| Guide | Description |
|
|
141
|
+
| ------------------------------------------------ | ------------------------------- |
|
|
142
|
+
| [Getting Started](./docs/getting-started.md) | 5-minute transformation |
|
|
143
|
+
| [Installation](./docs/installation.md) | Detailed installation guide |
|
|
144
|
+
| [The Quality Stack](./docs/ketchup-technique.md) | Why you can walk away |
|
|
145
|
+
| [Configuration](./docs/configuration.md) | All configuration options |
|
|
146
|
+
| [Hooks Guide](./docs/hooks-guide.md) | Configure your supervision |
|
|
147
|
+
| [Reminders Guide](./docs/reminders-guide.md) | Context injection system |
|
|
148
|
+
| [Validators Guide](./docs/validators-guide.md) | Commit validation rules |
|
|
149
|
+
| [API Reference](./docs/api-reference.md) | Programmatic access |
|
|
150
|
+
| [Architecture](./docs/architecture.md) | System design internals |
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Development
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
git clone https://github.com/BeOnAuto/claude-ketchup.git
|
|
158
|
+
cd claude-ketchup
|
|
159
|
+
pnpm install
|
|
160
|
+
pnpm test
|
|
161
|
+
pnpm build
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## License
|
|
167
|
+
|
|
168
|
+
MIT © 2025 BeOnAuto, Inc.
|
|
169
|
+
|
|
170
|
+
See [LICENSE](LICENSE) for details.
|
|
171
|
+
|
|
172
|
+
---
|
package/bin/cli.ts
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# /ketchup - Ketchup Status & Control
|
|
2
|
+
|
|
3
|
+
Check the status of your claude-ketchup installation and manage symlinks.
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
|
|
7
|
+
### `/ketchup` or `/ketchup status`
|
|
8
|
+
|
|
9
|
+
Show the current status of all managed symlinks.
|
|
10
|
+
|
|
11
|
+
### `/ketchup doctor`
|
|
12
|
+
|
|
13
|
+
Run diagnostics to check for issues with the installation.
|
|
14
|
+
|
|
15
|
+
### `/ketchup repair`
|
|
16
|
+
|
|
17
|
+
Fix any broken or missing symlinks.
|
|
18
|
+
|
|
19
|
+
### `/ketchup skills`
|
|
20
|
+
|
|
21
|
+
List all active skills with their metadata.
|
|
22
|
+
|
|
23
|
+
## Implementation
|
|
24
|
+
|
|
25
|
+
When the user runs `/ketchup <command>`, you should:
|
|
26
|
+
|
|
27
|
+
1. Determine the package directory (node_modules/claude-ketchup)
|
|
28
|
+
2. Determine the .claude directory (project root/.claude)
|
|
29
|
+
3. Run the appropriate command function
|
|
30
|
+
4. Display the results
|
|
31
|
+
|
|
32
|
+
### Response Format
|
|
33
|
+
|
|
34
|
+
**For `/ketchup status`:**
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
╭─────────────────────────────────────────╮
|
|
38
|
+
│ 🥫 Ketchup Status │
|
|
39
|
+
├─────────────────────────────────────────┤
|
|
40
|
+
│ Symlinks: │
|
|
41
|
+
│ ✓ scripts/session-start.ts │
|
|
42
|
+
│ ✓ scripts/pre-tool-use.ts │
|
|
43
|
+
│ ✓ skills/coding.md │
|
|
44
|
+
├─────────────────────────────────────────┤
|
|
45
|
+
│ All symlinks healthy │
|
|
46
|
+
╰─────────────────────────────────────────╯
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**For `/ketchup doctor`:**
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
╭─────────────────────────────────────────╮
|
|
53
|
+
│ 🩺 Ketchup Doctor │
|
|
54
|
+
├─────────────────────────────────────────┤
|
|
55
|
+
│ ✓ All symlinks valid │
|
|
56
|
+
│ ✓ Settings merged │
|
|
57
|
+
│ ✓ Gitignore updated │
|
|
58
|
+
├─────────────────────────────────────────┤
|
|
59
|
+
│ Status: Healthy │
|
|
60
|
+
╰─────────────────────────────────────────╯
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**For `/ketchup repair`:**
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
╭─────────────────────────────────────────╮
|
|
67
|
+
│ 🔧 Ketchup Repair │
|
|
68
|
+
├─────────────────────────────────────────┤
|
|
69
|
+
│ Repaired: │
|
|
70
|
+
│ ↻ scripts/session-start.ts │
|
|
71
|
+
│ ↻ skills/coding.md │
|
|
72
|
+
├─────────────────────────────────────────┤
|
|
73
|
+
│ 2 symlinks repaired │
|
|
74
|
+
╰─────────────────────────────────────────╯
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**For `/ketchup skills`:**
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
╭─────────────────────────────────────────╮
|
|
81
|
+
│ 📚 Active Skills │
|
|
82
|
+
├─────────────────────────────────────────┤
|
|
83
|
+
│ coding.md │
|
|
84
|
+
│ Hook: SessionStart │
|
|
85
|
+
│ Priority: 10 │
|
|
86
|
+
│ │
|
|
87
|
+
│ reminder.md │
|
|
88
|
+
│ Hook: UserPromptSubmit │
|
|
89
|
+
│ Priority: 5 │
|
|
90
|
+
├─────────────────────────────────────────┤
|
|
91
|
+
│ 2 skills active │
|
|
92
|
+
╰─────────────────────────────────────────╯
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**For `/ketchup help`:**
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
/ketchup - Ketchup Status & Control
|
|
99
|
+
|
|
100
|
+
Commands:
|
|
101
|
+
/ketchup Show symlink status
|
|
102
|
+
/ketchup status Show symlink status
|
|
103
|
+
/ketchup doctor Run diagnostics
|
|
104
|
+
/ketchup repair Fix broken symlinks
|
|
105
|
+
/ketchup skills List active skills
|
|
106
|
+
/ketchup help Show this help
|
|
107
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":""}
|
package/dist/bin/cli.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";;;AAEA,8CAA8C;AAE9C,MAAM,OAAO,GAAG,IAAA,kBAAS,GAAE,CAAC;AAC5B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postinstall.d.ts","sourceRoot":"","sources":["../../bin/postinstall.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const postinstall_js_1 = require("../src/postinstall.js");
|
|
5
|
+
(0, postinstall_js_1.runPostinstall)().catch((err) => {
|
|
6
|
+
console.error('Postinstall failed:', err);
|
|
7
|
+
process.exit(1);
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=postinstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../../bin/postinstall.ts"],"names":[],"mappings":";;;AAEA,0DAAuD;AAEvD,IAAA,+BAAc,GAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7B,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preuninstall.d.ts","sourceRoot":"","sources":["../../bin/preuninstall.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const preuninstall_js_1 = require("../src/preuninstall.js");
|
|
5
|
+
(0, preuninstall_js_1.runPreuninstall)().catch((err) => {
|
|
6
|
+
console.error('Preuninstall failed:', err);
|
|
7
|
+
process.exit(1);
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=preuninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preuninstall.js","sourceRoot":"","sources":["../../bin/preuninstall.ts"],"names":[],"mappings":";;;AAEA,4DAAyD;AAEzD,IAAA,iCAAe,GAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-continue.d.ts","sourceRoot":"","sources":["../../scripts/auto-continue.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
const hook_logger_js_1 = require("../src/hook-logger.js");
|
|
40
|
+
const auto_continue_js_1 = require("../src/hooks/auto-continue.js");
|
|
41
|
+
const projectDir = process.cwd();
|
|
42
|
+
const claudeDir = path.resolve(projectDir, '.claude');
|
|
43
|
+
const stdin = fs.readFileSync(0, 'utf8').trim();
|
|
44
|
+
if (!stdin) {
|
|
45
|
+
process.exit(0);
|
|
46
|
+
}
|
|
47
|
+
const input = JSON.parse(stdin);
|
|
48
|
+
const startTime = Date.now();
|
|
49
|
+
const result = (0, auto_continue_js_1.handleStop)(projectDir, input);
|
|
50
|
+
const output = result.decision === 'block' ? { stopReason: result.reason, forceResult: { behaviour: 'block' } } : null;
|
|
51
|
+
(0, hook_logger_js_1.writeHookLog)(claudeDir, {
|
|
52
|
+
hookName: 'auto-continue',
|
|
53
|
+
timestamp: new Date().toISOString(),
|
|
54
|
+
input,
|
|
55
|
+
output: output ?? { decision: result.decision, reason: result.reason },
|
|
56
|
+
durationMs: Date.now() - startTime,
|
|
57
|
+
});
|
|
58
|
+
if (output) {
|
|
59
|
+
console.log(JSON.stringify(output));
|
|
60
|
+
}
|
|
61
|
+
process.exit(0);
|
|
62
|
+
//# sourceMappingURL=auto-continue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-continue.js","sourceRoot":"","sources":["../../scripts/auto-continue.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,4CAA8B;AAC9B,gDAAkC;AAElC,0DAAqD;AACrD,oEAA+E;AAE/E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AACjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACtD,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AAEhD,IAAI,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7B,MAAM,MAAM,GAAG,IAAA,6BAAU,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAE7C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAEvH,IAAA,6BAAY,EAAC,SAAS,EAAE;IACtB,QAAQ,EAAE,eAAe;IACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACnC,KAAK;IACL,MAAM,EAAE,MAAM,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;IACtE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;CACnC,CAAC,CAAC;AAEH,IAAI,MAAM,EAAE,CAAC;IACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* AI-powered changeset generation script
|
|
4
|
+
*
|
|
5
|
+
* This script:
|
|
6
|
+
* 1. Gets commits since last changeset/tag
|
|
7
|
+
* 2. Parses conventional commits (feat/fix/etc)
|
|
8
|
+
* 3. Determines bump type (breaking→major, feat→minor, else→patch)
|
|
9
|
+
* 4. Generates changelog via Claude CLI (with simple fallback)
|
|
10
|
+
* 5. Creates .changeset/*.md file
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=generate-changeset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-changeset.d.ts","sourceRoot":"","sources":["../../scripts/generate-changeset.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG"}
|