A Swift command-line tool to parse and format xcodebuild/SPM output for coding agents, optimized for token efficiency.
xcsift transforms verbose Xcode build output into concise, structured formats that coding agents and LLMs can efficiently parse and act upon. Unlike xcbeautify and xcpretty which focus on human-readable output, xcsift prioritizes information density and machine readability.
- Multiple output formats — JSON (default), TOON (30-60% fewer tokens), GitHub Actions
- Structured error reporting — errors, warnings, linker errors, test failures with file/line locations
- Automatic code coverage — converts
.profraw(SPM) and.xcresult(xcodebuild) to JSON - Build info — per-target phases, timing, dependencies, and slowest targets
- Test analysis — slow test detection, flaky test detection, duration tracking
- GitHub Actions integration — auto-detected workflow annotations with inline PR comments
- Configuration files —
.xcsift.tomlfor project or user-wide defaults - Quiet/Werror/exit-on-failure modes — for CI pipelines
- xcbeautify/Tuist input — parse pre-formatted output with
--xcbeautify - Streaming large-log parsing — consumes stdin incrementally with bounded line buffering
- MCP proxy —
xcsift mcpwraps an Xcode MCP server so agents get structured results
See the full documentation for details.
brew install xcsiftgit clone https://github.com/ldomaradzki/xcsift.git
cd xcsift
swift build -c release
cp .build/release/xcsift /usr/local/bin/Also available via mise and Mint.
Integrate with coding assistants via built-in installers:
| Assistant | Install | Uninstall |
|---|---|---|
| Claude Code | xcsift install-claude-code |
xcsift uninstall-claude-code |
| Codex | xcsift install-codex |
xcsift uninstall-codex |
| Cursor | xcsift install-cursor |
xcsift uninstall-cursor |
See Plugin Installation for options and verification steps.
xcsift mcp sits between a coding agent and an Xcode MCP server, forwarding the protocol untouched
and sifting only the tool results that carry build output:
agent ⇄ xcsift mcp ⇄ xcrun mcpbridge ⇄ Xcode
By default it wraps Xcode's own MCP server (Xcode 26+), reached through xcrun mcpbridge:
xcsift mcp --print-config # Print an MCP client configuration snippet
xcsift mcp --install # Register the proxy with Claude Code
xcsift mcp --uninstall # Remove that registration again
xcsift mcp # Same as: xcsift mcp -- xcrun mcpbridge
xcsift mcp -- <any other stdio Xcode MCP server>{
"mcpServers": {
"xcode": {
"command": "xcsift",
"args": ["mcp", "--", "xcrun", "mcpbridge"]
}
}
}Setup for a coding agent, in three steps:
- Enable Xcode's MCP server — Xcode ▸ Settings ▸ Intelligence, or
sudo xcrun mcp-server enable(xcrun mcp-server statusreports the current state). - Register the proxy instead of the bridge:
xcsift mcp --install(the same thing asclaude mcp add --transport stdio xcode -- xcsift mcp, with the flags you pass recorded in it). - Approve the agent
xcsiftwhen Xcode asks, on the first project open or build.
xcsift mcp --uninstall takes the registration back out, whichever way it was made.
Xcode approves an agent by binary and signature, so install xcsift (Homebrew) rather than pointing the config at a build directory, and expect one fresh approval after an upgrade.
Raw xcodebuild transcripts are replaced by the structured result. A server that already summarises
the build and writes the full log to disk keeps its summary, and the complete diagnostics parsed from
that log are appended. The proxy also adds an xcsift_parse_build_log tool so an agent can pull the
full diagnostics behind any build log.
See MCP Proxy for the full reference.
Pipe any xcodebuild or SPM command through xcsift. Always use 2>&1 to capture stderr.
# Build
xcodebuild build 2>&1 | xcsift
swift build 2>&1 | xcsift
# Test with coverage
swift test --enable-code-coverage 2>&1 | xcsift --coverage
xcodebuild test -enableCodeCoverage YES 2>&1 | xcsift -c --coverage-details
# TOON format (30-60% fewer tokens)
xcodebuild build 2>&1 | xcsift -f toon -w
# Warnings as errors + exit on failure (CI)
xcodebuild build 2>&1 | xcsift --Werror --exit-on-failure
# Configuration file
xcsift --init # Generate .xcsift.toml templateSee Usage for the full CLI reference, Output Formats for JSON/TOON/GitHub Actions details, and Configuration for config file options.
| Feature | xcsift | xcbeautify | xcpretty |
|---|---|---|---|
| Target audience | Coding agents / LLMs / CI | Humans / CI | Humans |
| Output format | JSON + TOON + GH Actions | Colorized text + GH Actions | Formatted text |
| Token efficiency | Very High (TOON) | Medium | Low |
| LLM optimization | Yes (TOON format) | No | No |
| Machine readable | Yes | No | Limited |
| GitHub Actions | Yes (auto-detected) | Yes | No |
| Error extraction | Structured | Visual | Visual |
| Linker errors | Yes (structured) | No | No |
| Code coverage | Auto-converts | No | No |
| Build time | Fast | Fast | Slower |
- macOS 15+: Full support including code coverage
- Linux (Swift 6.0+): Build/test parsing supported; coverage features unavailable
swift build # Build
swift test # Run tests
swift format --recursive --in-place . # Format (required before committing)Large-log release benchmarks are available in Benchmarks/:
Benchmarks/large-log.sh 10 # Pull-request smoke benchmark
Benchmarks/large-log.sh 10 100 500 # Full size progressionDocumentation source is in Sources/xcsift.docc/. Preview locally:
swift package --disable-sandbox preview-documentation --target xcsiftHosted docs: ldomaradzki.github.io/xcsift
MIT License
