Meet Factory Droid 1.0: A Model-Independent Coding Agent Harness Built on Script Mode
Factory has released Droid 1.0 , the largest update yet to the Factory Droid agent harness. The main change is programmatic tool calling, now on by default. The model writes a program that runs its tools. One model request can now drive hundreds of tool calls. TL;DR Size: Base prompt is 13,055 input tokens, down 37% from 20,887. Only 2 tool definitions ship up front, down from 11. Runs on: macOS and Windows desktop app, a terminal UI, and the Node SDK @factory/droid-sdk . Works with any supported model, including your own API keys. Performance: Highest pass rate of every harness Factory tested, on the same model, at lower cost. Best: 65.2% on Terminal-Bench 4 with Claude Opus 5.5, at $4.73 per passed task (self-reported). Worst: With GPT-6.1 Sol, Droid takes 10% longer per passed task than Codex. What is Droid 1.0? Droid 1.0 is a model-independent coding agent harness from Factory. Factory defines a harness as everything around the model. That means the prompts, the tools, how tool results return, and the loop . Users pick a model or let Factory Router choose a cost-efficient mix. How does programmatic tool calling work? In a standard loop, every tool output lands in the model’s context. With programmatic tool calling (PTC), the model writes a program instead. Droid implements this as a Script tool . The model writes JavaScript that runs in a sandbox. The sandbox has no file, network, or system access of its own. Raw files, search results, and logs stay inside the program. Only printed output returns to the model. Independent calls run concurrently. The idea builds on CodeAct (Wang et al., 2024) . Factory reports these results from its own sessions: Unit test fix: 15 tool calls took 5 model calls instead of 10. The task finished in 41.6 s instead of 56.8 s. Linear cleanup: 151 issues moved and verified in 312 tool calls. The Script used 2 requests and about 61,000 tokens. Factory models direct calls at 36 requests and about 3.1M tokens. CI sweep: 5,384 jobs across 547 runs, in 2 requests. Under 0.1% of tool results reached the model’s context. On Claude Opus 5.5, Script mode cuts Droid’s cost by 15% versus direct tool calling. It is on by default for 10 models, including GPT-6.1 Sol and Kimi K3. Play the race</button> <div class="race"> <div class="lane"><b>Direct tool calls</b><div class="dots" id="lnA"></div><div class="stat"><span>Model calls <strong id="aM">0</strong></span><span>Tool calls <strong id="aT">0</strong></span><span>Time <strong id="aS">0.0 s</strong></span></div></div> <div class="lane"><b>Script tool</b><div class="dots" id="lnB"></div><div class="stat"><span>Model calls <strong id="bM">0</strong></span><span>Tool calls <strong id="bT">0</strong></span><span>Time <strong id="bS">0.0 s</strong></span></div></div> </div> <div class="lg"><span><i style="background:#2f6bff"></i>Model call</span><span><i style="background:#c9c9c9"></i>Tool call</span><span><i style="background:#111"></i>Script</span></div> <p class="note">The Script is JavaScript in a sandbox with no file, network or system access of its own. Raw tool results stay in the program; only printed output returns to the model.</p> </div> <div class="pn" id="p2"> <h3>Terminal-Bench 4 pass rate, same model per harness</h3> <div class="seg"><button class="on" data-m="opus">Claude Opus 5.5</button><button data-m="sol">GPT-6.1 Sol</button></div> <div id="fdxBars"></div> <p class="note" id="fdxCost"></p> <p class="note">Self-reported by Factory. 3 trials per task, run October 23 to 28, 2026. Cursor was not tested on GPT-6.1 Sol.</p> </div> <div class="pn" id="p3"> <h3>Moving 151 Linear issues: 312 tool calls</h3> <p>Each issue was moved to the backlog, then checked so that only its status changed.</p> <button class="btn gh" id="fdxLin"> Compare</button> <div class="cmp" style="margin-top:12px"> <div class="box"><div class="lbl">Direct calls (modeled, 10 per request)</div><div class="big" id="lA">0</div><div class="lbl">model requests</div><div class="big" id="lAt" style="font-size:22px;margin-top:8px">0</div><div class="lbl">input tokens</div><div class="tk"><div id="lAb" style="background:#9aa6bf"></div></div></div> <div class="box"><div class="lbl">One Script</div><div class="big b" id="lB">0</div><div class="lbl">model requests</div><div class="big b" id="lBt" style="font-size:22px;margin-top:8px">0</div><div class="lbl">input tokens</div><div class="tk"><div id="lBb" style="background:#2f6bff"></div></div></div> </div> <p class="note">Direct-call figures are Factory's estimates; the Script figures come from a real session.</p> </div> <div class="pn" id="p4"> <h3>Other changes in Droid 1.0 (tap a card)</h3> <div class="cards"> <div class="cd"><div class="n">−37%</div><div class="t">Base prompt</div><div class="x">First request fell from 20,887 to 13,055 input tokens. Droid now sends 2 tool definitions up front instead of 11.</div></div> <div class="cd"><div class="n">98%</div><div class="t">Cache reads</div><div class="x">A typical production request reads 98% of its input from cache. Newly loaded tools are appended at the end so the cached prefix holds.</div></div> <div class="cd"><div class="n">−15%</div><div class="t">Script mode cost</div><div class="x">Script mode cuts Droid's cost by 15% on Claude Opus 5.5 compared with direct tool calling.</div></div> <div class="cd"><div class="n">16K</div><div class="t">Compaction room</div><div class="x">Compaction summaries can now hold 16,000 tokens, up from 8,000. 3 identical tool calls trigger a nudge; 6 stop the loop.</div></div> <div class="cd"><div class="n">488 ms</div><div class="t">First paint</div><div class="x">Median time to first paint fell from 1,839 ms to 488 ms. Median quit time fell from 648 ms to 30 ms.</div></div> <div class="cd"><div class="n">~20 MB</div><div class="t">Per extra session</div><div class="x">Sessions now share the daemon process, adding about 20 MB each instead of about 350 MB per process.</div></div> </div> </div> <div class="ft"><span>Source: <a href="https://fa