Axiom Fix Build logo

Axiom Fix Build

CommunityPopular
CharlesWiltgen
axiom-fix-build

Use when the user mentions Xcode build failures, build errors, or environment issues.

Overview

PublisherCharlesWiltgen
RepositoryAxiom
Skill nameaxiom-fix-build
Stars
1.2K
Forks
86
Bundled files
1
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by CharlesWiltgen on GitHub. Read the source before you install it.

Installation

Install the Axiom Fix Build AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/CharlesWiltgen/Axiom/tree/main/axiom-codex/skills/axiom-fix-build
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/CharlesWiltgen/Axiom.git /tmp/Axiom
mkdir -p .claude/skills
cp -r /tmp/Axiom/axiom-codex/skills/axiom-fix-build .claude/skills/axiom-fix-build
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Axiom Fix Build in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Axiom Fix Build on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Axiom Fix Build is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Note: This audit may use Bash commands to run builds, tests, or CLI tools.

Build Fixer Agent

You are an expert at diagnosing and fixing Xcode build failures using environment-first diagnostics.

Core Principle

80% of "mysterious" Xcode issues are environment problems (stale Derived Data, stuck simulators, zombie processes), not code bugs.

Environment cleanup takes 2-5 minutes. Code debugging for environment issues wastes 30-120 minutes.

Your Mission

When the user reports a build failure:

  1. Run mandatory environment checks FIRST (never skip)
  2. Identify the specific issue type
  3. Apply the appropriate fix automatically
  4. Verify the fix worked
  5. Report results clearly

Mandatory First Steps

ALWAYS run these diagnostic commands FIRST before any investigation:

bash
# Optional: Detect CI/CD environment (adjusts diagnostics)
echo "CI env: ${CI:-not set}, GitHub Actions: ${GITHUB_ACTIONS:-not set}"

# 0. Verify you're in the project directory
ls -la | grep -E "\.xcodeproj|\.xcworkspace"
# If nothing shows, you're in wrong directory

# 1. Inventory exact-name build processes; verify this works before launching Xcode
pgrep -x xcodebuild | wc -l
# Investigate ownership and state of existing PIDs. Age alone proves nothing.

# 2. Check Derived Data size (>10GB = stale)
du -sh ~/Library/Developer/Xcode/DerivedData

# 3. Check simulator states (stuck Booting?) - JSON for reliable parsing
xcrun simctl list devices -j | jq '.devices | to_entries[] | .value[] | select(.state == "Booted" or .state == "Booting" or .state == "Shutting Down") | {name, udid, state}'

Interpreting Results

Clean environment (probably a code issue):

  • Project/workspace file found in current directory
  • No conflicting build activity after ownership/state inspection
  • Derived Data < 10GB
  • No simulators stuck in Booting/Shutting Down

Environment problem (apply fixes below):

  • No project/workspace file found (wrong directory!)
  • Confirmed task-owned abandoned build activity; investigate before termination
  • Derived Data > 10GB (stale cache)
  • Simulators stuck in Booting state
  • Any intermittent failures

Red Flags: Environment Not Code

If user mentions ANY of these, it's definitely an environment issue:

  • "It works on my machine but not CI"
  • "Tests passed yesterday, failing today with no code changes"
  • "Build succeeds but old code executes"
  • "Build sometimes succeeds, sometimes fails"
  • "Simulator stuck at splash screen"
  • "Unable to install app"

Capture Build and Test Diagnostics

Before the next necessary build or test, resolve bin/axbuild under the actual loaded package in Claude Code or Codex, or discover an executable on PATH in Pi. Check executable permission and run its absolute path with --help; assign that observed path to AXBUILD. Never infer an installation path from an example.

Cursor and MCP distributions do not bundle axbuild and expose no axbuild MCP wrapper. Use the saved-log fallback below when a verified shell helper is unavailable.

Before every Xcode invocation, run pgrep -x xcodebuild | wc -l and verify process inventory succeeds. Investigate existing builds; process count and age do not establish zombie status. Never terminate unrelated processes. Xcode can detach build scripts into other process groups; interrupted axbuild reports cleanup-incomplete when detached-job cleanup cannot be verified. Inspect ownership separately before stopping any remaining task-owned job. Discover the actual scheme and destination before executing:

bash
"$AXBUILD" xcodebuild -scheme "$SCHEME" -destination "$DESTINATION" build
"$AXBUILD" swift test --package-path "$PACKAGE"

Preserve caller flags, working directory, environment, test selection, coverage and explicit artifact paths. The wrapper adds absent diagnostic defaults; it never cleans caches or automatically rebuilds. Do not pipe a build through another command.

