Reference · Harness Engineering

Conversation Loop Cheat Sheet

The compressed version of Lesson 02

One-turn algorithm

messages.append(user)
if cached_system_prompt is None:
    build_or_restore_system_prompt()

while budget_remaining:
    api_messages = copy(messages)
    inject_system_prompt(api_messages)
    inject_ephemeral_context_into_current_user(api_messages)
    sanitize_role_order_and_tool_json(api_messages)

    assistant = call_model(api_messages, tools)

    if assistant.tool_calls:
        validate_names_and_json(assistant.tool_calls)
        messages.append(assistant_with_tool_calls)
        for call in assistant.tool_calls:
            result = dispatch_tool(call.name, call.args)
            messages.append(tool_result(call.id, result))
        maybe_compress_context()
        continue

    if assistant.content:
        messages.append(assistant_final)
        persist_session(messages)
        return assistant.content

    recover_empty_response()

Core invariants

Source map

ConcernHermes file
Loop, tool dispatch, recoveryagent/conversation_loop.py
API error classificationagent/error_classifier.py
Jittered retry delayagent/retry_utils.py
Context compressionagent/context_compressor.py
Prompt cache controlagent/prompt_caching.py
Tool routermodel_tools.py