{
  "id": "factory",
  "name": "Factory.ai Droid CLI and desktop",
  "category": "coding-agent",
  "recipe": "factory-json",
  "protocol": "chat-completions",
  "source": "https://docs.factory.ai/model-independence/byok",
  "referenceDate": "2026-09-29",
  "verification": {
    "setup": "prepared",
    "session": "not_run"
  },
  "notes": "Merge customModels into ~/.factory/settings.json. Environment references work there, not in legacy config.json. Select Jesse with /model; custom model indices depend on your existing array. Hosted web and mobile do not load this local config.",
  "contractVersion": "1.0.0",
  "endpoint": "https://jesse.my/api/v1/chat/completions",
  "apiRoot": "https://jesse.my/api",
  "model": "jesse",
  "files": [
    {
      "name": "settings.json",
      "format": "json",
      "content": "{\n  \"customModels\": [\n    {\n      \"model\": \"jesse\",\n      \"displayName\": \"Jesse\",\n      \"baseUrl\": \"https://jesse.my/api/v1\",\n      \"apiKey\": \"${JESSE_API_KEY}\",\n      \"provider\": \"generic-chat-completion-api\",\n      \"maxOutputTokens\": 4096,\n      \"noImageSupport\": true\n    }\n  ]\n}\n"
    },
    {
      "name": "add-mcp.sh",
      "format": "shell",
      "content": "#!/bin/sh\nset -eu\n: \"${JESSE_API_KEY:?Set your Jesse key in the launch environment}\"\ndroid mcp add jesse node '/absolute/path/to/jesse/jesse.mjs' mcp --type stdio\n"
    },
    {
      "name": "README.md",
      "format": "markdown",
      "content": "# Factory.ai Droid CLI and desktop with Jesse\n\nMerge customModels into ~/.factory/settings.json. Environment references work there, not in legacy config.json. Select Jesse with /model; custom model indices depend on your existing array. Hosted web and mobile do not load this local config.\n\nAPI root: https://jesse.my/api\nOpenAI-compatible base URL: https://jesse.my/api/v1\nEndpoint: https://jesse.my/api/v1/chat/completions\nModel: jesse\nKey environment: JESSE_API_KEY\n\nKeep the key in the app's credential store or launch environment. These files are merge snippets; never overwrite existing providers or settings. GUI apps may not inherit shell environment variables.\n\nClient budgets: context 10000, output 4096. These are conservative defaults, not server capacity claims. Keep general vision, embeddings, audio, provider-hosted web tools and automatic retry of billable turns disabled.\n\nFull Jesse API access: shared/client_sdk.mjs supports 31 operations. The MCP bridge exposes the same operation list where the host supports MCP. Preserve the full Jesse receipt. Tool calls remain proposals and are not executed by the bridge.\n\nVerification: setup prepared; current full application session not_run. Run a chat, a streamed reply, a refused credential, a failing tool result and a file task with its actual tests before qualifying a coding-agent release.\n\nUpstream: https://docs.factory.ai/model-independence/byok\n"
    }
  ]
}
