The governing result: shorter is better
The measured result that governs everything here: cutting a 30B-class agent’s prompt by more than half improved success rate, latency, and cost. Restating a model’s default competence wastes tokens and dilutes the task-specific signal. The test for every line: if deleting it would not change what a 30B-class model does, delete it. A small model does not fail by ignoring your prompt. It fails by weighting all of it equally — so a paragraph of context costs the same attention as the one hard rule buried inside it. The fix is structural, not rhetorical.Rewrite rules
- Short imperative sentences. One idea each. “Run the check. Quote the output.” — not “it would be advisable to validate the result before proceeding.”
- One action per line. A numbered checklist where each line is a single tool-sized step. A small model executes checklists reliably; it plans multi-step strategies unreliably.
- No implicit reasoning leaps. If step 3 depends on a decision, make the decision a step: “2. If the file exists, go to step 4. If not, go to step 3.” Never assume the model infers the branch.
- Hard-coded STOP conditions. Numbers, not judgment: “at most 30 turns”, “never retry a failing tool more than twice”, “three probes with no new evidence -> stop”. A small model cannot be trusted to notice it is looping — the prompt must count for it. Use the T1 hard-stops block verbatim.
- Concrete examples over abstractions. Instead of “bound your
queries”, write the bounded query: “run
| tstats count where index=* by indexover the last hour”. One worked example outperforms three sentences of principle. - Verification the model cannot skip. Encode the check in the
deliverable’s format, not in an instruction. An evidence table with a
mandatory
evidencecolumn per row forces a tool call per claim — the model cannot produce the artifact without doing the verification. Prompt-level “please verify” gets skipped; format-level contracts do not. - Bounded choices only. Every unfilled
<placeholder>and every “use your judgment” is an unbound choice the small model will resolve arbitrarily. Fill placeholders with concrete values; if a choice must stay open, enumerate the options. - Declare failure vocabulary. Give the model the exact words for
partial results:
BLOCKED,NOT-CHECKED (budget),UNAVAILABLEwith the exact error. Without named outcomes, a small model papers over gaps instead of declaring them. - Identity and tools in the variant, behavior in the base. Keep the shared base short and behavioral; per-surface identity, tool lists, and environment go in a small appended variant. They change independently.
- Repetition is a decoding failure, not a reasoning failure. Tell the model: output that degrades into repetition means stop generating and flag it. “Thinking harder” through a repetition loop burns the context window and traps the run.