Binary Installation (macOS)
Crow provides pre-built agent binaries for macOS to be able to run agents via the “local” backend.
Installation
Section titled “Installation”export VERSION=4.3.0export ARCH=arm64curl -LO https://codeberg.org/crowci/crow/releases/download/v$VERSION/crow-agent_darwin_$ARCH.tar.gz
# Extract the archivetar -xzf crow-agent_darwin_*.tar.gz
# Move to system pathsudo mv crow-agent /usr/local/bin/sudo chmod +x /usr/local/bin/crow-agent
# Verify installationcrow-agent --versionRunning as a System Service
Section titled “Running as a System Service”macOS (launchd)
Section titled “macOS (launchd)”Running the agent as a system service on macOS uses launchd with a Launch Daemon or Launch Agent.
Create the plist file using your preferred text editor:
sudo nano /Library/LaunchDaemons/crowci.agent.plistPaste the following content (update CROW_SERVER and CROW_AGENT_SECRET with your values):
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>Label</key> <string>crowci.agent</string>
<key>ProgramArguments</key> <array> <string>/usr/local/bin/crow-agent</string> </array>
<key>EnvironmentVariables</key> <dict> <key>CROW_SERVER</key> <string>your-server.com</string> <key>CROW_GRPC_ADDR</key> <string>grpc.your-server.com:443</string> <key>CROW_GRPC_SECURE</key> <string>true</string> <key>CROW_AGENT_SECRET</key> <string>your-secret-token</string> <key>CROW_BACKEND</key> <string>local</string> <key>CROW_BACKEND_LOCAL_SANDBOX_LEVEL</key> <string>standard</string> <key>CROW_AGENT_CONFIG_FILE</key> <string>/usr/local/var/crow-agent/config.yml</string> </dict>
<key>StandardOutPath</key> <string>/usr/local/var/log/crow-agent.log</string>
<key>StandardErrorPath</key> <string>/usr/local/var/log/crow-agent-error.log</string>
<key>RunAtLoad</key> <true/>
<key>KeepAlive</key> <true/>
<key>WorkingDirectory</key> <string>/usr/local/var/crow-agent</string></dict></plist>After saving the file, validate it:
plutil -lint /Library/LaunchDaemons/crowci.agent.plistSet up and start the service:
# Create working directoriessudo mkdir -p /usr/local/var/crow-agent /usr/local/var/log
# Set proper permissions on the plist filesudo chown root:wheel /Library/LaunchDaemons/crowci.agent.plistsudo chmod 644 /Library/LaunchDaemons/crowci.agent.plist
# Load and start the service (bootstrap will start it automatically)sudo launchctl bootstrap system /Library/LaunchDaemons/crowci.agent.plist
# Verify the service is runningsudo launchctl list | grep crowci
# View logstail -f /usr/local/var/log/crow-agent.logtail -f /usr/local/var/log/crow-agent-error.logService Management (macOS)
Section titled “Service Management (macOS)”# Stop the servicesudo launchctl kickstart -k system/crowci.agent
# Restart the servicesudo launchctl kickstart -kp system/crowci.agent
# Unload/remove the servicesudo launchctl bootout system /Library/LaunchDaemons/crowci.agent.plist
# Check service statussudo launchctl print system/crowci.agentmacOS Sandbox Security Levels
Section titled “macOS Sandbox Security Levels”The CROW_BACKEND_LOCAL_SANDBOX_LEVEL environment variable controls process isolation on macOS:
none (default)
Section titled “none (default)”No sandboxing. Workflows run with full system access. Use only in trusted environments.
standard (recommended)
Section titled “standard (recommended)”Balanced security profile suitable for most CI/CD workloads. This profile:
Allowed:
- ✅ Network access (for package downloads, git operations, API calls)
- ✅ Reading system libraries, tools, and executables
- ✅ Full read/write access to workflow directories (
/tmp/crow-local-*) - ✅ Executing binaries from standard paths (
/usr/bin,/usr/local/bin, etc.) - ✅ Process management (fork, signal, IPC)
- ✅ Device file access (
/dev/null,/dev/random, etc.)
Denied:
- ❌ Reading sensitive system files (
/etc/passwd,/etc/sudoers, etc.) - ❌ Reading macOS user database (
/var/db/dslocal/nodes/Default/users/) - ❌ Accessing user directories (Documents, Desktop, Pictures, Downloads)
- ❌ Reading SSH private keys (
~/.ssh/id_*) - ❌ Privilege escalation (sudo is blocked)
- ❌ Writing outside workflow directories
This profile allows typical CI/CD operations (building, testing, deploying) while preventing:
- Credential theft (SSH keys, passwords)
- Privilege escalation
- Access to personal files
- System configuration changes
strict
Section titled “strict”Maximum security with minimal permissions. Denies network access and restricts file operations to workflow directories only. Use for highly sensitive workloads requiring maximum isolation.