···260260- Most providers use `llm.endpoint`, `llm.api_key`, and `llm.model`.
261261- Azure uses `llm.azure.deployment`.
262262- Bedrock uses `llm.bedrock.*`.
263263+- `llm.cache_ttl` controls cache intent across providers. Supported values are `off`, `short`, `long`, and Go duration strings such as `5m`, `1h`, and `24h`. The runtime maps this to each provider's supported cache buckets.
263264- `llm.tools_emulation_mode` controls tool-call emulation for models without native tool calling.
264265- `llm.profiles` defines named profile overrides.
265266- `llm.routes` routes semantic purposes such as `main_loop`, `addressing`, `heartbeat`, `plan_create`, and `memory_draft`.
+7
integration/runtime.go
···146146 if err != nil {
147147 return nil, err
148148 }
149149+ systemPromptCacheControl, err := llmutil.SystemPromptCacheControl(mainRoute.Values.CacheTTL)
150150+ if err != nil {
151151+ return nil, err
152152+ }
149153 model := strings.TrimSpace(mainRoute.ClientConfig.Model)
150154 var requestInspector *llminspect.RequestInspector
151155 var promptInspector *llminspect.PromptInspector
···261265 ACPSpawnEnabled: snap.Registry.ToolsACPSpawnEnabled && rt.isBuiltinToolSelected(toolsutil.BuiltinACPSpawn),
262266 }),
263267 agent.WithACPAgents(snap.ACPAgents),
268268+ }
269269+ if systemPromptCacheControl != nil {
270270+ opts = append(opts, agent.WithSystemPromptCacheControl(systemPromptCacheControl))
264271 }
265272 if g := rt.buildGuard(snap.Guard, logger); g != nil {
266273 opts = append(opts, agent.WithGuard(g))