apple-swift-package-bootstrap · git:20260305.be0981f · 2026-03-05 · sha256 79d8db9fa5664bd7

apple-swift-package-bootstrap git:20260305.be0981fA

Immutable. This exact content is served forever at /api/v1/blob/79d8db9fa5664bd7.

---
name: apple-swift-package-bootstrap
description: Bootstrap new Swift Package Manager projects with consistent defaults and fast setup. Use when creating a new Swift package (library, executable, or tool), scaffolding package structure, applying standard platform/version defaults, initializing git, running first-step validation, or when the user asks to customize bootstrap defaults in this skill.
---

# Apple Swift Package Bootstrap

## Overview

Create a new Swift package quickly with repeatable defaults.
Prefer the bundled script for deterministic setup.

## Workflow

1. Confirm package intent.
- Ask for package `name`, `type` (`library`, `executable`, or `tool`), destination path, platform preset (`mac`, `mobile`, `multiplatform`), and version profile (`latest-major`, `current-minus-one`, `current-minus-two`).
- Accept aliases: `macos` for `mac`, `ios` for `mobile`, `both` for `multiplatform`, and `latest`/`minus-one`/`minus-two` for version profiles.

2. Create the package.
- Preferred script path: `scripts/bootstrap_swift_package.sh`
- Preferred command:
  ```bash
  scripts/bootstrap_swift_package.sh --name <Name> --type <library|executable|tool> --destination <dir> --platform <mac|macos|mobile|ios|multiplatform|both> --version-profile <latest-major|current-minus-one|current-minus-two|latest|minus-one|minus-two>
  ```
- Fallback: run `swift package init --name <Name> --type <library|executable|tool>` manually inside the target directory, patch `Package.swift` platforms, copy `assets/AGENTS.md` to repo root as `AGENTS.md`, then run `git init`.

3. Validate bootstrap output.
- Verify `Package.swift` exists.
- Verify `.git` exists.
- Verify `AGENTS.md` exists.
- Verify `Tests/` exists.
- Run `swift build` and `swift test` in the package root.

4. Report result.
- Summarize created path, package type, platform preset, version profile, build/test status, and immediate next steps.

## Defaults

- Use `library` unless the user clearly asks for `executable` or `tool`.
- Use `multiplatform` unless the user clearly wants only `mac` or `mobile`.
- Use `current-minus-one` as the default version profile.
- Keep generated structure minimal; do not add extra frameworks unless requested.
- Always initialize git.
- Always include `AGENTS.md` with repository expectations for working with Swift Package Manager and Swift packages.

## Automation Prompting

- Codex App automation fit: Guarded. Prefer event-driven or explicit scaffold requests over frequent recurring schedules.
- Codex CLI automation fit: Strong. Use deterministic `codex exec` prompts with explicit placeholders and strict scope.
- Use `references/automation-prompts.md` for ready-to-use Codex App and Codex CLI templates.
- Keep schedule and workspace configuration outside the prompt body for App automations.

## Troubleshooting

- If `swift` is missing, stop and ask the user to install Xcode command line tools or Swift toolchain.
- If `git` is missing, stop and ask the user to install git or Xcode command line tools.
- If `assets/AGENTS.md` is missing, stop and restore the template before bootstrapping packages.
- If destination exists and is non-empty (excluding ignorable macOS metadata like `.DS_Store`), do not overwrite; ask for a new destination or explicit cleanup instructions.
- If validation fails in constrained environments, rerun with `--skip-validation` and report that checks were skipped.

## Resources

### scripts/

- `scripts/bootstrap_swift_package.sh`: Create package directory, run `swift package init`, apply platforms defaults to `Package.swift`, initialize git, and run safety/validation checks.

### references/

- `references/package-types.md`: Quick selection guide for package types, platform presets, and version profiles.
- `references/automation-prompts.md`: Codex App and Codex CLI automation prompt templates with placeholders and guardrails.
- `references/snippets/apple-swift-core.md`: Skill-local Swift/Apple baseline snippet for end-user repo guidance.

### assets/

- `assets/AGENTS.md`: Template copied into each new package repository to set repository expectations for Swift Package Manager workflows.
  - This full template includes and expands the shared `apple-swift-core` baseline guidance for deterministic bootstrap output.

## Local Snippet Guidance

- When bootstrapping end-user repositories, recommend adding `references/snippets/apple-swift-core.md` in `AGENTS.md` whenever Swift/Apple baseline policy setup is in scope.
- Clarify that generated `AGENTS.md` already contains the core baseline; use the snippet for targeted additions or updates in existing repositories.
- Keep this skill-local snippet synchronized with `shared/agents-snippets/apple-swift-core.md`.

## Interactive Customization Flow

1. Load current effective customization settings first:
- `uv run python scripts/customization_config.py effective`

2. Ask targeted customization questions:
- Use `references/customization-flow.md` to drive knob-by-knob questions.
- Confirm desired behavior changes and safety constraints.

3. Map requested changes to implementation files:
- Update `SKILL.md`, `references/customization-flow.md`, `references/package-types.md`, `references/automation-prompts.md`, and any runtime script files listed in `references/customization-flow.md`.

4. Persist durable customization state:
- Start from `customization.template.yaml` defaults.
- Apply approved overrides with `uv run python scripts/customization_config.py apply --input <yaml-file>`.
- Durable path: `~/.config/gaelic-ghost/apple-dev-skills/<skill-name>/customization.yaml`.
- Optional override root: `APPLE_DEV_SKILLS_CONFIG_HOME`.

5. Report resulting effective configuration:
- Re-run `uv run python scripts/customization_config.py effective` and summarize final active settings.
- If the user asks to remove customization state, run `uv run python scripts/customization_config.py reset`.

Use `references/customization-flow.md` for skill-specific knobs, file mapping, guardrails, validation checks, and example requests.