Natural-language app builder powered by Tortoise — a chunk-based harness for local LLMs.
Zero dependencies beyond Python 3.10+ stdlib. Tortoise is not bundled in this repo — install it yourself (sibling clone, local vendor/, or TORTOISE_PATH).
- Python 3.10+
- A running LLM endpoint (Ollama, LM Studio, etc.)
- Tortoise v0.2.0+
git clone https://github.com/thebreadcat/workshop.git
cd workshop
git clone https://github.com/thebreadcat/tortoise.git vendor/tortoise
python3 workshop.py
# Open http://localhost:7700git clone https://github.com/thebreadcat/workshop.git
git clone https://github.com/thebreadcat/tortoise.git
# Layout:
# prototypes/workshop/ (this repo)
# prototypes/tortoise/
cd workshop
python3 workshop.pyWorkshop looks for Tortoise at ../tortoise/tortoise.py or vendor/tortoise/tortoise.py.
export TORTOISE_PATH=/path/to/tortoise/tortoise.py
python3 workshop.pyWorkshop stores your model endpoint in ~/.workshop/config.json (may include api_key). See config.example.json. Built apps default to ~/workshop-apps/.
One SQLite database at ~/.workshop/workshop.db (WAL mode) holds app data, notifications, and schedules. New HTML apps persist via the data API (/api/data/{app}/{key}), not localStorage.
python3 workshop.py starts the HTTP server and a background ticker (60s) that fires schedules and writes notifications. The Workshop UI polls unread notifications every 30s.
| Endpoint | Purpose |
|---|---|
GET/PUT/DELETE /api/data/{app}/{key} |
App persistence |
GET/POST/DELETE /api/schedules |
Reminders and automation |
GET /api/notifications?unread=1 |
Notification inbox |
GET /api/print/{owner}/{app} |
Opens app with ?print=1 for print mode |
| Repo | Role |
|---|---|
| thebreadcat/workshop | This project — web UI and build loop |
| thebreadcat/tortoise | Chunk harness Workshop drives per app |
Tortoise License — same terms as Tortoise. Free to use and modify; you may not sell the software or offer paid support for the codebase itself.