Documentation Index
Fetch the complete documentation index at: https://flowdeck.studio/docs/llms.txt
Use this file to discover all available pages before exploring further.
FlowDeck is designed for automation. Every command supports JSON output for machine parsing and configuration files for reproducible builds, making it ideal for CI/CD pipelines, shell scripts, and AI-powered development tools.
Quick Start
# Save project settings once
flowdeck config set -w MyApp.xcworkspace -s MyApp -S "iPhone 16"
# Run commands without repeating options
flowdeck build --json
flowdeck test --json
flowdeck run
JSON Output Mode
Add --json or -j to any command for machine-readable NDJSON (newline-delimited JSON) output:
flowdeck build --json
flowdeck test --json
flowdeck simulator list --json
Event Types
FlowDeck emits structured events that you can parse line-by-line:
| Event Type | Description | When Emitted |
|---|
status | Progress updates | During operations (building, testing, launching) |
output | Raw process output | Build output, test output, logs |
diagnostic | Compiler diagnostics | Errors on failures; warnings when --show-warnings is enabled |
result | Operation completion | At end of build, test, clean operations |
app_log | Informational messages | Status messages, configuration info |
message | Structured messages | Warnings, errors, info with context |
test_started | Test case started | When a test begins |
test_passed | Test case passed | When a test succeeds |
test_failed | Test case failed | When a test fails (includes failure details) |
test_skipped | Test case skipped | When a test is skipped |
configuration | Build configuration | At start of build/run/test |
configuration events include the resolved Derived Data path so automation can trace build artifacts.
Event Structure
All events follow a standardized structure:
{
"type": "status",
"timestamp": "2025-01-13T10:30:45.123Z",
"operation": "BUILD",
"message": "Building",
"stage": "BUILDING",
"data": {
"progress": 0.5,
"phase": "Compiling"
}
}
Parsing JSON Output
Use jq or similar tools to extract specific information:
# Check if build succeeded
flowdeck build --json | jq -s 'last | select(.type == "result") | .data.success'
# Get all errors
flowdeck build --json | jq 'select(.type == "diagnostic") | select(.data.severity == "error")'
# Get warning diagnostics (opt-in)
flowdeck build --json --show-warnings | jq 'select(.type == "diagnostic") | select(.data.severity == "warning")'
# Warning snapshots are always reconciled into DerivedData
# <DerivedData>/Warnings/*.json
# Count test failures
flowdeck test --json | jq -s '[.[] | select(.type == "test_failed")] | length'
# Get test summary
flowdeck test --json | jq 'select(.type == "result") | .data.summary'
Shell Script Example
#!/bin/bash
set -e
# Build and check result
flowdeck build --json | while IFS= read -r line; do
type=$(echo "$line" | jq -r '.type')
if [ "$type" = "diagnostic" ]; then
severity=$(echo "$line" | jq -r '.data.severity')
message=$(echo "$line" | jq -r '.message')
if [ "$severity" = "error" ]; then
echo "ERROR: $message" >&2
fi
fi
if [ "$type" = "result" ]; then
success=$(echo "$line" | jq -r '.data.success')
if [ "$success" = "true" ]; then
echo "Build succeeded"
else
echo "Build failed" >&2
exit 1
fi
fi
done
Configuration Files
Store build settings in JSON files for reproducible builds:
flowdeck build --config .flowdeck/ci-config.json
flowdeck test --config .flowdeck/ci-config.json --json
These examples use the explicit --config file format for scripted runs. That format is separate from the project settings files at .flowdeck/config.json and .flowdeck/config.local.json.
Config File Structure
{
"workspace": "MyApp.xcworkspace",
"scheme": "MyApp",
"configuration": "Debug",
"platform": "iOS",
"version": "18.0",
"simulatorUdid": "A1B2C3D4-E5F6-7890-ABCD-EF1234567890",
"derivedDataPath": "/tmp/flowdeck-derived-data",
"xcodebuild": {
"args": ["-enableCodeCoverage", "YES"],
"env": {
"CI": "true"
}
},
"appLaunch": {
"args": ["-SkipOnboarding"],
"env": {
"DEBUG_MODE": "1"
}
}
}
Config File Fields
| Field | Type | Required | Description |
|---|
workspace | string | Yes | Path to .xcworkspace or .xcodeproj |
scheme | string | Yes | Scheme name to build |
configuration | string | No | Build configuration (Debug/Release) |
platform | string | No | Target platform: iOS, macOS, watchOS, tvOS, visionOS |
version | string | No | OS version (e.g., 18.0) |
simulatorUdid | string | No | Specific simulator UDID |
deviceUdid | string | No | Physical device UDID |
derivedDataPath | string | No | Custom derived data directory (default: ~/Library/Developer/FlowDeck/DerivedData) |
xcodebuild | object | No | Passthrough settings for xcodebuild |
appLaunch | object | No | Arguments and env vars passed to app at launch |
Init Command
Save project settings to avoid repeating options on every command:
# Save settings
flowdeck config set -w MyApp.xcworkspace -s MyApp -S "iPhone 16"
# Now run commands without options
flowdeck build
flowdeck test
flowdeck run
Settings are saved to ~/.flowdeck/ and automatically loaded by subsequent commands.
Init Options
| Option | Short | Description |
|---|
--workspace | -w | Path to workspace or project |
--scheme | -s | Scheme name |
--simulator | -S | Simulator name or UDID |
--device | -D | Device name or UDID |
--configuration | -C | Build configuration |
Exit Codes
All commands return appropriate exit codes for scripting:
| Code | Description |
|---|
0 | Success |
1 | Failure (build failed, tests failed, etc.) |
64 | Usage error (invalid arguments) |
flowdeck build --json && echo "Build passed" || echo "Build failed"
Environment Variables
| Variable | Description |
|---|
FLOWDECK_LICENSE_KEY | License key for CI/CD (no activation needed) |
DEVELOPER_DIR | Override Xcode installation path |
FLOWDECK_NO_UPDATE_CHECK | Set to 1 to disable update notifications |
Common Automation Patterns
Pattern 1: Config-Driven Builds
# Create config files for different scenarios
flowdeck build --config .flowdeck/debug-config.json
flowdeck build --config .flowdeck/release-config.json
flowdeck test --config .flowdeck/ci-config.json --json
Pattern 2: State-Driven Shortcuts
# Setup once
flowdeck config set -w MyApp.xcworkspace -s MyApp -S "iPhone 16"
# Run repeatedly without options
flowdeck build
flowdeck test
flowdeck run
Pattern 3: JSON Streaming
# Parse events as they stream
flowdeck build --json | while read -r event; do
echo "$event" | jq -r 'select(.type == "status") | .message'
done
Pattern 4: CI/CD Pipeline
# Full CI workflow
flowdeck clean --all
flowdeck build --config .flowdeck/ci-config.json --json
flowdeck test --config .flowdeck/ci-config.json --json
# Check results
if flowdeck test --json | jq -s 'last | .data.success' | grep -q true; then
echo "All tests passed"
else
echo "Tests failed"
exit 1
fi
Pattern 5: Dynamic Simulator Selection
# Find and use a specific simulator
UDID=$(flowdeck simulator list -P iOS --json | \
jq -r '.[] | select(.name | contains("iPhone 16")) | .udid' | head -1)
flowdeck config set -w MyApp.xcworkspace -s MyApp -S "$UDID"
flowdeck build --json
Commands with JSON Support
Most commands support --json output:
| Command | JSON Support | Notes |
|---|
build | Yes | Full event streaming |
run | Yes | Includes app logs |
test | Yes | Test results with details |
clean | Yes | Clean status events |
logs | Yes | Structured log events |
simulator list | Yes | Array of simulators |
simulator boot | Yes | Boot status |
device list | Yes | Array of devices |
project schemes | Yes | Array of schemes |
project configs | Yes | Array of configurations |
apps | Yes | Running app list |
license status | Yes | License details |
AI Agent Integration
FlowDeck’s JSON output makes it ideal for AI-powered development tools like Claude Code, Cursor, and CodeX. The structured output allows AI agents to:
- Parse build errors and suggest fixes
- Monitor test results and identify failing tests
- Automate build-test-fix cycles
- Track simulator and device state
Next Steps