Get the FREE Ultimate OpenClaw Setup Guide →

bootstrap-uv-python-workspace

npx machina-cli add skill gaelic-ghost/python-skills/bootstrap-uv-python-workspace --openclaw
Files (1)
SKILL.md
6.4 KB

Bootstrap 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

  1. Choose bootstrap mode:
  • Single project: scripts/init_uv_python_project.sh
  • Workspace: scripts/init_uv_python_workspace.sh
  1. Select profile(s):
  • package: library/package layout
  • service: FastAPI service layout
  1. Run scaffold script with explicit --name and optional --path, --python, and --initial-commit.
  2. Verify generated environment with built-in checks run by the scripts.
  3. 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 --force is set.
  • Refuse to overwrite an existing pyproject.toml.
  • Require uv and git (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 members service
  • 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

  1. Ask whether users want project or workspace script execution.
  2. Gather name, path, Python version, and git/force flags.
  3. If project script, gather profile (package or service).
  4. If workspace script, gather members and optional profile map.
  5. Return both:
  • A YAML profile for durable reuse.
  • The exact scaffold command to run.
  1. Use this precedence order:
  • CLI flags
  • --config profile file
  • .codex/profiles/bootstrap-uv-python-workspace/customization.yaml
  • ~/.config/gaelic-ghost/python-skills/bootstrap-uv-python-workspace/customization.yaml
  • Script defaults
  1. If users want temporary reset behavior:
  • --bypassing-all-profiles
  • --bypassing-repo-profile
  • --deleting-repo-profile
  1. If users provide no customization or profile files, keep existing script defaults unchanged.
  2. See references/interactive-customization.md for 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 (package or service).
  • 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

  1. Step 1: Choose mode (project or workspace) and required profiles (--profile or --profile-map).
  2. Step 2: Run the scaffold script with --name and optional --path, --python, and --initial-commit as needed.
  3. 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

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers