bootstrap-uv-python-workspace
npx machina-cli add skill gaelic-ghost/python-skills/bootstrap-uv-python-workspace --openclawBootstrap UV Python Workspace
Create repeatable uv-based scaffolds for both single projects and workspaces. Use this skill as the shared scaffolding basis for other Python bootstrap skills that need consistent uv project/workspace defaults.
Workflow
- Choose bootstrap mode:
- Single project:
scripts/init_uv_python_project.sh - Workspace:
scripts/init_uv_python_workspace.sh
- Select profile(s):
package: library/package layoutservice: FastAPI service layout
- Run scaffold script with explicit
--nameand optional--path,--python, and--initial-commit. - Verify generated environment with built-in checks run by the scripts.
- Return exact next commands to run locally.
Commands
# Package project
scripts/init_uv_python_project.sh --name my-lib --profile package
# Service project
scripts/init_uv_python_project.sh --name my-service --profile service --python 3.13
# Workspace with defaults (core-lib package + api-service service)
scripts/init_uv_python_workspace.sh --name my-workspace
# Workspace with explicit members and profile mapping
scripts/init_uv_python_workspace.sh \
--name platform \
--members "core-lib,billing-service,orders-service" \
--profile-map "core-lib=package,billing-service=service,orders-service=service"
# Allow non-empty target directory
scripts/init_uv_python_project.sh --name my-lib --force
# Skip git initialization
scripts/init_uv_python_workspace.sh --name platform --no-git-init
# Create initial commit after successful scaffold
scripts/init_uv_python_project.sh --name my-service --profile service --initial-commit
Guardrails
- Refuse non-empty target directories unless
--forceis set. - Refuse to overwrite an existing
pyproject.toml. - Require
uvandgit(when git initialization is enabled). - Exit non-zero with actionable error text for invalid arguments or missing prerequisites.
Defaults
- Python version:
3.13(override with--python). - Quality tooling:
pytest,ruff,mypy. - Git initialization: enabled by default (disable via
--no-git-init). - Workspace defaults:
- Members:
core-lib,api-service - Profiles: first member
package, remaining membersservice - Local linking: services depend on the first package member using uv workspace sources.
Automation Suitability
- Codex App automation: Medium. Best for scheduled scaffold health checks, not day-to-day product delivery.
- Codex CLI automation: High. Strong fit for CI or scheduled scaffold validation.
Codex App Automation Prompt Template
Use $bootstrap-uv-python-workspace.
Scope boundaries:
- Work only inside <REPO_PATH>.
- Create temporary scaffolds only under <SCRATCH_ROOT>/<NAME>-<STAMP>.
- Do not modify unrelated files outside the temporary scaffold path.
Task:
1. If <MODE:PROJECT|WORKSPACE> is PROJECT, run:
`scripts/init_uv_python_project.sh --name <NAME> --profile <PROFILE:PACKAGE|SERVICE> --python <PYTHON_VERSION> --path <SCRATCH_ROOT>/<NAME>-<STAMP> <FORCE_FLAG> <GIT_INIT_MODE>`
2. If <MODE:PROJECT|WORKSPACE> is WORKSPACE, run:
`scripts/init_uv_python_workspace.sh --name <NAME> --python <PYTHON_VERSION> --path <SCRATCH_ROOT>/<NAME>-<STAMP> --members "<MEMBERS_CSV>" --profile-map "<PROFILE_MAP>" <FORCE_FLAG> <GIT_INIT_MODE>`
3. Run validation checks in the scaffold root:
- `uv run pytest`
- `uv run ruff check .`
- `uv run mypy .`
4. If <KEEP_OR_CLEANUP_ARTIFACTS:KEEP|CLEANUP> is CLEANUP, remove the scaffold directory after reporting results.
Output contract:
1. STATUS: PASS or FAIL
2. COMMANDS: exact commands executed, in order
3. RESULTS: concise check outcomes
4. If FAIL: include a short stderr summary and minimal fix recommendation
5. If PASS with no findings: include "safe to archive"
Codex CLI Automation Prompt Template
codex exec --full-auto --sandbox workspace-write --cd "<REPO_PATH>" "<PROMPT_BODY>"
<PROMPT_BODY> template:
Use $bootstrap-uv-python-workspace.
Stay strictly within <REPO_PATH>. Create temporary artifacts only under <SCRATCH_ROOT>/<NAME>-<STAMP>.
Run scaffold generation for <MODE:PROJECT|WORKSPACE>, then run:
- `uv run pytest`
- `uv run ruff check .`
- `uv run mypy .`
Return STATUS, exact commands, and concise results only. If failures occur, provide only the minimal remediation needed.
Customization Placeholders
<REPO_PATH><SCRATCH_ROOT><NAME><STAMP><MODE:PROJECT|WORKSPACE><PROFILE:PACKAGE|SERVICE><MEMBERS_CSV><PROFILE_MAP><PYTHON_VERSION><FORCE_FLAG><GIT_INIT_MODE><KEEP_OR_CLEANUP_ARTIFACTS:KEEP|CLEANUP>
Interactive Customization Workflow
- Ask whether users want project or workspace script execution.
- Gather name, path, Python version, and git/force flags.
- If project script, gather profile (
packageorservice). - If workspace script, gather members and optional profile map.
- Return both:
- A YAML profile for durable reuse.
- The exact scaffold command to run.
- Use this precedence order:
- CLI flags
--configprofile file.codex/profiles/bootstrap-uv-python-workspace/customization.yaml~/.config/gaelic-ghost/python-skills/bootstrap-uv-python-workspace/customization.yaml- Script defaults
- If users want temporary reset behavior:
--bypassing-all-profiles--bypassing-repo-profile--deleting-repo-profile
- If users provide no customization or profile files, keep existing script defaults unchanged.
- See
references/interactive-customization.mdfor schema and examples.
References
Use references/uv-command-recipes.md for concise uv command patterns.
Resources
scripts/
init_uv_python_project.sh: bootstrap a single uv project (packageorservice).init_uv_python_workspace.sh: bootstrap a uv workspace with multiple members.
references/
uv-command-recipes.md: short recipes for init/add/run/sync/workspace operations.
assets/
README.md.tmpl: shared template consumed by both scripts.
Source
git clone https://github.com/gaelic-ghost/python-skills/blob/main/bootstrap-uv-python-workspace/SKILL.mdView on GitHub Overview
Create repeatable uv-based scaffolds for both single projects and workspaces. This skill provides a shared, deterministic foundation with consistent defaults to bootstrap uv Python projects, monorepos, and service/package profiles on macOS.
How This Skill Works
Choose between a single project or a workspace scaffold, select a profile (package or service), and run the corresponding script with --name and optional --path, --python, and --initial-commit. The scaffolds verify prerequisites, set up dev tooling (pytest, ruff, mypy), and output exact next commands to run locally.
When to Use It
- Creating a new uv Python project
- Scaffolding a uv monorepo/workspace
- Setting up package or service profiles
- Customizing scaffold defaults through layered YAML profiles
- Initializing dev tooling and an optional first git commit
Quick Start
- Step 1: Choose mode (project or workspace) and required profiles (--profile or --profile-map).
- Step 2: Run the scaffold script with --name and optional --path, --python, and --initial-commit as needed.
- Step 3: Run the built-in checks (uv run pytest, uv run ruff, uv run mypy) and follow the next commands printed by the scaffold.
Best Practices
- Use explicit --name and, when needed, --path to ensure deterministic scaffolding.
- Verify the scaffold with the built-in checks before proceeding.
- Be aware non-empty target directories are refused unless --force is used.
- Override defaults with --python to pin a specific Python version.
- Initialize git by default, and disable with --no-git-init if undesired.
Example Use Cases
- Package project: scripts/init_uv_python_project.sh --name my-lib --profile package
- Service project: scripts/init_uv_python_project.sh --name my-service --profile service --python 3.13
- Workspace defaults: scripts/init_uv_python_workspace.sh --name my-workspace
- Workspace with explicit members and profile mapping: scripts/init_uv_python_workspace.sh --name platform --members core-lib,billing-service,orders-service --profile-map core-lib=package,billing-service=service,orders-service=service
- Skip git initialization: scripts/init_uv_python_workspace.sh --name platform --no-git-init