aftr
___ ________________
/ | / ____/_ __/ __ \
/ /| | / /_ / / / /_/ /
/ ___ |/ __/ / / / _, _/
/_/ |_/_/ /_/ /_/ |_|
===============================
A I f o r T h e R e s t
===============================
aftr (AI for The Rest) is a CLI tool for bootstrapping Python data science projects with modern best practices. It combines UV for blazing-fast package management, mise for reproducible tool versions, and papermill for notebook automation.
✨ Features
- 🚀 Fast Setup: Initialize production-ready data projects in seconds
- 📋 Custom Templates: Create and share project templates with custom dependencies and files
- 🔧 Environment Configuration: Interactive setup for AI coding assistants (Claude Code, Codex, Gemini)
- 🔑 SSH Key Management: Generate and configure GitHub SSH keys
- 📊 Data Science Ready: Pre-configured with DuckDB, Polars, Jupyter, and papermill
- 🎯 Opinionated Structure: Clean project layout with data/, notebooks/, src/, and outputs/
- 🔄 Reproducible Environments: mise.toml ensures consistent tool versions across machines
Installation
# Install globally with UV
uv tool install aftr
# Or run directly with uvx
uvx aftr init my-project
Usage
Interactive Mode
Simply run aftr to access the interactive menu:
aftr
Choose from:
- New Project - Create a scaffolded data science project
- Environment Setup - Configure AI CLI tools and SSH keys
- Help - View usage information
Create a New Project
# Interactive prompt for project name
aftr
# Direct project creation
aftr init my-data-project
# Use a specific template
aftr init my-data-project --template acme
# Create in current directory
aftr init my-data-project --path .
Generated project structure:
my-data-project/
├── pyproject.toml # UV project config with DuckDB, Polars, Jupyter, papermill
├── .mise.toml # Tool versions (Python, UV)
├── .mcp.json # MCP server config (Playwright)
├── CLAUDE.md # AI assistant guidance
├── notebooks/
│ └── example.ipynb # Sample notebook with papermill parameter tags
├── src/
│ └── my_data_project/ # Python source code (hyphenated names → underscores)
├── data/ # Input data (gitignored)
└── outputs/ # Results and artifacts (gitignored)
Project Templates
Templates let you customize project scaffolding with different dependencies, files, and configurations. Perfect for team standards or internal packages.
Managing Templates
# List available templates
aftr config list
# Show template details
aftr config show default
# Export default template as a starting point
aftr config export-default -o my-template.toml
# Register a template from a URL
aftr config add https://git.internal.com/templates/acme.toml
# Update a template from its source URL
aftr config update acme
# Remove a registered template
aftr config remove acme
Template Format (TOML)
Templates use TOML format with {{project_name}} and {{module_name}} placeholders:
[template]
name = "My Team Template"
description = "Internal data science template"
version = "1.0.0"
[project]
requires-python = ">=3.11"
[project.dependencies]
polars = ">=1.0.0"
internal-utils = ">=0.5.0" # Internal packages work too
[project.optional-dependencies]
dev = ["pytest>=8.0.0", "ruff>=0.1.0"]
[mise]
uv = "latest"
[directories]
include = ["config", "scripts"] # Extra directories beyond defaults
[notebook]
include_example = true
imports = ["duckdb", "polars as pl", "internal_utils"]
[files."CLAUDE.md"]
content = '''
# CLAUDE.md
Custom guidance for {{project_name}}...
'''
[files."config/settings.toml"]
content = '''
[database]
host = "internal.db.com"
'''
Template Storage
Templates are stored in platform-specific config directories:
- Linux/macOS:
~/.config/aftr/templates/ - Windows:
%LOCALAPPDATA%\aftr\templates\
Environment Setup
Configure your development environment after installation:
# Interactive configuration
aftr setup
# Non-interactive mode (defaults: Claude Code only, skip SSH)
aftr setup --non-interactive
Setup mode features:
- AI CLI Selection: Install coding assistants via bun (Claude Code, Codex, Gemini)
- SSH Key Generation: Create ed25519 keys for GitHub authentication
- Key Display: View and copy existing SSH keys for GitHub setup
Perfect for running after environment bootstrap scripts to complete your dev setup!
Why aftr?
Modern data science projects need more than just a requirements.txt. aftr provides:
- UV Package Management: 10-100x faster than pip, with built-in virtual environment handling
- mise Tool Versioning: Pin Python and UV versions in
.mise.tomlfor team consistency - Papermill Integration: Notebooks with parameter tags for automated execution
- AI-Ready Environment: One command to install coding assistants like Claude Code
- Clean Conventions: Opinionated structure that just works™
Development
cd packages/cli
uv sync
uv run pytest tests/ -v
uv run aftr --help
License
MIT
Links
Metadata
Release files for aftr 0.14.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| aftr-0.14.0.tar.gz | 40.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aftr-0.14.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 75.9 kB
Release files / aftr-0.14.0.tar.gz
| Download URL | aftr-0.14.0.tar.gz |
|---|---|
| Size | 40.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4880f247f6be60f458cf1e9a24a039663c0746b25b42e76e46d2805006509f0c
|
|
BLAKE2b-256 checksum How to use checksums |
bfcc5d84aebf57fbbbe283f89fd61b50d792ed1352fb8f35187476a2aee02ea9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","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}
|
Release files / aftr-0.14.0-py3-none-any.whl
| Download URL | aftr-0.14.0-py3-none-any.whl |
|---|---|
| Size | 35.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ab8c87882c579d773ddaea4e94cf05c185b4db552d162403efd747f65d596baf
|
|
BLAKE2b-256 checksum How to use checksums |
f96a5e653882e0b557f9f11d6dd113cbfe56e324960c7a85dd2c5b53f6bc6bce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","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}
|
Security for aftr 0.14.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.