Splitting a big task for a cheap model: the 24,000-byte lesson
A cheap model does well on one small, well-defined job and badly on a big pile. We cap a task at 24,000 bytes and refuse larger ones before any model is called. Split by unit, one file or one country per task, and check the size before you start.
π― For A developer who hands volume work, such as audits, extraction or translation, to a low-cost model
- Why a size limit before the call saves money and time
- How to split a corpus into independent tasks
- What a real oversized task cost us
π¦ Volume work and cheap models
Many tasks are a large amount of the same small work: check every page, extract fields from every file, review every country. A low-cost model is a good fit for each small unit. The failure comes from handing it the whole pile in one request. It loses track, truncates, or is refused by the provider after you have paid for the input.
π« The limit and the incident
Our terminal agent accepts a task of 1 to 24,000 bytes and refuses anything else before a model is called. On 21 October 2026 a packet of about 125 KB was submitted to five lines in parallel for a review. All five came back with exit code 1 and the message that the task must be between 1 and 24,000 bytes. No model was called, so no money was spent, and the review did not happen. The cost was the time of an unattended run.
The limit is a guard, and it did its job. The mistake was upstream: nobody checked the size when the packet was built.
βοΈ How to split
Split along units that do not depend on each other: one file, one country, one customer, one page. Each task then holds its own input, its own instruction and its own acceptance check. The checker can run on each result alone.
A few rules help.
- Size check at build time. The packet builder refuses to write a packet over the limit. Do not leave it to the worker.
- One unit, one result file. Name results after the unit so that a failed task can be rerun on its own.
- Shared context goes in a short header. A common instruction of a few hundred bytes is fine. Copying a whole policy into each task is not.
- A merge step by script. Combine the results with a deterministic script and check completeness: every unit has a result, none twice.
π A small, real example
For the topic selection on this wiki we sent three models one packet that held a list of reference sections, our own article titles and the output format. It was 17,880 bytes, under the limit. Two paid runs cost $0.0020 and $0.0028. The same job as one large document would have been refused or truncated.
π οΈ Practice: build a splitter
- Define the unit: the smallest piece of input that produces a result on its own.
- Write the instruction once, with the output format and the acceptance check.
- Write a builder that creates one packet per unit and refuses any packet above your limit, with a message that names the unit.
- Run the builder on the full input. Count packets, the largest size and the total size.
- Run five packets first. Check them with the script, not by eye.
- Run the rest, then merge with a script that reports missing and duplicate units.
β Check yourself
- Feed the builder a unit that is too large. It stops and names the unit.
- The merge report shows zero missing and zero duplicate units.
- A single failed unit can be rerun without touching the others.
- You can state the cost per unit from your ledger.
π§ When this does NOT work
- Units that depend on each other. A document that refers to a page in another packet cannot be judged alone. Add a short summary of the neighbour, within the limit.
- A unit that is itself too big. A single file above the limit needs a second split, by section, with care at the borders.
- Cross-unit questions. "Which of the 40 countries is best?" is not a unit task. Do it afterwards in a second pass over the short results.
- Overhead. For a dozen items, splitting costs more than it saves. Do the job in one request.
- Quality across units. Different tasks may give different styles. Fix the format and examples in the header.
π Evidence
| What we measured | The size limit in the terminal agent code; the packet size and cost of one real run |
| When | 3 November 2026, 22:06 UTC |
| Artifact | The task size check in our terminal agent code; the packet file of the topic selection, 17,880 bytes; ledger rows 10134 and 10135 |
| Limit | The 125 KB incident comes from our team notes of 21 October 2026. We have no saved copy of that packet |
β‘οΈ Next
Learn how to hand work over with acceptance criteria in Spec-driven development with existing task packets, and how to count what it costs in Cost per accepted result.
Sources
- Spec-driven development with existing task packets: task packets.
- Cost per accepted result: counting cost.
- Splitting work across agents, and when not to: swarm work.
- Context windows and tokens: what fits in a request.
π Article connections
Open the full knowledge graph βPublished article links. Select a node to open its article at the heading.
Article links Β· keyboard / text view
Same topic
- A vector base is a map, not a source: what we learned from retrieval
- When you cannot tell what a model call cost: freeze, then reconcile
- Skills, MCP tools and rules: three ways to give an agent capabilities
- Eight shell and git mistakes our agents made, and the rule for each
- Several agents, one repository: ownership rules from real incidents
- Keep provider keys out of the agent: one gateway, one token per task
Next steps
Related reading
A vector base is a map, not a source: what we learned from retrieval
A vector base finds passages that are close in meaning to your question. It does not know which are true or current. Treat every hit as a pointer: open the file it names, check the hash, and take numbers from the artifact, never from the retrieved paragraph.
AI agents and MCP explainedWhen you cannot tell what a model call cost: freeze, then reconcile
Sometimes a model call times out and you do not know whether the provider charged you. Never record that as zero. Mark it uncertain, stop new paid calls, and let a named person reconcile it with the provider's statement. Refusals before generation are the exception.
AI agents and MCP explainedSkills, MCP tools and rules: three ways to give an agent capabilities
Agents get abilities in different ways. A rule constrains what they do, a skill tells them how to do a job, and an MCP tool lets them call a function. Each has its own risk, so declare all three in a register and test that nothing exists unlisted.
AI agents and MCP explainedEight shell and git mistakes our agents made, and the rule for each
Agents write shell commands fast and confidently, and some of the failures repeat. Here are eight real mistakes from October 2026, what each one broke, and the one-line rule we wrote after it. Copy the rules into your own agent instructions.
π¬ Comments