{
  "id": 18439780,
  "title": "17 things your agent harness should have!",
  "url": "https://urgent.news/2026/11/06/17-things-your-agent-harness-should-have",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-11-06T04:38:30.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/vikram_ray/17-things-your-agent-harness-should-have-26oj"
  },
  "original_language": "en",
  "account": "1. Execution flow: The harness follows a tool loop where the model calls a tool, receives results, and repeats until the model provides an answer. All other features branch off this core loop.\n\n2. Turn summarization: Earlier turns are summarized to allow long-running tasks to continue without excessive repetition.\n\n3. Subagents: The harness can delegate a focused task to a fresh agent with its own set of tools, receiving a single answer back.\n\n4. Skills: Instructions are only loaded when the task requires them, in order to reduce unnecessary tool usage.\n\n5. Model retries: In case of provider errors, the harness backs off and retries the request, defaulting to 6 attempts.\n\n6. Hooks: Custom checks can be run before or after tool calls, on each prompt, and on stop. Hooks can block the call if they exit with code 2.\n\n7. Error messages: The harness provides error messages that name the next step and explain why, instead of just a generic error.\n\n8. Read before edit: The harness refuses to edit a file it has not read, or one that has changed since it was last read, as the edit requires reading the file first.\n\n9. Repeated-call detection: If the same tool is called with the same arguments multiple times, the harness reminds the user at specified intervals and eventually halts the run.\n\n10. Step budget: Once the step budget is spent, the harness sets toolChoice to 'none', appends a wrap-up message, and refuses any further tool calls.\n\n11. End check: The harness ensures the run ends with a proper answer, rather than crashing.\n\n12. Done check: The harness does not trust the \"Done\" flag; instead, it verifies the run's completion independently.\n\n13. Prompt testing: After a file edit, Hermes sends the model back to run its tests to ensure the edit did not break the system.\n\n14. Judge: Hermes is instructed not to assume the assistant's claim that the goal is met is evidence enough.\n\n15. Tool removal: Instead of blocking tools outright, the harness removes them when they are not needed, reducing the attack surface.\n\n16. Command parsing: OpenCode checks each shell command and its target folder for permission issues before running them.\n\n17. Silent argument repair: Hermes automatically corrects silent arguments, such as converting '42' to '42', before the tool runs, to avoid errors.",
  "summary": "Do this first: go down the list and tick what your harness already does. Each unticked item is a failure your agent will hit. The list comes from reading the source of OpenHands SDK , OpenCode , Hermes Agent , DeepSeek harness and Strands harness . Items 1–6 are the basics everyone builds. Items 7–17 are what separates these harnesses from a model in a loop. The rule behind all of them: the…",
  "key_points": [
    "Execution flow: Model calls tools, receives results, repeats until answer",
    "Turn summarization: Earlier turns summarized to avoid excessive repetition",
    "Subagents: Focused tasks delegated to fresh agents with own tools"
  ],
  "editors_take": "Comprehensive harness features prioritize error prevention and resource management to transform fragile model loops into stable, autonomous systems capable of handling complex, long-running technical tasks.",
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}