Chunk-based coding harness for slow or small local LLMs (Ollama, LM Studio, LiteLLM, OpenAI-compatible APIs).
Tortoise breaks work into atomic steps with a persistent BRAIN, TODO queue, backups, and HTML validation — so models that struggle with large files can still ship working code one chunk at a time.
Zero dependencies — Python 3.10+ stdlib only.
git clone https://github.com/thebreadcat/tortoise.git
cd tortoise
# In your app or repo:
cd /path/to/your-project
python3 /path/to/tortoise/tortoise.py init
python3 /path/to/tortoise/tortoise.py config --endpoint http://localhost:11434/v1 --model phi3
python3 /path/to/tortoise/tortoise.py add "Create index.html skeleton"
python3 /path/to/tortoise/tortoise.py run --yesinit creates .tortoise/ and adds .tortoise/config.json to .gitignore so API keys never get committed by mistake.
| Command | Description |
|---|---|
init |
Create .tortoise/ (BRAIN, TODO, config) |
config |
Show or set endpoint, model, api_key |
add "task" |
Queue a chunk task |
plan "goal" |
Ask the model to split a goal into tasks |
run |
Execute the next chunk |
run --yes |
Run without write confirmation |
resume |
Continue after an interrupted chunk |
status |
Show queue and config |
rollback |
Restore last backup |
Copy the example (no secrets):
cp config.example.json .tortoise/config.jsonSet your endpoint and model:
tortoise config --endpoint http://localhost:11434/v1 --model qwen2.5-coderOptional API key (stored only in .tortoise/config.json, gitignored):
tortoise config --api-key sk-...- Never commit
.tortoise/config.json— it may containapi_key. - See SECURITY.md for details.
The repo ships config.example.json only (api_key: null). Real keys stay in each project's .tortoise/config.json (gitignored by tortoise init).
Workshop — natural-language app builder that drives Tortoise in a loop.
Workshop does not bundle Tortoise. Install side by side or as a submodule:
git clone https://github.com/thebreadcat/workshop.git
cd workshop
git submodule add https://github.com/thebreadcat/tortoise.git vendor/tortoiseWorkshop finds vendor/tortoise/tortoise.py or ../tortoise/tortoise.py. Override with:
export TORTOISE_PATH=/path/to/tortoise/tortoise.pyIf you created the repo on GitHub with a GPL-3.0 license template, the remote has one commit and your local clone has another. git push fails with unrelated histories or non-fast-forward — merge or replace the remote history, then push. Set Settings → General → License → Other if the badge still shows GPL.
Tortoise License — free to use, modify, and share, but you may not sell the software or offer paid support for it. Not OSI-approved open source. You may still use Tortoise in commercial projects (e.g. apps you build with it).