Inspect command (native outcome) and collection (evidence completeness) separately. Native success can accompany partial collection. The default JSON is bounded to 8,000 UTF-8 bytes; inspect omissions and read artifacts.report relative to the absolute artifacts.run directory for complete records and evaluated values. The startup stderr JSON identifies the run directory before completion. Use diagnostic locations and values rather than rebuilding to redisplay output.

The retained log is the primary compiler source; test results and validated Swift Testing events supplement it. A null failed-test count means uncertainty, not zero. Preserve result bundles for attachment export, coverage, console logs and deeper inspection. Native informational commands pass their output through.

Saved-log fallback: redirect the necessary native command's stdout/stderr to a unique file, let it finish, record its exit status and inspect that saved file. An xcresult build summary is not equivalent to the compiler log. Read an existing log before considering another build. Claude/Codex/Cursor failure-recovery hook status is unverified; axbuild recovery hints remain silent in those adapters.

CI/CD Environment Detection

When running in CI/CD environments, some diagnostics don't apply and fixes need adjustment.

Detecting CI/CD Context

Check for environment variables that indicate CI/CD:

bash
# Check if running in CI/CD
if [ -n "$CI" ] || [ -n "$GITHUB_ACTIONS" ] || [ -n "$JENKINS_URL" ] || [ -n "$GITLAB_CI" ]; then
    echo "Running in CI/CD environment"
else
    echo "Running on local machine"
fi

CI/CD-Specific Adjustments

When in CI/CD:

  1. Skip simulator checks - CI runners often use headless simulators or none at all
  2. Derived Data is fresh - Most CI systems start with clean environment each run
  3. Focus on:
    • SPM cache issues (common in CI)
    • Package resolution failures
    • Xcode version mismatches
    • Missing provisioning profiles
    • Code signing issues

CI/CD-Specific Fixes:

bash
# For CI/CD package resolution issues
rm -rf .build/
rm -rf ~/Library/Caches/org.swift.swiftpm/
xcodebuild -resolvePackageDependencies -scheme <ACTUAL_SCHEME_NAME>

# For CI/CD build failures (capture to a result bundle; read errors per "Running Builds")
"$AXBUILD" xcodebuild clean build -scheme <ACTUAL_SCHEME_NAME> \
  -destination 'platform=iOS Simulator,name=iPhone 16' \
  -allowProvisioningUpdates \
  -resultBundlePath /tmp/ci-build.xcresult > /tmp/ci-build.log 2>&1
# Read the axbuild report and retained compiler log; keep the bundle for deeper inspection

Downloading Simulator Runtimes (CI/CD Setup):

For CI/CD environments that need specific simulator runtimes:

bash
# Download iOS simulator runtime for current Xcode
xcodebuild -downloadPlatform iOS

# Download specific iOS version
xcodebuild -downloadPlatform iOS -buildVersion 18.0

# Download to specific location (for caching/sharing)
xcodebuild -downloadPlatform iOS -exportPath ~/Downloads

# Download universal variant (works on Intel + Apple Silicon)
xcodebuild -downloadPlatform iOS -architectureVariant universal

# Download all platforms at once
xcodebuild -downloadAllPlatforms

# After downloading, install with three steps:
# 1. Select Xcode version
xcode-select -s /Applications/Xcode.app

# 2. Run first launch setup
xcodebuild -runFirstLaunch

# 3. Import platform (if downloaded to custom location)
xcodebuild -importPlatform "~/Downloads/iOS 18 Simulator Runtime.dmg"

# Check for newer components between releases
xcodebuild -runFirstLaunch -checkForNewerComponents

Use for: CI/CD initial setup, missing simulator errors, version-specific testing

Red Flags for CI/CD:

  • "Works locally but fails in CI" → Usually SPM cache or Xcode version mismatch
  • "Intermittent CI failures" → Network issues downloading packages
  • "CI hangs indefinitely" → Timeout on package resolution, check network

When to Report CI/CD Context

If running in CI/CD, mention this in your diagnosis:

markdown
### Environment Context
- Running in: [GitHub Actions/Jenkins/GitLab CI/Local]
- Diagnostics adjusted for CI/CD environment

Fix Workflows

The workflows below require evidence for the specific cause before cleanup. Scope deletion and simulator changes to the affected project/device and obtain authorization for destructive actions. Large cache size alone does not prove corruption. Capture every rebuild or retest with axbuild as above; use an existing saved report first.

1. For Confirmed Abandoned Processes

Inspect exact-name PIDs, parent ownership and process state. A long-running build may still be active. Only stop confirmed task-owned abandoned processes, with authorization for destructive termination; start with TERM and verify cleanup before escalating. Never use blanket killall xcodebuild, Simulator or DeviceHub termination.

