spawnio 1.0.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. spawn/__init__.py +6 -0
  2. spawn/cli/__init__.py +0 -0
  3. spawn/cli/app.py +218 -0
  4. spawn/cli/noninteractive.py +204 -0
  5. spawn/cli/prompts.py +267 -0
  6. spawn/core/__init__.py +0 -0
  7. spawn/core/exceptions.py +7 -0
  8. spawn/core/models.py +21 -0
  9. spawn/core/registry.py +152 -0
  10. spawn/generators/__init__.py +0 -0
  11. spawn/generators/custom_structure.py +508 -0
  12. spawn/generators/project_generator.py +115 -0
  13. spawn/github/__init__.py +0 -0
  14. spawn/github/exceptions.py +5 -0
  15. spawn/github/publisher.py +69 -0
  16. spawn/github/validators.py +23 -0
  17. spawn/templates/__init__.py +0 -0
  18. spawn/templates/agent/__init__.py +182 -0
  19. spawn/templates/agent/content.py +374 -0
  20. spawn/templates/automation/__init__.py +100 -0
  21. spawn/templates/automation/content.py +181 -0
  22. spawn/templates/backend_api/__init__.py +243 -0
  23. spawn/templates/backend_api/content.py +509 -0
  24. spawn/templates/base.py +58 -0
  25. spawn/templates/chatbot/__init__.py +243 -0
  26. spawn/templates/chatbot/content.py +668 -0
  27. spawn/templates/cli_application/__init__.py +211 -0
  28. spawn/templates/cli_application/content.py +512 -0
  29. spawn/templates/data_project/__init__.py +125 -0
  30. spawn/templates/data_project/analysis/__init__.py +74 -0
  31. spawn/templates/data_project/analysis/content.py +190 -0
  32. spawn/templates/data_project/dashboard/__init__.py +61 -0
  33. spawn/templates/data_project/dashboard/content.py +135 -0
  34. spawn/templates/data_project/etl/__init__.py +66 -0
  35. spawn/templates/data_project/etl/content.py +239 -0
  36. spawn/templates/data_project/ml/__init__.py +62 -0
  37. spawn/templates/data_project/ml/content.py +239 -0
  38. spawn/templates/mcp_server/__init__.py +83 -0
  39. spawn/templates/mcp_server/content.py +161 -0
  40. spawn/templates/rag/__init__.py +124 -0
  41. spawn/templates/rag/content.py +463 -0
  42. spawn/templates/shared_content.py +89 -0
  43. spawn/utils/__init__.py +0 -0
  44. spawn/utils/banner.py +41 -0
  45. spawn/utils/console.py +3 -0
  46. spawn/utils/doctor.py +594 -0
  47. spawn/utils/git.py +132 -0
  48. spawn/utils/success.py +47 -0
  49. spawn/utils/theme.py +25 -0
  50. spawn/utils/uv.py +61 -0
  51. spawn/utils/validators.py +15 -0
  52. spawnio-1.0.5.dist-info/METADATA +798 -0
  53. spawnio-1.0.5.dist-info/RECORD +56 -0
  54. spawnio-1.0.5.dist-info/WHEEL +4 -0
  55. spawnio-1.0.5.dist-info/entry_points.txt +2 -0
  56. spawnio-1.0.5.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,798 @@
