You have used AI coding assistants. You have copied .opencode/, .flowr/, AGENTS.md, and .templates/ into projects by hand — or asked your team to do the same, over and over, across every repository. Files drift out of sync. Versions scatter. Onboarding a new repo means ten minutes of manual file wrangling before the first prompt.
smith enters a project, copies its patterns, and returns something more capable than what it found.
Two commands. No configuration files in your project. No framework overhead. No leftover files after removal.
You set up opencode, flowr, and agent templates in one project. Then you do it again. And again. smith clone pulls the exact same configuration from any GitHub repo, local directory, or URL into your project in one step. smith purge removes every file and every gitignore entry — no orphans, no stale references.
Every team member runs the same smith clone command and gets the same AGENTS.md, the same .opencode agents, the same .flowr workflows. No "it works on my machine." When the template updates, clone again with --overwrite. When a project no longer needs agentic tooling, smith purge and move on.
smith clone → fetches AGENTS.md, .opencode/, .flowr/, .templates/ into your project
smith purge → removes every smith-managed file and directory
Safety boundary. Only files matching allowed topics are ever written — regardless of what the source archive contains. Your project never receives arbitrary files.
Clean removal. Purge reads the managed section in .gitignore and deletes exactly what is listed there. The section itself is preserved so you can clone again later.
Source resolution. Three ways to specify where templates come from:
| Priority | Source | Example |
|---|---|---|
| 1 — CLI flag | --source |
smith clone --source github:myorg/templates |
| 2 — Config | [tool.smith] source in pyproject.toml |
source = "github:myorg/templates" |
| 3 — Default | github:nullhack/temple8 |
Used when no flag or config is set |
pip install agents-smith
smith clone # default source (temple8)
smith purge # remove everythingThat is it. Two commands. No setup, no config file, no framework.
smith clone # default source
smith clone --source github:myorg/templates # GitHub shorthand
smith clone --source /path/to/local/template # local directory
smith clone --source https://example.com/t.zip # URL to archive
smith clone --overwrite # replace existing filesFetches template files from a source, filters by allowed topics, writes them to the project directory, and adds a managed section to .gitignore. Existing files are skipped unless --overwrite is passed.
smith purge # removes all smith-managed filesReads the smith-managed section in .gitignore and deletes every file and directory listed there. The .gitignore section itself is preserved so you can clone again later.
# smith managed
AGENTS.md
.opencode/
.flowr/
.templates/
# end smith managedOnly items in this section are removed on purge. Edit it to control what smith manages.
smith/
├── cli.py # CLI — argparse, subcommands (clone, purge)
├── core.py # Domain — resolve_source, fetch, clone, purge, FileSpec
└── gitignore.py # Infrastructure — .gitignore section management
Flat module structure. Two commands. No framework overhead.
MIT — see LICENSE.
Author: @nullhack · Documentation