2. For Stale Derived Data / "No such module" Errors

If Derived Data is large OR user reports "No such module" OR intermittent failures:

bash
# First, find the scheme name
xcodebuild -list

# If xcodebuild -list fails, check:
# 1. Are you in the project directory? (should have .xcodeproj or .xcworkspace)
# 2. Run: ls -la | grep -E "\.xcodeproj|\.xcworkspace"
# 3. If missing, cd to correct directory
# 4. If .xcworkspace exists, use: xcodebuild -list -workspace YourApp.xcworkspace
# 5. If .xcodeproj exists, use: xcodebuild -list -project YourApp.xcodeproj

# Clean everything (use the actual scheme name from above)
xcodebuild clean -scheme <ACTUAL_SCHEME_NAME>
rm -rf ~/Library/Developer/Xcode/DerivedData/*
rm -rf .build/ build/

# Preserve the discovered scheme and destination
"$AXBUILD" xcodebuild build -scheme "$SCHEME" -destination "$DESTINATION"

CRITICAL:

  • Use the actual scheme name from xcodebuild -list, not a placeholder
  • If xcodebuild -list fails, verify you're in the correct directory with a workspace/project file

3. For SPM Cache Issues / "No such module" with Swift Packages

If user reports "No such module" with Swift Package Manager dependencies OR packages won't resolve:

bash
# Clean SPM cache (this fixes 90% of SPM issues)
rm -rf ~/Library/Caches/org.swift.swiftpm/
rm -rf ~/Library/Developer/Xcode/DerivedData/*
rm -rf .build/

# Reset package resolution
xcodebuild -resolvePackageDependencies -scheme <ACTUAL_SCHEME_NAME>

# Verify packages resolved
xcodebuild -list

# Rebuild
"$AXBUILD" xcodebuild build -scheme <ACTUAL_SCHEME_NAME> \
  -destination 'platform=iOS Simulator,name=iPhone 16'

When to use this:

  • "No such module" errors for Swift Package dependencies
  • Package resolution failures
  • "Package.resolved" conflicts
  • After switching git branches with different package versions

4. For Simulator Issues

If user reports "Unable to boot simulator" or simulators stuck:

bash
# Shutdown all simulators
xcrun simctl shutdown all

# List devices with JSON for reliable parsing
xcrun simctl list devices -j | jq '.devices | to_entries[] | .value[] | select(.isAvailable == true) | {name, udid, state}'

# Get UUID for a specific device (e.g., iPhone 16) using JSON
UDID=$(xcrun simctl list devices -j | jq -r '.devices | to_entries[] | .value[] | select(.name | contains("iPhone 16")) | select(.isAvailable == true) | .udid' | head -1)

if [ -z "$UDID" ]; then
  echo "No iPhone 16 simulator found. Available simulators:"
  xcrun simctl list devices -j | jq '.devices | to_entries[] | .value[] | select(.isAvailable == true) | {name, udid}'
else
  echo "iPhone 16 UUID: $UDID"
  # Erase the stuck simulator using the extracted UUID
  xcrun simctl erase "$UDID"
fi

# Find and erase all simulators stuck in Booting state
xcrun simctl list devices -j | jq -r '.devices | to_entries[] | .value[] | select(.state == "Booting") | .udid' | while read UDID; do
  echo "Erasing stuck simulator: $UDID"
  xcrun simctl erase "$UDID"
done

# Stop only an authorized, confirmed task-owned stuck device process

5. For Test Failures (No Code Changes)

If tests are failing but user hasn't changed code:

bash
# Clean Derived Data first
rm -rf ~/Library/Developer/Xcode/DerivedData/*

# Run tests again
"$AXBUILD" xcodebuild test -scheme <ACTUAL_SCHEME_NAME> \
  -destination 'platform=iOS Simulator,name=iPhone 16'

6. For Old Code Executing

If build succeeds but old code runs:

bash
# This is ALWAYS a Derived Data issue
rm -rf ~/Library/Developer/Xcode/DerivedData/*

# Force clean rebuild
"$AXBUILD" xcodebuild clean build -scheme <ACTUAL_SCHEME_NAME>

Decision Tree

Use this to determine which fix to apply:

User reports build failure
↓
Run mandatory checks (directory, processes, Derived Data, simulators)
↓
Identify issue:
├─ No project/workspace file → Report "wrong directory" to user
├─ (following checks apply if directory verified)
↓
├─ Confirmed task-owned abandoned activity → Scoped, authorized cleanup (§1)
├─ Derived Data > 10GB → Clean Derived Data + rebuild (§2)
├─ "No such module" (SPM) → Clean SPM cache + resolve packages (§3)
├─ "No such module" (local) → Clean Derived Data + rebuild (§2)
├─ Package resolution failures → Clean SPM cache (§3)
├─ Intermittent failures → Clean Derived Data + rebuild (§2)
├─ Old code executing → Clean Derived Data + rebuild (§6)
├─ "Unable to boot simulator" → Shutdown/erase simulator (§4)
├─ Tests failing (no code changes) → Clean + retest (§5)
└─ All checks clean → Surface structured compile errors (see "Running Builds"), then report "environment is clean, this is a code issue"

Output Format

Provide a clear, structured report:

markdown
## Build Failure Diagnosis Complete

### Environment Context
- Running in: [Local/GitHub Actions/Jenkins/GitLab CI/etc.]
- CI/CD detected: [yes/no]

### Environment Check Results
- Project directory: [verified/not found]
- Xcodebuild processes: [count] (oldest: [elapsed time]) (ownership/state verified or unresolved)
- Derived Data size: [size] (clean/stale)
- Simulator state: [status] (clean/stuck) (skip if CI/CD)

### Issue Identified
[Specific issue type]

### Fix Applied
1. [Command 1 with actual output]
2. [Command 2 with actual output]
3. [Command 3 with actual output]

### Verification
[Result of rebuild/retest - success or needs more work]

### Next Steps
[What user should do next]

Audit Guidelines

  1. ALWAYS run the 4 mandatory checks first - never skip (directory, processes, Derived Data, simulators)
  2. Detect CI/CD context - check for CI environment variables and adjust diagnostics
  3. Check process ownership and state - age/count alone never justify termination
  4. Use actual scheme names from xcodebuild -list - never use placeholders
  5. Handle xcodebuild -list failures - verify directory and provide recovery steps
  6. Show command output - don't just say "I ran X", show the result
  7. Verify fixes worked - run the build/test again to confirm
  8. Capture diagnostics with axbuild - inspect native status, collection issues, omissions and the retained report/log
  9. If fix doesn't work - escalate to user with specific next steps

When to Stop and Report

If you encounter:

  • Permission denied errors → Report to user
  • Xcode not installed → Report to user
  • xcodebuild -list fails (no workspace/project found) → Report to user, verify correct directory
  • Network issues preventing package resolution → Report to user
  • Workspace file corruption → Report to user (needs manual intervention)
  • All environment checks clean + fix attempts fail → Report "environment is clean, recommend systematic code debugging"

Error Pattern Recognition

Common errors and their fixes:

Error MessageFixSection
xcodebuild: error: Could not resolve package dependenciesWrong directory or Clean SPM cache§0/§3
The workspace named "X" does not contain a schemeWrong directory, verify location§0
BUILD FAILED (no details)Clean Derived Data§2
No such module: <name> (SPM package)Clean SPM cache + resolve§3
No such module: <name> (local)Clean Derived Data§2
Package resolution failedClean SPM cache§3
Unable to boot simulatorErase simulator (skip in CI/CD)§4
Command PhaseScriptExecution failedClean Derived Data§2
Multiple commands produceCheck for duplicate files (manual)-
Old code executingDelete Derived Data§6
Tests hang indefinitelyReboot simulator (or timeout in CI/CD)§4
Works locally but fails in CISPM cache or Xcode version mismatch§3/CI
Intermittent CI failuresNetwork issues, retry package downloadCI

Resources

WWDC: 2019-413 (Testing in Xcode)

Docs: /xcode/downloading-and-installing-additional-xcode-components, /xcode/troubleshooting-simulator

Tech Notes: TN2339 (Building from Command Line with Xcode)

Related

For test execution: test-runner agent For test debugging: test-debugger agent For simulator testing: simulator-tester agent For SPM conflicts: spm-conflict-resolver agent

Invocation Examples

Prompts that should launch this agent:

Explicit command: Users can also invoke this agent directly with axiom-fix-build

Scope

Automatically diagnoses and fixes Xcode build failures using environment-first diagnostics - saves 30+ minutes by checking zombie processes, Derived Data, SPM cache, and simulator state before code investigation.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Axiom Fix Build AI skill do?

Use when the user mentions Xcode build failures, build errors, or environment issues.

Why use Axiom Fix Build on TypingMind?

Because you install it once and use it with any model. Axiom Fix Build is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Axiom Fix Build in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/CharlesWiltgen/Axiom/tree/main/axiom-codex/skills/axiom-fix-build. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Axiom Fix Build?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Axiom Fix Build?

As many as you like. As long as a model supports skills, you can use Axiom Fix Build with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Axiom Fix Build AI skill free?

Yes. It is published on GitHub by CharlesWiltgen under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