1
+ Metadata-Version: 2.5
2
+ Name: spawnio
3
+ Version: 1.0.5
4
+ Summary: Spawn a ready-to-use Python project in seconds
5
+ License-File: LICENSE
6
+ Requires-Python: >=3.12
7
+ Requires-Dist: questionary>=2.0.0
8
+ Requires-Dist: rich>=15.0.0
9
+ Requires-Dist: typer>=0.26.7
10
+ Description-Content-Type: text/markdown
11
+
12
+ <div align="center">
13
+ <img src="assets/preview.png" alt="Spawn — scaffold your next project" width="520" />
14
+
15
+ > Eliminate repetitive project setup. Go from zero to a fully structured dev environment in seconds.
16
+
17
+ Spawn is a local CLI tool that transforms one command into a complete Python project foundation — directories, Git, dependencies, and a virtual environment set up automatically, so you can start building immediately.
18
+
19
+ [![Python](https://img.shields.io/badge/Python-3.12+-blue?style=flat-square)](https://python.org)
20
+ [![Tests](https://img.shields.io/badge/Tests-Passing-brightgreen?style=flat-square)](https://github.com/Abhiix0/spawn/actions)
21
+ [![License](https://img.shields.io/badge/License-MIT-green?style=flat-square)](LICENSE)
22
+ [![uv](https://img.shields.io/badge/Powered%20by-uv-orange?style=flat-square)](https://github.com/astral-sh/uv)
23
+
24
+ </div>
25
+
26
+ ---
27
+
28
+ ## Contents
29
+
30
+ - [The Problem Spawn Solves](#the-problem-spawn-solves)
31
+ - [Features](#features)
32
+ - [Prerequisites](#prerequisites)
33
+ - [Installation](#installation)
34
+ - [Usage](#usage)
35
+ - [Project Templates](#project-templates)
36
+ - [1. Backend API](#1-backend-api)
37
+ - [2. CLI Application](#2-cli-application)
38
+ - [3. Automation Tool](#3-automation-tool)
39
+ - [4. AI Chatbot](#4-ai-chatbot)
40
+ - [5. AI Agent](#5-ai-agent)
41
+ - [6. RAG System](#6-rag-system)
42
+ - [7. Data Project](#7-data-project)
43
+ - [8. MCP Server](#8-mcp-server)
44
+ - [Bring Your Own Structure](#bring-your-own-structure)
45
+ - [Other Commands](#other-commands)
46
+ - [spawn doctor](#spawn-doctor)
47
+ - [spawn version](#spawn-version)
48
+ - [Publish to GitHub](#publish-to-github)
49
+ - [Running the Tests](#running-the-tests)
50
+ - [Roadmap](#roadmap)
51
+ - [Contributing](#contributing)
52
+ - [License](#license)
53
+
54
+ ---
55
+
56
+ ## The Problem Spawn Solves
57
+
58
+ Every new Python project starts with the same manual ritual:
59
+
60
+ ```bash
61
+ mkdir my-project && cd my-project
62
+ mkdir src tests docs
63
+ touch README.md .gitignore
64
+ git init
65
+ python -m venv .venv && source .venv/bin/activate
66
+ ...
67
+ ```
68
+
69
+ It's repetitive. It's inconsistent. And you haven't written a single line of *real* code yet.
70
+
71
+ **Spawn collapses all of that into one command: `spawn create`**
72
+
73
+ ---
74
+
75
+ ## Features
76
+
77
+ | Feature | What it does |
78
+ |---|---|
79
+ | **Intent-based templates** | Backend API (FastAPI / Flask / Django), CLI Application (Typer / Click / Argparse), Automation Tool, AI Chatbot, AI Agent, RAG System, Data Project (Analysis / Dashboard / ETL / Machine Learning), MCP Server |
80
+ | **Bring your own structure** | Paste any folder layout — Tree, Markdown list, or Indented — and Spawn builds exactly that, no blueprint required |
81
+ | **Extras system** | Opt-in ruff, pytest, Docker, GitHub Actions — installed and wired automatically |
82
+ | **Dependency installation** | `uv add` runs automatically with the right packages for your choices |
83
+ | **Git + uv** | Optionally runs `git init`, `uv init`, and `uv venv` |
84
+ | **Non-interactive mode** | Scaffold with `--name`/`--template`/etc. flags or a `--config` JSON file — zero prompts, safe for scripts and agents |
85
+ | **Agent context files** | Every project ships an `AGENTS.md`; add `--claude-md` for an identical `CLAUDE.md` alongside it |
86
+ | **Arrow-key menus** | Every prompt in `spawn create` is arrow-key/spacebar driven, not typed numbers |
87
+ | **GitHub publishing** | Connects your project to an existing GitHub repo and pushes the initial commit |
88
+ | **spawn doctor** | Scores your project's health out of 100, with per-category breakdowns and a prioritized next step |
89
+
90
+ ---
91
+
92
+ ## Prerequisites
93
+
94
+ - **Python 3.12+** — [Download here](https://python.org/downloads)
95
+ - **uv** — [Install guide](https://github.com/astral-sh/uv)
96
+ - **Git** — [Download here](https://git-scm.com/downloads)
97
+
98
+ > **First time with uv?** Run `pip install uv` or check their [quickstart](https://github.com/astral-sh/uv#getting-started).
99
+
100
+ ---
101
+
102
+ ## Installation
103
+
104
+ ```bash
105
+ git clone https://github.com/Abhiix0/spawn.git
106
+ cd spawn
107
+ uv sync
108
+ uv tool install .
109
+ ```
110
+
111
+ You can now run `spawn` from anywhere on your machine.
112
+
113
+ ---
114
+
115
+ ## Usage
116
+
117
+ ```bash
118
+ spawn create
119
+ ```
120
+
121
+ Spawn walks you through a short prompt sequence. The number of steps depends on the template you pick.
122
+
123
+ **Step 1 — Name your project**
124
+
125
+ ```
126
+ Project Name: my-api
127
+ ```
128
+
129
+ Spawn rejects names with spaces or special characters, and tells you immediately if that directory already exists.
130
+
131
+ **Step 2 — Pick a template**
132
+
133
+ ```
134
+ Use the arrow keys to move, Enter to select — the same pattern every prompt in Spawn follows.
135
+
136
+ ```
137
+ ? Choose a template (Use arrow keys)
138
+ » Backend API
139
+ CLI Application
140
+ Automation Tool
141
+ AI Chatbot
142
+ AI Agent
143
+ RAG System
144
+ Data Project
145
+ MCP Server
146
+ Custom Structure
147
+ ```
148
+ ```
149
+
150
+ **Step 3 — Additional prompts** *(template-dependent — framework, provider, project type, and/or extras, depending on what you picked. See [Project Templates](#project-templates) below for each one's exact flow.)*
151
+
152
+ **Step 4 — Git**
153
+
154
+ ```
155
+ Initialize Git? [Y/n]: Y
156
+ ```
157
+
158
+ That's it. Spawn generates the project, installs dependencies, and shows you exactly what to run next.
159
+
160
+ ```
161
+ ╭────── ✨ Project Created Successfully ──────╮
162
+ │ │
163
+ │ Project my-api │
164
+ │ Template Backend API │
165
+ │ Git ✓ Enabled │
166
+ │ UV ✓ Initialized │
167
+ │ Virtual Env ✓ Created │
168
+ │ │
169
+ │ Next Steps │
170
+ │ cd my-api │
171
+ │ uv run uvicorn app.main:app --reload │
172
+ │ │
173
+ ╰──────────────────────────────────────────────╯
174
+ ```
175
+
176
+ ---
177
+
178
+ ## Project Templates
179
+
180
+ Every template below follows the same shape: **best for**, **structure**, **prompts you'll see**, **available extras**, and **how to run it**.
181
+
182
+ ### 1. Backend API
183
+
184
+ Best for: REST APIs, microservices, backend web apps.
185
+
186
+ ```
187
+ my-api/
188
+ ├── app/
189
+ │ ├── api/routes/health.py # GET / → {"status": "running"}
190
+ │ ├── core/config.py # pydantic-settings config
191
+ │ ├── models/
192
+ │ ├── schemas/
193
+ │ ├── services/
194
+ │ └── main.py
195
+ ├── tests/
196
+ │ └── test_health.py
197
+ ├── .env.example
198
+ ├── README.md
199
+ └── .gitignore
200
+ ```
201
+
202
+ **Prompts:**
203
+
204
+ ```
205
+ ? Choose a framework (Use arrow keys)
206
+ » fastapi
207
+ flask
208
+ django
209
+
210
+ ? Choose extras (space to toggle, enter to confirm)
211
+ ● ruff
212
+ ● pytest
213
+ ○ docker
214
+ ○ github-actions
215
+ ```
216
+
217
+ **Available extras:** `ruff` `pytest` `docker` `github-actions`
218
+
219
+ **Run it:**
220
+
221
+ | Framework | Start command |
222
+ |---|---|
223
+ | FastAPI | `uv run uvicorn app.main:app --reload` |
224
+ | Flask | `uv run python run.py` |
225
+ | Django | `uv run python manage.py runserver` |
226
+
227
+ ```bash
228
+ cd my-api
229
+ uv run uvicorn app.main:app --reload
230
+ # GET http://localhost:8000/ → {"status": "running"}
231
+ ```
232
+
233
+ ---
234
+
235
+ ### 2. CLI Application
236
+
237
+ Best for: developer tools, automation commands, project generators, setup wizards.
238
+
239
+ ```
240
+ my-cli/
241
+ ├── src/
242
+ │ ├── commands/
243
+ │ ├── prompts/ # Interactive type only
244
+ │ ├── ui/ # Interactive type only
245
+ │ ├── utils/
246
+ │ └── main.py
247
+ ├── tests/
248
+ ├── README.md
249
+ └── .gitignore
250
+ ```
251
+
252
+ **Prompts:**
253
+
254
+ ```
255
+ ? Choose CLI Type (Use arrow keys)
256
+ » utility
257
+ interactive
258
+
259
+ ? Choose a framework (Use arrow keys)
260
+ » typer
261
+ click
262
+ argparse
263
+
264
+ ? Choose extras (space to toggle, enter to confirm)
265
+ ● ruff
266
+ ● pytest
267
+ ○ github-actions
268
+ ```
269
+
270
+ **Available extras:** `ruff` `pytest` `github-actions`
271
+
272
+ **Run it:**
273
+
274
+ ```bash
275
+ cd my-cli
276
+ uv run python -m src.main hello # Utility
277
+ uv run python -m src.main greet # Interactive
278
+ ```
279
+
280
+ ---
281
+
282
+ ### 3. Automation Tool
283
+
284
+ Best for: scheduled jobs, data pipelines, reporting systems, integration automation.
285
+
286
+ ```
287
+ my-automation/
288
+ ├── src/
289
+ │ ├── workflows/
290
+ │ ├── tasks/
291
+ │ ├── integrations/
292
+ │ ├── utils/
293
+ │ └── main.py
294
+ ├── logs/
295
+ ├── tests/
296
+ ├── .env.example
297
+ └── README.md
298
+ ```
299
+
300
+ **Prompts:**
301
+
302
+ ```
303
+ ? Choose extras (space to toggle, enter to confirm)
304
+ ● ruff
305
+ ● pytest
306
+ ○ github-actions
307
+ ```
308
+
309
+ **Available extras:** `ruff` `pytest` `github-actions`
310
+
311
+ **Run it:**
312
+
313
+ ```bash
314
+ cd my-automation
315
+ uv run python -m src.main
316
+ ```
317
+
318
+ ---
319
+
320
+ ### 4. AI Chatbot
321
+
322
+ Best for: customer support bots, study assistants, conversational AI tools.
323
+
324
+ ```
325
+ my-chatbot/
326
+ ├── src/
327
+ │ ├── chatbot/
328
+ │ ├── providers/
329
+ │ ├── prompts/
330
+ │ ├── memory/
331
+ │ ├── config/
332
+ │ └── main.py
333
+ ├── tests/
334
+ ├── .env.example
335
+ └── README.md
336
+ ```
337
+
338
+ **Prompts:**
339
+
340
+ ```
341
+ ? Choose a framework (Use arrow keys)
342
+ » pydantic-ai
343
+ openai-sdk
344
+ litellm
345
+
346
+ ? Choose a provider (Use arrow keys)
347
+ » openai
348
+ anthropic
349
+ gemini
350
+ openrouter
351
+ ollama
352
+ groq
353
+
354
+ ? Choose extras (space to toggle, enter to confirm)
355
+ ● ruff
356
+ ● pytest
357
+ ○ rich
358
+ ○ github-actions
359
+ ```
360
+
361
+ **Available extras:** `ruff` `pytest` `rich` `github-actions`
362
+
363
+ **Run it:**
364
+
365
+ ```bash
366
+ cd my-chatbot
367
+ # Add your provider's API key to .env
368
+ uv run python -m src.main
369
+ ```
370
+
371
+ ---
372
+
373
+ ### 5. AI Agent
374
+
375
+ Best for: task automation, research assistants, tool-calling workflows.
376
+
377
+ ```
378
+ my-agent/
379
+ ├── src/
380
+ │ ├── agent/
381
+ │ ├── tools/
382
+ │ ├── prompts/
383
+ │ ├── config/
384
+ │ └── main.py
385
+ ├── tests/
386
+ ├── .env.example
387
+ └── README.md
388
+ ```
389
+
390
+ **Prompts:**
391
+
392
+ ```
393
+ ? Choose a framework (Use arrow keys)
394
+ » pydantic-ai
395
+ openai-agents
396
+
397
+ ? Choose a provider (Use arrow keys)
398
+ » openai
399
+ anthropic
400
+ gemini
401
+ openrouter
402
+ ollama
403
+ groq
404
+
405
+ ? Choose extras (space to toggle, enter to confirm)
406
+ ● ruff
407
+ ● pytest
408
+ ○ github-actions
409
+ ```
410
+
411
+ > If you pick `openai-agents`, only `openai` and `openrouter` appear as provider choices — the list is filtered per framework.
412
+
413
+ **Available extras:** `ruff` `pytest` `github-actions`
414
+
415
+ **Run it:**
416
+
417
+ ```bash
418
+ cd my-agent
419
+ # Add your provider's API key to .env
420
+ uv run python -m src.main
421
+ ```
422
+
423
+ Every generated AI Agent project ships with one working tool (a calculator), so you can see tool-calling work immediately — no external services or extra setup beyond your chosen provider's API key.
424
+
425
+ ---
426
+
427
+ ### 6. RAG System
428
+
429
+ Best for: documentation Q&A, knowledge base search, document retrieval.
430
+
431
+ ```
432
+ my-rag/
433
+ ├── data/
434
+ │ └── sample_knowledge.md
435
+ ├── src/
436
+ │ ├── knowledge/
437
+ │ ├── ingestion/
438
+ │ ├── retrieval/
439
+ │ ├── config/
440
+ │ └── main.py
441
+ ├── tests/
442
+ ├── chroma_db/ # created on first run
443
+ ├── .env.example
444
+ └── README.md
445
+ ```
446
+
447
+ **Prompts:**
448
+
449
+ ```
450
+ ? Choose extras (space to toggle, enter to confirm)
451
+ ● ruff
452
+ ● pytest
453
+ ○ github-actions
454
+ ```
455
+
456
+ RAG System uses a fixed stack — **LlamaIndex + ChromaDB + OpenAI** — so there's no framework or provider prompt, unlike Chatbot and Agent. On first run, it automatically ingests documents from `data/` into a local ChromaDB index, then lets you ask questions against them. Requires an `OPENAI_API_KEY` (used for both the LLM and embeddings).
457
+
458
+ **Available extras:** `ruff` `pytest` `github-actions`
459
+
460
+ **Run it:**
461
+
462
+ ```bash
463
+ cd my-rag
464
+ # Add OPENAI_API_KEY to .env
465
+ uv run python -m src.main
466
+ # Documents are ingested automatically on first run
467
+ ```
468
+
469
+ ---
470
+
471
+ ### 7. Data Project
472
+
473
+ Best for: exploratory data analysis, internal dashboards, data cleaning pipelines, quick ML prototyping.
474
+
475
+ ```
476
+ my-data-project/
477
+ ├── data/
478
+ ├── notebooks/ # Data Analysis
479
+ ├── reports/ # Data Analysis
480
+ ├── dashboard/ # Dashboard
481
+ ├── pipelines/ # ETL Pipeline
482
+ ├── models/ # Machine Learning
483
+ ├── experiments/ # Machine Learning
484
+ ├── src/
485
+ ├── tests/
486
+ └── .env.example # ETL Pipeline
487
+ ```
488
+
489
+ **Prompts:**
490
+
491
+ ```
492
+ ? Choose Project Type (Use arrow keys)
493
+ » Data Analysis
494
+ Dashboard
495
+ ETL Pipeline
496
+ Machine Learning
497
+
498
+ ? Choose extras (space to toggle, enter to confirm)
499
+ ● ruff
500
+ ● pytest
501
+ ○ github-actions
502
+ ```
503
+
504
+ **Available extras:** `ruff` `pytest` `github-actions`
505
+
506
+ **Run it:**
507
+
508
+ | Type | Ships with | Start command |
509
+ |---|---|---|
510
+ | Data Analysis | Sample CSV + starter notebook (summary stats, saved chart) | `uv run jupyter notebook` |
511
+ | Dashboard | Streamlit app with sidebar filter + Plotly chart | `uv run streamlit run dashboard/app.py` |
512
+ | ETL Pipeline | Intentionally messy sample CSV + cleaning script (`INPUT_PATH`/`OUTPUT_PATH` via `.env`) | `uv run python -m pipelines.run` |
513
+ | Machine Learning | Labeled sample dataset + training script (`RandomForestClassifier`, logs to `experiments/`) | `uv run python src/train.py` |
514
+
515
+ ```bash
516
+ # Example — Machine Learning
517
+ cd my-data-project
518
+ uv run python src/train.py
519
+ # Test accuracy: 1.0000
520
+ # Model saved to models/model.joblib
521
+ # Experiment logged to experiments/20260711_113233.json
522
+ ```
523
+
524
+ ---
525
+
526
+ ### 8. MCP Server
527
+
528
+ Best for: exposing tools and data to Claude Desktop, Claude Code, or any MCP-compatible client.
529
+
530
+ ```
531
+ my-mcp-server/
532
+ ├── src/
533
+ │ ├── server.py # FastMCP instance, one example tool + resource
534
+ │ └── __init__.py
535
+ ├── tests/
536
+ │ └── test_server.py
537
+ ├── .env.example
538
+ └── README.md
539
+ ```
540
+
541
+ **Prompts:**
542
+
543
+ ```
544
+ ? Choose extras (space to toggle, enter to confirm)
545
+ ● ruff
546
+ ● pytest
547
+ ○ github-actions
548
+ ```
549
+
550
+ MCP Server uses a fixed stack — the official `mcp` Python SDK's `FastMCP` — so there's no framework or provider prompt, the same as RAG System.
551
+
552
+ **Available extras:** `ruff` `pytest` `github-actions`
553
+
554
+ **Run it:**
555
+
556
+ ```bash
557
+ cd my-mcp-server
558
+ uv run python -m src.server
559
+ # Waits on stdio for an MCP client to connect
560
+ ```
561
+
562
+ Then add it to your MCP client's config — see the generated project's own README.md for the exact JSON snippet.
563
+
564
+ ---
565
+
566
+ ## Bring Your Own Structure
567
+
568
+ None of the eight templates above fit? **Custom Structure** shows up as the last option in the same `spawn create` picker (`9`) — it's not a separate command, just a different path through the same flow.
569
+
570
+ Paste any of three text formats — Unix `tree` output, a Markdown list, or plain indented hierarchy — and Spawn parses it, previews the detected folders and files, then creates the structure with the same Git and uv setup as every other template.
571
+
572
+ ```
573
+ spawn create
574
+ # → Custom Structure
575
+ ```
576
+
577
+ ```
578
+ Paste your project structure.
579
+ Supported formats: Tree (├──/└──), Markdown list (- item), Indented hierarchy
580
+ Finish with Ctrl+D (Ctrl+Z then Enter on Windows)
581
+
582
+ app/
583
+ ├── api/
584
+ ├── services/
585
+ └── tests/
586
+ README.md
587
+ .gitignore
588
+ ^Z
589
+
590
+ Detected
591
+ Folders : 4
592
+ Files : 2
593
+
594
+ Initialize Git? [Y/n]: Y
595
+ Initialize uv? [Y/n]: Y
596
+ Dependencies (comma separated, optional): fastapi, uvicorn
597
+
598
+ ? Optional Setup (space to toggle, enter to confirm)
599
+ ● Ruff
600
+ ● Pytest
601
+ ○ Pre-commit
602
+ ○ Dockerfile
603
+
604
+ Additional ignore patterns (optional, comma separated): data/, *.csv
605
+
606
+ Proceed? [Y/n]: Y
607
+ ```
608
+
609
+ **What Spawn does automatically when it sees these files:**
610
+
611
+ - `README.md` — generated with your project name, a structure tree, and setup instructions (not left empty)
612
+ - `.gitignore` — populated with Python defaults (`.venv/`, `__pycache__/`, `.pytest_cache/`, `.mypy_cache/`, `.ruff_cache/`, etc.) plus any patterns you added, deduplicated
613
+
614
+ **The Dependencies prompt** (shown only when uv is enabled) installs packages immediately via `uv add`.
615
+
616
+ **The Optional Setup menu** installs dev tools via `uv add --dev` and generates their config files: `ruff.toml`, `tests/__init__.py`, `.pre-commit-config.yaml`, and/or `Dockerfile`.
617
+
618
+ ### Non-Interactive Mode
619
+
620
+ Skip all prompts by passing flags directly or pointing to a JSON config file.
621
+
622
+ **Using flags:**
623
+
624
+ ```bash
625
+ spawn create --name my-api --template backend-api --framework fastapi --extras ruff,pytest --git
626
+ ```
627
+
628
+ **Using a config file:**
629
+
630
+ ```json
631
+ {
632
+ "name": "my-api",
633
+ "template": "backend-api",
634
+ "framework": "fastapi",
635
+ "extras": ["ruff", "pytest"],
636
+ "git": true,
637
+ "uv": true
638
+ }
639
+ ```
640
+
641
+ ```bash
642
+ spawn create --config spawn.json
643
+ ```
644
+
645
+ `--config` takes precedence over individual flags. Add `--dry-run` to either form to validate the config and print it without creating any files.
646
+
647
+ > Custom Structure is interactive-only in this version.
648
+
649
+ ---
650
+
651
+ ## Other Commands
652
+
653
+ ### `spawn doctor`
654
+
655
+ Scores your project's health out of 100 — per-category breakdowns, tiered recommendations, and a single prioritized next step.
656
+
657
+ ```bash
658
+ spawn doctor
659
+ spawn doctor ./path/to/project
660
+ ```
661
+
662
+ ```
663
+ ╭─────────────── 🏥 Project Health Report ─────────────────╮
664
+ │ │
665
+ │ 🟡 Good │
666
+ │ Some improvements recommended. │
667
+ │ │
668
+ │ Project Score: 82% │
669
+ │ │
670
+ │ Documentation — 67 │
671
+ │ Version Control — 100 │
672
+ │ Configuration — 75 │
673
+ │ Testing — 80 │
674
+ │ Automation — 50 │
675
+ │ Code Quality — 100 │
676
+ │ │
677
+ ╰───────────────────────────────────────────────────────────╯
678
+
679
+ ╭──────────────────── Recommendations ───────────────────────╮
680
+ │ │
681
+ │ Critical │
682
+ │ • Initialize a git repository with 'git init'. │
683
+ │ │
684
+ │ Recommended │
685
+ │ • Add a CHANGELOG.md to document project history. │
686
+ │ • Configure GitHub Actions for CI/CD. │
687
+ │ │
688
+ │ Optional │
689
+ │ • Add a Dockerfile for containerized deployment. │
690
+ │ │
691
+ ╰────────────────────────────────────────────────────────────╯
692
+
693
+ ╭──────────────────── 🎯 Next Best Step ─────────────────────╮
694
+ │ │
695
+ │ Initialize a git repository with 'git init'. │
696
+ │ Estimated effort: 30 seconds │
697
+ │ │
698
+ ╰─────────────────────────────────────────────────────────────╯
699
+ ```
700
+
701
+ Checks span six categories — Documentation, Version Control, Configuration, Testing, Automation, and Code Quality (Ruff, type checking, pre-commit) — all filesystem-based, nothing is executed or sent over the network.
702
+
703
+ ### `spawn version`
704
+
705
+ ```bash
706
+ spawn version
707
+ # → Spawn v1.0.5
708
+ ```
709
+
710
+ ### Publish to GitHub
711
+
712
+ After creation, if Git was enabled, Spawn asks:
713
+
714
+ ```
715
+ Publish to GitHub? [y/N]: y
716
+ Repository URL: https://github.com/your-username/my-project
717
+ ```
718
+
719
+ Spawn stages all files, creates the initial commit, renames the branch to `main`, adds the remote, and pushes.
720
+
721
+ > The repository must already exist on GitHub. Spawn connects to it — it does not create it.
722
+
723
+ ---
724
+
725
+ ## Running the Tests
726
+
727
+ ```bash
728
+ uv run pytest
729
+ ```
730
+
731
+ All tests should pass. If they don't, please [open an issue](https://github.com/Abhiix0/spawn/issues).
732
+
733
+ ---
734
+
735
+ ## Roadmap
736
+
737
+ **Recently shipped**
738
+
739
+ - Arrow-key menus, no-args banner, and consistent Ctrl+C handling (v1.0.5)
740
+ - AGENTS.md / CLAUDE.md generation — every project ships agent context automatically, `--claude-md` opt-in for Claude Code (v1.0.4)
741
+ - MCP Server intent — official `mcp` SDK, one working tool + resource, stdio transport (v1.0.3)
742
+ - Non-interactive mode — `--name`/`--template`/flags or `--config` JSON, zero prompts (v1.0.2)
743
+ - Custom Structure workflow — paste any folder layout, Spawn creates it (v1.0.0)
744
+ - Doctor 2.0 — per-category health percentages, tiered recommendations, Next Best Step (v1.0.0)
745
+ - Data Project intent — analysis, dashboard, ETL, ML sub-options (v0.9.0)
746
+ - RAG System intent — LlamaIndex + ChromaDB (v0.8.0)
747
+ - AI Agent intent — tool-calling with PydanticAI / OpenAI Agents SDK (v0.7.0)
748
+
749
+ **What's next**
750
+
751
+ Nothing formally scheduled yet. Ideas under consideration live in [Issues](https://github.com/Abhiix0/spawn/issues); open one if there's something you'd want to see.
752
+
753
+ For the full version history, see [CHANGELOG.md](docs/changelog.md).
754
+
755
+ ---
756
+
757
+ ## Contributing
758
+
759
+ Contributions are welcome. Whether it's a bug fix, a new intent, or something from the roadmap — here's how to get started.
760
+
761
+ ### Adding a new intent
762
+
763
+ **1. Create the intent directory**
764
+
765
+ ```
766
+ src/spawn/templates/your_intent/
767
+ ├── __init__.py ← subclass BaseTemplate
768
+ └── content.py ← all file content as string constants
769
+ ```
770
+
771
+ **2. Register it**
772
+
773
+ In `src/spawn/core/registry.py`, add a `TemplateMetadata` entry to `TEMPLATES` with your slug, display name, description, template class, and any `available_frameworks` or `available_extras`.
774
+
775
+ **3. Write tests**
776
+
777
+ Add coverage in `tests/test_templates.py` and `tests/test_generator.py`. Mock `initialize_uv` and `install_packages` in generator tests.
778
+
779
+ ### Before submitting a PR
780
+
781
+ ```bash
782
+ uv run pytest # must pass
783
+ uv run ruff check . # must be clean
784
+ ```
785
+
786
+ ---
787
+
788
+ ## License
789
+
790
+ This project is open source under the [MIT License](LICENSE).
791
+
792
+ ---
793
+
794
+ <div align="center">
795
+
796
+ **[Star on GitHub](https://github.com/Abhiix0/spawn)** · **[Report a Bug](https://github.com/Abhiix0/spawn/issues)** · **[Request a Feature](https://github.com/Abhiix0/spawn/issues)**
797
+
798
+ </div>