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.
- spawn/__init__.py +6 -0
- spawn/cli/__init__.py +0 -0
- spawn/cli/app.py +218 -0
- spawn/cli/noninteractive.py +204 -0
- spawn/cli/prompts.py +267 -0
- spawn/core/__init__.py +0 -0
- spawn/core/exceptions.py +7 -0
- spawn/core/models.py +21 -0
- spawn/core/registry.py +152 -0
- spawn/generators/__init__.py +0 -0
- spawn/generators/custom_structure.py +508 -0
- spawn/generators/project_generator.py +115 -0
- spawn/github/__init__.py +0 -0
- spawn/github/exceptions.py +5 -0
- spawn/github/publisher.py +69 -0
- spawn/github/validators.py +23 -0
- spawn/templates/__init__.py +0 -0
- spawn/templates/agent/__init__.py +182 -0
- spawn/templates/agent/content.py +374 -0
- spawn/templates/automation/__init__.py +100 -0
- spawn/templates/automation/content.py +181 -0
- spawn/templates/backend_api/__init__.py +243 -0
- spawn/templates/backend_api/content.py +509 -0
- spawn/templates/base.py +58 -0
- spawn/templates/chatbot/__init__.py +243 -0
- spawn/templates/chatbot/content.py +668 -0
- spawn/templates/cli_application/__init__.py +211 -0
- spawn/templates/cli_application/content.py +512 -0
- spawn/templates/data_project/__init__.py +125 -0
- spawn/templates/data_project/analysis/__init__.py +74 -0
- spawn/templates/data_project/analysis/content.py +190 -0
- spawn/templates/data_project/dashboard/__init__.py +61 -0
- spawn/templates/data_project/dashboard/content.py +135 -0
- spawn/templates/data_project/etl/__init__.py +66 -0
- spawn/templates/data_project/etl/content.py +239 -0
- spawn/templates/data_project/ml/__init__.py +62 -0
- spawn/templates/data_project/ml/content.py +239 -0
- spawn/templates/mcp_server/__init__.py +83 -0
- spawn/templates/mcp_server/content.py +161 -0
- spawn/templates/rag/__init__.py +124 -0
- spawn/templates/rag/content.py +463 -0
- spawn/templates/shared_content.py +89 -0
- spawn/utils/__init__.py +0 -0
- spawn/utils/banner.py +41 -0
- spawn/utils/console.py +3 -0
- spawn/utils/doctor.py +594 -0
- spawn/utils/git.py +132 -0
- spawn/utils/success.py +47 -0
- spawn/utils/theme.py +25 -0
- spawn/utils/uv.py +61 -0
- spawn/utils/validators.py +15 -0
- spawnio-1.0.5.dist-info/METADATA +798 -0
- spawnio-1.0.5.dist-info/RECORD +56 -0
- spawnio-1.0.5.dist-info/WHEEL +4 -0
- spawnio-1.0.5.dist-info/entry_points.txt +2 -0
- 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
|
+
[](https://python.org)
|
|
20
|
+
[](https://github.com/Abhiix0/spawn/actions)
|
|
21
|
+
[](LICENSE)
|
|
22
|
+
[](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>
|