solo-cto-agent 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG ADDED
@@ -0,0 +1,46 @@
1
+ # Changelog
2
+
3
+ ## 0.5.1
4
+
5
+ * added skill slimming docs (references/ pattern with measured results)
6
+ * fixed BOM encoding in CONTRIBUTING
7
+ * fixed corrupted FAQ section in README
8
+ * cleaned up README: removed duplicate sections, consolidated post-install guide
9
+ * updated ROADMAP with v0.5.0 completion and v0.6.0 plan
10
+
11
+ ## 0.5.0
12
+
13
+ * added CLI init/status commands for npm distribution
14
+ * added demo asset, architecture diagram, and updated Quick Start
15
+ * expanded CONTRIBUTING and templates
16
+
17
+ ## 0.4.0
18
+
19
+ * added package.json and basic test tooling
20
+ * added failure-catalog.json and schema validation
21
+ * added CI test workflow for PRs
22
+ * added ROADMAP.md
23
+
24
+ ## 0.3.0
25
+
26
+ * added .cursorrules for Cursor IDE support
27
+ * added .windsurfrules for Windsurf (Cascade) support
28
+ * added .github/copilot-instructions.md for GitHub Copilot support
29
+ * all three rule files share the same CTO philosophy, adapted to each tool's format
30
+
31
+ ## 0.2.0
32
+
33
+ * rewrote README to sound more human and less sales-heavy
34
+ * improved `setup.sh` toward safer repeat installs and updates
35
+ * softened over-strong automation claims in `build`
36
+ * clarified `craft` as intentionally opinionated
37
+ * tightened `review` wording
38
+ * added contribution guidance
39
+ * added example files for practical usage
40
+
41
+ ## 0.1.0
42
+
43
+ * initial public release
44
+ * added build, ship, craft, spark, review, and memory skills
45
+ * added setup script
46
+ * added templates for context and project state
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 seunghunbae-3svs
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,409 @@
1
+ # solo-cto-agent
2
+
3
+ [![npm](https://img.shields.io/npm/v/solo-cto-agent)](https://www.npmjs.com/package/solo-cto-agent)
4
+ [![Package Validate](https://github.com/seunghunbae-3svs/solo-cto-agent/actions/workflows/package-validate.yml/badge.svg)](https://github.com/seunghunbae-3svs/solo-cto-agent/actions/workflows/package-validate.yml)
5
+ [![Test](https://github.com/seunghunbae-3svs/solo-cto-agent/actions/workflows/test.yml/badge.svg)](https://github.com/seunghunbae-3svs/solo-cto-agent/actions/workflows/test.yml)
6
+ [![Changelog](https://github.com/seunghunbae-3svs/solo-cto-agent/actions/workflows/changelog.yml/badge.svg)](https://github.com/seunghunbae-3svs/solo-cto-agent/actions/workflows/changelog.yml)
7
+ [![License](https://img.shields.io/github/license/seunghunbae-3svs/solo-cto-agent)](LICENSE)
8
+
9
+
10
+ I made this because I got tired of using AI coding tools that were good at writing code, but still left me doing all the messy CTO work around it.
11
+
12
+ The hard part was rarely "write the feature." It was everything around the feature:
13
+
14
+ * catching missing env vars before a deploy breaks
15
+ * not re-explaining the same stack every new session
16
+ * stopping error loops before they waste half an hour
17
+ * getting honest pushback on ideas instead of empty encouragement
18
+ * cleaning up UI that looks obviously AI-generated
19
+
20
+ This repo is my attempt to package those habits into a small set of reusable skills. It is not magic. It is not a replacement for judgment. It is just a better operating system for the kind of AI agent I wanted to work with.
21
+
22
+ ## What this is
23
+
24
+ `solo-cto-agent` is an opinionated skill pack for solo founders, indie hackers, and small teams using AI coding agents in their build workflow.
25
+
26
+ Primary workflow: Cowork + Codex.
27
+ It was built around Claude Code & OpenAI Codex but the core rules also work in Cursor, Windsurf, and GitHub Copilot. The repo includes native config files where needed.
28
+
29
+ The point is simple:
30
+
31
+ * less repetitive setup work
32
+ * less context loss between sessions
33
+ * less AI slop in code and design
34
+ * more useful criticism before you commit to bad ideas
35
+ * more initiative from the agent on low-risk work
36
+
37
+ ## What changes in practice
38
+
39
+ This is the difference I wanted in day-to-day use:
40
+
41
+ | Without this | With this |
42
+ | -------------------------------------------- | -------------------------------------------------------------- |
43
+ | Same build error over and over | Circuit breaker stops the loop and summarizes the likely cause |
44
+ | "Please add this manually to your dashboard" | Agent checks setup earlier and asks once when needed |
45
+ | New session, same explanation again | Important decisions get reused |
46
+ | Rounded-blue-gradient AI UI | Design checks push for more intentional output |
47
+ | "Looks good to me" feedback | Review forces actual criticism |
48
+ | Agent asks permission for every tiny step | Low-risk work gets done without constant back-and-forth |
49
+
50
+ ## Who this is for
51
+
52
+ This repo is probably useful if you:
53
+
54
+ * build mostly alone or with a very small team
55
+ * already use Claude, Codex, Cursor, Windsurf, or Copilot in your workflow
56
+ * want the agent to take more initiative
57
+ * care about startup execution, not just code completion
58
+ * are okay with opinionated defaults
59
+
60
+ It is probably not a good fit if you:
61
+
62
+ * work in a tightly locked-down enterprise environment
63
+ * do not want agents touching files or setup
64
+ * want every action manually approved
65
+ * prefer a neutral framework-agnostic starter pack with very conservative defaults
66
+
67
+ ## What's inside
68
+
69
+ ```text
70
+ solo-cto-agent/
71
+ ├── autopilot.md
72
+ ├── .cursorrules ← Cursor picks this up automatically
73
+ ├── .windsurfrules ← Windsurf (Cascade) picks this up automatically
74
+ ├── .github/
75
+ │ └── copilot-instructions.md ← GitHub Copilot workspace instructions
76
+ ├── skills/
77
+ │ ├── build/
78
+ │ │ └── SKILL.md
79
+ │ ├── ship/
80
+ │ │ └── SKILL.md
81
+ │ ├── craft/
82
+ │ │ └── SKILL.md
83
+ │ ├── spark/
84
+ │ │ └── SKILL.md
85
+ │ ├── review/
86
+ │ │ └── SKILL.md
87
+ │ └── memory/
88
+ │ └── SKILL.md
89
+ └── templates/
90
+ ├── project.md
91
+ └── context.md
92
+ ```
93
+
94
+ ## 5-Minute Quick Start
95
+
96
+ Three steps, under two minutes:
97
+
98
+ 1) Install the CLI
99
+ ```bash
100
+ npx solo-cto-agent init
101
+ ```
102
+
103
+ 2) Configure your stack
104
+ ```text
105
+ Open ~/.claude/skills/solo-cto-agent/SKILL.md
106
+ Replace the {{YOUR_*}} placeholders
107
+ ```
108
+
109
+ 3) Verify
110
+ ```bash
111
+ solo-cto-agent status
112
+ ```
113
+
114
+ Expected output looks like:
115
+ ```text
116
+ solo-cto-agent status
117
+ - SKILL.md: OK
118
+ - failure-catalog.json: OK
119
+ - error patterns: 8
120
+ ```
121
+
122
+ ## Demo
123
+
124
+ ![CLI demo](docs/demo.svg)
125
+
126
+ ## Architecture
127
+
128
+ ```mermaid
129
+ graph LR
130
+ A[Error Detected] --> B[failure-catalog.json]
131
+ B --> C[Pattern Match]
132
+ C --> D[Auto-Fix Applied]
133
+ D --> E[Build Verified]
134
+ ```
135
+
136
+ ## Install
137
+
138
+ ### npm (recommended)
139
+
140
+ ```bash
141
+ npm install -g solo-cto-agent
142
+ solo-cto-agent init
143
+ ```
144
+
145
+ ### Quick install (Claude Code)
146
+
147
+ ```bash
148
+ curl -sSL https://raw.githubusercontent.com/seunghunbae-3svs/solo-cto-agent/main/setup.sh | bash
149
+ ```
150
+
151
+ ### Manual install
152
+
153
+ ```bash
154
+ git clone https://github.com/seunghunbae-3svs/solo-cto-agent.git
155
+ cp -r solo-cto-agent/skills/* ~/.claude/skills/
156
+ cat solo-cto-agent/autopilot.md >> ~/.claude/CLAUDE.md
157
+ ```
158
+
159
+ ### Only want one skill?
160
+
161
+ ```bash
162
+ cp -r solo-cto-agent/skills/build ~/.claude/skills/
163
+ ```
164
+
165
+ Then open the skill file and replace the placeholders with your actual stack. Example:
166
+
167
+ ```text
168
+ {{YOUR_OS}} -> macOS / Windows / Linux
169
+ {{YOUR_EDITOR}} -> Cursor / VSCode / etc.
170
+ {{YOUR_DEPLOY}} -> Vercel / Railway / Netlify / etc.
171
+ {{YOUR_FRAMEWORK}} -> Next.js / Remix / SvelteKit / etc.
172
+ ```
173
+
174
+ ### Using with Cowork + Codex
175
+
176
+ Codex is a first-class target. Use the SKILL.md files directly as your instruction source. No extra Codex-specific files are required.
177
+
178
+ ### Using with Codex, Cursor, Windsurf, or Copilot
179
+
180
+ If you use Codex, Cursor, Windsurf, or GitHub Copilot instead of (or alongside) Claude, the repo includes native rule files:
181
+
182
+ * `.cursorrules` - Cursor reads this from your project root automatically
183
+ * `.windsurfrules` - Windsurf (Cascade) reads this from your project root automatically
184
+ * `.github/copilot-instructions.md` - GitHub Copilot reads this as workspace-level instructions
185
+
186
+ Just copy the files you need into your project:
187
+
188
+ ```bash
189
+ cp solo-cto-agent/.cursorrules ./
190
+ cp solo-cto-agent/.windsurfrules ./
191
+ cp -r solo-cto-agent/.github ./
192
+ ```
193
+
194
+ These files contain the same CTO philosophy as the Claude skills - autonomy levels, build discipline, design standards, review rules - adapted to each tool's format. They are not watered-down versions. They are the same operating system, just in a different config file.
195
+
196
+ ## How I use autonomy
197
+
198
+ Most agent workflows feel too timid in the wrong places and too reckless in the dangerous ones. So I split behavior into 3 levels.
199
+
200
+ ### L1 - just do it
201
+
202
+ Small, low-risk work should not need approval. Examples:
203
+
204
+ * fixing typos
205
+ * creating obvious files
206
+ * loading context
207
+ * choosing an output format
208
+ * doing routine search or setup checks
209
+
210
+ ### L2 - do it, then explain
211
+
212
+ If something is a bit ambiguous but still low-risk, the agent makes the best assumption, does the work, and tells me what it assumed. That is usually better than spending 10 messages clarifying something that could have been resolved in one pass.
213
+
214
+ ### L3 - ask first
215
+
216
+ Some things still need explicit approval:
217
+
218
+ * production deploys
219
+ * schema changes
220
+ * cost-increasing decisions
221
+ * anything sent under my name
222
+ * actions that could cause irreversible damage
223
+
224
+ That split has worked much better for me than asking permission every 30 seconds.
225
+
226
+ ## Skills
227
+
228
+ ### build
229
+
230
+ This is the one I use most. Its job is to reduce the annoying parts of implementation work:
231
+
232
+ * check prerequisites before coding
233
+ * catch missing env vars, packages, migrations, or config earlier
234
+ * keep scope from drifting
235
+ * stop repeated error loops
236
+ * keep build and deploy problems from bouncing back to the user too quickly
237
+
238
+ The core idea is simple:
239
+
240
+ > do more of the setup thinking before writing code, not after something fails.
241
+
242
+ ### ship
243
+
244
+ The job is not done when the code is written. It is done when the deploy works.
245
+
246
+ This skill treats deploy failures as part of the work:
247
+
248
+ * monitor the build
249
+ * read the logs
250
+ * try reasonable fixes
251
+ * stop when a circuit breaker is hit
252
+ * escalate clearly instead of spiraling
253
+
254
+ ### craft
255
+
256
+ This exists because AI-generated UI often has a very obvious look. Too many gradients. Too much rounded everything. Too many generic SaaS defaults that look "fine" but still feel cheap.
257
+
258
+ This skill is an opinionated design filter:
259
+
260
+ * typography rules
261
+ * color discipline
262
+ * spacing consistency
263
+ * motion sanity
264
+ * anti-slop checks
265
+
266
+ It does not guarantee great design, but it helps avoid lazy AI design.
267
+
268
+ ### spark
269
+
270
+ For idea work, I wanted something better than "this market is huge."
271
+
272
+ This skill takes an early idea and forces it through structure:
273
+
274
+ * market scan
275
+ * competitors
276
+ * unit economics
277
+ * scenarios
278
+ * risk framing
279
+ * PRD direction
280
+
281
+ Useful when an idea is still vague but you need something more testable.
282
+
283
+ ### review
284
+
285
+ This skill is intentionally not friendly. It looks at a plan from three perspectives:
286
+
287
+ * investor
288
+ * target user
289
+ * smart competitor
290
+
291
+ The point is to expose weak points early, not to make the founder feel good.
292
+
293
+ ### memory
294
+
295
+ This is for reducing repeat explanation and preserving useful context.
296
+
297
+ Not everything needs to be remembered forever. But decisions, repeated failure patterns, and project context should not disappear every session.
298
+
299
+ ## Skill slimming
300
+
301
+ When skills grow past 150 lines, most of that weight is reference data the agent doesn't need on every activation. The `references/` pattern splits hot-path logic from cold-path data, cutting token costs by 58-79% per skill without losing functionality.
302
+
303
+ See [docs/skill-slimming.md](docs/skill-slimming.md) for the pattern, measured results, and how to apply it.
304
+
305
+ ## Design principles
306
+
307
+ ### Agent does the work, user makes decisions
308
+
309
+ If the agent can reasonably figure something out, it should do that. The user should spend time on judgment calls, not repetitive setup.
310
+
311
+ ### Risks before strengths
312
+
313
+ Good review starts with what is broken, vague, or contradictory. Praise comes after that.
314
+
315
+ ### Facts over vibes
316
+
317
+ If a number appears, it should have a source, a formula, or a clear label like:
318
+
319
+ * `[confirmed]`
320
+ * `[estimated]`
321
+ * `[unverified]`
322
+
323
+ ### Pre-scan, don't surprise
324
+
325
+ A lot of agent frustration comes from late discovery: missing env vars, missing package installs, missing DB changes, missing credentials. This pack tries to catch those earlier.
326
+
327
+ ### Keep the loop bounded
328
+
329
+ If the same problem keeps happening, stop and report clearly. An agent that loops forever is worse than one that asks for help.
330
+
331
+ ## What this is not
332
+
333
+ This is not:
334
+
335
+ * a hosted product
336
+ * a full framework
337
+ * a universal standard for agent behavior
338
+ * a replacement for technical judgment
339
+
340
+ It is just a set of operating rules that worked well enough for me to package and share.
341
+
342
+ ## Recommended first use
343
+
344
+ If you want to try this without changing your whole workflow:
345
+
346
+ 1. install only `build` and `review`
347
+ 2. replace the stack placeholders
348
+ 3. use them on one real feature or bug
349
+ 4. see whether the agent becomes more useful or just more opinionated
350
+
351
+ That is the easiest way to tell whether this fits how you work.
352
+
353
+ ## License
354
+
355
+ MIT - fork it, modify it, ship it.
356
+
357
+
358
+ ---
359
+
360
+ ## Post-install verification
361
+
362
+ After installation, verify the pack works:
363
+
364
+ 1. Check skills exist in your agent directory (e.g. `~/.claude/skills`)
365
+ 2. Confirm each skill has valid frontmatter (`---` block)
366
+ 3. Run a simple prompt like "Use build to fix a TypeScript error"
367
+ 4. Run `bash scripts/validate.sh` to check file integrity
368
+ 5. Confirm no auto-merge or deploy happens without approval
369
+
370
+ If something fails, re-run `setup.sh --update` and check again.
371
+
372
+
373
+ ---
374
+
375
+ ## Sample output
376
+
377
+ **Build (preflight + fix)**
378
+ ```
379
+ [build] pre-scan: missing env vars: STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET
380
+ [build] request: please provide the 2 keys above before proceeding
381
+ [build] applied: fixed prisma client mismatch
382
+ [build] build: npm run build -> OK
383
+ [build] report: 3 files changed, 1 risk flagged, rollback path noted
384
+ ```
385
+
386
+ **Review + rework**
387
+ ```
388
+ [review] Codex: REQUEST_CHANGES (blocker: missing RLS policy)
389
+ [review] Claude: APPROVE (nits: copy, spacing)
390
+ [rework] round 1/2 -> fixed RLS policy + added tests
391
+ [decision] recommendation: HOLD until preview verified
392
+ ```
393
+
394
+
395
+ ---
396
+
397
+ ## FAQ
398
+
399
+ **Q: Do I need all six skills?**
400
+ A: No. Start with `build` and `review`. Add the others if you find yourself wanting them. Each skill is independent.
401
+
402
+ **Q: Why does the agent stop retrying after 3 attempts?**
403
+ A: Infinite loops waste more time than they save. If something fails 3 times, the agent summarizes what it knows and hands control back to you.
404
+
405
+ **Q: Why is the design skill so opinionated?**
406
+ A: Because default AI output tends toward the same rounded-gradient look. The rules push for more intentional choices. Override whatever doesn't fit your taste.
407
+
408
+ **Q: Does this work in Cursor/Windsurf?**
409
+ A: Yes. The repo includes native config files for each. The core philosophy is the same across all tools.
package/bin/cli.js ADDED
@@ -0,0 +1,177 @@
1
+ #!/usr/bin/env node
2
+ /* eslint-disable no-console */
3
+ const fs = require("fs");
4
+ const path = require("path");
5
+ const os = require("os");
6
+ const https = require("https");
7
+
8
+ const ROOT = path.resolve(__dirname, "..");
9
+ const DEFAULT_CATALOG = path.join(ROOT, "failure-catalog.json");
10
+
11
+ function printHelp() {
12
+ console.log(`solo-cto-agent
13
+
14
+ Usage:
15
+ solo-cto-agent init [--force]
16
+ solo-cto-agent status
17
+ solo-cto-agent --help
18
+
19
+ Commands:
20
+ init scaffold ~/.claude/skills/solo-cto-agent
21
+ status check skill health and error catalog
22
+ `);
23
+ }
24
+
25
+ function ensureDir(dir) {
26
+ fs.mkdirSync(dir, { recursive: true });
27
+ }
28
+
29
+ function writeFileIfMissing(filePath, content, force) {
30
+ if (fs.existsSync(filePath) && !force) {
31
+ return false;
32
+ }
33
+ fs.writeFileSync(filePath, content, "utf8");
34
+ return true;
35
+ }
36
+
37
+ function initCommand(force) {
38
+ const targetDir = path.join(os.homedir(), ".claude", "skills", "solo-cto-agent");
39
+ ensureDir(targetDir);
40
+
41
+ // Copy failure-catalog.json
42
+ const targetCatalog = path.join(targetDir, "failure-catalog.json");
43
+ const catalogContent = fs.readFileSync(DEFAULT_CATALOG, "utf8");
44
+ const catalogWritten = writeFileIfMissing(targetCatalog, catalogContent, force);
45
+
46
+ // Create starter SKILL.md
47
+ const targetSkill = path.join(targetDir, "SKILL.md");
48
+ const starter = `---
49
+ name: solo-cto-agent
50
+ description: "Project-specific CTO skill pack. Replace placeholders with real stack info."
51
+ user-invocable: true
52
+ ---
53
+
54
+ # Project Stack
55
+
56
+ OS: {{YOUR_OS}}
57
+ Editor: {{YOUR_EDITOR}}
58
+ Deploy: {{YOUR_DEPLOY}}
59
+ DB: {{YOUR_DB}}
60
+ Framework: {{YOUR_FRAMEWORK}}
61
+ Style: {{YOUR_STYLE}}
62
+
63
+ # Notes
64
+ - Replace placeholders above with real values.
65
+ - Keep this file updated as the stack changes.
66
+ `;
67
+ const skillWritten = writeFileIfMissing(targetSkill, starter, force);
68
+
69
+ console.log("✅ solo-cto-agent initialized");
70
+ console.log(`- target: ${targetDir}`);
71
+ console.log(`- failure-catalog: ${catalogWritten ? "created" : "exists"}`);
72
+ console.log(`- SKILL.md: ${skillWritten ? "created" : "exists"}`);
73
+ console.log("\nNext:");
74
+ console.log("1) Open SKILL.md and replace placeholders");
75
+ console.log("2) Add this skill path to your agent config if needed");
76
+ console.log("3) Run: solo-cto-agent status");
77
+ }
78
+
79
+ function readCatalogCount(catalogPath) {
80
+ try {
81
+ const data = JSON.parse(fs.readFileSync(catalogPath, "utf8"));
82
+ if (Array.isArray(data.items)) return data.items.length;
83
+ return 0;
84
+ } catch {
85
+ return 0;
86
+ }
87
+ }
88
+
89
+ function getLatestCiStatus(repo, token) {
90
+ return new Promise((resolve) => {
91
+ if (!repo || !token) {
92
+ resolve({ status: "unavailable", conclusion: "missing token or repo" });
93
+ return;
94
+ }
95
+
96
+ const options = {
97
+ hostname: "api.github.com",
98
+ path: `/repos/${repo}/actions/runs?per_page=1`,
99
+ headers: {
100
+ "User-Agent": "solo-cto-agent",
101
+ Authorization: `Bearer ${token}`,
102
+ Accept: "application/vnd.github+json",
103
+ },
104
+ };
105
+
106
+ https
107
+ .get(options, (res) => {
108
+ let data = "";
109
+ res.on("data", (chunk) => (data += chunk));
110
+ res.on("end", () => {
111
+ try {
112
+ const json = JSON.parse(data);
113
+ const run = json.workflow_runs && json.workflow_runs[0];
114
+ if (!run) return resolve({ status: "unavailable", conclusion: "no runs" });
115
+ resolve({ status: run.status || "unknown", conclusion: run.conclusion || "unknown" });
116
+ } catch (e) {
117
+ resolve({ status: "unavailable", conclusion: "parse error" });
118
+ }
119
+ });
120
+ })
121
+ .on("error", () => resolve({ status: "unavailable", conclusion: "request failed" }));
122
+ });
123
+ }
124
+
125
+ async function statusCommand() {
126
+ const targetDir = path.join(os.homedir(), ".claude", "skills", "solo-cto-agent");
127
+ const skillPath = path.join(targetDir, "SKILL.md");
128
+ const catalogPath = path.join(targetDir, "failure-catalog.json");
129
+
130
+ const skillOk = fs.existsSync(skillPath);
131
+ const catalogOk = fs.existsSync(catalogPath);
132
+ const count = catalogOk ? readCatalogCount(catalogPath) : 0;
133
+
134
+ console.log("solo-cto-agent status");
135
+ console.log(`- SKILL.md: ${skillOk ? "OK" : "MISSING"}`);
136
+ console.log(`- failure-catalog.json: ${catalogOk ? "OK" : "MISSING"}`);
137
+ console.log(`- error patterns: ${count}`);
138
+
139
+ const repo = process.env.GITHUB_REPOSITORY;
140
+ const token = process.env.GITHUB_TOKEN || process.env.GH_TOKEN;
141
+ const ci = await getLatestCiStatus(repo, token);
142
+ console.log(`- last CI: ${ci.status} (${ci.conclusion})`);
143
+ }
144
+
145
+ async function main() {
146
+ const args = process.argv.slice(2);
147
+ const cmd = args[0];
148
+
149
+ if (!cmd || cmd === "--help" || cmd === "-h" || cmd === "help") {
150
+ printHelp();
151
+ return;
152
+ }
153
+
154
+ if (cmd === "init") {
155
+ if (args.includes("--help") || args.includes("-h")) {
156
+ printHelp();
157
+ return;
158
+ }
159
+ const force = args.includes("--force");
160
+ initCommand(force);
161
+ return;
162
+ }
163
+
164
+ if (cmd === "status") {
165
+ if (args.includes("--help") || args.includes("-h")) {
166
+ printHelp();
167
+ return;
168
+ }
169
+ await statusCommand();
170
+ return;
171
+ }
172
+
173
+ printHelp();
174
+ process.exit(1);
175
+ }
176
+
177
+ main();
package/docs/demo.svg ADDED
@@ -0,0 +1,14 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="900" height="420" viewBox="0 0 900 420">
2
+ <rect width="900" height="420" fill="#0b0f16"/>
3
+ <rect x="20" y="20" width="860" height="380" rx="10" fill="#111827" stroke="#1f2937"/>
4
+ <text x="40" y="60" fill="#93c5fd" font-family="monospace" font-size="16">npx solo-cto-agent init</text>
5
+ <text x="40" y="90" fill="#10b981" font-family="monospace" font-size="14">✔ initialized ~/.claude/skills/solo-cto-agent</text>
6
+ <text x="40" y="120" fill="#10b981" font-family="monospace" font-size="14">✔ failure-catalog.json created</text>
7
+ <text x="40" y="150" fill="#10b981" font-family="monospace" font-size="14">✔ SKILL.md created</text>
8
+
9
+ <text x="40" y="200" fill="#93c5fd" font-family="monospace" font-size="16">solo-cto-agent status</text>
10
+ <text x="40" y="230" fill="#e5e7eb" font-family="monospace" font-size="14">- SKILL.md: OK</text>
11
+ <text x="40" y="255" fill="#e5e7eb" font-family="monospace" font-size="14">- failure-catalog.json: OK</text>
12
+ <text x="40" y="280" fill="#e5e7eb" font-family="monospace" font-size="14">- error patterns: 8</text>
13
+ <text x="40" y="305" fill="#e5e7eb" font-family="monospace" font-size="14">- last CI: unavailable (missing token or repo)</text>
14
+ </svg>