droid CLI from Factory. Curl-installer from app.factory.ai.
Install
baseCLIPostCreate. Linux requires xdg-utils (also installed by Crewship’s apt step).
Auth
Get the key from app.factory.ai/settings/api-keys. Free tier exists.
droid login (browser OAuth) is NOT yet wired in Crewship — API key only.
Models
Bare provider model IDs (no namespace prefix). Droid multiplexes across providers:Command shape
exec— non-interactive subcommand--auto low(read-only,MINIMALprofile) |medium(file edits, default forCODING) |high(FULLprofile)-o stream-json— JSONL events--missionis NOT used — fails in headless containers per Factory issue #794
MCP
Configured at/output/<slug>/.factory/mcp.json:
type: stdio | http discriminator on every server (Crewship’s writer always emits it — stdio when command is set, http when url is set).
Crewship auto-injects two sidecar-hosted servers into
.factory/mcp.json (injectMemoryMCP + injectRoutinesMCP): crewship-memory (http://127.0.0.1:9119/mcp/memory/<slug>) and crewship-routines (.../mcp/routines), both type: http. A user-declared server of the same name wins.Memory
Canonical memory set includingAGENTS.md (Droid’s primary discovery) and .factory/AGENTS.md (Droid alternate path). Droid exec has no --system-prompt flag and AGENTS.md only loads on the second invocation, so turn-1 parity is achieved by prepending the preamble inline with [SYSTEM]/[USER] delimiters; turn-2+ relies on the file.
Output stream
JSONL per docs.factory.ai/cli/droid-exec/overview. Note camelCase / snake_case inconsistency — Crewship’s parser accepts both:Troubleshooting
droid: not found — installer needs xdg-utils on Linux. Check apt list --installed | grep xdg-utils.
Failed to start factoryd — happens when running droid exec --mission headless (issue #794). Crewship’s adapter never passes --mission so this should not occur.
Empty tool_result — pre-fix parser used output field; Droid emits value. Verify orchestrator on current schema (parser_droid_test.go).