organtic 3.2.0 → 3.3.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 +174 -174
- package/index.mjs +409 -403
- package/package.json +49 -49
package/README.md
CHANGED
|
@@ -1,174 +1,174 @@
|
|
|
1
|
-
# Organtic
|
|
2
|
-
|
|
3
|
-
**The AI-native organization. 25 experts from idea to launch.**
|
|
4
|
-
|
|
5
|
-
Organtic plugs a team of specialized AI agents into [Claude Code](https://docs.anthropic.com/en/docs/claude-code). Each agent applies named frameworks — Osterwalder VPC, Hormozi Value Equation, Reforge Growth Loops — not generic advice. Run them individually, as coordinated Agent Teams, or chain them into a full strategy pipeline.
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
npx organtic
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
EXPLORE EXPLOIT
|
|
13
|
-
validate > build > launch craft document present studio
|
|
14
|
-
3 experts 5 experts 7 experts 4 agents 2 agents 1 agent 3 agents
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## Install
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
# Interactive installer (recommended)
|
|
23
|
-
npx organtic
|
|
24
|
-
|
|
25
|
-
# Or add the marketplace directly in Claude Code
|
|
26
|
-
/plugin marketplace add Adanmohh/organtic
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
Then start Claude Code. Plugins auto-install on first launch.
|
|
30
|
-
|
|
31
|
-
## Usage
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
# Single expert
|
|
35
|
-
/value-mapper AI tool that helps nurses track patient vitals
|
|
36
|
-
|
|
37
|
-
# Full Agent Team (experts run as parallel Claude Code instances)
|
|
38
|
-
/validate:full-team My SaaS idea for project management
|
|
39
|
-
|
|
40
|
-
# Full pipeline (chains all 15 explore experts)
|
|
41
|
-
/pipeline:run BurnoutLab - AI-powered burnout recovery courses
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## Explore: Strategy Pipeline
|
|
47
|
-
|
|
48
|
-
Three plugins that chain together. Each phase builds on previous findings.
|
|
49
|
-
|
|
50
|
-
### validate — Is this worth building?
|
|
51
|
-
|
|
52
|
-
| Expert | Frameworks | Output |
|
|
53
|
-
|--------|-----------|--------|
|
|
54
|
-
| Value Mapper | Osterwalder VPC, Jobs-to-be-Done | Value proposition canvas, customer segments |
|
|
55
|
-
| Business Modeler | Business Model Canvas, Blue Ocean Strategy | Revenue model, competitive positioning |
|
|
56
|
-
| Experiment Designer | Strategyzer Testing, ICE/RICE | Prioritized experiment backlog |
|
|
57
|
-
|
|
58
|
-
### build — What are we shipping?
|
|
59
|
-
|
|
60
|
-
| Expert | Frameworks | Output |
|
|
61
|
-
|--------|-----------|--------|
|
|
62
|
-
| Product Strategist | Reforge, Cagan's Transformed | Product strategy, growth loops |
|
|
63
|
-
| Brand Strategist | Neumeier Brand Gap, Design Tokens | Brand identity system |
|
|
64
|
-
| Growth Designer | Torres Discovery, Hooked Model, PLG | Retention loops, activation flows |
|
|
65
|
-
| Spec Writer | Shape Up methodology | Shaped pitches, scope tables |
|
|
66
|
-
| Product Designer | Don Norman, JTBD UX, AI UX Patterns | Wireframes, interaction design |
|
|
67
|
-
|
|
68
|
-
### launch — How do we get customers?
|
|
69
|
-
|
|
70
|
-
| Expert | Frameworks | Output |
|
|
71
|
-
|--------|-----------|--------|
|
|
72
|
-
| Offer Designer | Hormozi Value Equation, Grand Slam Offer | Offer stack, pricing tiers |
|
|
73
|
-
| Copywriter | Copyhackers, Ogilvy, Gary Vee | Landing page copy, email sequences |
|
|
74
|
-
| Funnel Architect | Brunson Value Ladder, Suby 8-Phase | Funnel blueprint, lead magnets |
|
|
75
|
-
| Growth Auditor | Reforge Racecar, Channel-Model Fit | Gap analysis, prioritized roadmap |
|
|
76
|
-
| Media Planner | Dennis Yu Dollar-a-Day, 3x3 Grid | Channel plan, budget allocation |
|
|
77
|
-
| SEO Strategist | CXL Technical SEO, Search Intent Mapping | Keyword map, content clusters |
|
|
78
|
-
| AI Search Optimizer | CXL Entity SEO, LLM Visibility | Entity map, citation strategy |
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## Exploit: Execution Plugins
|
|
83
|
-
|
|
84
|
-
Four standalone plugins that turn strategy into deliverables.
|
|
85
|
-
|
|
86
|
-
### craft — Build it
|
|
87
|
-
|
|
88
|
-
| Agent | Output |
|
|
89
|
-
|-------|--------|
|
|
90
|
-
| Landing Page Builder | Conversion-optimized pages (React/HTML) |
|
|
91
|
-
| MVP Scaffolder | Full-stack prototype with auth, DB, API |
|
|
92
|
-
| Component Designer | Production UI components (React + Tailwind) |
|
|
93
|
-
| Tester | Persona-based QA with Playwright |
|
|
94
|
-
|
|
95
|
-
### document — Write it
|
|
96
|
-
|
|
97
|
-
| Agent | Output |
|
|
98
|
-
|-------|--------|
|
|
99
|
-
| Business Writer | Business plans, SOPs, case studies |
|
|
100
|
-
| Pitch Deck Writer | Investor decks, sales proposals (Marp to PDF) |
|
|
101
|
-
|
|
102
|
-
### present — Show it
|
|
103
|
-
|
|
104
|
-
| Agent | Output |
|
|
105
|
-
|-------|--------|
|
|
106
|
-
| Slide Designer | Professional decks from strategy outputs |
|
|
107
|
-
|
|
108
|
-
### studio — Film it
|
|
109
|
-
|
|
110
|
-
| Agent | Output |
|
|
111
|
-
|-------|--------|
|
|
112
|
-
| Demo Producer | Product demo videos (Playwright + ElevenLabs + Remotion) |
|
|
113
|
-
| Clip Maker | Social clips for Reels, TikTok, Shorts, LinkedIn |
|
|
114
|
-
| Content Creator | Branded social images and short-form video |
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
## Pipeline
|
|
119
|
-
|
|
120
|
-
The pipeline orchestrator chains all 15 explore experts automatically:
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
Phase 1: validate 3 experts Is this worth building?
|
|
124
|
-
Phase 2: build 5 experts What are we shipping?
|
|
125
|
-
Phase 3: launch-strategy 3 experts Offer + copy + funnels
|
|
126
|
-
Phase 4: launch-audit 1 expert Coherence check across all outputs
|
|
127
|
-
Phase 5: launch-execution 3 experts Media + SEO + AI search
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
/pipeline:run MyProject - description of the idea
|
|
132
|
-
/pipeline:run MyProject --start-phase build # Resume from a phase
|
|
133
|
-
/pipeline:run MyProject --autonomous # Research-first mode
|
|
134
|
-
/pipeline:status # Check progress
|
|
135
|
-
/pipeline:cancel # Stop
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
---
|
|
139
|
-
|
|
140
|
-
## Agent Teams
|
|
141
|
-
|
|
142
|
-
Commands ending in `:full-team` spawn multiple Claude Code instances that coordinate through shared task lists and message each other directly.
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
/validate:full-team My idea
|
|
146
|
-
/build:full-team Continue from validation
|
|
147
|
-
/launch:full-team Go to market
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
Requires `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` in `~/.claude/settings.json`.
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
## Cross-Session Memory
|
|
155
|
-
|
|
156
|
-
Each expert outputs project-scoped tags auto-captured by [claude-mem](https://github.com/thedotmack/claude-mem). Later phases search memory by project name to build on earlier findings — no manual copy-pasting between sessions.
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
/plugin install claude-mem@thedotmack
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
---
|
|
163
|
-
|
|
164
|
-
## Requirements
|
|
165
|
-
|
|
166
|
-
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI
|
|
167
|
-
- Optional: [claude-mem](https://github.com/thedotmack/claude-mem) for cross-session memory
|
|
168
|
-
- For studio: Node.js, Playwright, Remotion, ffmpeg, ElevenLabs API key
|
|
169
|
-
|
|
170
|
-
## Links
|
|
171
|
-
|
|
172
|
-
[GitHub](https://github.com/Adanmohh/organtic) | [Issues](https://github.com/Adanmohh/organtic/issues)
|
|
173
|
-
|
|
174
|
-
MIT License
|
|
1
|
+
# Organtic
|
|
2
|
+
|
|
3
|
+
**The AI-native organization. 25 experts from idea to launch.**
|
|
4
|
+
|
|
5
|
+
Organtic plugs a team of specialized AI agents into [Claude Code](https://docs.anthropic.com/en/docs/claude-code). Each agent applies named frameworks — Osterwalder VPC, Hormozi Value Equation, Reforge Growth Loops — not generic advice. Run them individually, as coordinated Agent Teams, or chain them into a full strategy pipeline.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
npx organtic
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
EXPLORE EXPLOIT
|
|
13
|
+
validate > build > launch craft document present studio
|
|
14
|
+
3 experts 5 experts 7 experts 4 agents 2 agents 1 agent 3 agents
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Install
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Interactive installer (recommended)
|
|
23
|
+
npx organtic
|
|
24
|
+
|
|
25
|
+
# Or add the marketplace directly in Claude Code
|
|
26
|
+
/plugin marketplace add Adanmohh/organtic
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Then start Claude Code. Plugins auto-install on first launch.
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Single expert
|
|
35
|
+
/value-mapper AI tool that helps nurses track patient vitals
|
|
36
|
+
|
|
37
|
+
# Full Agent Team (experts run as parallel Claude Code instances)
|
|
38
|
+
/validate:full-team My SaaS idea for project management
|
|
39
|
+
|
|
40
|
+
# Full pipeline (chains all 15 explore experts)
|
|
41
|
+
/pipeline:run BurnoutLab - AI-powered burnout recovery courses
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Explore: Strategy Pipeline
|
|
47
|
+
|
|
48
|
+
Three plugins that chain together. Each phase builds on previous findings.
|
|
49
|
+
|
|
50
|
+
### validate — Is this worth building?
|
|
51
|
+
|
|
52
|
+
| Expert | Frameworks | Output |
|
|
53
|
+
|--------|-----------|--------|
|
|
54
|
+
| Value Mapper | Osterwalder VPC, Jobs-to-be-Done | Value proposition canvas, customer segments |
|
|
55
|
+
| Business Modeler | Business Model Canvas, Blue Ocean Strategy | Revenue model, competitive positioning |
|
|
56
|
+
| Experiment Designer | Strategyzer Testing, ICE/RICE | Prioritized experiment backlog |
|
|
57
|
+
|
|
58
|
+
### build — What are we shipping?
|
|
59
|
+
|
|
60
|
+
| Expert | Frameworks | Output |
|
|
61
|
+
|--------|-----------|--------|
|
|
62
|
+
| Product Strategist | Reforge, Cagan's Transformed | Product strategy, growth loops |
|
|
63
|
+
| Brand Strategist | Neumeier Brand Gap, Design Tokens | Brand identity system |
|
|
64
|
+
| Growth Designer | Torres Discovery, Hooked Model, PLG | Retention loops, activation flows |
|
|
65
|
+
| Spec Writer | Shape Up methodology | Shaped pitches, scope tables |
|
|
66
|
+
| Product Designer | Don Norman, JTBD UX, AI UX Patterns | Wireframes, interaction design |
|
|
67
|
+
|
|
68
|
+
### launch — How do we get customers?
|
|
69
|
+
|
|
70
|
+
| Expert | Frameworks | Output |
|
|
71
|
+
|--------|-----------|--------|
|
|
72
|
+
| Offer Designer | Hormozi Value Equation, Grand Slam Offer | Offer stack, pricing tiers |
|
|
73
|
+
| Copywriter | Copyhackers, Ogilvy, Gary Vee | Landing page copy, email sequences |
|
|
74
|
+
| Funnel Architect | Brunson Value Ladder, Suby 8-Phase | Funnel blueprint, lead magnets |
|
|
75
|
+
| Growth Auditor | Reforge Racecar, Channel-Model Fit | Gap analysis, prioritized roadmap |
|
|
76
|
+
| Media Planner | Dennis Yu Dollar-a-Day, 3x3 Grid | Channel plan, budget allocation |
|
|
77
|
+
| SEO Strategist | CXL Technical SEO, Search Intent Mapping | Keyword map, content clusters |
|
|
78
|
+
| AI Search Optimizer | CXL Entity SEO, LLM Visibility | Entity map, citation strategy |
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Exploit: Execution Plugins
|
|
83
|
+
|
|
84
|
+
Four standalone plugins that turn strategy into deliverables.
|
|
85
|
+
|
|
86
|
+
### craft — Build it
|
|
87
|
+
|
|
88
|
+
| Agent | Output |
|
|
89
|
+
|-------|--------|
|
|
90
|
+
| Landing Page Builder | Conversion-optimized pages (React/HTML) |
|
|
91
|
+
| MVP Scaffolder | Full-stack prototype with auth, DB, API |
|
|
92
|
+
| Component Designer | Production UI components (React + Tailwind) |
|
|
93
|
+
| Tester | Persona-based QA with Playwright |
|
|
94
|
+
|
|
95
|
+
### document — Write it
|
|
96
|
+
|
|
97
|
+
| Agent | Output |
|
|
98
|
+
|-------|--------|
|
|
99
|
+
| Business Writer | Business plans, SOPs, case studies |
|
|
100
|
+
| Pitch Deck Writer | Investor decks, sales proposals (Marp to PDF) |
|
|
101
|
+
|
|
102
|
+
### present — Show it
|
|
103
|
+
|
|
104
|
+
| Agent | Output |
|
|
105
|
+
|-------|--------|
|
|
106
|
+
| Slide Designer | Professional decks from strategy outputs |
|
|
107
|
+
|
|
108
|
+
### studio — Film it
|
|
109
|
+
|
|
110
|
+
| Agent | Output |
|
|
111
|
+
|-------|--------|
|
|
112
|
+
| Demo Producer | Product demo videos (Playwright + ElevenLabs + Remotion) |
|
|
113
|
+
| Clip Maker | Social clips for Reels, TikTok, Shorts, LinkedIn |
|
|
114
|
+
| Content Creator | Branded social images and short-form video |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Pipeline
|
|
119
|
+
|
|
120
|
+
The pipeline orchestrator chains all 15 explore experts automatically:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Phase 1: validate 3 experts Is this worth building?
|
|
124
|
+
Phase 2: build 5 experts What are we shipping?
|
|
125
|
+
Phase 3: launch-strategy 3 experts Offer + copy + funnels
|
|
126
|
+
Phase 4: launch-audit 1 expert Coherence check across all outputs
|
|
127
|
+
Phase 5: launch-execution 3 experts Media + SEO + AI search
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
/pipeline:run MyProject - description of the idea
|
|
132
|
+
/pipeline:run MyProject --start-phase build # Resume from a phase
|
|
133
|
+
/pipeline:run MyProject --autonomous # Research-first mode
|
|
134
|
+
/pipeline:status # Check progress
|
|
135
|
+
/pipeline:cancel # Stop
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Agent Teams
|
|
141
|
+
|
|
142
|
+
Commands ending in `:full-team` spawn multiple Claude Code instances that coordinate through shared task lists and message each other directly.
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
/validate:full-team My idea
|
|
146
|
+
/build:full-team Continue from validation
|
|
147
|
+
/launch:full-team Go to market
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Requires `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` in `~/.claude/settings.json`.
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Cross-Session Memory
|
|
155
|
+
|
|
156
|
+
Each expert outputs project-scoped tags auto-captured by [claude-mem](https://github.com/thedotmack/claude-mem). Later phases search memory by project name to build on earlier findings — no manual copy-pasting between sessions.
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
/plugin install claude-mem@thedotmack
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Requirements
|
|
165
|
+
|
|
166
|
+
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI
|
|
167
|
+
- Optional: [claude-mem](https://github.com/thedotmack/claude-mem) for cross-session memory
|
|
168
|
+
- For studio: Node.js, Playwright, Remotion, ffmpeg, ElevenLabs API key
|
|
169
|
+
|
|
170
|
+
## Links
|
|
171
|
+
|
|
172
|
+
[GitHub](https://github.com/Adanmohh/organtic) | [Issues](https://github.com/Adanmohh/organtic/issues)
|
|
173
|
+
|
|
174
|
+
MIT License
|
package/index.mjs
CHANGED
|
@@ -1,403 +1,409 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
4
|
-
import { join } from "path";
|
|
5
|
-
import { homedir } from "os";
|
|
6
|
-
import { createInterface } from "readline";
|
|
7
|
-
|
|
8
|
-
const MARKETPLACE_REPO = "Adanmohh/organtic";
|
|
9
|
-
const MARKETPLACE_NAME = "organtic";
|
|
10
|
-
|
|
11
|
-
const PLUGINS = [
|
|
12
|
-
{
|
|
13
|
-
name: "validate",
|
|
14
|
-
desc: "Validate ideas",
|
|
15
|
-
experts: 3,
|
|
16
|
-
agents: "Value Mapper, Business Modeler, Experiment Designer",
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
name: "build",
|
|
20
|
-
desc: "Build strategy",
|
|
21
|
-
experts: 5,
|
|
22
|
-
agents: "Product Strategist, Brand Strategist, Growth Designer, Spec Writer, Product Designer",
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
name: "launch",
|
|
26
|
-
desc: "Go-to-market",
|
|
27
|
-
experts: 7,
|
|
28
|
-
agents: "Offer Designer, Copywriter, Funnel Architect, Growth Auditor, Media Planner, SEO Strategist, AI Search Optimizer",
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
name: "craft",
|
|
32
|
-
desc: "Build deliverables",
|
|
33
|
-
experts: 4,
|
|
34
|
-
agents: "Landing Page Builder, MVP Scaffolder, Component Designer, Tester",
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
name: "document",
|
|
38
|
-
desc: "Write documents",
|
|
39
|
-
experts: 2,
|
|
40
|
-
agents: "Business Writer, Pitch Deck Writer",
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
name: "present",
|
|
44
|
-
desc: "Create presentations",
|
|
45
|
-
experts: 1,
|
|
46
|
-
agents: "Slide Designer",
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
name: "studio",
|
|
50
|
-
desc: "Produce videos",
|
|
51
|
-
experts: 3,
|
|
52
|
-
agents: "Demo Producer, Clip Maker, Content Creator",
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
name: "pipeline",
|
|
56
|
-
desc: "
|
|
57
|
-
experts: null,
|
|
58
|
-
agents: "
|
|
59
|
-
},
|
|
60
|
-
];
|
|
61
|
-
|
|
62
|
-
// ---------------------------------------------------------------------------
|
|
63
|
-
// Gradient & styling utilities
|
|
64
|
-
// ---------------------------------------------------------------------------
|
|
65
|
-
|
|
66
|
-
function makeGradient(chalk, steps) {
|
|
67
|
-
const colors = [
|
|
68
|
-
[16, 185, 129], // #10b981 green
|
|
69
|
-
[6, 182, 212], // #06b6d4 cyan
|
|
70
|
-
[59, 130, 246], // #3b82f6 blue
|
|
71
|
-
];
|
|
72
|
-
|
|
73
|
-
const result = [];
|
|
74
|
-
for (let i = 0; i < steps; i++) {
|
|
75
|
-
const t = steps === 1 ? 0 : i / (steps - 1);
|
|
76
|
-
let r, g, b;
|
|
77
|
-
if (t <= 0.5) {
|
|
78
|
-
const lt = t * 2;
|
|
79
|
-
r = Math.round(colors[0][0] + (colors[1][0] - colors[0][0]) * lt);
|
|
80
|
-
g = Math.round(colors[0][1] + (colors[1][1] - colors[0][1]) * lt);
|
|
81
|
-
b = Math.round(colors[0][2] + (colors[1][2] - colors[0][2]) * lt);
|
|
82
|
-
} else {
|
|
83
|
-
const lt = (t - 0.5) * 2;
|
|
84
|
-
r = Math.round(colors[1][0] + (colors[2][0] - colors[1][0]) * lt);
|
|
85
|
-
g = Math.round(colors[1][1] + (colors[2][1] - colors[1][1]) * lt);
|
|
86
|
-
b = Math.round(colors[1][2] + (colors[2][2] - colors[1][2]) * lt);
|
|
87
|
-
}
|
|
88
|
-
result.push(chalk.rgb(r, g, b));
|
|
89
|
-
}
|
|
90
|
-
return result;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function gradientText(chalk, text) {
|
|
94
|
-
const colors = makeGradient(chalk, text.length);
|
|
95
|
-
return text.split("").map((ch, i) => colors[i](ch)).join("");
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function gradientLine(chalk, text, width) {
|
|
99
|
-
const colors = makeGradient(chalk, width);
|
|
100
|
-
return text.split("").map((ch, i) => {
|
|
101
|
-
const ci = Math.min(i, width - 1);
|
|
102
|
-
return colors[ci](ch);
|
|
103
|
-
}).join("");
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function pad(str, len) {
|
|
107
|
-
const visible = stripAnsi(str);
|
|
108
|
-
const diff = len - visible.length;
|
|
109
|
-
return diff > 0 ? str + " ".repeat(diff) : str;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
function stripAnsi(str) {
|
|
113
|
-
return str.replace(/\x1b\[[0-9;]*m/g, "");
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// ---------------------------------------------------------------------------
|
|
117
|
-
// Box drawing
|
|
118
|
-
// ---------------------------------------------------------------------------
|
|
119
|
-
|
|
120
|
-
function box(chalk, lines, { title = "", width = 48, borderColor = null } = {}) {
|
|
121
|
-
const bc = borderColor || ((s) => gradientLine(chalk, s, width + 2));
|
|
122
|
-
const inner = width;
|
|
123
|
-
|
|
124
|
-
const topLeft = bc("\u256d");
|
|
125
|
-
const topRight = bc("\u256e");
|
|
126
|
-
const botLeft = bc("\u2570");
|
|
127
|
-
const botRight = bc("\u256f");
|
|
128
|
-
const horiz = (len) => bc("\u2500".repeat(len));
|
|
129
|
-
const vert = bc("\u2502");
|
|
130
|
-
|
|
131
|
-
const out = [];
|
|
132
|
-
|
|
133
|
-
if (title) {
|
|
134
|
-
const titleStr = ` ${title} `;
|
|
135
|
-
const remaining = inner - titleStr.length;
|
|
136
|
-
out.push(` ${topLeft}${horiz(1)}${bc(titleStr)}${horiz(remaining - 1)}${topRight}`);
|
|
137
|
-
} else {
|
|
138
|
-
out.push(` ${topLeft}${horiz(inner)}${topRight}`);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
for (const line of lines) {
|
|
142
|
-
out.push(` ${vert}${pad(line, inner)}${vert}`);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
out.push(` ${botLeft}${horiz(inner)}${botRight}`);
|
|
146
|
-
return out.join("\n");
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// ---------------------------------------------------------------------------
|
|
150
|
-
// Settings.json management
|
|
151
|
-
// ---------------------------------------------------------------------------
|
|
152
|
-
|
|
153
|
-
function getSettingsPath() {
|
|
154
|
-
return join(homedir(), ".claude", "settings.json");
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
function readSettings() {
|
|
158
|
-
const path = getSettingsPath();
|
|
159
|
-
if (!existsSync(path)) return {};
|
|
160
|
-
try {
|
|
161
|
-
return JSON.parse(readFileSync(path, "utf-8"));
|
|
162
|
-
} catch {
|
|
163
|
-
return {};
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
function writeSettings(settings) {
|
|
168
|
-
const dir = join(homedir(), ".claude");
|
|
169
|
-
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
170
|
-
writeFileSync(getSettingsPath(), JSON.stringify(settings, null, 2) + "\n");
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
function installPlugins(selected, enableAgentTeams = false) {
|
|
174
|
-
const settings = readSettings();
|
|
175
|
-
|
|
176
|
-
// Add marketplace
|
|
177
|
-
if (!settings.extraKnownMarketplaces) {
|
|
178
|
-
settings.extraKnownMarketplaces = {};
|
|
179
|
-
}
|
|
180
|
-
settings.extraKnownMarketplaces[MARKETPLACE_NAME] = {
|
|
181
|
-
source: {
|
|
182
|
-
source: "github",
|
|
183
|
-
repo: MARKETPLACE_REPO,
|
|
184
|
-
},
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
// Enable selected plugins
|
|
188
|
-
if (!settings.enabledPlugins) {
|
|
189
|
-
settings.enabledPlugins = {};
|
|
190
|
-
}
|
|
191
|
-
for (const plugin of selected) {
|
|
192
|
-
settings.enabledPlugins[`${plugin.name}@${MARKETPLACE_NAME}`] = true;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
// Enable Agent Teams
|
|
196
|
-
if (enableAgentTeams) {
|
|
197
|
-
if (!settings.env) {
|
|
198
|
-
settings.env = {};
|
|
199
|
-
}
|
|
200
|
-
settings.env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = "1";
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
writeSettings(settings);
|
|
204
|
-
return true;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// ---------------------------------------------------------------------------
|
|
208
|
-
// Main
|
|
209
|
-
// ---------------------------------------------------------------------------
|
|
210
|
-
|
|
211
|
-
async function main() {
|
|
212
|
-
const chalk = (await import("chalk")).default;
|
|
213
|
-
const { default: ora } = await import("ora");
|
|
214
|
-
|
|
215
|
-
const W = 48;
|
|
216
|
-
const dim = chalk.dim;
|
|
217
|
-
const bold = chalk.bold.white;
|
|
218
|
-
const green = chalk.rgb(16, 185, 129);
|
|
219
|
-
const cyan = chalk.rgb(6, 182, 212);
|
|
220
|
-
const red = chalk.rgb(239, 68, 68);
|
|
221
|
-
|
|
222
|
-
// ── Banner ──────────────────────────────────────────────────────────────
|
|
223
|
-
|
|
224
|
-
const dots = gradientText(chalk, "\u25cf \u25cf \u25cf \u25cf \u25cf \u25cf \u25cf \u25cf \u25cf \u25cf");
|
|
225
|
-
const title = gradientText(chalk, "O R G A N T I C");
|
|
226
|
-
|
|
227
|
-
const banner = box(chalk, [
|
|
228
|
-
"",
|
|
229
|
-
` ${dots}`,
|
|
230
|
-
` ${title}`,
|
|
231
|
-
"",
|
|
232
|
-
` ${dim("The AI-native organization.")}`,
|
|
233
|
-
` ${dim("
|
|
234
|
-
"",
|
|
235
|
-
], { width: W });
|
|
236
|
-
|
|
237
|
-
console.log();
|
|
238
|
-
console.log(banner);
|
|
239
|
-
console.log();
|
|
240
|
-
|
|
241
|
-
// ── Pipeline Map ────────────────────────────────────────────────────────
|
|
242
|
-
|
|
243
|
-
console.log(box(chalk, [
|
|
244
|
-
"",
|
|
245
|
-
` ${bold("validate")} ${dim("\u2500\u2500\u25b6")} ${bold("build")} ${dim("\u2500\u2500\u25b6")} ${bold("launch")}`,
|
|
246
|
-
` ${dim("3 experts")} ${dim("5 experts")} ${dim("7 experts")}`,
|
|
247
|
-
"",
|
|
248
|
-
], { title: "Explore", width: W }));
|
|
249
|
-
|
|
250
|
-
console.log(box(chalk, [
|
|
251
|
-
"",
|
|
252
|
-
` ${bold("craft")} ${bold("document")} ${bold("present")} ${bold("studio")}`,
|
|
253
|
-
` ${dim("4 agents")} ${dim("2 agents")} ${dim("1 agent")} ${dim("3 agents")}`,
|
|
254
|
-
"",
|
|
255
|
-
], { title: "Exploit", width: W }));
|
|
256
|
-
|
|
257
|
-
console.log(box(chalk, [
|
|
258
|
-
"",
|
|
259
|
-
` ${bold("pipeline")} ${dim("\u2014
|
|
260
|
-
"",
|
|
261
|
-
], { title: "Orchestration", width: W }));
|
|
262
|
-
|
|
263
|
-
console.log();
|
|
264
|
-
|
|
265
|
-
// ── Selection Menu ──────────────────────────────────────────────────────
|
|
266
|
-
|
|
267
|
-
console.log(` ${gradientText(chalk, "Select plugins to install:")}`);
|
|
268
|
-
console.log();
|
|
269
|
-
|
|
270
|
-
console.log(` ${dim("Explore:")}`);
|
|
271
|
-
PLUGINS.slice(0, 3).forEach((p, i) => {
|
|
272
|
-
console.log(` ${cyan(`[${i + 1}]`)} ${bold(p.name)} ${dim(`${p.experts} experts \u2014 ${p.agents}`)}`);
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
console.log();
|
|
276
|
-
console.log(` ${dim("Exploit:")}`);
|
|
277
|
-
PLUGINS.slice(3, 7).forEach((p, i) => {
|
|
278
|
-
console.log(` ${cyan(`[${i + 4}]`)} ${bold(p.name)} ${dim(`${p.experts} agent${p.experts > 1 ? "s" : ""} \u2014 ${p.agents}`)}`);
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
console.log();
|
|
282
|
-
console.log(` ${dim("Orchestration:")}`);
|
|
283
|
-
console.log(` ${cyan("[8]")} ${bold("pipeline")} ${dim(PLUGINS[7].agents)}`);
|
|
284
|
-
|
|
285
|
-
console.log();
|
|
286
|
-
console.log(` ${green("[A]")} ${bold("All plugins")} ${dim("(recommended)")}`);
|
|
287
|
-
console.log(` ${green("[E]")} ${bold("Explore only")} ${dim("(validate + build + launch + pipeline)")}`);
|
|
288
|
-
console.log();
|
|
289
|
-
|
|
290
|
-
// ── User Selection ────────────────────────────────────────────────────
|
|
291
|
-
|
|
292
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
293
|
-
const choice = await new Promise((resolve) => {
|
|
294
|
-
rl.question(` ${cyan("\u276f")} Your choice (1-8, A, E, comma-separated): `, resolve);
|
|
295
|
-
});
|
|
296
|
-
rl.close();
|
|
297
|
-
|
|
298
|
-
let selected;
|
|
299
|
-
const c = choice.trim().toLowerCase();
|
|
300
|
-
if (c === "a" || c === "") {
|
|
301
|
-
selected = PLUGINS;
|
|
302
|
-
} else if (c === "e") {
|
|
303
|
-
selected = PLUGINS.filter((p) =>
|
|
304
|
-
["validate", "build", "launch", "pipeline"].includes(p.name)
|
|
305
|
-
);
|
|
306
|
-
} else {
|
|
307
|
-
const indices = choice
|
|
308
|
-
.split(",")
|
|
309
|
-
.map((s) => parseInt(s.trim()) - 1)
|
|
310
|
-
.filter((i) => i >= 0 && i < PLUGINS.length);
|
|
311
|
-
selected = indices.map((i) => PLUGINS[i]);
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
if (selected.length === 0) {
|
|
315
|
-
console.log(`\n ${dim("No plugins selected. Exiting.")}`);
|
|
316
|
-
process.exit(0);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
console.log();
|
|
320
|
-
|
|
321
|
-
// ── Agent Teams ─────────────────────────────────────────────────────
|
|
322
|
-
|
|
323
|
-
let enableAgentTeams = false;
|
|
324
|
-
const currentSettings = readSettings();
|
|
325
|
-
const alreadyEnabled = currentSettings.env?.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS === "1";
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
console.log();
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
console.log();
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
});
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
const
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
console.log(
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
` ${dim("
|
|
397
|
-
""
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
import { homedir } from "os";
|
|
6
|
+
import { createInterface } from "readline";
|
|
7
|
+
|
|
8
|
+
const MARKETPLACE_REPO = "Adanmohh/organtic";
|
|
9
|
+
const MARKETPLACE_NAME = "organtic";
|
|
10
|
+
|
|
11
|
+
const PLUGINS = [
|
|
12
|
+
{
|
|
13
|
+
name: "validate",
|
|
14
|
+
desc: "Validate ideas",
|
|
15
|
+
experts: 3,
|
|
16
|
+
agents: "Value Mapper, Business Modeler, Experiment Designer",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: "build",
|
|
20
|
+
desc: "Build strategy",
|
|
21
|
+
experts: 5,
|
|
22
|
+
agents: "Product Strategist, Brand Strategist, Growth Designer, Spec Writer, Product Designer",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: "launch",
|
|
26
|
+
desc: "Go-to-market",
|
|
27
|
+
experts: 7,
|
|
28
|
+
agents: "Offer Designer, Copywriter, Funnel Architect, Growth Auditor, Media Planner, SEO Strategist, AI Search Optimizer",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: "craft",
|
|
32
|
+
desc: "Build deliverables",
|
|
33
|
+
experts: 4,
|
|
34
|
+
agents: "Landing Page Builder, MVP Scaffolder, Component Designer, Tester",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: "document",
|
|
38
|
+
desc: "Write documents",
|
|
39
|
+
experts: 2,
|
|
40
|
+
agents: "Business Writer, Pitch Deck Writer",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "present",
|
|
44
|
+
desc: "Create presentations",
|
|
45
|
+
experts: 1,
|
|
46
|
+
agents: "Slide Designer",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "studio",
|
|
50
|
+
desc: "Produce videos",
|
|
51
|
+
experts: 3,
|
|
52
|
+
agents: "Demo Producer, Clip Maker, Content Creator",
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: "pipeline",
|
|
56
|
+
desc: "Agent Teams orchestrator",
|
|
57
|
+
experts: null,
|
|
58
|
+
agents: "19 experts as parallel Claude Code sessions across validate > build > launch > craft",
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Gradient & styling utilities
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
|
|
66
|
+
function makeGradient(chalk, steps) {
|
|
67
|
+
const colors = [
|
|
68
|
+
[16, 185, 129], // #10b981 green
|
|
69
|
+
[6, 182, 212], // #06b6d4 cyan
|
|
70
|
+
[59, 130, 246], // #3b82f6 blue
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
const result = [];
|
|
74
|
+
for (let i = 0; i < steps; i++) {
|
|
75
|
+
const t = steps === 1 ? 0 : i / (steps - 1);
|
|
76
|
+
let r, g, b;
|
|
77
|
+
if (t <= 0.5) {
|
|
78
|
+
const lt = t * 2;
|
|
79
|
+
r = Math.round(colors[0][0] + (colors[1][0] - colors[0][0]) * lt);
|
|
80
|
+
g = Math.round(colors[0][1] + (colors[1][1] - colors[0][1]) * lt);
|
|
81
|
+
b = Math.round(colors[0][2] + (colors[1][2] - colors[0][2]) * lt);
|
|
82
|
+
} else {
|
|
83
|
+
const lt = (t - 0.5) * 2;
|
|
84
|
+
r = Math.round(colors[1][0] + (colors[2][0] - colors[1][0]) * lt);
|
|
85
|
+
g = Math.round(colors[1][1] + (colors[2][1] - colors[1][1]) * lt);
|
|
86
|
+
b = Math.round(colors[1][2] + (colors[2][2] - colors[1][2]) * lt);
|
|
87
|
+
}
|
|
88
|
+
result.push(chalk.rgb(r, g, b));
|
|
89
|
+
}
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function gradientText(chalk, text) {
|
|
94
|
+
const colors = makeGradient(chalk, text.length);
|
|
95
|
+
return text.split("").map((ch, i) => colors[i](ch)).join("");
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function gradientLine(chalk, text, width) {
|
|
99
|
+
const colors = makeGradient(chalk, width);
|
|
100
|
+
return text.split("").map((ch, i) => {
|
|
101
|
+
const ci = Math.min(i, width - 1);
|
|
102
|
+
return colors[ci](ch);
|
|
103
|
+
}).join("");
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function pad(str, len) {
|
|
107
|
+
const visible = stripAnsi(str);
|
|
108
|
+
const diff = len - visible.length;
|
|
109
|
+
return diff > 0 ? str + " ".repeat(diff) : str;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function stripAnsi(str) {
|
|
113
|
+
return str.replace(/\x1b\[[0-9;]*m/g, "");
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
// Box drawing
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
|
|
120
|
+
function box(chalk, lines, { title = "", width = 48, borderColor = null } = {}) {
|
|
121
|
+
const bc = borderColor || ((s) => gradientLine(chalk, s, width + 2));
|
|
122
|
+
const inner = width;
|
|
123
|
+
|
|
124
|
+
const topLeft = bc("\u256d");
|
|
125
|
+
const topRight = bc("\u256e");
|
|
126
|
+
const botLeft = bc("\u2570");
|
|
127
|
+
const botRight = bc("\u256f");
|
|
128
|
+
const horiz = (len) => bc("\u2500".repeat(len));
|
|
129
|
+
const vert = bc("\u2502");
|
|
130
|
+
|
|
131
|
+
const out = [];
|
|
132
|
+
|
|
133
|
+
if (title) {
|
|
134
|
+
const titleStr = ` ${title} `;
|
|
135
|
+
const remaining = inner - titleStr.length;
|
|
136
|
+
out.push(` ${topLeft}${horiz(1)}${bc(titleStr)}${horiz(remaining - 1)}${topRight}`);
|
|
137
|
+
} else {
|
|
138
|
+
out.push(` ${topLeft}${horiz(inner)}${topRight}`);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
for (const line of lines) {
|
|
142
|
+
out.push(` ${vert}${pad(line, inner)}${vert}`);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
out.push(` ${botLeft}${horiz(inner)}${botRight}`);
|
|
146
|
+
return out.join("\n");
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
// Settings.json management
|
|
151
|
+
// ---------------------------------------------------------------------------
|
|
152
|
+
|
|
153
|
+
function getSettingsPath() {
|
|
154
|
+
return join(homedir(), ".claude", "settings.json");
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function readSettings() {
|
|
158
|
+
const path = getSettingsPath();
|
|
159
|
+
if (!existsSync(path)) return {};
|
|
160
|
+
try {
|
|
161
|
+
return JSON.parse(readFileSync(path, "utf-8"));
|
|
162
|
+
} catch {
|
|
163
|
+
return {};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function writeSettings(settings) {
|
|
168
|
+
const dir = join(homedir(), ".claude");
|
|
169
|
+
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
170
|
+
writeFileSync(getSettingsPath(), JSON.stringify(settings, null, 2) + "\n");
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function installPlugins(selected, enableAgentTeams = false) {
|
|
174
|
+
const settings = readSettings();
|
|
175
|
+
|
|
176
|
+
// Add marketplace
|
|
177
|
+
if (!settings.extraKnownMarketplaces) {
|
|
178
|
+
settings.extraKnownMarketplaces = {};
|
|
179
|
+
}
|
|
180
|
+
settings.extraKnownMarketplaces[MARKETPLACE_NAME] = {
|
|
181
|
+
source: {
|
|
182
|
+
source: "github",
|
|
183
|
+
repo: MARKETPLACE_REPO,
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
// Enable selected plugins
|
|
188
|
+
if (!settings.enabledPlugins) {
|
|
189
|
+
settings.enabledPlugins = {};
|
|
190
|
+
}
|
|
191
|
+
for (const plugin of selected) {
|
|
192
|
+
settings.enabledPlugins[`${plugin.name}@${MARKETPLACE_NAME}`] = true;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Enable Agent Teams
|
|
196
|
+
if (enableAgentTeams) {
|
|
197
|
+
if (!settings.env) {
|
|
198
|
+
settings.env = {};
|
|
199
|
+
}
|
|
200
|
+
settings.env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = "1";
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
writeSettings(settings);
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// ---------------------------------------------------------------------------
|
|
208
|
+
// Main
|
|
209
|
+
// ---------------------------------------------------------------------------
|
|
210
|
+
|
|
211
|
+
async function main() {
|
|
212
|
+
const chalk = (await import("chalk")).default;
|
|
213
|
+
const { default: ora } = await import("ora");
|
|
214
|
+
|
|
215
|
+
const W = 48;
|
|
216
|
+
const dim = chalk.dim;
|
|
217
|
+
const bold = chalk.bold.white;
|
|
218
|
+
const green = chalk.rgb(16, 185, 129);
|
|
219
|
+
const cyan = chalk.rgb(6, 182, 212);
|
|
220
|
+
const red = chalk.rgb(239, 68, 68);
|
|
221
|
+
|
|
222
|
+
// ── Banner ──────────────────────────────────────────────────────────────
|
|
223
|
+
|
|
224
|
+
const dots = gradientText(chalk, "\u25cf \u25cf \u25cf \u25cf \u25cf \u25cf \u25cf \u25cf \u25cf \u25cf");
|
|
225
|
+
const title = gradientText(chalk, "O R G A N T I C");
|
|
226
|
+
|
|
227
|
+
const banner = box(chalk, [
|
|
228
|
+
"",
|
|
229
|
+
` ${dots}`,
|
|
230
|
+
` ${title}`,
|
|
231
|
+
"",
|
|
232
|
+
` ${dim("The AI-native organization.")}`,
|
|
233
|
+
` ${dim("19 explore experts + 6 exploit agents = 25 total")}`,
|
|
234
|
+
"",
|
|
235
|
+
], { width: W });
|
|
236
|
+
|
|
237
|
+
console.log();
|
|
238
|
+
console.log(banner);
|
|
239
|
+
console.log();
|
|
240
|
+
|
|
241
|
+
// ── Pipeline Map ────────────────────────────────────────────────────────
|
|
242
|
+
|
|
243
|
+
console.log(box(chalk, [
|
|
244
|
+
"",
|
|
245
|
+
` ${bold("validate")} ${dim("\u2500\u2500\u25b6")} ${bold("build")} ${dim("\u2500\u2500\u25b6")} ${bold("launch")}`,
|
|
246
|
+
` ${dim("3 experts")} ${dim("5 experts")} ${dim("7 experts")}`,
|
|
247
|
+
"",
|
|
248
|
+
], { title: "Explore", width: W }));
|
|
249
|
+
|
|
250
|
+
console.log(box(chalk, [
|
|
251
|
+
"",
|
|
252
|
+
` ${bold("craft")} ${bold("document")} ${bold("present")} ${bold("studio")}`,
|
|
253
|
+
` ${dim("4 agents")} ${dim("2 agents")} ${dim("1 agent")} ${dim("3 agents")}`,
|
|
254
|
+
"",
|
|
255
|
+
], { title: "Exploit", width: W }));
|
|
256
|
+
|
|
257
|
+
console.log(box(chalk, [
|
|
258
|
+
"",
|
|
259
|
+
` ${bold("pipeline")} ${dim("\u2014 orchestrates all 19 explore experts")}`,
|
|
260
|
+
"",
|
|
261
|
+
], { title: "Orchestration", width: W }));
|
|
262
|
+
|
|
263
|
+
console.log();
|
|
264
|
+
|
|
265
|
+
// ── Selection Menu ──────────────────────────────────────────────────────
|
|
266
|
+
|
|
267
|
+
console.log(` ${gradientText(chalk, "Select plugins to install:")}`);
|
|
268
|
+
console.log();
|
|
269
|
+
|
|
270
|
+
console.log(` ${dim("Explore:")}`);
|
|
271
|
+
PLUGINS.slice(0, 3).forEach((p, i) => {
|
|
272
|
+
console.log(` ${cyan(`[${i + 1}]`)} ${bold(p.name)} ${dim(`${p.experts} experts \u2014 ${p.agents}`)}`);
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
console.log();
|
|
276
|
+
console.log(` ${dim("Exploit:")}`);
|
|
277
|
+
PLUGINS.slice(3, 7).forEach((p, i) => {
|
|
278
|
+
console.log(` ${cyan(`[${i + 4}]`)} ${bold(p.name)} ${dim(`${p.experts} agent${p.experts > 1 ? "s" : ""} \u2014 ${p.agents}`)}`);
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
console.log();
|
|
282
|
+
console.log(` ${dim("Orchestration:")}`);
|
|
283
|
+
console.log(` ${cyan("[8]")} ${bold("pipeline")} ${dim(PLUGINS[7].agents)}`);
|
|
284
|
+
|
|
285
|
+
console.log();
|
|
286
|
+
console.log(` ${green("[A]")} ${bold("All plugins")} ${dim("(recommended)")}`);
|
|
287
|
+
console.log(` ${green("[E]")} ${bold("Explore only")} ${dim("(validate + build + launch + pipeline)")}`);
|
|
288
|
+
console.log();
|
|
289
|
+
|
|
290
|
+
// ── User Selection ────────────────────────────────────────────────────
|
|
291
|
+
|
|
292
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
293
|
+
const choice = await new Promise((resolve) => {
|
|
294
|
+
rl.question(` ${cyan("\u276f")} Your choice (1-8, A, E, comma-separated): `, resolve);
|
|
295
|
+
});
|
|
296
|
+
rl.close();
|
|
297
|
+
|
|
298
|
+
let selected;
|
|
299
|
+
const c = choice.trim().toLowerCase();
|
|
300
|
+
if (c === "a" || c === "") {
|
|
301
|
+
selected = PLUGINS;
|
|
302
|
+
} else if (c === "e") {
|
|
303
|
+
selected = PLUGINS.filter((p) =>
|
|
304
|
+
["validate", "build", "launch", "pipeline"].includes(p.name)
|
|
305
|
+
);
|
|
306
|
+
} else {
|
|
307
|
+
const indices = choice
|
|
308
|
+
.split(",")
|
|
309
|
+
.map((s) => parseInt(s.trim()) - 1)
|
|
310
|
+
.filter((i) => i >= 0 && i < PLUGINS.length);
|
|
311
|
+
selected = indices.map((i) => PLUGINS[i]);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
if (selected.length === 0) {
|
|
315
|
+
console.log(`\n ${dim("No plugins selected. Exiting.")}`);
|
|
316
|
+
process.exit(0);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
console.log();
|
|
320
|
+
|
|
321
|
+
// ── Agent Teams ─────────────────────────────────────────────────────
|
|
322
|
+
|
|
323
|
+
let enableAgentTeams = false;
|
|
324
|
+
const currentSettings = readSettings();
|
|
325
|
+
const alreadyEnabled = currentSettings.env?.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS === "1";
|
|
326
|
+
const pipelineSelected = selected.some((p) => p.name === "pipeline");
|
|
327
|
+
|
|
328
|
+
if (alreadyEnabled) {
|
|
329
|
+
console.log(` ${green("\u2713")} ${dim("Agent Teams already enabled")}`);
|
|
330
|
+
console.log();
|
|
331
|
+
} else if (pipelineSelected) {
|
|
332
|
+
// Auto-enable for pipeline — required for default execution mode
|
|
333
|
+
enableAgentTeams = true;
|
|
334
|
+
console.log(` ${green("\u2713")} ${bold("Agent Teams")} ${dim("auto-enabled (required for pipeline)")}`);
|
|
335
|
+
console.log();
|
|
336
|
+
} else {
|
|
337
|
+
console.log(` ${bold("Agent Teams")} ${dim("lets experts run as parallel Claude Code")}`);
|
|
338
|
+
console.log(` ${dim("instances that coordinate and message each other.")}`);
|
|
339
|
+
console.log(` ${dim("Required for pipeline default execution mode.")}`);
|
|
340
|
+
console.log();
|
|
341
|
+
|
|
342
|
+
const rl2 = createInterface({ input: process.stdin, output: process.stdout });
|
|
343
|
+
const teamsChoice = await new Promise((resolve) => {
|
|
344
|
+
rl2.question(` ${cyan("\u276f")} Enable Agent Teams? (Y/n): `, resolve);
|
|
345
|
+
});
|
|
346
|
+
rl2.close();
|
|
347
|
+
|
|
348
|
+
const tc = teamsChoice.trim().toLowerCase();
|
|
349
|
+
enableAgentTeams = tc === "" || tc === "y" || tc === "yes";
|
|
350
|
+
console.log();
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// ── Install ───────────────────────────────────────────────────────────
|
|
354
|
+
|
|
355
|
+
const spinner = ora({
|
|
356
|
+
text: `Registering ${selected.length} plugin${selected.length > 1 ? "s" : ""} in ~/.claude/settings.json...`,
|
|
357
|
+
color: "cyan",
|
|
358
|
+
}).start();
|
|
359
|
+
|
|
360
|
+
try {
|
|
361
|
+
installPlugins(selected, enableAgentTeams);
|
|
362
|
+
spinner.succeed(
|
|
363
|
+
`${bold(`${selected.length} plugins`)} ${dim("registered in")} ${dim("~/.claude/settings.json")}`
|
|
364
|
+
);
|
|
365
|
+
} catch (err) {
|
|
366
|
+
spinner.fail(red(`Failed: ${err.message}`));
|
|
367
|
+
console.log();
|
|
368
|
+
console.log(` ${dim("Try manual install — add to ~/.claude/settings.json:")}`);
|
|
369
|
+
console.log(` ${dim(`"extraKnownMarketplaces": { "${MARKETPLACE_NAME}": { "source": { "source": "github", "repo": "${MARKETPLACE_REPO}" } } }`)}`);
|
|
370
|
+
process.exit(1);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
console.log();
|
|
374
|
+
|
|
375
|
+
// ── Installed Plugins List ────────────────────────────────────────────
|
|
376
|
+
|
|
377
|
+
for (const plugin of selected) {
|
|
378
|
+
const label = plugin.experts
|
|
379
|
+
? `${plugin.experts} expert${plugin.experts > 1 ? "s" : ""}`
|
|
380
|
+
: "orchestrator";
|
|
381
|
+
console.log(` ${green("\u2713")} ${bold(plugin.name)} ${dim(`\u2014 ${label}`)}`);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
if (enableAgentTeams) {
|
|
385
|
+
console.log(` ${green("\u2713")} ${bold("Agent Teams")} ${dim("\u2014 enabled")}`);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
console.log();
|
|
389
|
+
|
|
390
|
+
// ── Getting Started Card ──────────────────────────────────────────────
|
|
391
|
+
|
|
392
|
+
const cyanBorder = (s) => cyan(s);
|
|
393
|
+
|
|
394
|
+
console.log(box(chalk, [
|
|
395
|
+
"",
|
|
396
|
+
` ${dim("Start Claude Code:")} ${bold("claude")}`,
|
|
397
|
+
` ${dim("Run full pipeline:")} ${bold("/pipeline:run")} ${dim("Idea")} ${bold("--autonomous")}`,
|
|
398
|
+
` ${dim("Single plugin:")} ${bold("/pipeline:plugin")} ${dim("validate")}`,
|
|
399
|
+
` ${dim("Single expert:")} ${bold("/value-mapper")} ${dim("Idea")}`,
|
|
400
|
+
"",
|
|
401
|
+
` ${dim("Claude Code will auto-install plugins")}`,
|
|
402
|
+
` ${dim("on first startup after registration.")}`,
|
|
403
|
+
"",
|
|
404
|
+
], { title: "Getting Started", width: W, borderColor: cyanBorder }));
|
|
405
|
+
|
|
406
|
+
console.log();
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
main().catch(console.error);
|
package/package.json
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "organtic",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"description": "The AI-native organization. 25 experts from idea to launch. Agentic pipeline (vision > validate > build > launch > craft) with constitutional Brief enforcement, conditional routing, and organizational memory. Claude Code plugin ecosystem.",
|
|
5
|
-
"bin": {
|
|
6
|
-
"organtic": "./index.mjs"
|
|
7
|
-
},
|
|
8
|
-
"type": "module",
|
|
9
|
-
"license": "MIT",
|
|
10
|
-
"author": {
|
|
11
|
-
"name": "Adan Mohh",
|
|
12
|
-
"email": "adan@neogrant.fi",
|
|
13
|
-
"url": "https://github.com/Adanmohh"
|
|
14
|
-
},
|
|
15
|
-
"homepage": "https://github.com/Adanmohh/organtic#readme",
|
|
16
|
-
"repository": {
|
|
17
|
-
"type": "git",
|
|
18
|
-
"url": "git+https://github.com/Adanmohh/organtic.git"
|
|
19
|
-
},
|
|
20
|
-
"bugs": {
|
|
21
|
-
"url": "https://github.com/Adanmohh/organtic/issues"
|
|
22
|
-
},
|
|
23
|
-
"keywords": [
|
|
24
|
-
"claude-code",
|
|
25
|
-
"claude",
|
|
26
|
-
"plugin",
|
|
27
|
-
"ai-agents",
|
|
28
|
-
"business-strategy",
|
|
29
|
-
"go-to-market",
|
|
30
|
-
"landing-page",
|
|
31
|
-
"mvp",
|
|
32
|
-
"pitch-deck",
|
|
33
|
-
"product-strategy",
|
|
34
|
-
"marketing",
|
|
35
|
-
"seo",
|
|
36
|
-
"copywriting",
|
|
37
|
-
"growth",
|
|
38
|
-
"validation",
|
|
39
|
-
"anthropic",
|
|
40
|
-
"organtic"
|
|
41
|
-
],
|
|
42
|
-
"dependencies": {
|
|
43
|
-
"chalk": "^5.4.1",
|
|
44
|
-
"ora": "^8.1.1"
|
|
45
|
-
},
|
|
46
|
-
"engines": {
|
|
47
|
-
"node": ">=18.0.0"
|
|
48
|
-
}
|
|
49
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "organtic",
|
|
3
|
+
"version": "3.3.0",
|
|
4
|
+
"description": "The AI-native organization. 25 experts from idea to launch. Agentic pipeline (vision > validate > build > launch > craft) with constitutional Brief enforcement, conditional routing, and organizational memory. Claude Code plugin ecosystem.",
|
|
5
|
+
"bin": {
|
|
6
|
+
"organtic": "./index.mjs"
|
|
7
|
+
},
|
|
8
|
+
"type": "module",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"author": {
|
|
11
|
+
"name": "Adan Mohh",
|
|
12
|
+
"email": "adan@neogrant.fi",
|
|
13
|
+
"url": "https://github.com/Adanmohh"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/Adanmohh/organtic#readme",
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "git+https://github.com/Adanmohh/organtic.git"
|
|
19
|
+
},
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://github.com/Adanmohh/organtic/issues"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"claude-code",
|
|
25
|
+
"claude",
|
|
26
|
+
"plugin",
|
|
27
|
+
"ai-agents",
|
|
28
|
+
"business-strategy",
|
|
29
|
+
"go-to-market",
|
|
30
|
+
"landing-page",
|
|
31
|
+
"mvp",
|
|
32
|
+
"pitch-deck",
|
|
33
|
+
"product-strategy",
|
|
34
|
+
"marketing",
|
|
35
|
+
"seo",
|
|
36
|
+
"copywriting",
|
|
37
|
+
"growth",
|
|
38
|
+
"validation",
|
|
39
|
+
"anthropic",
|
|
40
|
+
"organtic"
|
|
41
|
+
],
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"chalk": "^5.4.1",
|
|
44
|
+
"ora": "^8.1.1"
|
|
45
|
+
},
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=18.0.0"
|
|
48
|
+
}
|
|
49
|
+
}
|