Droid Exec (Headless CLI)
Droid Exec is Factory’s headless execution mode designed for automation workflows. Unlike the interactive CLI,droid exec
runs as a one-shot command that completes a task and exits, making it ideal for CI/CD pipelines, shell scripts, and batch processing.
Summary and goals
Droid Exec is a one-shot task runner designed to:- Produce readable logs, and structured artifacts when requested
- Enforce opt-in for mutations/command execution (secure-by-default)
- Fail fast on permission violations with clear errors
- Support simple composition for batch and parallel work
Non-Interactive
Single run execution that writes to stdout/stderr for CI/CD integration
Secure by Default
Read-only by default with explicit opt-in for mutations via autonomy levels
Composable
Designed for shell scripting, parallel execution, and pipeline integration
Clean Output
Structured output formats and artifacts for automated processing
Execution model
- Non-interactive single run that writes to stdout/stderr.
- Default is spec-mode: the agent is only allowed to execute read-only operations.
- Add
--auto
to enable edits and commands; risk tiers gate what can run.
- gpt-5-codex (default)
- gpt-5-2025-08-07
- claude-sonnet-4-20250514
- claude-opus-4-1-20250805
Install and authenticate
- Install the
droid
CLI for your environment:
- Generate your Factory API key from the Factory Settings Page:
- macOS/Linux:
export FACTORY_API_KEY=fk-...
- Windows (PowerShell):
$env:FACTORY_API_KEY="fk-..."
- Windows (CMD):
set FACTORY_API_KEY=fk-...
- macOS/Linux:
Quickstart
- Direct prompt:
droid exec "analyze code quality"
droid exec "fix the bug in src/main.js" --auto low
- From file:
droid exec -f prompt.md
- Pipe:
echo "summarize repo structure" | droid exec
- Session continuation:
droid exec --session-id <session-id> "continue with next steps"
Autonomy Levels
Droid exec uses a tiered autonomy system to control what operations the agent can perform. By default, it runs in read-only mode, requiring explicit flags to enable modifications.DEFAULT (no flags) - Read-only Mode
The safest mode for reviewing planned changes without execution:- ✅ Reading files or logs: cat, less, head, tail, systemctl status
- ✅ Display commands: echo, pwd
- ✅ Information gathering: whoami, date, uname, ps, top
- ✅ Git read operations: git status, git log, git diff
- ✅ Directory listing: ls, find (without -delete or -exec)
- ❌ No modifications to files or system
- Use case: Safe for reviewing what changes would be made
--auto low
- Low-risk Operations
Enables basic file operations while blocking system changes:
- ✅ File creation/editing in project directories
- ❌ No system modifications or package installations
- Use case: Documentation updates, code formatting, adding comments
--auto medium
- Development Operations
Operations that may have significant side effects, but these side effects are typically harmless and straightforward to recover from.
Adds common development tasks to low-risk operations:
- Installing packages from trusted sources: npm install, pip install (without sudo)
- Network requests to trusted endpoints: curl, wget to known APIs
- Git operations that modify local repositories: git commit, git checkout, git pull (but not git push)
- Building code with tools like make, npm run build, mvn compile
- ❌ No git push, sudo commands, or production changes
- Use case: Local development, testing, dependency management
--auto high
- Production Operations
Commands that may have security implications such as data transfers between untrusted sources or execution of unknown code, or major side effects such as irreversible data loss or modifications of production systems/deployments.
- Running arbitrary/untrusted code: curl | bash, eval, executing downloaded scripts
- Exposing ports or modifying firewall rules that could allow external access
- Git push operations that modify remote repositories: git push, git push —force
- Irreversible actions to production deployments, database migrations, or other sensitive operations
- Commands that access or modify sensitive information like passwords or keys
- ❌ Still blocks: sudo rm -rf /, system-wide changes
- Use case: CI/CD pipelines, automated deployments
--skip-permissions-unsafe
- Bypass All Checks
DANGEROUS: This mode allows ALL operations without confirmation. Only use in completely isolated environments like Docker containers or throwaway VMs.
- ⚠️ Allows ALL operations without confirmation
- ⚠️ Can execute irreversible operations
- Cannot be combined with —auto flags
- Use case: Isolated environments
Fail-fast Behavior
If a requested action exceeds the current autonomy level, droid exec will:- Stop immediately with a clear error message
- Return a non-zero exit code
- Not perform any partial changes
Output formats and artifacts
Droid exec supports three output formats for different use cases:text (default)
Human-readable output for direct consumption or logs:json
Structured JSON output for parsing in scripts and automation:- Parse the result in a script
- Check success/failure programmatically
- Extract session IDs for continuation
- Process results in a pipeline
debug
Streaming messages showing the agent’s execution in real-time:- Monitoring agent behavior
- Troubleshooting execution issues
- Understanding tool usage patterns
- Real-time progress tracking
Working directory
- Use
--cwd
to scope execution:
Models and reasoning effort
- Choose a model with
-m
and adjust reasoning with-r
:
Batch and parallel patterns
Shell loops (bounded concurrency):Unique usage examples
License header enforcer:Exit behavior
- 0: success
- Non-zero: failure (permission violation, tool error, unmet objective). Treat non-zero as failed in CI.
Best practices
- Favor
--auto low
; keep mutations minimal and commit/push in scripted steps. - Avoid
--skip-permissions-unsafe
unless fully sandboxed. - Ask the agent to emit artifacts your pipeline can verify.
- Use
--cwd
to constrain scope in monorepos.
For advanced automation patterns and real-world examples, see the Automation Cookbook.