Agent configuration
An agent is the durable identity Jazz runs on every surface. Its JSON selects the primary model, persona, tools, memory, and optional specialist companions. Run budgets and output belong to the application, workflow, or individual run, not the agent.
Agent files live under $JAZZ_HOME/agents/, normally ~/.jazz/agents/. The easiest starting point
is jazz agent create; edit the generated file for fields the wizard does not expose.
Start with an agent
jazz agent create
jazz agent show reviewer
jazz agent edit reviewer
Replace reviewer with the name you give the agent. Alternatively, skip the wizard and save this as
~/.jazz/agents/reviewer.json, using a provider you configured and a model it offers:
{
"id": "reviewer",
"name": "Reviewer",
"config": {
"persona": "coder",
"llm": {
"provider": "openai",
"model": "gpt-5.4-mini"
}
}
}
jazz config validate
jazz agent chat reviewer
Extended example
{
"id": "incident-briefing",
"name": "incident-briefing",
"description": "Correlates incident evidence and produces an executive visual briefing.",
"config": {
"persona": "coder",
"llm": {
"provider": "openai",
"model": "gpt-5.4-mini",
"summarizerModel": "openai/gpt-5.4-mini",
"reasoning": "medium",
"temperature": 0.2,
"maxContextTokens": 64000
},
"deniedTools": ["execute_command"],
"tools": ["publish_briefing"],
"customTools": [
{
"name": "publish_briefing",
"description": "Publish the approved incident briefing to the team's webhook.",
"parameters": {
"type": "object",
"properties": {
"title": { "type": "string" },
"summary": { "type": "string" }
},
"required": ["title", "summary"]
},
"handler": {
"type": "command",
"command": [
"curl",
"--fail-with-body",
"--request",
"POST",
"--header",
"Content-Type: application/json",
"--data-binary",
"@-",
"https://briefings.example.com/hooks/incidents"
],
"timeoutMs": 30000
}
}
],
"companions": {
"analyze:image": "provider/vision-model",
"analyze:audio": "provider/audio-model",
"generate:image": "provider/image-generation-model"
}
}
}
Replace provider, model, and endpoint placeholders. Keep credentials out of agent files; use Jazz’s provider configuration, the system keyring, or narrowly allowlisted environment variables.
Models and context
personanames a built-in or installed persona. It defaults todefaultwhen Jazz creates an agent.llmgroups every model setting below.llm.providerandllm.modelselect the primary reasoning and tool-use model.llm.summarizerModelis aprovider/modelused for context compaction and command risk classification. If it is missing or invalid, Jazz uses the primary model.llm.reasoningselects an effort:disable,minimal,low,medium,high,xhigh, ormax. Jazz maps that one user-facing value to the selected provider/model control surface before serializing a request. A model runs atxhighormaxonly when Jazz knows it accepts them: ChatGPT models report their own levels, OpenAI’s GPT-6 models have built-in profiles, and OpenRouter takesxhigh(maxis sent asxhigh). Any other model runs athigh, with a warning. Add anllm.capabilityOverridesentry to raise it.llm.temperatureaccepts0through2. Jazz omits it when unset; models that reject custom temperature ignore it.llm.numCtxsets Ollama’snum_ctxto a positive token count.llm.maxContextTokensplaces a positive per-agent ceiling on the effective context window across providers. Jazz warns and compacts against that ceiling.companionsbinds specialist models independently foranalyzeandgenerateacrossimage,audio, andvideo. See Model companions.
llm.apiKeys can override provider keys inside an agent file, but plaintext credentials make the
file difficult to share safely. Prefer jazz config set <provider> (it prompts for the key), environment variables, or the keyring.
Tool access
tools adds named tools, MCP servers, or custom tools to the built-in bundle permitted by the
persona. It is not an allowlist. Omitting execute_command from tools does not remove shell
access. When tools is omitted, Jazz also inherits the selectable Browser Use and Peers
categories. An explicit list (including []) grants selectable tools only by name; the
built-in bundle still applies. A persona’s explicit category profile takes precedence over
these defaults. Peers offers ask_peer only when a peer with a URL is configured.
Use deniedTools for a hard per-agent restriction. Jazz applies it after built-in, persona, MCP,
peer, and custom capabilities are assembled, so an earlier grant cannot add the tool back. Use
exact tool names from /tools in a chat or the tool inventory.
webSearchProvider selects the configured search backend. envAllowlist may exempt at most 32
uppercase environment-variable names from command secret scrubbing. Treat each exemption as a
credential grant to every command the agent can run.
Custom tools
customTools exposes a narrow function to the model without writing a Jazz plugin. A definition is
registered only when its name also appears in tools.
- Names are 2–64 lowercase letters, digits, or underscores, start with a letter, and cannot start
with
mcp_or collide with another tool or alias. descriptionis 1–1024 characters and should say when to call the tool.parametersis a JSON Schema object withtype: "object".- A
recordhandler returns fixed text and is read-only. - A
commandhandler spawns the argv directly, never through a shell, and writes validated arguments as JSON to stdin. It runs in the current working directory, uses Jazz’s scrubbed environment, and is always high-risk: every call asks first, and runs unasked only under thehigh-riskpolicy or when the tool is in--auto-approve-tools.timeoutMsmay be 1–300000.
For authenticated SaaS actions, prefer an MCP server whose schema, authentication, and errors are explicit. A command-backed webhook is useful when the HTTP endpoint itself is the stable interface.
Memory
memoryScopes controls which long-term memory namespaces the agent can read and write. The default
Memory is shared by every agent. A scope is a topic — personal by default, or a project or
role scope when the context calls for one — and every agent reads and writes every scope, so a
lesson learned with one agent is available to all of them. See
Conversations, working state, and memory.
The memory tools (view_memory, manage_memory) are part of every agent’s built-in bundle, like
the scratchpad, so they cannot be unticked in jazz agent create. To keep an agent from writing
memory, deny manage_memory with deniedTools, or run it with jazz run --ephemeral.
Run jazz agent show <name> to inspect the resolved agent and /tools inside chat to see the tools
available to that run.
On the jazz home screen, type /agents, select an agent, and press Enter to
inspect its configuration. The detail screen shows provider, model, reasoning, persona, input and
output prices per million tokens, the effective host URL for a self-hosted model, model settings,
tool access, companions, and timestamps. Use Up/Down to scroll and Escape to return to the list.
Prices are shown as unknown when the model catalog has no rate; local models running on your own
server show $0 for provider inference. API keys and custom tool commands remain hidden.