Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/stefan-jansen/claude-code-toolkitWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/stefan-jansen/claude-code-toolkit/setup-python)<a href="https://agentmods.dev/commands/stefan-jansen/claude-code-toolkit/setup-python"><img src="https://agentmods.dev/badge/commands/stefan-jansen/claude-code-toolkit/setup-python/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/commands/stefan-jansen/claude-code-toolkit/setup-python"><img src="https://agentmods.dev/badge/commands/stefan-jansen/claude-code-toolkit/setup-python.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00013 | $0.02103 |
| Opus 5.5 | $0.00005 | $0.00841 |
| Sonnet 5.5 | $0.00003 | $0.00421 |
| Haiku 4.5 | $0.00001 | $0.00210 |
Grade C, and why
setup:python scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Recursive force deletehighDestructive command
rm -rf with a variable or a broad path is one typo away from removing the wrong tree.
rm -rf build/ dist/ *.egg-info How it starts
The opening of the file, as written. The whole thing — 353 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Python Project Setup
I'll set up a new Python project with modern tooling and the Claude Code Framework.
Setup Levels
--minimal - Just the essentials (pyproject.toml, basic .gitignore)
--standard (default) - Production-ready (pytest, ruff, mypy, pre-commit, Makefile)
--full - Enterprise-grade (docs, CI/CD, security scanning)
# Constants
readonly CLAUDE_DIR=".claude"
readonly SETUP_LEVEL="${2:-standard}" # Default to standard
PROJECT_NAME="${1}"
# If no project name provided, use current directory name
if [ -z "$PROJECT_NAME" ]; then
PROJECT_NAME=$(basename "$PWD")
fi
echo "🐍 Setting up Python project: $PROJECT_NAME"
echo "📋 Setup level: $SETUP_LEVEL"
echo ""
# Create directory structure
mkdir -p src/$PROJECT_NAME
mkdir -p tests
mkdir -p docs
# Generate configuration based on level
case "$SETUP_LEVEL" in
--minimal|minimal)
echo "Creating minimal Python project..."
# Basic pyproject.toml
cat > pyproject.toml << 'EOF'
[project]
name = "$PROJECT_NAME"
version = "0.1.0"
description = "A Python package"
requires-python = ">=3.9"
dependencies = []
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
EOF
sed -i "s/\$PROJECT_NAME/$PROJECT_NAME/g" pyproject.toml
# Minimal .gitignore
cat > .gitignore << 'EOF'
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
dist/
*.egg-info/
.pytest_cache/
.mypy_cache/
.ruff_cache/
venv/
.venv/
*.log
.DS_Store
EOF
echo "✅ Minimal Python setup complete"
;;
--full|full)
echo "Creating comprehensive Python project..."
echo ""
echo "For a full setup, I'll create:"
echo " 1. pyproject.toml with documentation and security tools"
echo " 2. .pre-commit-config.yaml with all quality checks"
echo " 3. Makefile with comprehensive targets"
echo " 4. CI/CD workflow templates"
echo " 5. mkdocs.yml for documentation"
echo ""
echo "Please install these tools for full functionality:"
echo " - mkdocs, mkdocs-material (documentation)"
echo " - bandit (security scanning)"
echo " - GitHub Actions (CI/CD automation)"
echo ""
echo "✅ Full setup guidance provided"
;;
--standard|standard|*)
echo "Creating standard Python project with quality tools..."
# Standard pyproject.toml
cat > pyproject.toml << 'EOF'
[project]
name = "$PROJECT_NAME"
version = "0.1.0"
description = "A Python package"
requires-python = ">=3.9"
dependencies = []
[project.optional-dependencies]
dev = [
"pytest>=8.0",
"pytest-cov>=5.0",
"ruff>=0.5.0",
"mypy>=1.10",
"pre-commit>=3.7",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.ruff]
line-length = 88
target-version = "py39"
[tool.ruff.lint]
select = ["E", "F", "I", "N", "W", "UP"]
ignore = ["E501"] # Line length handled by formatter
[tool.mypy]
python_version = "3.9"
warn_return_any = true
warn_unused_configs = true
[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "--cov=src --cov-report=term-missing"
[tool.coverage.run]
source = ["src"]
EOF
sed -i "s/\$PROJECT_NAME/$PROJECT_NAME/g" pyproject.toml
# Pre-commit configuration
cat > .pre-commit-config.yaml << 'EOF'
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.5.0
hooks:
- id: ruff
args: [--fix]
- id: ruff-format
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.10.0
hooks:
- id: mypy
files: ^src/
EOF
# Makefile
cat > Makefile << 'EOF'
.PHONY: help install dev test lint format type-check clean
help:
@echo "Available commands:"
@echo " make install Install package"
@echo " make dev Install with dev dependencies"
@echo " make test Run tests"
@echo " make lint Run linting"
@echo " make format Format code"
@echo " make type-check Run type checking"
@echo " make clean Clean build artifacts"
install:
pip install -e .
dev:
pip install -e ".[dev]"
pre-commit install
test:
pytest
lint:
ruff check src/ tests/
format:
ruff format src/ tests/
type-check:
mypy src/
clean:
rm -rf build/ dist/ *.egg-info
find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
find . -type f -name "*.pyc" -delete
EOF
# Standard .gitignore
cat > .gitignore << 'EOF'
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# Testing
.pytest_cache/
.coverage
htmlcov/
.tox/
.mypy_cache/
.ruff_cache/
# Virtual Environment
venv/
.venv/
env/
ENV/
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
# OS
.DS_Store
Thumbs.db
# Project
*.log
.env
EOF
echo "✅ Standard Python setup complete"
;;
esac
# Create basic Python files
touch src/$PROJECT_NAME/__init__.py
cat > src/$PROJECT_NAME/main.py << EOF
"""Main module for $PROJECT_NAME."""
def main():
"""Main entry point."""
print("Hello from $PROJECT_NAME!")
if __name__ == "__main__":
main()
EOF
# Create basic test
cat > tests/test_main.py << EOF
"""Tests for main module."""
import pytest
from $PROJECT_NAME.main import main
def test_main():
"""Test main function."""
# Add your tests here
assert True
EOF
echo ""
echo "🔧 Adding Claude Code Framework..."
# Create .claude directory structure (using shared-setup-patterns skill)
mkdir -p $CLAUDE_DIR/work
mkdir -p $CLAUDE_DIR/memory
mkdir -p $CLAUDE_DIR/reference
mkdir -p $CLAUDE_DIR/hooks
# Generate security hooks from shared skill
echo "I'll create .claude/settings.json with security hooks from the shared-setup-patterns skill."
# Create project CLAUDE.md
cat > CLAUDE.md << EOF
# $PROJECT_NAME
Python project using modern development tools.
## Project Knowledge
@.claude/memory/project_state.md
@.claude/memory/dependencies.md
@.claude/memory/conventions.md
@.claude/memory/decisions.md
## Current Work
@.claude/work/current/README.md
EOF
# Generate memory files from shared skill templates
echo "I'll create memory files (.claude/memory/*) using templates from the shared-setup-patterns skill."
# Create work README
cat > $CLAUDE_DIR/work/current/README.md << 'EOF'
# Current Work
Track active development tasks here. Use work units for larger features:
.claude/work/current/ ├── 001_feature_name/ │ ├── requirements.md │ ├── implementation.md │ └── notes.md
EOF
echo ""
echo "✅ Python project setup complete!"
echo ""
echo "Next steps:"
echo " 1. cd into project directory (if not already there)"
echo " 2. python -m venv .venv"
echo " 3. source .venv/bin/activate"
echo " 4. make dev (or: pip install -e '.[dev]')"
echo " 5. pre-commit install"
echo " 6. make test"
echo ""
echo "Project structure:"
echo " src/$PROJECT_NAME/ - Source code"
echo " tests/ - Test files"
echo " .claude/ - Claude framework"
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 353 lines · 13 tokens per session scan C 093ea88d5441
setup:python is a command published in the GitHub repository stefan-jansen/claude-code-toolkit (90 stars, last pushed 3mo ago), licensed MIT. It adds 13 tokens to every session and 2,103 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it C with 1 finding (recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other commands, from other repositories
async-check
Vérification Patterns Async Python.
python-dev
Start Python development workflow with architecture, implementation, review, and testing phases.
ccboard-install
Install or update ccboard.
notebook-review
Comprehensive review of Jupyter notebooks and Python scripts.
ccc-python-review
Review changed Python code for security, type safety, error handling, idioms and framework pitfalls, with static analysis results and a merge verdict. Use after editing .py files, before committing Python changes, or when reviewing a Python pull request.
checklist
Generate a custom checklist for the current feature based on user requirements.