renn-studio 0.6.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 (112) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +36 -0
  3. package/agents/renn-architect.md +1463 -0
  4. package/agents/renn-auditor.md +1053 -0
  5. package/agents/renn-codebase-mapper.md +908 -0
  6. package/agents/renn-design-reviewer.md +422 -0
  7. package/agents/renn-designer.md +814 -0
  8. package/agents/renn-detective.md +1204 -0
  9. package/agents/renn-integration-checker.md +957 -0
  10. package/agents/renn-navigator.md +659 -0
  11. package/agents/renn-plan-reviewer.md +812 -0
  12. package/agents/renn-project-scout.md +880 -0
  13. package/agents/renn-runner.md +842 -0
  14. package/agents/renn-stage-scout.md +705 -0
  15. package/agents/renn-synthesizer.md +256 -0
  16. package/bin/install.js +1466 -0
  17. package/commands/renn.add-stage.md +211 -0
  18. package/commands/renn.add-todo.md +194 -0
  19. package/commands/renn.audit-milestone.md +280 -0
  20. package/commands/renn.audit.md +219 -0
  21. package/commands/renn.check-todos.md +229 -0
  22. package/commands/renn.complete-milestone.md +136 -0
  23. package/commands/renn.continue.md +46 -0
  24. package/commands/renn.dash.md +308 -0
  25. package/commands/renn.debug.md +169 -0
  26. package/commands/renn.design-screens.md +107 -0
  27. package/commands/renn.design-system.md +100 -0
  28. package/commands/renn.discuss-stage.md +86 -0
  29. package/commands/renn.help.md +550 -0
  30. package/commands/renn.insert-stage.md +231 -0
  31. package/commands/renn.list-stage-assumptions.md +49 -0
  32. package/commands/renn.map-codebase.md +72 -0
  33. package/commands/renn.new-milestone.md +80 -0
  34. package/commands/renn.pause.md +132 -0
  35. package/commands/renn.plan-milestone-gaps.md +314 -0
  36. package/commands/renn.plan-stage.md +118 -0
  37. package/commands/renn.remove-stage.md +353 -0
  38. package/commands/renn.research-stage.md +200 -0
  39. package/commands/renn.restyle.md +98 -0
  40. package/commands/renn.run-stage.md +343 -0
  41. package/commands/renn.set-profile.md +116 -0
  42. package/commands/renn.settings.md +151 -0
  43. package/commands/renn.ship.md +52 -0
  44. package/commands/renn.start.md +95 -0
  45. package/commands/renn.status.md +530 -0
  46. package/commands/renn.watch.md +51 -0
  47. package/hooks/dist/renn-check-update.js +67 -0
  48. package/hooks/dist/renn-statusline.js +96 -0
  49. package/package.json +89 -0
  50. package/renn/references/continuation-format.md +249 -0
  51. package/renn/references/design-artifacts.md +674 -0
  52. package/renn/references/design-tokens.md +162 -0
  53. package/renn/references/gates.md +1078 -0
  54. package/renn/references/git-integration.md +254 -0
  55. package/renn/references/horsepower-profiles.md +84 -0
  56. package/renn/references/planning-config.md +189 -0
  57. package/renn/references/questioning.md +141 -0
  58. package/renn/references/security-checklist.md +2184 -0
  59. package/renn/references/tdd.md +263 -0
  60. package/renn/references/ui-brand.md +189 -0
  61. package/renn/references/verification-patterns.md +612 -0
  62. package/renn/templates/DEBUG.md +159 -0
  63. package/renn/templates/INTEL.md +283 -0
  64. package/renn/templates/RECAP.md +246 -0
  65. package/renn/templates/UAT.md +247 -0
  66. package/renn/templates/architect-prompt.md +119 -0
  67. package/renn/templates/brief.md +190 -0
  68. package/renn/templates/codebase/architecture.md +264 -0
  69. package/renn/templates/codebase/concerns.md +310 -0
  70. package/renn/templates/codebase/conventions.md +307 -0
  71. package/renn/templates/codebase/design.md +336 -0
  72. package/renn/templates/codebase/integrations.md +280 -0
  73. package/renn/templates/codebase/stack.md +186 -0
  74. package/renn/templates/codebase/structure.md +295 -0
  75. package/renn/templates/codebase/testing.md +480 -0
  76. package/renn/templates/config.json +36 -0
  77. package/renn/templates/continue-here.md +80 -0
  78. package/renn/templates/detective-prompt.md +93 -0
  79. package/renn/templates/milestone-archive.md +123 -0
  80. package/renn/templates/milestone.md +117 -0
  81. package/renn/templates/proof.md +326 -0
  82. package/renn/templates/pulse.md +176 -0
  83. package/renn/templates/research/architecture.md +206 -0
  84. package/renn/templates/research/features.md +149 -0
  85. package/renn/templates/research/pitfalls.md +202 -0
  86. package/renn/templates/research/recap.md +187 -0
  87. package/renn/templates/research/stack.md +122 -0
  88. package/renn/templates/research/ux.md +283 -0
  89. package/renn/templates/research-lite.md +146 -0
  90. package/renn/templates/research.md +582 -0
  91. package/renn/templates/specs.md +233 -0
  92. package/renn/templates/stage-prompt.md +571 -0
  93. package/renn/templates/track.md +211 -0
  94. package/renn/templates/user-setup.md +315 -0
  95. package/renn/workflows/audit-stage.md +717 -0
  96. package/renn/workflows/audit-work.md +596 -0
  97. package/renn/workflows/complete-milestone.md +875 -0
  98. package/renn/workflows/continue-project.md +306 -0
  99. package/renn/workflows/design-stage.md +2019 -0
  100. package/renn/workflows/diagnose-issues.md +231 -0
  101. package/renn/workflows/initialize-project.md +1039 -0
  102. package/renn/workflows/list-assumptions.md +178 -0
  103. package/renn/workflows/map-codebase.md +374 -0
  104. package/renn/workflows/new-milestone.md +718 -0
  105. package/renn/workflows/plan-stage.md +810 -0
  106. package/renn/workflows/research-stage.md +289 -0
  107. package/renn/workflows/run-plan.md +1844 -0
  108. package/renn/workflows/run-stage.md +692 -0
  109. package/renn/workflows/scope-stage.md +546 -0
  110. package/renn/workflows/ship-project.md +859 -0
  111. package/renn/workflows/transition.md +556 -0
  112. package/renn/workflows/watch-project.md +797 -0
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env node
2
+ // Check for RENN updates in background, write result to cache
3
+ // Called by SessionStart hook - runs once per session
4
+
5
+ const fs = require('fs');
6
+ const path = require('path');
7
+ const os = require('os');
8
+ const { spawn } = require('child_process');
9
+
10
+ const homeDir = os.homedir();
11
+ const cwd = process.cwd();
12
+ const cacheDir = path.join(homeDir, '.claude', 'cache');
13
+ const cacheFile = path.join(cacheDir, 'renn-update-check.json');
14
+
15
+ // VERSION file locations (check project first, then global)
16
+ const projectVersionFile = path.join(cwd, '.claude', 'renn', 'VERSION');
17
+ const globalVersionFile = path.join(homeDir, '.claude', 'renn', 'VERSION');
18
+
19
+ // Ensure cache directory exists
20
+ if (!fs.existsSync(cacheDir)) {
21
+ fs.mkdirSync(cacheDir, { recursive: true });
22
+ }
23
+
24
+ // Run check in background
25
+ const child = spawn(
26
+ process.execPath,
27
+ [
28
+ '-e',
29
+ `
30
+ const fs = require('fs');
31
+ const { execSync } = require('child_process');
32
+
33
+ const cacheFile = ${JSON.stringify(cacheFile)};
34
+ const projectVersionFile = ${JSON.stringify(projectVersionFile)};
35
+ const globalVersionFile = ${JSON.stringify(globalVersionFile)};
36
+
37
+ let installed = '0.0.0';
38
+ try {
39
+ if (fs.existsSync(projectVersionFile)) {
40
+ installed = fs.readFileSync(projectVersionFile, 'utf8').trim();
41
+ } else if (fs.existsSync(globalVersionFile)) {
42
+ installed = fs.readFileSync(globalVersionFile, 'utf8').trim();
43
+ }
44
+ } catch (e) {}
45
+
46
+ let latest = null;
47
+ try {
48
+ latest = execSync('npm view renn version', { encoding: 'utf8', timeout: 10000, windowsHide: true }).trim();
49
+ } catch (e) {}
50
+
51
+ const result = {
52
+ update_available: latest && installed !== latest,
53
+ installed,
54
+ latest: latest || 'unknown',
55
+ checked: Math.floor(Date.now() / 1000)
56
+ };
57
+
58
+ fs.writeFileSync(cacheFile, JSON.stringify(result));
59
+ `,
60
+ ],
61
+ {
62
+ stdio: 'ignore',
63
+ windowsHide: true,
64
+ }
65
+ );
66
+
67
+ child.unref();
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env node
2
+ // Claude Code Statusline - RENN 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
+ let ctx = '';
23
+ if (remaining != null) {
24
+ const rem = Math.round(remaining);
25
+ const rawUsed = Math.max(0, Math.min(100, 100 - rem));
26
+ const used = Math.min(100, Math.round((rawUsed / 80) * 100));
27
+
28
+ const filled = Math.floor(used / 10);
29
+ const bar = '\u2588'.repeat(filled) + '\u2591'.repeat(10 - filled);
30
+
31
+ if (used < 63) {
32
+ ctx = ` \x1b[32m${bar} ${used}%\x1b[0m`;
33
+ } else if (used < 81) {
34
+ ctx = ` \x1b[33m${bar} ${used}%\x1b[0m`;
35
+ } else if (used < 95) {
36
+ ctx = ` \x1b[38;5;208m${bar} ${used}%\x1b[0m`;
37
+ } else {
38
+ ctx = ` \x1b[5;31m\ud83d\udc80 ${bar} ${used}%\x1b[0m`;
39
+ }
40
+ }
41
+
42
+ // Current task from todos
43
+ let task = '';
44
+ const homeDir = os.homedir();
45
+ const todosDir = path.join(homeDir, '.claude', 'todos');
46
+ if (session && fs.existsSync(todosDir)) {
47
+ try {
48
+ const files = fs
49
+ .readdirSync(todosDir)
50
+ .filter((f) => f.startsWith(session) && f.includes('-agent-') && f.endsWith('.json'))
51
+ .map((f) => ({ name: f, mtime: fs.statSync(path.join(todosDir, f)).mtime }))
52
+ .sort((a, b) => b.mtime - a.mtime);
53
+
54
+ if (files.length > 0) {
55
+ try {
56
+ const todos = JSON.parse(fs.readFileSync(path.join(todosDir, files[0].name), 'utf8'));
57
+ const inProgress = todos.find((t) => t.status === 'in_progress');
58
+ if (inProgress) task = inProgress.activeForm || '';
59
+ } catch (_e) {
60
+ /* ignore parse errors */
61
+ }
62
+ }
63
+ } catch (_e) {
64
+ // Silently fail on file system errors
65
+ }
66
+ }
67
+
68
+ // RENN update available?
69
+ let rennUpdate = '';
70
+ const cacheFile = path.join(homeDir, '.claude', 'cache', 'renn-update-check.json');
71
+ if (fs.existsSync(cacheFile)) {
72
+ try {
73
+ const cache = JSON.parse(fs.readFileSync(cacheFile, 'utf8'));
74
+ if (cache.update_available) {
75
+ rennUpdate = '\x1b[33m\u2b06 RENN update\x1b[0m \u2502 ';
76
+ }
77
+ } catch (_e) {
78
+ /* ignore parse errors */
79
+ }
80
+ }
81
+
82
+ // Output
83
+ const dirname = path.basename(dir);
84
+ if (task) {
85
+ process.stdout.write(
86
+ `${rennUpdate}\x1b[2m${model}\x1b[0m \u2502 \x1b[1m${task}\x1b[0m \u2502 \x1b[2m${dirname}\x1b[0m${ctx}`
87
+ );
88
+ } else {
89
+ process.stdout.write(
90
+ `${rennUpdate}\x1b[2m${model}\x1b[0m \u2502 \x1b[2m${dirname}\x1b[0m${ctx}`
91
+ );
92
+ }
93
+ } catch (_e) {
94
+ // Silent fail
95
+ }
96
+ });
package/package.json ADDED
@@ -0,0 +1,89 @@
1
+ {
2
+ "name": "renn-studio",
3
+ "version": "0.6.0",
4
+ "description": "Grow ideas into shipped software",
5
+ "bin": {
6
+ "renn": "bin/install.js"
7
+ },
8
+ "files": [
9
+ "bin",
10
+ "commands",
11
+ "renn",
12
+ "agents",
13
+ "hooks/dist"
14
+ ],
15
+ "keywords": [
16
+ "claude",
17
+ "claude-code",
18
+ "ai",
19
+ "agentic",
20
+ "context-engineering",
21
+ "code-execution",
22
+ "gemini",
23
+ "gemini-cli"
24
+ ],
25
+ "author": "Ash",
26
+ "license": "MIT",
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "https://github.com/AshExplained/renn.git"
30
+ },
31
+ "homepage": "https://github.com/AshExplained/renn",
32
+ "bugs": {
33
+ "url": "https://github.com/AshExplained/renn/issues"
34
+ },
35
+ "engines": {
36
+ "node": ">=16.7.0"
37
+ },
38
+ "devDependencies": {
39
+ "@eslint/js": "^9.39.2",
40
+ "eslint": "^9.39.2",
41
+ "husky": "^9.1.7",
42
+ "lint-staged": "^16.2.7",
43
+ "prettier": "^3.8.1"
44
+ },
45
+ "lint-staged": {
46
+ "*.js": [
47
+ "eslint --fix",
48
+ "prettier --write"
49
+ ],
50
+ "*.json": [
51
+ "prettier --write"
52
+ ],
53
+ "*.{yml,yaml}": [
54
+ "prettier --write"
55
+ ],
56
+ "commands/*.md": [
57
+ "node scripts/validate-markdown.js"
58
+ ],
59
+ "agents/*.md": [
60
+ "node scripts/validate-markdown.js"
61
+ ],
62
+ "renn/workflows/*.md": [
63
+ "node scripts/validate-markdown.js"
64
+ ],
65
+ "renn/references/*.md": [
66
+ "node scripts/validate-markdown.js"
67
+ ],
68
+ "renn/templates/**/*.md": [
69
+ "node scripts/validate-markdown.js"
70
+ ],
71
+ "hooks/renn-*.js": [
72
+ "eslint --fix",
73
+ "prettier --write"
74
+ ]
75
+ },
76
+ "scripts": {
77
+ "build:hooks": "node scripts/build-hooks.js",
78
+ "prepublishOnly": "npm run build:hooks",
79
+ "prepare": "husky",
80
+ "lint": "eslint .",
81
+ "lint:fix": "eslint . --fix",
82
+ "format": "prettier --write .",
83
+ "format:check": "prettier --check .",
84
+ "validate": "node scripts/validate-markdown.js",
85
+ "validate:dist": "node scripts/check-dist-sync.js",
86
+ "test": "node --test tests/*.test.js",
87
+ "check": "npm run lint && npm run format:check && npm run validate && npm run validate:dist"
88
+ }
89
+ }
@@ -0,0 +1,249 @@
1
+ # Continuation Format
2
+
3
+ Standard format for presenting next steps after completing a command or workflow.
4
+
5
+ ## Core Structure
6
+
7
+ ```
8
+ ---
9
+
10
+ ## ▶ Next Up
11
+
12
+ **{identifier}: {name}** — {one-line description}
13
+
14
+ `{command to copy-paste}`
15
+
16
+ <sub>`/clear` first → fresh context window</sub>
17
+
18
+ ---
19
+
20
+ **Also available:**
21
+ - `{alternative option 1}` — description
22
+ - `{alternative option 2}` — description
23
+
24
+ ---
25
+ ```
26
+
27
+ ## Format Rules
28
+
29
+ 1. **Always show what it is** — name + description, never just a command path
30
+ 2. **Pull context from source** — track.md for stages, run.md `<objective>` for runs
31
+ 3. **Command in inline code** — backticks, easy to copy-paste, renders as clickable link
32
+ 4. **`/clear` explanation** — always include, keeps it concise but explains why
33
+ 5. **"Also available" not "Other options"** — sounds more app-like
34
+ 6. **Visual separators** — `---` above and below to make it stand out
35
+
36
+ ## Variants
37
+
38
+ ### Execute Next Run
39
+
40
+ ```
41
+ ---
42
+
43
+ ## ▶ Next Up
44
+
45
+ **02.03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry
46
+
47
+ `/renn.run-stage 2`
48
+
49
+ <sub>`/clear` first → fresh context window</sub>
50
+
51
+ ---
52
+
53
+ **Also available:**
54
+ - Review run before executing
55
+ - `/renn.list-stage-assumptions 2` — check assumptions
56
+
57
+ ---
58
+ ```
59
+
60
+ ### Execute Final Run in Stage
61
+
62
+ Add note that this is the last run and what comes after:
63
+
64
+ ```
65
+ ---
66
+
67
+ ## ▶ Next Up
68
+
69
+ **02.03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry
70
+ <sub>Final run in Stage 2</sub>
71
+
72
+ `/renn.run-stage 2`
73
+
74
+ <sub>`/clear` first → fresh context window</sub>
75
+
76
+ ---
77
+
78
+ **After this completes:**
79
+ - Stage 2 → Stage 3 transition
80
+ - Next: **Stage 3: Core Features** — User dashboard and settings
81
+
82
+ ---
83
+ ```
84
+
85
+ ### Plan a Stage
86
+
87
+ ```
88
+ ---
89
+
90
+ ## ▶ Next Up
91
+
92
+ **Stage 2: Authentication** — JWT login flow with refresh tokens
93
+
94
+ `/renn.plan-stage 2`
95
+
96
+ <sub>`/clear` first → fresh context window</sub>
97
+
98
+ ---
99
+
100
+ **Also available:**
101
+ - `/renn.discuss-stage 2` — gather context first
102
+ - `/renn.research-stage 2` — investigate unknowns
103
+ - Review track
104
+
105
+ ---
106
+ ```
107
+
108
+ ### Stage Complete, Ready for Next
109
+
110
+ Show completion status before next action:
111
+
112
+ ```
113
+ ---
114
+
115
+ ## ✓ Stage 2 Complete
116
+
117
+ 3/3 runs executed
118
+
119
+ ## ▶ Next Up
120
+
121
+ **Stage 3: Core Features** — User dashboard, settings, and data export
122
+
123
+ `/renn.plan-stage 3`
124
+
125
+ <sub>`/clear` first → fresh context window</sub>
126
+
127
+ ---
128
+
129
+ **Also available:**
130
+ - `/renn.discuss-stage 3` — gather context first
131
+ - `/renn.research-stage 3` — investigate unknowns
132
+ - Review what Stage 2 built
133
+
134
+ ---
135
+ ```
136
+
137
+ ### Multiple Equal Options
138
+
139
+ When there's no clear primary action:
140
+
141
+ ```
142
+ ---
143
+
144
+ ## ▶ Next Up
145
+
146
+ **Stage 3: Core Features** — User dashboard, settings, and data export
147
+
148
+ **To plan directly:** `/renn.plan-stage 3`
149
+
150
+ **To discuss context first:** `/renn.discuss-stage 3`
151
+
152
+ **To research unknowns:** `/renn.research-stage 3`
153
+
154
+ <sub>`/clear` first → fresh context window</sub>
155
+
156
+ ---
157
+ ```
158
+
159
+ ### Milestone Complete
160
+
161
+ ```
162
+ ---
163
+
164
+ ## 🎉 Milestone v1.0 Complete
165
+
166
+ All 4 stages shipped
167
+
168
+ ## ▶ Next Up
169
+
170
+ **Start v1.1** — questioning → research → requirements → track
171
+
172
+ `/renn.new-milestone`
173
+
174
+ <sub>`/clear` first → fresh context window</sub>
175
+
176
+ ---
177
+ ```
178
+
179
+ ## Pulling Context
180
+
181
+ ### For stages (from track.md):
182
+
183
+ ```markdown
184
+ ### Stage 2: Authentication
185
+ **Goal**: JWT login flow with refresh tokens
186
+ ```
187
+
188
+ Extract: `**Stage 2: Authentication** — JWT login flow with refresh tokens`
189
+
190
+ ### For runs (from track.md):
191
+
192
+ ```markdown
193
+ Runs:
194
+ - [ ] 02.03: Add refresh token rotation
195
+ ```
196
+
197
+ Or from run.md `<objective>`:
198
+
199
+ ```xml
200
+ <objective>
201
+ Add refresh token rotation with sliding expiry window.
202
+
203
+ Purpose: Extend session lifetime without compromising security.
204
+ </objective>
205
+ ```
206
+
207
+ Extract: `**02.03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry`
208
+
209
+ ## Anti-Patterns
210
+
211
+ ### Don't: Command-only (no context)
212
+
213
+ ```
214
+ ## To Continue
215
+
216
+ Run `/clear`, then paste:
217
+ /renn.run-stage 2
218
+ ```
219
+
220
+ User has no idea what 02.03 is about.
221
+
222
+ ### Don't: Missing /clear explanation
223
+
224
+ ```
225
+ `/renn.plan-stage 3`
226
+
227
+ Run /clear first.
228
+ ```
229
+
230
+ Doesn't explain why. User might skip it.
231
+
232
+ ### Don't: "Other options" language
233
+
234
+ ```
235
+ Other options:
236
+ - Review track
237
+ ```
238
+
239
+ Sounds like an afterthought. Use "Also available:" instead.
240
+
241
+ ### Don't: Fenced code blocks for commands
242
+
243
+ ```
244
+ ```
245
+ /renn.plan-stage 3
246
+ ```
247
+ ```
248
+
249
+ Fenced blocks inside templates create nesting ambiguity. Use inline backticks instead.