docs blog library
github

Context management

Context management controls what Jazz sends to the model on each request: conversation messages, instructions, tool definitions, and tool results.

Each model has a context window, the amount of text it can receive in one request. As a conversation grows, Jazz makes room by removing older tool output and summarizing older messages. The agent’s saved work state keeps the task’s objective and decisions available.

Managing conversation history

Jazz manages context automatically. By default:

Context usedAction
50%Replace older large tool results with retrieval pointers, keeping recent results intact
70%Warn that the context is filling and ask the agent to save its findings
80%Summarize older history while keeping system instructions, pinned messages, and recent exchanges
95%Trim older messages if the history still exceeds the limit

These percentages use the model’s effective context window, lowered by the agent’s llm.maxContextTokens when configured. The warning and compaction thresholds can be changed in Jazz configuration.

Compaction replaces older exchanges with a summary so the agent can continue the same task. Jazz shows when it happens. It uses an additional model call and can lose detail; llm.summarizerModel selects the model for that call. The agent can also request compaction with summarize_context.

Trimming removes older messages without summarizing them. Jazz uses it when compaction cannot free enough space or the summarizer fails. Tool calls and their results stay paired, and Jazz tells you when history is discarded.

Keeping findings available

Work state records the task’s objective, decisions, open questions, and next step. Todos track progress and verification. Both survive compaction.

Jazz saves large tool outputs separately. When an older output is removed from context, or an output is too long to show whole, the agent can read the saved copy a page at a time with retrieve_tool_result. If saving failed, it must rerun the tool.

Use memory for facts needed across conversations and files or the scratchpad for longer drafts and research material.

Setting run limits

A run defaults to 100 iterations, where each iteration is a model call and any tools it requests. Cost, token, and duration caps are unset until you configure them. Set limits globally, in a workflow, or for one jazz run invocation.

Jazz warns the agent as its budgets fill, giving it time to consolidate findings and finish. Iteration, cost, and token limits are checked between iterations, so an in-flight call can cross them. A duration cap interrupts running work at its deadline.

See Budgets for configuration, enforcement, and spend reporting.

Detecting stalled work

Jazz monitors repeated tool calls. If fewer than 40% of the last ten calls have distinct names and arguments, it asks the agent to change approach. If repetition continues through another full window, Jazz stops the run and reports stalled: true in jazz run --json.

Calls with different arguments count as different work. This detects exact repetition; it may miss an agent repeating the same approach with slightly different arguments.

Continuing beyond a run

Goals continue an objective across successive turns. Remote handoff moves a conversation to your SSH server so it can continue after you close your laptop.

Adjust the context limit

For an agent that reads many large files, set llm.maxContextTokens in its config to compact earlier. For example:

{ "llm": { "maxContextTokens": 64000 } }

Choose a limit no larger than the model’s supported window. Earlier compaction reduces the history sent per request, but may require the agent to retrieve or reread more details. See Agent configuration for the full file format.

machine-readable: /docs/concepts/context-management.md · /llms.txt · /llms-full.txt