Aiwg setup-run
Execute a `setup.aiwg.io/v1` SetupManifest, performing cross-platform installati
git clone https://github.com/jmagly/aiwg
T=$(mktemp -d) && git clone --depth=1 https://github.com/jmagly/aiwg "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.agents/skills/setup-run" ~/.claude/skills/jmagly-aiwg-setup-run && rm -rf "$T"
.agents/skills/setup-run/SKILL.mdsetup-run
Execute a
setup.aiwg.io/v1 SetupManifest, performing cross-platform installation step by step.
Trigger Phrases
- "run the setup manifest"
- "install using setup.manifest.yaml"
- "execute installer for [project]"
- "aiwg setup-run [manifest]"
- "run setup for [project]"
- "run dev setup for [project]"
Parameters
manifest (positional, optional)
Path to the
setup.manifest.yaml. Default: ./setup.manifest.yaml.
--dry-run (optional)
Print what would be executed without running any scripts.
--platform (optional)
Override platform detection:
linux, macos, windows, wsl2.
--distro (optional)
Override distro detection:
ubuntu, debian, fedora, arch, etc.
--params-file (optional)
Path to a YAML file with pre-set param values (avoids interactive prompts).
--step (optional)
Run only a specific step by
id. Useful for resuming after failure.
--skip (optional)
Comma-separated step IDs to skip.
--type (optional)
Filter which manifest to run by install type:
user, developer, or ci.
When
--type developer is specified and no manifest path is given, the skill looks for installer/setup.dev.manifest.yaml before falling back to setup.manifest.yaml.
When --type user is specified, the skill looks for installer/setup.user.manifest.yaml.
Execution Flow
Phase 1: Load and Validate
- Read the manifest file
- Validate against
schema (run setup-validate internally)setup.aiwg.io/v1 - If invalid, report errors and stop — do not attempt partial execution
Phase 2: Platform Detection
- Detect OS:
(Linux/Darwin) oruname -s
(Windows)$PSVersionTable - Detect distro:
→/etc/os-release
fieldID - Detect arch:
uname -m - Detect shell:
or$SHELL$0 - Match against manifest
block — if no match, warn and ask to proceed or abortplatform
Phase 3: Param Collection
For each param in manifest
params:
- Check if already set in environment or
--params-file - If
and no value: prompt interactivelyrequired: true - If
: always prompt interactively, even if a default exists — do not use the default without askinginteractive_required: true - If
list present: validate input against choiceschoices - Expand
and~
in$HOME
paramstype: path
Phase 4: Prerequisite Check
For each prerequisite:
- Run
commanddetect - If
set: compare version output against minimumversion_min - On failure: print
and stop with non-zero exitinstall_hint
Phase 5: OS Config Summary (developer manifests only)
When
metadata.install_type is developer and the manifest has an os_config block:
- Run each
entry'sos_config
commandcheck - Collect entries where
returns non-zero (needs configuration)check - Print a summary of OS mutations that will be made:
[setup] OS Configuration Required The following OS-level changes will be made: • docker-group: Add user 'alice' to docker group (requires re-login) • inotify-watches: Set fs.inotify.max_user_watches=524288 These changes require elevated privileges (sudo). - Ask for explicit user confirmation before proceeding with any
steps:os-configProceed with OS configuration? [y/N]: - If denied, skip all
steps and warn that the environment may be incomplete.os-config
Never apply OS mutations without this explicit confirmation. This is a separate gate from the normal params phase.
Phase 6: Step Execution
Execute steps in dependency order:
For each step (respecting depends_on order): 1. Evaluate `when` condition — skip step if false 2. Skip steps not applicable to current platform 3. Dispatch by step type: - script: run the script with params as env vars - detect: run detect command, set env var with result - ask: prompt user, set param - verify: run verify expression; fail if false - agentic: delegate to installer-agent with instruction - platform-route: resolve platform → script path, run script - chain: run aiwg setup-run on sub-manifest - os-config: run the referenced os_config entry (see below) 4. Run `verify` expression if present 5. On failure: a. Check recovery_procedures for a matching trigger b. If found: show recovery plan and ask user to confirm before running c. If not found or recovery fails: report step ID + error, stop
os-config Step Execution
When executing an
os-config step:
- Look up the
in the manifest'sconfig_id
blockos_config - Run the
command — if exit 0, print "already configured" and skipcheck - If the entry has
:interactive: true- Print an explanation of what the
command will doapply - Warn: "This step will trigger an interactive dialog or GUI prompt."
- Ask for user acknowledgment before running:
[setup] Interactive step: xcode-cli-tools This will trigger the Xcode Command Line Tools installation dialog. Acknowledge and continue? [y/N]:
- Print an explanation of what the
- Run the
commandapply - If the entry has
:requires_relogin: true- After the step completes, pause and print:
[setup] NOTICE: docker-group requires re-login to take effect. Log out and back in, then re-run setup-run with --step <next-step-id> to continue from where you left off. Continue (if you have already re-logged in)? [y/N]:
- After the step completes, pause and print:
Phase 7: Completion Report
[setup] Installation complete Steps run: 4/4 Steps skipped: 0 Duration: 45s Installed to: /opt/myapp Config dir: ~/.config/myapp Run `myapp --version` to verify.
For developer installs, also report:
[setup] Developer environment ready OS config applied: docker-group, inotify-watches Re-login required: docker-group (log out and back in) Dev server: http://myapp.local:3000
Dry Run Output
[setup:dry-run] Would execute: setup.manifest.yaml Platform: linux/ubuntu/x86_64 Install type: developer OS Config (2 entries, 1 needs configuration): ✓ docker-group: already configured ✗ inotify-watches: needs configuration (current: 8192, required: 524288) Step 1: clone (script) script: installer/scripts/clone.sh env: INSTALL_DIR=/opt/myapp BRANCH=main verify: test -d ${INSTALL_DIR}/.git Step 2: apply-inotify (os-config) config_id: inotify-watches platform: linux Step 3: configure-dev (script) script: installer/scripts/dev/configure-dev.sh Step 4: verify-dev (script) script: installer/scripts/dev/verify-dev.sh
Recovery Handling
When a step fails and a recovery procedure matches:
[setup] Step 'clone' failed: Error: destination path already exists and is not empty Recovery procedure 'full-reset' is available: This will: remove /opt/myapp and re-clone from git Proceed with recovery? [y/N]: _
Never run destructive recovery steps without explicit user confirmation.
Agentic Steps
When a step has
type: agentic, the skill delegates to installer-agent with the step's instruction field as context, plus:
- The full manifest (for environment context)
- The current param values
- The failure output from any preceding script attempt
The installer-agent must explain what it detects and what it will do before making changes.
References
- Schema:
agentic/code/addons/agentic-installer/schemas/v1/setup-manifest.schema.json - Agent:
agentic/code/addons/agentic-installer/agents/installer-agent.md - Script lib:
agentic/code/addons/agentic-installer/scripts/lib/ - Generate skill:
agentic/code/addons/agentic-installer/skills/setup-generate/SKILL.md