@orbweva/academy 0.2.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.
@@ -0,0 +1,108 @@
1
+ # Installer Troubleshooting
2
+
3
+ Issues specific to `@orbweva/academy`. For non-installer issues (a skill works but behaves unexpectedly, an MCP server won't connect, API key problems), see the [ORBWEVA program-level troubleshooting guide](https://github.com/ORBWEVA/accelerator-template/blob/main/docs/TROUBLESHOOTING.md).
4
+
5
+ ## `npx @orbweva/academy` — command not found
6
+
7
+ You probably don't have Node installed, or it's too old.
8
+
9
+ ```bash
10
+ node --version
11
+ ```
12
+
13
+ If this fails or shows v17 or lower, install Node LTS from [nodejs.org](https://nodejs.org/) or via `fnm`/`nvm`.
14
+
15
+ ## `npx` hangs on first use
16
+
17
+ First-time `npx` has to download the package. On slow connections this can take 30–60 seconds before any output appears. If it's still silent after 2 minutes, try:
18
+
19
+ ```bash
20
+ npm cache clean --force
21
+ npx @orbweva/academy@latest
22
+ ```
23
+
24
+ ## `clone failed` for one or more repos
25
+
26
+ Output shows:
27
+
28
+ ```
29
+ [3/11] ORBWEVA/resume-skill ... clone failed
30
+ ```
31
+
32
+ ### Causes and fixes
33
+
34
+ **Network / firewall** — corporate proxies sometimes block `github.com`. Test:
35
+
36
+ ```bash
37
+ git clone --depth 1 https://github.com/ORBWEVA/resume-skill.git /tmp/test-clone
38
+ ```
39
+
40
+ If that also fails, the issue is your network, not the installer. Try via a VPN or personal hotspot.
41
+
42
+ **Rate-limited** — unauthenticated clone is subject to GitHub's IP-based limits. If you've cloned a lot in the last hour, wait 15 minutes or authenticate: `gh auth login` then re-run.
43
+
44
+ **Repo renamed / made private** — unlikely but possible. Open an issue at https://github.com/ORBWEVA/academy/issues.
45
+
46
+ ## "Permission denied" writing to `~/.claude/skills`
47
+
48
+ The install path has wrong ownership. Check:
49
+
50
+ ```bash
51
+ ls -la ~/.claude/
52
+ ```
53
+
54
+ If `~/.claude/` is owned by root (rare but happens when a tool was run with `sudo`), fix it:
55
+
56
+ ```bash
57
+ sudo chown -R $(whoami) ~/.claude
58
+ ```
59
+
60
+ Then re-run the installer.
61
+
62
+ ## `Unknown skill: discovery` in Claude Code after install
63
+
64
+ The installer completed but Claude Code isn't seeing the skills.
65
+
66
+ 1. **Restart Claude Code.** Skills are loaded at startup. Close and reopen.
67
+ 2. **Confirm the install scope** — did you use `--local`? Local installs only show up when Claude Code is started *from that project directory*. Run `cd` to your project first, then `claude`.
68
+ 3. **Check the folder** — `ls ~/.claude/skills/discovery/SKILL.md` should exist. If not, the install silently skipped that skill. Re-run:
69
+ ```bash
70
+ npx @orbweva/academy@latest --track accelerator --yes --global
71
+ ```
72
+ 4. **Claude Code version** — very old versions of Claude Code may not autoload `~/.claude/skills/`. Update: `npm install -g @anthropic-ai/claude-code`.
73
+
74
+ ## `Unknown skill: X — Create a new one?` appears when you type `/discovery`
75
+
76
+ This is Claude Code's built-in behavior when a command doesn't resolve. If you see this:
77
+
78
+ - **Press `Esc`. Don't press Enter.** Pressing Enter creates a fake skill in `~/.claude/skills/X/` that masks future installs.
79
+ - Check if you actually have the skill installed: `ls ~/.claude/skills/`.
80
+ - If the skill directory exists but Claude still says Unknown, restart Claude Code.
81
+
82
+ ## "Planned" pack warnings
83
+
84
+ Output shows:
85
+
86
+ ```
87
+ ⚠ Some pack repos are planned but not yet published:
88
+ • ORBWEVA/loka-pack (loka-integration)
89
+ ```
90
+
91
+ This is expected. Pack repos are listed in `manifest.json` ahead of being published so the CLI's architecture stays stable. The installer skips planned repos gracefully. Once the repo is public, re-run the installer.
92
+
93
+ ## Installer crashes with a cryptic error
94
+
95
+ Set the debug env var and re-run:
96
+
97
+ ```bash
98
+ ORBWEVA_DEBUG=1 npx @orbweva/academy@latest
99
+ ```
100
+
101
+ This prints a full stack trace. Include it when opening an issue at https://github.com/ORBWEVA/academy/issues.
102
+
103
+ ## Still stuck?
104
+
105
+ - **Email:** support@orbweva.com
106
+ - **GitHub issues:** https://github.com/ORBWEVA/academy/issues
107
+
108
+ For non-installer program-level issues: https://github.com/ORBWEVA/accelerator-template/blob/main/docs/TROUBLESHOOTING.md
@@ -0,0 +1,188 @@
1
+ # User Guide
2
+
3
+ Long-form walkthrough of the `@orbweva/academy` installer.
4
+
5
+ ## Prerequisites
6
+
7
+ Before running `npx @orbweva/academy`, you need:
8
+
9
+ | Requirement | Verify with | If missing |
10
+ |---|---|---|
11
+ | **Node.js 18+** | `node --version` | Install LTS from [nodejs.org](https://nodejs.org/), or via `fnm`/`nvm` |
12
+ | **git** | `git --version` | macOS: `xcode-select --install`; Windows: [git-scm.com](https://git-scm.com/download/win); Linux: `apt install git` |
13
+ | **Claude Code** | `claude --version` | `npm install -g @anthropic-ai/claude-code` |
14
+
15
+ That's it. The installer itself has **zero runtime dependencies** — everything else it needs, it shells out to.
16
+
17
+ ## The interactive flow
18
+
19
+ Running `npx @orbweva/academy` (no flags) walks you through a short menu.
20
+
21
+ ### 1. Track selection
22
+
23
+ ```
24
+ Which Academy track?:
25
+ 1) Accelerator — 12-week cohort program — zero-to-one founders
26
+ 2) Course — Self-paced founder fundamentals
27
+ 3) Mentoring — 1:1 operator support for existing businesses
28
+ 4) Founder — Lean founder base — for partner-delivered programs
29
+ 5) Full Academy — All 11 ORBWEVA skill repos — no tradeoffs
30
+ Choice [1-5, default 1]: _
31
+ ```
32
+
33
+ Press `Enter` for Accelerator, or type a number. One track per install.
34
+
35
+ ### 2. Specialization packs (stackable)
36
+
37
+ ```
38
+ Add specialization packs? (optional, stackable)
39
+ Loka / LoLA — Build a business on the Loka living-textbook + LoLA avatar platform? [y/N]
40
+ Marketing Agency — Run a one-person (or small team) marketing agency? [y/N]
41
+ Web + Video Studio — Web design + video editing studio? [y/N]
42
+ ```
43
+
44
+ Each prompt defaults to **N**. Answer `y` for the ones you want.
45
+
46
+ ### 3. Install scope
47
+
48
+ ```
49
+ Install scope:
50
+ 1) Global — ~/.claude/skills/ (recommended, all projects)
51
+ 2) Local — ./.claude/skills/ (current project only)
52
+ Choice [1-2, default 1]: _
53
+ ```
54
+
55
+ **Global** is right for almost everyone. Use **Local** only if you want a specific project's Claude Code session to see different skills than your other projects.
56
+
57
+ ### 4. Required vs optional skills
58
+
59
+ For every track, some skills are **required** (auto-installed) and some are **optional** (you're prompted).
60
+
61
+ Required = always installed for that track. Optional = `Install <skill name> [Y/n]` per skill.
62
+
63
+ ### 5. Confirmation
64
+
65
+ ```
66
+ Ready to install: 15 skills from 11 repos → ~/.claude/skills/
67
+ Proceed? [Y/n] _
68
+ ```
69
+
70
+ Press `Enter`.
71
+
72
+ ### 6. Clone + copy
73
+
74
+ ```
75
+ [1/11] ORBWEVA/secure-setup ... ✓ 1 skill
76
+ [2/11] ORBWEVA/orbweva-method ... ✓ 1 skill
77
+ ...
78
+ [11/11] ORBWEVA/solo-agents ... ✓ 1 skill
79
+
80
+ ✓ Installed to /Users/you/.claude/skills
81
+ ```
82
+
83
+ ### 7. CLI tools
84
+
85
+ The installer lists the CLI tools for your OS (brew on macOS, winget+scoop on Windows, apt on Linux) and prompts `Run now? [Y/n]` per command. Approved commands execute live in your terminal with full output; interactive commands like `gh auth login` work because child processes inherit your terminal.
86
+
87
+ Use `--yes` to auto-approve every CLI command. Use `--no-run` to print them without executing, then run them yourself. Use `--skills-only` to skip CLI + MCP entirely.
88
+
89
+ See [CLI-TOOLS.md](CLI-TOOLS.md) for per-OS detail and gotchas (Windows admin/non-admin PowerShell, EBADENGINE warnings, etc).
90
+
91
+ ### 8. MCP servers
92
+
93
+ Same pattern — prompt per `claude mcp add <name> <command>`, run the approved ones. Servers needing env vars (e.g. Supabase's `SUPABASE_ACCESS_TOKEN`) register fine without the variable; you set the env var later in whatever shell you launch Claude Code from.
94
+
95
+ See [MCP-SERVERS.md](MCP-SERVERS.md) for full reference.
96
+
97
+ ## Non-interactive mode
98
+
99
+ Chain `--track`, `--pack`, `--yes`, `--global` to skip every prompt:
100
+
101
+ ```bash
102
+ npx @orbweva/academy@latest --track accelerator --yes --global
103
+ ```
104
+
105
+ Full examples:
106
+
107
+ ```bash
108
+ # Accelerator, everything, global
109
+ npx @orbweva/academy@latest --track accelerator --yes --global
110
+
111
+ # Accelerator + Loka, everything, global
112
+ npx @orbweva/academy@latest --track accelerator --pack loka --yes --global
113
+
114
+ # Stack multiple packs
115
+ npx @orbweva/academy@latest --track accelerator --pack marketing --pack web-video --yes --global
116
+
117
+ # Partner-delivered, project-local
118
+ npx @orbweva/academy@latest --track founder --yes --local
119
+
120
+ # See what would happen without touching disk
121
+ npx @orbweva/academy@latest --track full --dry-run --yes --global
122
+
123
+ # Skip the post-install guidance prints (for CI / scripts)
124
+ npx @orbweva/academy@latest --track accelerator --yes --global --skills-only
125
+ ```
126
+
127
+ ## All flags
128
+
129
+ | Flag | Meaning |
130
+ |---|---|
131
+ | `-t, --track <name>` | Track: `accelerator`, `course`, `mentoring`, `founder`, `full` |
132
+ | `-p, --pack <name>` | Pack: `loka`, `marketing`, `web-video` (repeatable) |
133
+ | `-g, --global` | Install to `~/.claude/skills/` (all Claude Code projects) |
134
+ | `-l, --local` | Install to `./.claude/skills/` (this project only) |
135
+ | `-y, --yes` | Non-interactive: accept all defaults and install every optional skill |
136
+ | `--skills-only` | Skip post-install CLI / MCP guidance prints |
137
+ | `--dry-run` | Show the plan, touch nothing on disk |
138
+ | `-h, --help` | Show help + list of available tracks and packs |
139
+
140
+ ## Verify your install
141
+
142
+ ```bash
143
+ ls ~/.claude/skills/
144
+ ```
145
+
146
+ You should see directories: `secure-setup/`, `core/`, `discovery/`, `design-thinking/`, `pitch/`, etc.
147
+
148
+ In Claude Code:
149
+
150
+ ```
151
+ /discovery:help
152
+ ```
153
+
154
+ If this prints the customer-discovery command menu, you're done.
155
+
156
+ If Claude says `Unknown skill` — see [TROUBLESHOOTING.md](TROUBLESHOOTING.md).
157
+
158
+ ## Update cycle
159
+
160
+ Skills change. To refresh:
161
+
162
+ ```bash
163
+ npx @orbweva/academy@latest
164
+ ```
165
+
166
+ Same command. It re-clones each repo and overwrites existing `~/.claude/skills/<name>/` folders. Your per-project skills (in `./.claude/skills/`) are untouched unless you re-run with `--local`.
167
+
168
+ ## What the installer does NOT do
169
+
170
+ - **Does not install Node, Git, or Claude Code.** You need those first.
171
+ - **Does not run the CLI-tool `brew`/`winget`/`scoop` commands.** It prints them; you copy them.
172
+ - **Does not run `claude mcp add` for you.** Same deal — prints, doesn't execute.
173
+ - **Does not edit `~/.claude.json`** (the Claude Code config). Skills are read from `~/.claude/skills/` at the filesystem level — no config changes needed.
174
+ - **Does not send any telemetry.**
175
+
176
+ ## Uninstall
177
+
178
+ The installer doesn't provide an uninstall command. Skills are just directories — delete the ones you don't want:
179
+
180
+ ```bash
181
+ rm -rf ~/.claude/skills/discovery
182
+ ```
183
+
184
+ To remove everything the installer added:
185
+
186
+ ```bash
187
+ rm -rf ~/.claude/skills/{secure-setup,core,resume,discovery,design-thinking,startup-metrics,pitch,hiring,legal-essentials,retention,geo,gtm-launch,seo-toolkit,solo,agents}
188
+ ```
@@ -0,0 +1,88 @@
1
+ # Manual Install / Update
2
+
3
+ If you can't run `npx @orbweva/academy` — air-gapped machine, npm blocked by corporate proxy, offline laptop — you can install the skills by hand. It's just `git clone` + copy.
4
+
5
+ ## Prerequisites
6
+
7
+ - `git`
8
+ - A shell (bash, zsh, or PowerShell)
9
+
10
+ ## One-time setup
11
+
12
+ ```bash
13
+ mkdir -p ~/.claude/skills
14
+ ```
15
+
16
+ On Windows: `~/.claude/skills` resolves to `%USERPROFILE%\.claude\skills\`.
17
+
18
+ ## Install all 11 public ORBWEVA skill repos
19
+
20
+ Paste this whole block into your shell:
21
+
22
+ ```bash
23
+ cd /tmp
24
+ for repo in secure-setup orbweva-method resume-skill founder-discovery dt-skill founder-metrics founder-pitch founder-ops gtm-skills solo-skills solo-agents; do
25
+ git clone --depth 1 "https://github.com/ORBWEVA/$repo.git" "/tmp/orbweva-$repo"
26
+ # Each repo may contain one or more skills under skills/
27
+ for skill_dir in /tmp/orbweva-$repo/skills/*/; do
28
+ skill_name=$(basename "$skill_dir")
29
+ rm -rf ~/.claude/skills/$skill_name
30
+ cp -r "$skill_dir" ~/.claude/skills/$skill_name
31
+ echo "installed: $skill_name"
32
+ done
33
+ rm -rf "/tmp/orbweva-$repo"
34
+ done
35
+ ```
36
+
37
+ PowerShell equivalent:
38
+
39
+ ```powershell
40
+ cd $env:TEMP
41
+ $repos = @('secure-setup','orbweva-method','resume-skill','founder-discovery','dt-skill','founder-metrics','founder-pitch','founder-ops','gtm-skills','solo-skills','solo-agents')
42
+ foreach ($repo in $repos) {
43
+ git clone --depth 1 "https://github.com/ORBWEVA/$repo.git" "$env:TEMP\orbweva-$repo"
44
+ Get-ChildItem "$env:TEMP\orbweva-$repo\skills" -Directory | ForEach-Object {
45
+ $dst = "$env:USERPROFILE\.claude\skills\$($_.Name)"
46
+ if (Test-Path $dst) { Remove-Item $dst -Recurse -Force }
47
+ Copy-Item $_.FullName $dst -Recurse
48
+ Write-Host "installed: $($_.Name)"
49
+ }
50
+ Remove-Item "$env:TEMP\orbweva-$repo" -Recurse -Force
51
+ }
52
+ ```
53
+
54
+ ## Update
55
+
56
+ The manual install command is idempotent — re-run it. It overwrites each skill directory with the latest clone.
57
+
58
+ ## Uninstall a specific skill
59
+
60
+ ```bash
61
+ rm -rf ~/.claude/skills/<skill-name>
62
+ ```
63
+
64
+ ## Install only specific repos
65
+
66
+ Trim the `repos` array to what you want. For the Accelerator track specifically:
67
+
68
+ ```bash
69
+ # Accelerator required + optional (skip founder-ops if you don't need hiring/legal/retention)
70
+ secure-setup orbweva-method resume-skill founder-discovery dt-skill \
71
+ founder-metrics gtm-skills founder-pitch founder-ops solo-skills solo-agents
72
+ ```
73
+
74
+ For per-track skill lists, see [TRACKS.md](TRACKS.md).
75
+
76
+ ## Verify
77
+
78
+ ```bash
79
+ ls ~/.claude/skills/
80
+ ```
81
+
82
+ In Claude Code:
83
+
84
+ ```
85
+ /discovery:help
86
+ ```
87
+
88
+ Should show the customer-discovery command menu.
package/manifest.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "version": 1,
3
+ "skillRepos": {
4
+ "secure-setup": { "repo": "ORBWEVA/secure-setup", "skills": ["secure-setup"] },
5
+ "orbweva-method": { "repo": "ORBWEVA/orbweva-method", "skills": ["core"] },
6
+ "resume-skill": { "repo": "ORBWEVA/resume-skill", "skills": ["resume"] },
7
+ "founder-discovery": { "repo": "ORBWEVA/founder-discovery", "skills": ["discovery"] },
8
+ "dt-skill": { "repo": "ORBWEVA/dt-skill", "skills": ["design-thinking"] },
9
+ "founder-metrics": { "repo": "ORBWEVA/founder-metrics", "skills": ["startup-metrics"] },
10
+ "founder-pitch": { "repo": "ORBWEVA/founder-pitch", "skills": ["pitch"] },
11
+ "founder-ops": { "repo": "ORBWEVA/founder-ops", "skills": ["hiring", "legal-essentials", "retention"] },
12
+ "gtm-skills": { "repo": "ORBWEVA/gtm-skills", "skills": ["geo", "gtm-launch", "seo-toolkit"] },
13
+ "solo-skills": { "repo": "ORBWEVA/solo-skills", "skills": ["solo"] },
14
+ "solo-agents": { "repo": "ORBWEVA/solo-agents", "skills": ["agents"] },
15
+
16
+ "loka-pack": { "repo": "ORBWEVA/loka-pack", "skills": ["loka-integration"], "status": "planned" },
17
+ "marketing-pack": { "repo": "ORBWEVA/marketing-pack", "skills": ["marketing-agency"], "status": "planned" },
18
+ "web-video-pack": { "repo": "ORBWEVA/web-video-pack", "skills": ["web-design", "video-editing"], "status": "planned" }
19
+ },
20
+ "tracks": {
21
+ "accelerator": {
22
+ "label": "Accelerator",
23
+ "tagline": "12-week cohort program — zero-to-one founders",
24
+ "required": ["secure-setup", "orbweva-method", "resume-skill", "founder-discovery", "dt-skill", "founder-metrics", "gtm-skills"],
25
+ "optional": ["founder-pitch", "founder-ops", "solo-skills", "solo-agents"]
26
+ },
27
+ "course": {
28
+ "label": "Course",
29
+ "tagline": "Self-paced founder fundamentals",
30
+ "required": ["secure-setup", "orbweva-method", "resume-skill", "founder-discovery", "dt-skill"],
31
+ "optional": ["founder-metrics", "gtm-skills"]
32
+ },
33
+ "mentoring": {
34
+ "label": "Mentoring",
35
+ "tagline": "1:1 operator support for existing businesses",
36
+ "required": ["secure-setup", "orbweva-method", "resume-skill", "founder-metrics", "founder-ops"],
37
+ "optional": ["founder-pitch", "gtm-skills", "solo-skills", "solo-agents"]
38
+ },
39
+ "founder": {
40
+ "label": "Founder",
41
+ "tagline": "Lean founder base — for partner-delivered programs (e.g. Headswitch)",
42
+ "required": ["secure-setup", "orbweva-method", "resume-skill", "founder-discovery", "dt-skill"],
43
+ "optional": ["founder-metrics", "founder-pitch", "gtm-skills"]
44
+ },
45
+ "full": {
46
+ "label": "Full Academy",
47
+ "tagline": "All 11 ORBWEVA skill repos — no tradeoffs",
48
+ "required": ["secure-setup", "orbweva-method", "resume-skill", "founder-discovery", "dt-skill", "founder-metrics", "founder-pitch", "founder-ops", "gtm-skills", "solo-skills", "solo-agents"],
49
+ "optional": []
50
+ }
51
+ },
52
+ "packs": {
53
+ "loka": {
54
+ "label": "Loka / LoLA",
55
+ "tagline": "Build a business on the Loka living-textbook + LoLA avatar platform",
56
+ "required": ["loka-pack"],
57
+ "optional": []
58
+ },
59
+ "marketing": {
60
+ "label": "Marketing Agency",
61
+ "tagline": "Run a one-person (or small team) marketing agency",
62
+ "required": ["marketing-pack"],
63
+ "optional": ["solo-skills", "solo-agents"]
64
+ },
65
+ "web-video": {
66
+ "label": "Web + Video Studio",
67
+ "tagline": "Web design + video editing studio",
68
+ "required": ["web-video-pack"],
69
+ "optional": ["solo-skills"]
70
+ }
71
+ },
72
+ "mcpServers": {
73
+ "supabase": { "cmd": "npx -y @supabase/mcp-server-supabase", "envKey": "SUPABASE_ACCESS_TOKEN", "required": true },
74
+ "context7": { "cmd": "npx -y @upstash/context7-mcp", "envKey": null, "required": true },
75
+ "playwright": { "cmd": "npx -y @playwright/mcp", "envKey": null, "required": false },
76
+ "memory": { "cmd": "npx -y @modelcontextprotocol/server-memory", "envKey": null, "required": false }
77
+ }
78
+ }
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@orbweva/academy",
3
+ "version": "0.2.0",
4
+ "description": "One-command installer for ORBWEVA Academy — skills, MCP configs, and CLI tool guidance for Claude Code.",
5
+ "type": "module",
6
+ "bin": {
7
+ "orbweva-academy": "bin/install.js"
8
+ },
9
+ "files": [
10
+ "bin",
11
+ "src",
12
+ "docs",
13
+ "manifest.json",
14
+ "README.md",
15
+ "README.ja-JP.md",
16
+ "README.ko-KR.md",
17
+ "LICENSE",
18
+ "LICENSE-DOCS",
19
+ "CHANGELOG.md",
20
+ "CONTRIBUTING.md",
21
+ "SECURITY.md"
22
+ ],
23
+ "homepage": "https://github.com/ORBWEVA/academy#readme",
24
+ "bugs": {
25
+ "url": "https://github.com/ORBWEVA/academy/issues"
26
+ },
27
+ "keywords": ["orbweva", "academy", "claude-code", "skills"],
28
+ "author": "ORBWEVA",
29
+ "license": "(MIT AND CC-BY-NC-SA-4.0)",
30
+ "engines": {
31
+ "node": ">=18"
32
+ },
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/ORBWEVA/academy.git"
36
+ }
37
+ }
package/src/banner.js ADDED
@@ -0,0 +1,13 @@
1
+ import { c } from './color.js';
2
+
3
+ export function banner() {
4
+ const art = [
5
+ '█████ ████ ████ █ █ █████ █ █ ███ ',
6
+ '█ █ █ █ █ █ █ █ █ █ █ █ █',
7
+ '█ █ ████ ████ █ █ █ ████ █ █ █████',
8
+ '█ █ █ █ █ █ ██ ██ █ █ █ █ █',
9
+ '█████ █ █ ████ █ █ █████ █ █ █',
10
+ ].join('\n');
11
+
12
+ return `\n${c.cyan(art)}\n\n${c.bold('ORBWEVA Academy')} — Claude Code skills installer\n`;
13
+ }
@@ -0,0 +1,68 @@
1
+ import { c } from './color.js';
2
+ import { promptAndRun, summary } from './exec.js';
3
+
4
+ const MAC = {
5
+ label: 'macOS',
6
+ steps: [
7
+ { cmd: 'brew install fnm gh supabase/tap/supabase', desc: 'Node manager + GitHub CLI + Supabase CLI (brew)' },
8
+ { cmd: 'fnm install --lts && fnm default lts-latest', desc: 'Install and default to LTS Node' },
9
+ { cmd: 'npm install -g pnpm vercel', desc: 'Install pnpm + Vercel CLI globally' },
10
+ { cmd: 'gh auth login', desc: 'Sign in to GitHub (interactive)', note: 'This is interactive — follow the browser prompts.' },
11
+ ],
12
+ };
13
+
14
+ const WIN = {
15
+ label: 'Windows',
16
+ intro: [
17
+ `${c.yellow('⚠ Read before running:')}`,
18
+ ' 1. These commands assume you are in PowerShell.',
19
+ ' 2. winget commands need Admin PowerShell. If a winget step fails, re-run in an Admin PowerShell window.',
20
+ ' 3. scoop commands need regular (non-Admin) PowerShell.',
21
+ ' 4. After each install, PATH may be stale — restart the window if you see "command not recognized".',
22
+ ' 5. EBADENGINE warnings on "npm install -g" are harmless; ignore them.',
23
+ ].join('\n'),
24
+ steps: [
25
+ { cmd: 'winget install --id Schniz.fnm -e', desc: 'Install fnm (Node version manager)', note: 'Needs Admin PowerShell.' },
26
+ { cmd: 'winget install --id GitHub.cli -e', desc: 'Install GitHub CLI', note: 'Needs Admin PowerShell.' },
27
+ { cmd: 'fnm install --lts; fnm default lts-latest', desc: 'Install and default to LTS Node' },
28
+ { cmd: 'Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force; irm get.scoop.sh | iex', desc: 'Install Scoop package manager' },
29
+ { cmd: 'scoop install supabase', desc: 'Install Supabase CLI via Scoop' },
30
+ { cmd: 'npm install -g pnpm vercel', desc: 'Install pnpm + Vercel CLI globally' },
31
+ { cmd: 'gh auth login', desc: 'Sign in to GitHub (interactive)', note: 'This is interactive — follow the browser prompts.' },
32
+ ],
33
+ };
34
+
35
+ const LINUX = {
36
+ label: 'Linux',
37
+ steps: [
38
+ { cmd: 'curl -fsSL https://fnm.vercel.app/install | bash', desc: 'Install fnm (Node version manager)' },
39
+ { cmd: 'fnm install --lts && fnm default lts-latest', desc: 'Install and default to LTS Node' },
40
+ { cmd: 'sudo apt install -y gh', desc: 'Install GitHub CLI (Debian/Ubuntu)', note: 'If not Debian-based, see https://cli.github.com/manual/installation' },
41
+ { cmd: 'npm install -g pnpm vercel', desc: 'Install pnpm + Vercel CLI globally' },
42
+ { cmd: 'gh auth login', desc: 'Sign in to GitHub (interactive)', note: 'This is interactive — follow the browser prompts.' },
43
+ ],
44
+ };
45
+
46
+ function profileFor(os) {
47
+ if (os.platform === 'darwin') return MAC;
48
+ if (os.platform === 'win32') return WIN;
49
+ return LINUX;
50
+ }
51
+
52
+ export async function runCliSetup(os, { assumeYes, interactive }) {
53
+ const profile = profileFor(os);
54
+ console.log(`\n${c.bold('─── CLI tools')} ${c.dim(`(${profile.label})`)}`);
55
+ if (profile.intro) console.log(profile.intro);
56
+
57
+ if (!interactive) {
58
+ // Fallback to print-only mode (for --skills-only-ish callers).
59
+ for (const s of profile.steps) console.log(` ${c.cyan('$')} ${s.cmd}`);
60
+ console.log(c.dim(`\n Full reference: https://orbweva.com/en/accelerator/skills`));
61
+ return null;
62
+ }
63
+
64
+ const result = await promptAndRun(profile.steps, { assumeYes });
65
+ console.log(`\n ${c.bold('CLI tools:')} ${summary(result)}`);
66
+ console.log(c.dim(` Full reference: https://orbweva.com/en/accelerator/skills`));
67
+ return result;
68
+ }