CLI for Project Amrita
Project description
Amctl
CLI for Project Amrita — scaffold, manage, and maintain Python projects with the Amrita ecosystem.
Installation
# From PyPI
uv tool install amctl
# By uv
uv tool install amctl
# From GitHub
uv tool install git+https://github.com/AmritaBot/Amctl.git
Quick Start
# List available templates
amctl list
# Create a new project
amctl create -t amrita_core -n myapp
cd myapp
uv sync
Commands
amctl create
Scaffold a new project from a template.
amctl create -t amrita_core -n myapp
amctl create -t amrita_core -n myapp --description="My awesome project"
amctl create -t amrita_core -n myapp -V 0.8.0 -o /tmp
# Bypass Python version resolution
amctl create -t amrita_core -n myapp --frozen
# Force a specific version not in the known list
amctl create -t amrita_core -n myapp --force-version 3.0-beta
| Option | Description |
|---|---|
-t, --type |
Template type (e.g. amrita_core) |
-n, --name |
Project name |
-V, --version |
Template version (default: latest) |
-o, --output |
Output directory (default: .) |
-f, --force |
Overwrite existing directory |
--force-version |
Use any version string, bypassing validation |
--frozen |
Skip Python version selection and .python-version |
Template-specific fields (declared via __tmpl_fields__) are passed as
dynamic CLI flags:
amctl create -t amrita_core -n myapp --description="Hello" --port=8080
After scaffolding, you are prompted to choose a license interactively:
[?] Choose a license for your project:
[1] MIT
[2] Apache-2.0
[3] GPL-3.0
[4] None (skip)
License [4]: _
A LICENSE file is written to the project root when a known license is
selected.
amctl list
List all registered templates.
amctl list # compact (first 5 versions shown)
amctl list -v # verbose — full version lists
amctl info
Show detailed information about a template.
amctl info amrita_core
Output includes description, available versions (with source labels), declared fields (name/type/default/required/description), and the expected template file tree.
amctl fix
Check for missing template files and restore them.
amctl fix --check # dry-run — report missing files only
amctl fix # interactive [Y/N/M] confirmation
amctl fix --force # restore all missing files without prompting
amctl fix --exclude '["README.md",".gitignore"]' # skip specific files
| Option | Description |
|---|---|
--check |
Dry-run — show what would be restored |
--force, -f |
Skip confirmation, restore everything |
--exclude |
JSON array or single path to exclude |
amctl man
Run project scripts defined in pyproject.toml under
[tools.amctl.scripts].
# pyproject.toml
[tools.amctl.scripts]
lint = "uv run ruff check ."
test = "uv run pytest -v"
start = "uv run uvicorn myapp.main:app --reload"
amctl man lint
amctl man test -- --cov
amctl man start
Extra arguments after -- are forwarded to the script.
amctl tmpl
Template-specific sub-commands. Each registered template is a sub-group.
amctl tmpl amrita_core # show field summary (if no commands registered)
Templates can register custom commands via get_tmpl_commands().
amctl self
Manage amctl itself.
amctl self cache show # display version cache contents
amctl self cache fresh # refresh cache from PyPI
amctl self cache clean # delete the cache file
amctl self tmpl-upd # check for template package updates
Version Resolution
Amctl resolves available template versions through a cache-first fallback chain:
fresh cache (24h TTL) → PyPI → expired cache (warn) → hardcoded fallback
Cache location (in priority order):
$AMCTL_TMPL_CACHEPATH— explicit path.venv/.amctl/versions_cache.json— inside a virtualenv project~/.amctl/versions_cache.json— global
Environment variables:
| Variable | Description |
|---|---|
AMCTL_TMPL_CACHEPATH |
Custom cache directory |
AMCTL_TMPL_USECACHE=false |
Disable local cache (still uses PyPI) |
AMCTL_TMPL_NOPYPI=true |
Block all PyPI requests (air-gapped) |
AMCTL_LOG_LEVEL=debug |
Enable debug logging for network diagnostics |
Each version carries a requires_python constraint obtained from PyPI.
Amctl attempts to resolve a compatible Python interpreter using uv python list and writes a .python-version file to the project root.
Creating a Template
Templates are auto-discovered from src/amctl/templ/<name>/. Define a
class with the required dunder attributes:
from amctl.templating import BaseTemplate, field
class MyTemplate(BaseTemplate):
__template_name__ = "my_template"
__template_description__ = "A custom project template"
__core_package__ = "my-core-lib" # PyPI package for version discovery
__python_requires__ = ">=3.11" # Python version constraint
__versions__ = ("1.0",) # hardcoded fallback
__tmpl_fields__ = {
"description": field(default="desc"),
"port": field(default=8000, type=int, required=True),
}
def on_create(self, project_dir, name, version=None, **fields):
super().on_create(project_dir, name, version=version, **fields)
__template_export__ = MyTemplate
Template files go in the same directory and use the .tmpl extension
for Jinja2 rendering. Directory names containing {{ }} markers are
also rendered (e.g. src/{{ name }}/__init__.py.tmpl).
Development
uv sync
uv run ruff check src/ # lint
uv run pyright src/ # type-check
uv run amctl --help
License
MIT — see LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file amctl-0.1.0.tar.gz.
File metadata
- Download URL: amctl-0.1.0.tar.gz
- Upload date:
- Size: 66.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.20 {"installer":{"name":"uv","version":"0.11.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df5e575ea1850b15b7ad8fb6b5a3171cb5d5ae564a47b96424b0ec346ddf290d
|
|
| MD5 |
48bd901bc2b903b94a060ea668e84c21
|
|
| BLAKE2b-256 |
f7de0943fe65ffb7be0528d169b3e144804c6127a998ad46823f6af0a737825c
|
File details
Details for the file amctl-0.1.0-py3-none-any.whl.
File metadata
- Download URL: amctl-0.1.0-py3-none-any.whl
- Upload date:
- Size: 68.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.20 {"installer":{"name":"uv","version":"0.11.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52b26053d7a288dcf0cc73619318cc715a3e1386f972147712b1f4bb22b79b51
|
|
| MD5 |
b1dcc2077adab236a1635da346bf9675
|
|
| BLAKE2b-256 |
3b41da5f350cfd13b4e4dc19350f67af018472258985823ed928f1d48fe297b1
|