@lenardangeloolajay/len-toolkit 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 (114) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +209 -0
  3. package/bin/cli.js +244 -0
  4. package/package.json +35 -0
  5. package/src/installer.js +236 -0
  6. package/templates/configs/.editorconfig +12 -0
  7. package/templates/configs/sample.gitignore +8 -0
  8. package/templates/docs/FEATURE.md +40 -0
  9. package/templates/docs/HANDOFF.md +39 -0
  10. package/templates/docs/IMPLEMENTATION_PLAN.md +47 -0
  11. package/templates/docs/SPEC_INDEX.md +12 -0
  12. package/templates/docs/VERIFICATION.md +14 -0
  13. package/templates/docs/product/ARCHITECTURE.md +22 -0
  14. package/templates/docs/product/CONSTRAINTS.md +22 -0
  15. package/templates/docs/product/DATA_MODEL.md +22 -0
  16. package/templates/docs/product/OVERVIEW.md +22 -0
  17. package/templates/examples/flutter-handoff/EXERCISES.md +16 -0
  18. package/templates/examples/flutter-handoff/HANDOFF.md +32 -0
  19. package/templates/examples/flutter-handoff/docs/SPEC_INDEX.md +19 -0
  20. package/templates/examples/flutter-handoff/docs/evidence/FEAT-001-verification.md +14 -0
  21. package/templates/examples/flutter-handoff/docs/features/FEAT-001-local-note.md +40 -0
  22. package/templates/examples/flutter-handoff/docs/plans/FEAT-001-implementation.md +43 -0
  23. package/templates/examples/flutter-handoff/docs/product/ARCHITECTURE.md +24 -0
  24. package/templates/examples/flutter-handoff/docs/product/CONSTRAINTS.md +13 -0
  25. package/templates/examples/flutter-handoff/docs/product/DATA_MODEL.md +20 -0
  26. package/templates/examples/flutter-handoff/docs/product/OVERVIEW.md +26 -0
  27. package/templates/rules/.cursorrules +7 -0
  28. package/templates/rules/AGENTS.md +61 -0
  29. package/templates/rules/GEMINI.md +7 -0
  30. package/templates/skills/a-philosophy-of-software-design/SKILL.md +11 -0
  31. package/templates/skills/a-philosophy-of-software-design/a-philosophy-of-software-design.md +370 -0
  32. package/templates/skills/a-philosophy-of-software-design/a-philosophy-of-software-design.mini.md +46 -0
  33. package/templates/skills/a-philosophy-of-software-design/a-philosophy-of-software-design.nano.md +35 -0
  34. package/templates/skills/clean-architecture/SKILL.md +11 -0
  35. package/templates/skills/clean-architecture/clean-architecture.md +515 -0
  36. package/templates/skills/clean-architecture/clean-architecture.mini.md +49 -0
  37. package/templates/skills/clean-architecture/clean-architecture.nano.md +36 -0
  38. package/templates/skills/clean-code/SKILL.md +11 -0
  39. package/templates/skills/clean-code/clean-code.md +297 -0
  40. package/templates/skills/clean-code/clean-code.mini.md +47 -0
  41. package/templates/skills/clean-code/clean-code.nano.md +32 -0
  42. package/templates/skills/code-complete/SKILL.md +11 -0
  43. package/templates/skills/code-complete/code-complete.md +354 -0
  44. package/templates/skills/code-complete/code-complete.mini.md +56 -0
  45. package/templates/skills/code-complete/code-complete.nano.md +41 -0
  46. package/templates/skills/council/SKILL.md +37 -0
  47. package/templates/skills/designing-data-intensive-applications/SKILL.md +11 -0
  48. package/templates/skills/designing-data-intensive-applications/designing-data-intensive-applications.md +393 -0
  49. package/templates/skills/designing-data-intensive-applications/designing-data-intensive-applications.mini.md +55 -0
  50. package/templates/skills/designing-data-intensive-applications/designing-data-intensive-applications.nano.md +34 -0
  51. package/templates/skills/domain-driven-design/SKILL.md +11 -0
  52. package/templates/skills/domain-driven-design/domain-driven-design.md +979 -0
  53. package/templates/skills/domain-driven-design/domain-driven-design.mini.md +48 -0
  54. package/templates/skills/domain-driven-design/domain-driven-design.nano.md +39 -0
  55. package/templates/skills/domain-driven-design-distilled/SKILL.md +11 -0
  56. package/templates/skills/domain-driven-design-distilled/domain-driven-design-distilled.md +317 -0
  57. package/templates/skills/domain-driven-design-distilled/domain-driven-design-distilled.mini.md +56 -0
  58. package/templates/skills/domain-driven-design-distilled/domain-driven-design-distilled.nano.md +41 -0
  59. package/templates/skills/implementation-plan/SKILL.md +42 -0
  60. package/templates/skills/implementing-domain-driven-design/SKILL.md +11 -0
  61. package/templates/skills/implementing-domain-driven-design/implementing-domain-driven-design.md +337 -0
  62. package/templates/skills/implementing-domain-driven-design/implementing-domain-driven-design.mini.md +57 -0
  63. package/templates/skills/implementing-domain-driven-design/implementing-domain-driven-design.nano.md +37 -0
  64. package/templates/skills/patterns-of-enterprise-application-architecture/SKILL.md +11 -0
  65. package/templates/skills/patterns-of-enterprise-application-architecture/patterns-of-enterprise-application-architecture.md +404 -0
  66. package/templates/skills/patterns-of-enterprise-application-architecture/patterns-of-enterprise-application-architecture.mini.md +54 -0
  67. package/templates/skills/patterns-of-enterprise-application-architecture/patterns-of-enterprise-application-architecture.nano.md +35 -0
  68. package/templates/skills/ponytail/SKILL.md +124 -0
  69. package/templates/skills/ponytail-audit/SKILL.md +45 -0
  70. package/templates/skills/ponytail-debt/SKILL.md +48 -0
  71. package/templates/skills/ponytail-gain/SKILL.md +17 -0
  72. package/templates/skills/ponytail-help/SKILL.md +42 -0
  73. package/templates/skills/ponytail-review/SKILL.md +61 -0
  74. package/templates/skills/refactoring/SKILL.md +11 -0
  75. package/templates/skills/refactoring/refactoring.md +433 -0
  76. package/templates/skills/refactoring/refactoring.mini.md +49 -0
  77. package/templates/skills/refactoring/refactoring.nano.md +37 -0
  78. package/templates/skills/refactoring-guru/SKILL.md +11 -0
  79. package/templates/skills/refactoring-guru/refactoring-guru.md +765 -0
  80. package/templates/skills/refactoring-guru/refactoring-guru.mini.md +64 -0
  81. package/templates/skills/refactoring-guru/refactoring-guru.nano.md +41 -0
  82. package/templates/skills/release-it/SKILL.md +11 -0
  83. package/templates/skills/release-it/release-it.md +382 -0
  84. package/templates/skills/release-it/release-it.mini.md +48 -0
  85. package/templates/skills/release-it/release-it.nano.md +38 -0
  86. package/templates/skills/security-audit/AI-AND-LLM.md +83 -0
  87. package/templates/skills/security-audit/ATTACK-CLASSES.md +130 -0
  88. package/templates/skills/security-audit/CLIENT-SIDE.md +83 -0
  89. package/templates/skills/security-audit/CLOUD-AND-DEPLOYMENT.md +86 -0
  90. package/templates/skills/security-audit/DATA-ISOLATION-AND-LIFECYCLE.md +84 -0
  91. package/templates/skills/security-audit/DESKTOP-MOBILE-AND-LOCAL-IPC.md +89 -0
  92. package/templates/skills/security-audit/HUNTING.md +251 -0
  93. package/templates/skills/security-audit/MEMORY-SAFETY-AND-BINARY.md +101 -0
  94. package/templates/skills/security-audit/PROTOCOLS-RPC-AND-MESSAGING.md +81 -0
  95. package/templates/skills/security-audit/RECONNAISSANCE.md +156 -0
  96. package/templates/skills/security-audit/RESOURCE-EXHAUSTION-AND-AVAILABILITY.md +78 -0
  97. package/templates/skills/security-audit/SKILL.md +192 -0
  98. package/templates/skills/security-audit/SUPPLY-CHAIN-AND-RELEASE.md +73 -0
  99. package/templates/skills/security-audit/VALIDATION-AND-REPORTING.md +186 -0
  100. package/templates/skills/security-audit/WEB-PROTOCOL-AND-AUTH.md +105 -0
  101. package/templates/skills/security-audit/report-schema.json +461 -0
  102. package/templates/skills/security-audit/validate-coverage-ledger.cjs +872 -0
  103. package/templates/skills/security-audit/validate-coverage-ledger.test.cjs +740 -0
  104. package/templates/skills/security-audit/validate-findings.cjs +773 -0
  105. package/templates/skills/security-audit/validate-findings.test.cjs +652 -0
  106. package/templates/skills/spec/SKILL.md +55 -0
  107. package/templates/skills/the-pragmatic-programmer/SKILL.md +11 -0
  108. package/templates/skills/the-pragmatic-programmer/the-pragmatic-programmer.md +359 -0
  109. package/templates/skills/the-pragmatic-programmer/the-pragmatic-programmer.mini.md +65 -0
  110. package/templates/skills/the-pragmatic-programmer/the-pragmatic-programmer.nano.md +44 -0
  111. package/templates/skills/working-effectively-with-legacy-code/SKILL.md +11 -0
  112. package/templates/skills/working-effectively-with-legacy-code/working-effectively-with-legacy-code.md +371 -0
  113. package/templates/skills/working-effectively-with-legacy-code/working-effectively-with-legacy-code.mini.md +50 -0
  114. package/templates/skills/working-effectively-with-legacy-code/working-effectively-with-legacy-code.nano.md +35 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Len
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,209 @@
1
+ # Len's Toolkit
2
+
3
+ ![Len's Toolkit](assets/ChatGPT%20Image%20Sep%2020,%202026,%2009_45_22%20PM.png)
4
+
5
+ > [!NOTE]
6
+ > **Collection Disclaimer and Attribution:**
7
+ > This repository is strictly a curated collection of tools, skills, and engineering rulesets sourced from experienced engineers across the software industry.
8
+ > I am not the author of these files, and I do not claim 100% ownership over them.
9
+ > I gathered and adapted these tools from other people to build a streamlined AI coding workflow, and I credit them fully for their work.
10
+
11
+ This repository contains my personal guidelines, rulesets, and skills for AI pair programming.
12
+ Feel free to copy whatever you want and create PRs!
13
+ Technically this is a disciplined ruleset designed to help build solid, high quality code instead of unverified slop.
14
+
15
+ A personal, dependency-free toolkit for Len's GPT-to-Antigravity workflow.
16
+ GPT explores the product and defines architecture with Len.
17
+ Len approves the specs and plan.
18
+ Gemini implements approved phases with checks and local commits.
19
+
20
+ ## Start a project session
21
+
22
+ Run this from the project directory once this revision has been published:
23
+
24
+ ```powershell
25
+ npx @lenardangeloolajay/len-toolkit start
26
+ ```
27
+
28
+ This checkout has not been published by this change.
29
+ To use the current local checkout from any project now, substitute its absolute path in this one-command equivalent:
30
+
31
+ ```powershell
32
+ npm exec --offline --package="C:\path\to\Len's_Toolkit" -- len-toolkit start
33
+ ```
34
+
35
+ The local-package form was exercised with npm in a temporary project on Windows.
36
+ It does not require a global install.
37
+ Then launch your usual Antigravity CLI:
38
+
39
+ ```powershell
40
+ agi
41
+ ```
42
+
43
+ Tell the receiving agent: "Read project AGENTS.md and HANDOFF.md, follow their approved references, and execute the approved plan."
44
+ If the project has no approved handoff yet, work with GPT on the specs first.
45
+ Automatic Antigravity instruction discovery has not been verified here; explicitly point it to the files.
46
+
47
+ ## What startup does
48
+
49
+ - Initializes Git only when there is no enclosing repository, reporting the branch and existing edits.
50
+ - Installs missing personal rules, 24 skills, reusable document templates, and basic development configs.
51
+ - Preserves existing files and reports differences with paths to the proposed versions.
52
+ - Checks whether Git can resolve author and committer identity without changing your configuration.
53
+ - Reports whether the index, handoff, and root plan exist, leaving content and approval review to the agent.
54
+
55
+ Startup does not approve work, create a second spec tree, launch an agent, stage files, commit, or push.
56
+ It refuses `--force` and `--global`; use the legacy commands only when their broader behavior is intended.
57
+ A successful exit means setup checks finished, not that differences are resolved or the project is approved for implementation.
58
+ A failed setup may have created a repository or installed some missing files before the error; address the reported issue and rerun safely.
59
+ Existing custom instructions require review, not an automatic overwrite disguised as an upgrade.
60
+
61
+ ## The personal workflow
62
+
63
+ 1. Explore the whole product with GPT in focused question rounds, including proposed defaults and unresolved requirements.
64
+ 2. Settle planned features, main user flows, shared data, boundaries, architecture, and major constraints.
65
+ 3. Approve the product baseline and architecture in chat.
66
+ 4. Detail one feature's observable requirements, then its implementation plan; approve both in chat.
67
+ 5. Maintain one current handoff with exact approved revisions, allowed phases, progress, checks, attempts, and next action.
68
+ 6. Gemini implements each approved phase, verifies it, updates the records, reviews the staged diff, and commits only related changes.
69
+ 7. Gemini continues automatically until the last approved phase or a real blocker.
70
+
71
+ A phase is complete only after passing required checks and a successful commit.
72
+ Interrupted or failing work remains uncommitted.
73
+ For the same unresolved problem, Gemini gets three unsuccessful fix-and-check attempts after the initial observed failure, then reports a blocker without resetting the count on resume.
74
+ Missing decisions, unavailable access or hardware, and necessary architecture changes block affected work immediately.
75
+ Gemini can report a disagreement but cannot silently replace approved architecture or add features.
76
+ Len's approval applies to specific revisions, not future substantive changes.
77
+
78
+ ## Documents that stay organized
79
+
80
+ ```text
81
+ project/
82
+ AGENTS.md Shared personal workflow
83
+ GEMINI.md Gemini entry point
84
+ HANDOFF.md One current handoff
85
+ IMPLEMENTATION_PLAN.md Optional pointer to the active plan
86
+ .agents/
87
+ skills/ Spec, Council, plan, and Ponytail suite
88
+ templates/docs/ Reusable templates, not active specs
89
+ docs/
90
+ SPEC_INDEX.md Current documents, revisions, and status
91
+ product/
92
+ OVERVIEW.md
93
+ ARCHITECTURE.md
94
+ DATA_MODEL.md
95
+ CONSTRAINTS.md
96
+ features/FEAT-001-name.md Behavior and acceptance criteria
97
+ plans/FEAT-001-implementation.md Tasks, checks, and phase progress
98
+ evidence/FEAT-001-verification.md
99
+ archive/ Superseded documents with replacement links
100
+ ```
101
+
102
+ Create categories only when needed and adopt an existing project convention rather than duplicating it.
103
+ Search the index and current specs before creating a file.
104
+ Refinements update the existing feature spec; superseded documents move to the archive with replacement links and updated references.
105
+ Active filenames are stable, while creation and substantive-update timestamps inside documents use ISO 8601 with `+08:00`.
106
+ Requirements have stable IDs, and plans and evidence reference them.
107
+ Specs describe behavior; plans contain task checkboxes and commands.
108
+
109
+ Use [the fictional Flutter handoff](templates/examples/flutter-handoff/docs/SPEC_INDEX.md) to inspect a complete example.
110
+ Its approvals, implementation, and verification are deliberately pending.
111
+ [Inspection exercises](templates/examples/flutter-handoff/EXERCISES.md) cover reuse, supersession, interruption, retries, and evidence boundaries.
112
+ No fictional project has been tested on an emulator or device.
113
+
114
+ ## Skills and templates
115
+
116
+ Len's Toolkit includes 24 curated skills across core workflow, security, and software engineering book principles:
117
+
118
+ ### Core Workflow and Optimization Skills
119
+
120
+ - `spec`: product discovery, organized requirements, document reuse, and revision approval.
121
+ - `council`: consequential architecture trade-offs and failure modes before approval.
122
+ - `implementation-plan`: approved phases, verification, commits, and recovery.
123
+ - `ponytail`: reuse, standard-library-first implementation, and minimal necessary code.
124
+ - `ponytail-review` and `ponytail-audit`: complexity findings without automatic fixes.
125
+ - `ponytail-debt`: recorded deliberate shortcuts.
126
+ - `ponytail-gain`: attributable evidence only; no unsupported savings figures.
127
+ - `ponytail-help`: the Ponytail reference card.
128
+ - `security-audit`: security guidance, vulnerability review, and structured audit harness.
129
+
130
+ ### Software Engineering Book Skills
131
+
132
+ Distilled rules from classic software engineering literature, adapted from [Maciej Ciemborowicz's agent-rules-books](https://github.com/ciembor/agent-rules-books):
133
+
134
+ - `a-philosophy-of-software-design`: complexity reduction and deep module boundaries (John Ousterhout).
135
+ - `clean-architecture`: separation of business policy from frameworks and details (Robert C. Martin).
136
+ - `clean-code`: readability, naming, small functions, and clean code hygiene (Robert C. Martin).
137
+ - `code-complete`: software construction, routine design, and defensive programming (Steve McConnell).
138
+ - `designing-data-intensive-applications`: reliability, scalability, and consistency in data systems (Martin Kleppmann).
139
+ - `domain-driven-design`: domain modeling, bounded contexts, and ubiquitous language (Eric Evans).
140
+ - `domain-driven-design-distilled`: lightweight domain modeling and subdomains (Vaughn Vernon).
141
+ - `implementing-domain-driven-design`: tactical DDD patterns, aggregates, and domain events (Vaughn Vernon).
142
+ - `patterns-of-enterprise-application-architecture`: enterprise layers, repositories, and mappers (Martin Fowler).
143
+ - `refactoring`: systematic code refactoring and mechanics (Martin Fowler).
144
+ - `refactoring-guru`: code smell diagnosis and refactoring technique catalogs (Refactoring.Guru).
145
+ - `release-it`: production stability, circuit breakers, and resilience (Michael T. Nygard).
146
+ - `the-pragmatic-programmer`: pragmatic judgment, orthogonality, and DRY principles (David Thomas and Andrew Hunt).
147
+ - `working-effectively-with-legacy-code`: safely modifying legacy systems with characterization tests and seams (Michael Feathers).
148
+
149
+ The shared policy lives in [the AGENTS template](templates/rules/AGENTS.md).
150
+ The [plan template](templates/docs/IMPLEMENTATION_PLAN.md) is used by both CLI plan generation and agent guidance.
151
+ Templates contain unresolved fields until the agent inspects the actual project; they are not ready-to-execute commands.
152
+
153
+ ## Evidence, not promises
154
+
155
+ Record the requirement, actual command or scenario, environment, result, timestamp, and limitations.
156
+ Attach meaningful UI screenshots when available.
157
+ Emulator results establish emulator behavior only; Len performs physical-device checks.
158
+ Keep hardware-bench and field validation separate, with unrun checks explicitly pending.
159
+ Implementation, simulation, or an attractive spec does not prove effectiveness in the intended environment.
160
+
161
+ ## Compatibility commands
162
+
163
+ ```powershell
164
+ npx @lenardangeloolajay/len-toolkit --help
165
+ npx @lenardangeloolajay/len-toolkit skills
166
+ npx @lenardangeloolajay/len-toolkit rules
167
+ npx @lenardangeloolajay/len-toolkit plan "Feature name"
168
+ npx @lenardangeloolajay/len-toolkit --yes
169
+ npx @lenardangeloolajay/len-toolkit skills --global
170
+ ```
171
+
172
+ The legacy default remains an interactive installer.
173
+ Local skill installation also supplies document templates.
174
+ The legacy global skill destination remains `~/.gemini/config/skills/`; it is not the recommended personal setup and does not replace local startup.
175
+ The `plan` command writes a draft root `IMPLEMENTATION_PLAN.md` and preserves an existing file by default.
176
+ For categorized feature plans, use the spec/plan workflow and a root pointer instead of generating a second active plan.
177
+ Legacy `--force` overwrites existing selected files, including `.gitignore` and a root plan; it is never used by `start`.
178
+ Cursor-related compatibility files remain available but are not installed by personal startup.
179
+
180
+ ## Local verification
181
+
182
+ The package advertises Node 18 or newer and uses no npm dependencies.
183
+ This change was exercised on Windows with Node 24.14.0; other supported runtime versions remain unverified here.
184
+
185
+ ```powershell
186
+ npm test
187
+ node --check bin/cli.js
188
+ node --check src/installer.js
189
+ npm pack --dry-run --ignore-scripts
190
+ ```
191
+
192
+ The automated suite exercises file preservation, CLI behavior, startup failure cases, enclosing repositories, and shared plan rendering.
193
+ Workflow exercises are instruction inspections, not proof that Gemini will always comply.
194
+ Publishing or pushing remains a separate explicit action.
195
+
196
+ ## License and attribution
197
+
198
+ [MIT](LICENSE).
199
+
200
+ This repository is strictly a curated collection of tools and guidelines.
201
+ I am not the author of these files, and I do not claim 100% ownership over them.
202
+ I gathered these tools from other experienced engineers and credit them fully for their contributions:
203
+
204
+ - Ponytail derives from [Dietrich Gebert's Ponytail](https://github.com/DietrichGebert/ponytail).
205
+ - Council is inspired by [hex/claude-council](https://github.com/hex/claude-council).
206
+ - Security audit skill derives from [Cloudflare's security-audit-skill](https://github.com/cloudflare/security-audit-skill).
207
+ - Software engineering book skills derive from [Maciej Ciemborowicz's agent-rules-books](https://github.com/ciembor/agent-rules-books).
208
+ - Book summaries and architectural patterns are based on the published works of John Ousterhout, Robert C. Martin, Steve McConnell, Martin Kleppmann, Eric Evans, Vaughn Vernon, Martin Fowler, Michael T. Nygard, David Thomas, Andrew Hunt, Michael Feathers, and the authors of Refactoring.Guru.
209
+ All upstream authors retain copyright to their respective original works.
package/bin/cli.js ADDED
@@ -0,0 +1,244 @@
1
+ #!/usr/bin/env node
2
+
3
+ const [major] = process.versions.node.split('.').map(Number);
4
+ if (major < 18) {
5
+ console.error('len-toolkit requires Node.js >= 18.0.0. Current: ' + process.version);
6
+ process.exit(1);
7
+ }
8
+
9
+ import readline from 'node:readline';
10
+ import process from 'node:process';
11
+ import { readFileSync } from 'node:fs';
12
+ import {
13
+ installSkills,
14
+ installRules,
15
+ installConfigs,
16
+ createPlanTemplate,
17
+ startWorkspace
18
+ } from '../src/installer.js';
19
+
20
+ const { version: VERSION } = JSON.parse(
21
+ readFileSync(new URL('../package.json', import.meta.url), 'utf-8')
22
+ );
23
+
24
+ const STARTUP_BANNER = `LEN'S TOOLKIT // ASU DEVELOPER'S GUILD
25
+ ───────────────────────────────────────────────────────────────────────────────────────────────
26
+
27
+ ██╗ ███████╗███╗ ██╗███████╗ ████████╗ ██████╗ ██████╗ ██╗ ██╗ ██╗██╗████████╗
28
+ ██║ ██╔════╝████╗ ██║██╔════╝ ╚══██╔══╝██╔═══██╗██╔═══██╗██║ ██║ ██╔╝██║╚══██╔══╝
29
+ ██║ █████╗ ██╔██╗ ██║███████╗ ██║ ██║ ██║██║ ██║██║ █████╔╝ ██║ ██║
30
+ ██║ ██╔══╝ ██║╚██╗██║╚════██║ ██║ ██║ ██║██║ ██║██║ ██╔═██╗ ██║ ██║
31
+ ███████╗███████╗██║ ╚████║███████║ ██║ ╚██████╔╝╚██████╔╝███████╗██║ ██╗██║ ██║
32
+ ╚══════╝╚══════╝╚═╝ ╚═══╝╚══════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝
33
+
34
+ LEARN ・ BUILD ・ SHIP
35
+
36
+ ─────────────────┐
37
+ LEN / 2026 │ PERSONAL DEVELOPMENT TOOLKIT
38
+ └────────────────────────────────────────────────────────────────────────────`;
39
+
40
+ function getBanner() {
41
+ return `\n\x1b[1m\x1b[36m${STARTUP_BANNER}\x1b[0m\n`;
42
+ }
43
+
44
+ function printBanner() {
45
+ console.log(getBanner());
46
+ }
47
+
48
+ function printHelp() {
49
+ printBanner();
50
+ console.log(`
51
+ \x1b[1mUSAGE:\x1b[0m
52
+ npx len-toolkit [command] [options]
53
+
54
+ \x1b[1mCOMMANDS:\x1b[0m
55
+ start Prepare local GPT/Antigravity workflow safely (recommended)
56
+ init Initialize vibe coding environment in current project (default)
57
+ plan [name] Generate a phased IMPLEMENTATION_PLAN.md file
58
+ skills Install only the skills library (.agents/skills/)
59
+ rules Install only the agent rules (GEMINI.md, AGENTS.md, .cursorrules)
60
+
61
+ \x1b[1mOPTIONS:\x1b[0m
62
+ -y, --yes Skip interactive prompts and install all components
63
+ -g, --global Install skills globally to ~/.gemini/config/skills/
64
+ -f, --force Overwrite existing files
65
+ -h, --help Show this help message
66
+ -v, --version Display current version
67
+
68
+ \x1b[1mSKILLS INCLUDED:\x1b[0m
69
+ spec Product discovery and organized feature specifications
70
+ 🏛️ council Multi-perspective ideation & debate (Devil, Simplicity, Security, DX)
71
+ 📋 implementation-plan Approved execution with checks, phase commits & bounded retries
72
+ ✂️ ponytail (suite) Anti-bloat ladder, ponytail-audit, ponytail-debt, ponytail-review
73
+ 🛡️ security-audit Security guidance, vulnerability review & structured audit harness
74
+ 📚 books (14 skills) Classic SWE principles (Clean Code/Arch, Refactoring, DDD, Reliability)
75
+ `);
76
+ }
77
+
78
+ async function askQuestion(rl, query) {
79
+ return new Promise((resolve) => rl.question(query, resolve));
80
+ }
81
+
82
+ async function runInteractive(targetDir, flags) {
83
+ const rl = readline.createInterface({
84
+ input: process.stdin,
85
+ output: process.stdout,
86
+ });
87
+
88
+ let completed = false;
89
+ rl.on('close', () => {
90
+ if (!completed) {
91
+ console.log('\n\nSetup cancelled.');
92
+ process.exit(0);
93
+ }
94
+ });
95
+
96
+ printBanner();
97
+ console.log(`Target directory: \x1b[33m${targetDir}\x1b[0m\n`);
98
+
99
+ const installAll = await askQuestion(rl, 'Initialize full toolkit (Skills + Rules + Dev configs)? [Y/n]: ');
100
+ const shouldInstallAll = installAll.trim().toLowerCase() !== 'n';
101
+
102
+ let doSkills = shouldInstallAll;
103
+ let doRules = shouldInstallAll;
104
+ let doConfigs = shouldInstallAll;
105
+
106
+ if (!shouldInstallAll) {
107
+ const ansSkills = await askQuestion(rl, 'Install Skills library (council, ponytail, security-audit, book skills)? [Y/n]: ');
108
+ doSkills = ansSkills.trim().toLowerCase() !== 'n';
109
+
110
+ const ansRules = await askQuestion(rl, 'Install Agent Rules (GEMINI.md, AGENTS.md)? [Y/n]: ');
111
+ doRules = ansRules.trim().toLowerCase() !== 'n';
112
+
113
+ const ansConfigs = await askQuestion(rl, 'Install Dev Configs (.editorconfig, .gitignore)? [Y/n]: ');
114
+ doConfigs = ansConfigs.trim().toLowerCase() !== 'n';
115
+ }
116
+
117
+ const globalOpt = await askQuestion(rl, 'Also install skills globally to ~/.gemini/config/skills/? [y/N]: ');
118
+ const doGlobal = globalOpt.trim().toLowerCase() === 'y';
119
+
120
+ completed = true;
121
+ rl.close();
122
+
123
+ console.log('\n\x1b[32mApplying configuration...\x1b[0m');
124
+
125
+ if (doSkills) {
126
+ const dest = installSkills(targetDir, false, flags.force);
127
+ console.log(` ✓ Installed skills to ${dest}`);
128
+ }
129
+
130
+ if (doGlobal) {
131
+ const globalDest = installSkills(targetDir, true, flags.force);
132
+ console.log(` ✓ Installed global skills to ${globalDest}`);
133
+ }
134
+
135
+ if (doRules) {
136
+ const rules = installRules(targetDir, flags.force);
137
+ console.log(` ✓ Installed agent rules: ${rules.join(', ')}`);
138
+ }
139
+
140
+ if (doConfigs) {
141
+ const configs = installConfigs(targetDir, flags.force);
142
+ console.log(` ✓ Installed dev configs: ${configs.join(', ')}`);
143
+ }
144
+
145
+ console.log(`
146
+ \x1b[32m🎉 Toolkit setup complete!\x1b[0m
147
+ Your environment is now primed with:
148
+ • \x1b[36m/council\x1b[0m for stress-testing architecture and ideation
149
+ • \x1b[36m/plan\x1b[0m for phased IMPLEMENTATION_PLAN.md with test gates & commits
150
+ • \x1b[36m/ponytail\x1b[0m for minimal, zero-bloat standard-library execution
151
+ • \x1b[36msecurity-audit\x1b[0m for defensive vulnerability hunting & security reviews
152
+ • \x1b[36mbooks (14 skills)\x1b[0m for clean code, refactoring, DDD, architecture & reliability
153
+ `);
154
+ }
155
+
156
+ async function main() {
157
+ const args = process.argv.slice(2);
158
+ const targetDir = process.cwd();
159
+
160
+ const flags = {
161
+ yes: args.includes('-y') || args.includes('--yes'),
162
+ global: args.includes('-g') || args.includes('--global'),
163
+ force: args.includes('-f') || args.includes('--force'),
164
+ help: args.includes('-h') || args.includes('--help'),
165
+ version: args.includes('-v') || args.includes('--version'),
166
+ };
167
+
168
+ if (flags.help) {
169
+ printHelp();
170
+ return;
171
+ }
172
+
173
+ if (flags.version) {
174
+ console.log(`len-toolkit v${VERSION}`);
175
+ return;
176
+ }
177
+
178
+ const command = args[0] && !args[0].startsWith('-') ? args[0] : 'init';
179
+
180
+ if (command === 'start') {
181
+ if (args.slice(1).some((arg) => !['-y', '--yes'].includes(arg))) {
182
+ throw new Error('start is local and preserves existing files. Use: len-toolkit start (optionally --yes).');
183
+ }
184
+ printBanner();
185
+ const result = startWorkspace(targetDir);
186
+ console.log(`${result.initialized ? 'Initialized' : 'Using'} Git repository: ${result.repository}`);
187
+ console.log(`Branch: ${result.branch}`);
188
+ console.log(`Installed ${result.installed.length} missing files.`);
189
+ for (const difference of result.differences) {
190
+ console.log(`REVIEW: ${difference.path} differs; preserved. Proposed version: ${difference.proposed}`);
191
+ }
192
+ for (const warning of result.identityWarnings) console.log(`COMMIT CHECK: ${warning}`);
193
+ console.log(`Working tree (preserve unrelated edits):\n${result.changes || '(clean)'}`);
194
+ for (const doc of result.documents) {
195
+ console.log(`DOCUMENT REVIEW: ${doc.path}: ${doc.exists ? 'present; agent must verify currency and approval' : 'missing; inventory existing specs before creating it'}`);
196
+ }
197
+ console.log('Setup check complete. This does not approve implementation or verify Antigravity discovery.');
198
+ console.log('Review differences and specs with GPT, then launch agi and point it to the approved HANDOFF.md.');
199
+ return;
200
+ }
201
+
202
+ if (command === 'plan') {
203
+ const featureName = args.slice(1).find((arg) => !arg.startsWith('-')) || 'New Feature';
204
+ const result = createPlanTemplate(targetDir, featureName, flags.force);
205
+ if (result.created) {
206
+ console.log(`\x1b[32m✓ Created ${result.path}\x1b[0m`);
207
+ } else {
208
+ console.log(`\x1b[33m! ${result.path} already exists. Left untouched.\x1b[0m`);
209
+ }
210
+ return;
211
+ }
212
+
213
+ if (command === 'skills') {
214
+ const dest = installSkills(targetDir, flags.global, flags.force);
215
+ console.log(`\x1b[32m✓ Installed skills to ${dest}\x1b[0m`);
216
+ return;
217
+ }
218
+
219
+ if (command === 'rules') {
220
+ const rules = installRules(targetDir, flags.force);
221
+ console.log(`\x1b[32m✓ Installed agent rules: ${rules.join(', ')}\x1b[0m`);
222
+ return;
223
+ }
224
+
225
+ if (flags.yes) {
226
+ printBanner();
227
+ console.log(`Target: \x1b[33m${targetDir}\x1b[0m`);
228
+ const dest = installSkills(targetDir, flags.global, flags.force);
229
+ console.log(` ✓ Installed skills to ${dest}`);
230
+ const rules = installRules(targetDir, flags.force);
231
+ console.log(` ✓ Installed agent rules: ${rules.join(', ')}`);
232
+ const configs = installConfigs(targetDir, flags.force);
233
+ console.log(` ✓ Installed dev configs: ${configs.join(', ')}`);
234
+ console.log('\n\x1b[32m✓ Vibe coding environment initialized successfully!\x1b[0m');
235
+ return;
236
+ }
237
+
238
+ await runInteractive(targetDir, flags);
239
+ }
240
+
241
+ main().catch((err) => {
242
+ console.error('\x1b[31mError running len-toolkit:\x1b[0m', err.message);
243
+ process.exit(1);
244
+ });
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@lenardangeloolajay/len-toolkit",
3
+ "version": "1.1.0",
4
+ "description": "Len's personal GPT-to-Antigravity workflow: organized specs, explicit approval, safe startup, verified phase commits, and bounded recovery.",
5
+ "type": "module",
6
+ "bin": {
7
+ "len-toolkit": "bin/cli.js"
8
+ },
9
+ "files": [
10
+ "bin",
11
+ "src",
12
+ "templates",
13
+ "LICENSE",
14
+ "README.md"
15
+ ],
16
+ "scripts": {
17
+ "start": "node ./bin/cli.js",
18
+ "test": "node --test \"test/**/*.test.js\""
19
+ },
20
+ "keywords": [
21
+ "antigravity",
22
+ "ai-agent",
23
+ "vibe-coding",
24
+ "skills",
25
+ "ponytail",
26
+ "claude-council",
27
+ "scaffold",
28
+ "cli"
29
+ ],
30
+ "author": "Len",
31
+ "license": "MIT",
32
+ "engines": {
33
+ "node": ">=18.0.0"
34
+ }
35
+ }