claude-cook 1.10.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.
Files changed (112) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +607 -0
  3. package/agents/gsd-codebase-mapper.md +738 -0
  4. package/agents/gsd-debugger.md +1203 -0
  5. package/agents/gsd-executor.md +784 -0
  6. package/agents/gsd-integration-checker.md +423 -0
  7. package/agents/gsd-phase-researcher.md +641 -0
  8. package/agents/gsd-plan-checker.md +745 -0
  9. package/agents/gsd-planner.md +1386 -0
  10. package/agents/gsd-pm.md +331 -0
  11. package/agents/gsd-project-researcher.md +865 -0
  12. package/agents/gsd-research-synthesizer.md +256 -0
  13. package/agents/gsd-roadmapper.md +605 -0
  14. package/agents/gsd-verifier.md +778 -0
  15. package/bin/install.js +1477 -0
  16. package/commands/gsd/add-phase.md +207 -0
  17. package/commands/gsd/add-todo.md +193 -0
  18. package/commands/gsd/audit-milestone.md +277 -0
  19. package/commands/gsd/check-todos.md +228 -0
  20. package/commands/gsd/complete-milestone.md +136 -0
  21. package/commands/gsd/debug.md +169 -0
  22. package/commands/gsd/discuss-phase.md +86 -0
  23. package/commands/gsd/execute-phase.md +339 -0
  24. package/commands/gsd/help.md +545 -0
  25. package/commands/gsd/insert-phase.md +227 -0
  26. package/commands/gsd/join-discord.md +18 -0
  27. package/commands/gsd/list-phase-assumptions.md +50 -0
  28. package/commands/gsd/map-codebase.md +71 -0
  29. package/commands/gsd/new-milestone.md +721 -0
  30. package/commands/gsd/new-project.md +1008 -0
  31. package/commands/gsd/pause-work.md +134 -0
  32. package/commands/gsd/plan-milestone-gaps.md +295 -0
  33. package/commands/gsd/plan-phase.md +525 -0
  34. package/commands/gsd/pm-check.md +115 -0
  35. package/commands/gsd/pm-replan.md +102 -0
  36. package/commands/gsd/pm-start.md +218 -0
  37. package/commands/gsd/pm-status.md +116 -0
  38. package/commands/gsd/pm-stop.md +72 -0
  39. package/commands/gsd/progress.md +415 -0
  40. package/commands/gsd/quick.md +309 -0
  41. package/commands/gsd/remove-phase.md +349 -0
  42. package/commands/gsd/research-phase.md +200 -0
  43. package/commands/gsd/resume-work.md +40 -0
  44. package/commands/gsd/set-profile.md +106 -0
  45. package/commands/gsd/settings.md +151 -0
  46. package/commands/gsd/update.md +172 -0
  47. package/commands/gsd/verify-work.md +219 -0
  48. package/get-shit-done/references/checkpoints.md +1078 -0
  49. package/get-shit-done/references/continuation-format.md +249 -0
  50. package/get-shit-done/references/git-integration.md +254 -0
  51. package/get-shit-done/references/model-profiles.md +73 -0
  52. package/get-shit-done/references/planning-config.md +189 -0
  53. package/get-shit-done/references/questioning.md +141 -0
  54. package/get-shit-done/references/tdd.md +263 -0
  55. package/get-shit-done/references/ui-brand.md +172 -0
  56. package/get-shit-done/references/verification-patterns.md +612 -0
  57. package/get-shit-done/references/vibe-kanban.md +142 -0
  58. package/get-shit-done/templates/DEBUG.md +159 -0
  59. package/get-shit-done/templates/UAT.md +247 -0
  60. package/get-shit-done/templates/codebase/architecture.md +255 -0
  61. package/get-shit-done/templates/codebase/concerns.md +310 -0
  62. package/get-shit-done/templates/codebase/conventions.md +307 -0
  63. package/get-shit-done/templates/codebase/integrations.md +280 -0
  64. package/get-shit-done/templates/codebase/stack.md +186 -0
  65. package/get-shit-done/templates/codebase/structure.md +285 -0
  66. package/get-shit-done/templates/codebase/testing.md +480 -0
  67. package/get-shit-done/templates/config.json +35 -0
  68. package/get-shit-done/templates/context.md +283 -0
  69. package/get-shit-done/templates/continue-here.md +78 -0
  70. package/get-shit-done/templates/debug-subagent-prompt.md +91 -0
  71. package/get-shit-done/templates/discovery.md +146 -0
  72. package/get-shit-done/templates/milestone-archive.md +123 -0
  73. package/get-shit-done/templates/milestone.md +115 -0
  74. package/get-shit-done/templates/phase-prompt.md +567 -0
  75. package/get-shit-done/templates/planner-subagent-prompt.md +117 -0
  76. package/get-shit-done/templates/pm-config.md +55 -0
  77. package/get-shit-done/templates/pm-log.md +27 -0
  78. package/get-shit-done/templates/project.md +184 -0
  79. package/get-shit-done/templates/requirements.md +231 -0
  80. package/get-shit-done/templates/research-project/ARCHITECTURE.md +204 -0
  81. package/get-shit-done/templates/research-project/FEATURES.md +147 -0
  82. package/get-shit-done/templates/research-project/PITFALLS.md +200 -0
  83. package/get-shit-done/templates/research-project/STACK.md +120 -0
  84. package/get-shit-done/templates/research-project/SUMMARY.md +170 -0
  85. package/get-shit-done/templates/research.md +529 -0
  86. package/get-shit-done/templates/roadmap.md +202 -0
  87. package/get-shit-done/templates/state.md +205 -0
  88. package/get-shit-done/templates/summary.md +246 -0
  89. package/get-shit-done/templates/ticket-map.md +28 -0
  90. package/get-shit-done/templates/user-setup.md +311 -0
  91. package/get-shit-done/templates/verification-report.md +322 -0
  92. package/get-shit-done/workflows/complete-milestone.md +903 -0
  93. package/get-shit-done/workflows/diagnose-issues.md +231 -0
  94. package/get-shit-done/workflows/discovery-phase.md +289 -0
  95. package/get-shit-done/workflows/discuss-phase.md +433 -0
  96. package/get-shit-done/workflows/execute-phase.md +671 -0
  97. package/get-shit-done/workflows/execute-plan.md +1844 -0
  98. package/get-shit-done/workflows/list-phase-assumptions.md +178 -0
  99. package/get-shit-done/workflows/map-codebase.md +322 -0
  100. package/get-shit-done/workflows/pm-check.md +210 -0
  101. package/get-shit-done/workflows/pm-dispatch.md +104 -0
  102. package/get-shit-done/workflows/pm-replan.md +203 -0
  103. package/get-shit-done/workflows/pm-sync.md +130 -0
  104. package/get-shit-done/workflows/resume-project.md +307 -0
  105. package/get-shit-done/workflows/transition.md +556 -0
  106. package/get-shit-done/workflows/verify-phase.md +628 -0
  107. package/get-shit-done/workflows/verify-work.md +596 -0
  108. package/hooks/dist/gsd-check-update.js +61 -0
  109. package/hooks/dist/gsd-statusline.js +87 -0
  110. package/package.json +47 -0
  111. package/scripts/build-hooks.js +42 -0
  112. package/scripts/pm-loop.sh +155 -0
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env node
2
+ // Claude Code Statusline - GSD Edition
3
+ // Shows: model | current task | directory | context usage
4
+
5
+ const fs = require('fs');
6
+ const path = require('path');
7
+ const os = require('os');
8
+
9
+ // Read JSON from stdin
10
+ let input = '';
11
+ process.stdin.setEncoding('utf8');
12
+ process.stdin.on('data', chunk => input += chunk);
13
+ process.stdin.on('end', () => {
14
+ try {
15
+ const data = JSON.parse(input);
16
+ const model = data.model?.display_name || 'Claude';
17
+ const dir = data.workspace?.current_dir || process.cwd();
18
+ const session = data.session_id || '';
19
+ const remaining = data.context_window?.remaining_percentage;
20
+
21
+ // Context window display (shows USED percentage scaled to 80% limit)
22
+ // Claude Code enforces an 80% context limit, so we scale to show 100% at that point
23
+ let ctx = '';
24
+ if (remaining != null) {
25
+ const rem = Math.round(remaining);
26
+ const rawUsed = Math.max(0, Math.min(100, 100 - rem));
27
+ // Scale: 80% real usage = 100% displayed
28
+ const used = Math.min(100, Math.round((rawUsed / 80) * 100));
29
+
30
+ // Build progress bar (10 segments)
31
+ const filled = Math.floor(used / 10);
32
+ const bar = '█'.repeat(filled) + '░'.repeat(10 - filled);
33
+
34
+ // Color based on scaled usage (thresholds adjusted for new scale)
35
+ if (used < 63) { // ~50% real
36
+ ctx = ` \x1b[32m${bar} ${used}%\x1b[0m`;
37
+ } else if (used < 81) { // ~65% real
38
+ ctx = ` \x1b[33m${bar} ${used}%\x1b[0m`;
39
+ } else if (used < 95) { // ~76% real
40
+ ctx = ` \x1b[38;5;208m${bar} ${used}%\x1b[0m`;
41
+ } else {
42
+ ctx = ` \x1b[5;31m💀 ${bar} ${used}%\x1b[0m`;
43
+ }
44
+ }
45
+
46
+ // Current task from todos
47
+ let task = '';
48
+ const homeDir = os.homedir();
49
+ const todosDir = path.join(homeDir, '.claude', 'todos');
50
+ if (session && fs.existsSync(todosDir)) {
51
+ const files = fs.readdirSync(todosDir)
52
+ .filter(f => f.startsWith(session) && f.includes('-agent-') && f.endsWith('.json'))
53
+ .map(f => ({ name: f, mtime: fs.statSync(path.join(todosDir, f)).mtime }))
54
+ .sort((a, b) => b.mtime - a.mtime);
55
+
56
+ if (files.length > 0) {
57
+ try {
58
+ const todos = JSON.parse(fs.readFileSync(path.join(todosDir, files[0].name), 'utf8'));
59
+ const inProgress = todos.find(t => t.status === 'in_progress');
60
+ if (inProgress) task = inProgress.activeForm || '';
61
+ } catch (e) {}
62
+ }
63
+ }
64
+
65
+ // GSD update available?
66
+ let gsdUpdate = '';
67
+ const cacheFile = path.join(homeDir, '.claude', 'cache', 'gsd-update-check.json');
68
+ if (fs.existsSync(cacheFile)) {
69
+ try {
70
+ const cache = JSON.parse(fs.readFileSync(cacheFile, 'utf8'));
71
+ if (cache.update_available) {
72
+ gsdUpdate = '\x1b[33m⬆ /gsd:update\x1b[0m │ ';
73
+ }
74
+ } catch (e) {}
75
+ }
76
+
77
+ // Output
78
+ const dirname = path.basename(dir);
79
+ if (task) {
80
+ process.stdout.write(`${gsdUpdate}\x1b[2m${model}\x1b[0m │ \x1b[1m${task}\x1b[0m │ \x1b[2m${dirname}\x1b[0m${ctx}`);
81
+ } else {
82
+ process.stdout.write(`${gsdUpdate}\x1b[2m${model}\x1b[0m │ \x1b[2m${dirname}\x1b[0m${ctx}`);
83
+ }
84
+ } catch (e) {
85
+ // Silent fail - don't break statusline on parse errors
86
+ }
87
+ });
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "claude-cook",
3
+ "version": "1.10.1",
4
+ "description": "A meta-prompting, context engineering and spec-driven development system for Claude Code, OpenCode and Gemini by TÂCHES.",
5
+ "bin": {
6
+ "claude-cook": "bin/install.js"
7
+ },
8
+ "files": [
9
+ "bin",
10
+ "commands",
11
+ "get-shit-done",
12
+ "agents",
13
+ "hooks/dist",
14
+ "scripts"
15
+ ],
16
+ "keywords": [
17
+ "claude",
18
+ "claude-code",
19
+ "ai",
20
+ "meta-prompting",
21
+ "context-engineering",
22
+ "spec-driven-development",
23
+ "gemini",
24
+ "gemini-cli"
25
+ ],
26
+ "author": "TÂCHES",
27
+ "license": "MIT",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/glittercowboy/get-shit-done.git"
31
+ },
32
+ "homepage": "https://github.com/glittercowboy/get-shit-done",
33
+ "bugs": {
34
+ "url": "https://github.com/glittercowboy/get-shit-done/issues"
35
+ },
36
+ "engines": {
37
+ "node": ">=16.7.0"
38
+ },
39
+ "dependencies": {},
40
+ "devDependencies": {
41
+ "esbuild": "^0.24.0"
42
+ },
43
+ "scripts": {
44
+ "build:hooks": "node scripts/build-hooks.js",
45
+ "prepublishOnly": "npm run build:hooks"
46
+ }
47
+ }
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Copy GSD hooks to dist for installation.
4
+ */
5
+
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+
9
+ const HOOKS_DIR = path.join(__dirname, '..', 'hooks');
10
+ const DIST_DIR = path.join(HOOKS_DIR, 'dist');
11
+
12
+ // Hooks to copy (pure Node.js, no bundling needed)
13
+ const HOOKS_TO_COPY = [
14
+ 'gsd-check-update.js',
15
+ 'gsd-statusline.js'
16
+ ];
17
+
18
+ function build() {
19
+ // Ensure dist directory exists
20
+ if (!fs.existsSync(DIST_DIR)) {
21
+ fs.mkdirSync(DIST_DIR, { recursive: true });
22
+ }
23
+
24
+ // Copy hooks to dist
25
+ for (const hook of HOOKS_TO_COPY) {
26
+ const src = path.join(HOOKS_DIR, hook);
27
+ const dest = path.join(DIST_DIR, hook);
28
+
29
+ if (!fs.existsSync(src)) {
30
+ console.warn(`Warning: ${hook} not found, skipping`);
31
+ continue;
32
+ }
33
+
34
+ console.log(`Copying ${hook}...`);
35
+ fs.copyFileSync(src, dest);
36
+ console.log(` → ${dest}`);
37
+ }
38
+
39
+ console.log('\nBuild complete.');
40
+ }
41
+
42
+ build();
@@ -0,0 +1,155 @@
1
+ #!/bin/bash
2
+ # pm-loop.sh — Autonomous PM monitor loop
3
+ #
4
+ # Runs an infinite loop that invokes claude CLI with /gsd:pm-check on each cycle.
5
+ # Each invocation is a fresh 200k context — no context rot.
6
+ # State persists via .planning/ files (TICKET-MAP.md, STATE.md, PM-LOG.md).
7
+ #
8
+ # Usage:
9
+ # ./scripts/pm-loop.sh [--phase=N] [--interval=60]
10
+ # PM_PHASE=1 PM_POLL_INTERVAL=30 ./scripts/pm-loop.sh
11
+ #
12
+ # Stop:
13
+ # touch .planning/.pm-stop
14
+ # OR run /gsd:pm-stop
15
+ #
16
+ # Background:
17
+ # nohup ./scripts/pm-loop.sh --phase=1 > /dev/null 2>&1 &
18
+
19
+ set -euo pipefail
20
+
21
+ # ─── Parse arguments ──────────────────────────────────────────────
22
+
23
+ PHASE="${PM_PHASE:-}"
24
+ INTERVAL="${PM_POLL_INTERVAL:-60}"
25
+
26
+ for arg in "$@"; do
27
+ case $arg in
28
+ --phase=*)
29
+ PHASE="${arg#*=}"
30
+ ;;
31
+ --interval=*)
32
+ INTERVAL="${arg#*=}"
33
+ ;;
34
+ --help|-h)
35
+ echo "Usage: pm-loop.sh [--phase=N] [--interval=60]"
36
+ echo ""
37
+ echo "Environment variables:"
38
+ echo " PM_PHASE Phase number to monitor"
39
+ echo " PM_POLL_INTERVAL Seconds between poll cycles (default: 60)"
40
+ echo ""
41
+ echo "Stop: touch .planning/.pm-stop"
42
+ exit 0
43
+ ;;
44
+ *)
45
+ echo "Unknown argument: $arg"
46
+ echo "Use --help for usage."
47
+ exit 1
48
+ ;;
49
+ esac
50
+ done
51
+
52
+ # ─── Validate ─────────────────────────────────────────────────────
53
+
54
+ if [ ! -d ".planning" ]; then
55
+ echo "ERROR: No .planning/ directory found."
56
+ echo "Run /gsd:new-project first, then /gsd:pm-start"
57
+ exit 1
58
+ fi
59
+
60
+ if ! command -v claude &> /dev/null; then
61
+ echo "ERROR: claude CLI not found in PATH."
62
+ echo "Install: https://docs.anthropic.com/en/docs/claude-code"
63
+ exit 1
64
+ fi
65
+
66
+ # ─── Configuration ────────────────────────────────────────────────
67
+
68
+ STOP_FILE=".planning/.pm-stop"
69
+ PID_FILE=".planning/.pm-loop-pid"
70
+ LOG_FILE=".planning/PM-LOG.md"
71
+ CYCLE=0
72
+
73
+ # Clean any stale stop signal
74
+ rm -f "$STOP_FILE"
75
+
76
+ # Record PID for /pm:stop
77
+ echo $$ > "$PID_FILE"
78
+
79
+ # ─── Init log ─────────────────────────────────────────────────────
80
+
81
+ TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
82
+
83
+ if [ ! -f "$LOG_FILE" ]; then
84
+ cat > "$LOG_FILE" << EOF
85
+ # PM Decision Log
86
+
87
+ Started: $TIMESTAMP
88
+ Mode: autonomous
89
+ Poll interval: ${INTERVAL}s
90
+ Phase: ${PHASE:-auto}
91
+
92
+ ---
93
+
94
+ EOF
95
+ fi
96
+
97
+ echo "" >> "$LOG_FILE"
98
+ echo "## [$TIMESTAMP] INIT" >> "$LOG_FILE"
99
+ echo "" >> "$LOG_FILE"
100
+ echo "- PM loop started (PID: $$)" >> "$LOG_FILE"
101
+ echo "- Phase: ${PHASE:-auto-detect}" >> "$LOG_FILE"
102
+ echo "- Interval: ${INTERVAL}s" >> "$LOG_FILE"
103
+
104
+ # ─── Main loop ────────────────────────────────────────────────────
105
+
106
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
107
+ echo " PM Loop — Phase: ${PHASE:-auto} | Interval: ${INTERVAL}s"
108
+ echo " PID: $$ | Stop: touch $STOP_FILE"
109
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
110
+ echo ""
111
+
112
+ while true; do
113
+ # ── Check stop signal ──
114
+ if [ -f "$STOP_FILE" ]; then
115
+ TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
116
+ echo "[$TIMESTAMP] Stop signal received. Exiting."
117
+ echo "" >> "$LOG_FILE"
118
+ echo "## [$TIMESTAMP] STOP" >> "$LOG_FILE"
119
+ echo "" >> "$LOG_FILE"
120
+ echo "- PM loop stopped by stop file" >> "$LOG_FILE"
121
+ echo "- Completed $CYCLE cycles" >> "$LOG_FILE"
122
+ rm -f "$STOP_FILE" "$PID_FILE"
123
+ exit 0
124
+ fi
125
+
126
+ # ── Run one check cycle ──
127
+ CYCLE=$((CYCLE + 1))
128
+ TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
129
+ echo "[$TIMESTAMP] Cycle #$CYCLE — polling..."
130
+
131
+ # Fresh Claude invocation each cycle = no context rot
132
+ if [ -n "$PHASE" ]; then
133
+ claude --print --dangerously-skip-permissions --command "/gsd:pm-check $PHASE" 2>&1 || {
134
+ echo "[$TIMESTAMP] WARNING: claude exited with error (cycle #$CYCLE)"
135
+ echo "" >> "$LOG_FILE"
136
+ echo "## [$TIMESTAMP] ERROR" >> "$LOG_FILE"
137
+ echo "" >> "$LOG_FILE"
138
+ echo "- Claude exited with error on cycle #$CYCLE" >> "$LOG_FILE"
139
+ }
140
+ else
141
+ claude --print --dangerously-skip-permissions --command "/gsd:pm-check" 2>&1 || {
142
+ echo "[$TIMESTAMP] WARNING: claude exited with error (cycle #$CYCLE)"
143
+ echo "" >> "$LOG_FILE"
144
+ echo "## [$TIMESTAMP] ERROR" >> "$LOG_FILE"
145
+ echo "" >> "$LOG_FILE"
146
+ echo "- Claude exited with error on cycle #$CYCLE" >> "$LOG_FILE"
147
+ }
148
+ fi
149
+
150
+ echo ""
151
+
152
+ # ── Sleep until next cycle ──
153
+ echo "[$TIMESTAMP] Next check in ${INTERVAL}s..."
154
+ sleep "$INTERVAL"
155
+ done