Instructions and Settings¶
Instructions define agent behavior; settings define adapter/model mechanics. Both are lexical and apply to following calls.
Single-Line Instructions¶
> system: Answer with evidence from available tools.
Use a single line for one stable rule. It is rendered when active state is materialized.
Multiline Instructions¶
[audience] = maintainers
> system:
Act as a release engineer for <audience>.
Inspect evidence before reaching a conclusion.
Report uncertainty explicitly.
Continuation lines are newline-joined. Multiline system bodies are read-only
templates: literal text, <name> substitutions, and inline Python
substitutions are allowed. Output fields and procedure calls are not.
> system:
Current mode: <`args.mode`>.
An instruction cannot declare [output] or call <helper()>; compute that
value before the directive and substitute the resulting variable. Use <``>
when the instruction itself must mention a literal triple-backtick fence.
Settings Blocks¶
> settings:
temperature: 0.2
max_tokens: 1024
parallel_tool_calls: false
Plain values parse as booleans, null/none, integers, floats, Python literals
when valid, or otherwise strings.
Use backticks for explicit Python objects:
> settings:
stop_sequences: `["END", "DONE"]`
extra_body: `{"mode": "json"}`
parallel_tool_calls: `False`
Backticks are necessary for computed values and remove ambiguity about list, dict, or object identity.
Merge and Filtering¶
Settings merge by key. A later value replaces the same earlier key while unmentioned keys remain:
> settings:
temperature: 0.2
timeout: 30
@patient_call() -> str:
> settings:
timeout: 120
>> Complete the task and return [answer: str].
= <answer>
The inner call retains temperature: 0.2 and uses timeout: 120.
Kedi validates setting names against its known public setting inventory, then
filters the merged mapping at the adapter boundary. Pydantic receives supported
ModelSettings; DSPy receives supported dspy.LM kwargs; LangChain receives
its chat-model fields; harnesses receive their own process/runtime settings.
Common Framework Settings¶
Common fields include temperature, max_tokens, timeout, top_p,
parallel_tool_calls, tool_choice, retry controls, stop sequences, and
provider extension bodies. Exact support still depends on the active adapter
and model provider.
Do not copy a provider-specific setting into every profile. Keep it in the profile that owns that backend.
Harness Settings¶
ACP accepts cwd, env, and timeout. Codex accepts fields including cwd,
sandbox, approval_policy, config, model_provider, service_tier, and
timeout. Claude accepts fields including cwd, env, tools,
allowed_tools, disallowed_tools, permission_mode, max_turns, and
max_budget_usd.
> agent:
acp: npx @zed-industries/codex-acp
> settings:
cwd: /workspace/project
env: `{"LOG_LEVEL": "INFO"}`
timeout: 120
cwd is passed to ACP, Codex, and Claude where supported. Relative child-agent
working directories are constrained by their parent safety boundary.
Claude appends > system: content to its Claude Code preset, preserving
built-in file behavior. Non-interactive Claude defaults to
permission_mode: acceptEdits; set tool and permission fields explicitly to
narrow it. Codex defaults to workspace-write unless settings narrow or replace
its sandbox.
Unknown and Inapplicable Settings¶
Unknown setting names are parser/LSP errors. A known union-level key can still be irrelevant to a selected backend and is filtered rather than passed blindly. Adapter docs list the exact mapping.
Prefer a minimal settings block. Every additional provider knob is part of the profile's operational contract and should have a tested reason.
Conversation history and compaction are intentionally not model settings. Use
> history: enabled for stateful calls or the expanded history policy described
in Caching and Conversation History.