Skip to main content

SynapsConfig

Struct SynapsConfig 

Source
pub struct SynapsConfig {
Show 69 fields pub model: Option<String>, pub thinking_budget: Option<u32>, pub thinking_level: Option<ReasoningLevel>, pub context_window: Option<u64>, pub context_management: ContextManagementConfig, pub startup: StartupConfig, pub daemon: DaemonConfig, pub subagent: SubagentLimits, pub compaction_model: Option<String>, pub compaction_mode: CompactionMode, pub compaction_exclude: Vec<ContentClass>, pub max_tool_output: usize, pub tool_output_spill_bytes: usize, pub tool_output_spill_head_bytes: usize, pub tool_output_spill_tail_bytes: usize, pub read_dedupe: bool, pub bash_timeout: u64, pub bash_max_timeout: u64, pub subagent_timeout: u64, pub subagent_cold_resume_compact_tokens: u64, pub subagent_context_management: ContextManagementMode, pub subagent_rollover_tokens: u64, pub subagent_transform_hooks: bool, pub subagent_thinking: ReasoningLevel, pub api_retries: u32, pub refusal_retries: u32, pub telemetry: String, pub telemetry_log_generations: u32, pub cache_diagnostics: bool, pub cache_ttl: CacheTtlSetting, pub cache_keepwarm: CacheKeepWarm, pub cache_keepwarm_auto_max_hours: u32, pub cache_keepwarm_headless: bool, pub cache_keepwarm_tools: bool, pub request_compression: RequestCompressionMode, pub request_compression_level: u32, pub client_input: ClientInput, pub thinking_display: ThinkingDisplay, pub max_fps: u32, pub scroll_lines: Option<u16>, pub theme: Option<String>, pub theme_transition: ThemeTransitionMode, pub tui_background_opaque: bool, pub tui_streaming_glow: bool, pub tui_smooth_streaming: bool, pub process_scopes: bool, pub tool_scope_slice: Option<String>, pub daemon_scope_slice: Option<String>, pub agent_name: Option<String>, pub identity: Option<String>, pub disabled_plugins: Vec<String>, pub favorite_models: Vec<String>, pub disabled_skills: Vec<String>, pub progressive_tool_disclosure: bool, pub tools_activation_confirm: ActivationConfirm, pub tools_deferred_loading: bool, pub session_persistence: SessionPersistence, pub disabled_tools: Vec<String>, pub shell: ShellConfig, pub server: ServerConfig, pub bridge: BridgeConfig, pub auth: AuthConfig, pub events: EventsConfig, pub provider_keys: BTreeMap<String, String>, pub keybinds: HashMap<String, String>, pub turn_budgets: TurnBudgetsConfig, pub memory: MemoryConfig, pub memory_backend: MemoryBackendConfig, pub warnings: Vec<String>,
}
Expand description

Parsed configuration from the config file.

Fields§

§model: Option<String>§thinking_budget: Option<u32>§thinking_level: Option<ReasoningLevel>

Named reasoning level, parsed from the same thinking = … key. When Some, this is the authoritative level. When None, fall back to thinking_budget for legacy numeric-only values.

§context_window: Option<u64>§context_management: ContextManagementConfig§startup: StartupConfig

First-turn / cold-start behaviour (startup.*).

§daemon: DaemonConfig

Daemon lifetime knobs (daemon.*); env vars still win.

§subagent: SubagentLimits

Subagent fan-out limits (subagent.*).

§compaction_model: Option<String>§compaction_mode: CompactionMode

Where compaction summarization runs (spec §9.4): remote provider or local-only (zero network construction).

§compaction_exclude: Vec<ContentClass>

Content classes excluded from remote compaction disclosure.

§max_tool_output: usize§tool_output_spill_bytes: usize

Tool output virtualisation: a text tool result bigger than this many bytes is stored whole in a spill file (<base>/spill/<session>/) and model history gets a head + tail preview with a pointer to it. 0 turns it off: results go into history exactly as before (cut at max_tool_output). (tool_output_spill_bytes, default DEFAULT_TOOL_OUTPUT_SPILL_BYTES.)

§tool_output_spill_head_bytes: usize

Bytes from the start of a virtualised result kept in history (tool_output_spill_head_bytes, default DEFAULT_TOOL_OUTPUT_SPILL_HEAD_BYTES).

§tool_output_spill_tail_bytes: usize

Bytes from the end of a virtualised result kept in history (tool_output_spill_tail_bytes, default DEFAULT_TOOL_OUTPUT_SPILL_TAIL_BYTES).

§read_dedupe: bool

Read dedupe: a read whose result would be byte-identical to an earlier read of the same file/range still in history is replaced by a short stub naming that earlier call, and write/edit results say there is no need to re-read to verify. Off = legacy tool-result bytes. (read_dedupe, default on).

§bash_timeout: u64§bash_max_timeout: u64§subagent_timeout: u64§subagent_cold_resume_compact_tokens: u64

subagent_resume of a worker whose prompt cache has expired replays a compact context instead of its whole transcript once the history is at least this many (estimated) tokens: a cold replay rewrites every token at the cache-write price. 0 disables compaction (subagent_cold_resume_compact_tokens, default DEFAULT_SUBAGENT_COLD_RESUME_COMPACT_TOKENS).

§subagent_context_management: ContextManagementMode

Automatic context rollover for subagent workers (subagent_context_management = auto | off, default auto). Workers evict older rounds into their archive directory instead of growing until the window is full. Independent of the foreground context_management.mode.

§subagent_rollover_tokens: u64

Estimated footprint (tokens) at which a worker’s context rolls over (subagent_rollover_tokens, at least MIN_SUBAGENT_ROLLOVER_TOKENS, default DEFAULT_SUBAGENT_ROLLOVER_TOKENS). The window’s own rollover band wins when it is lower; the successor target is derived like the foreground’s (min(100k, 2/3 of pressure)).

§subagent_transform_hooks: bool

Subagent workers run the host’s after_tool_call output transforms (extensions holding tools.transform_output: compression, redaction) on their own tool results, as the foreground does. Off = worker tool results reach history untransformed, as before. (subagent_transform_hooks, default on).

§subagent_thinking: ReasoningLevel

Worker default, independent of foreground thinking; per-call overrides win.

§api_retries: u32§refusal_retries: u32§telemetry: String§telemetry_log_generations: u32

Rotated generations kept for api-log.jsonl and request-trace.jsonl (telemetry_log_generations, 1– MAX_TELEMETRY_LOG_GENERATIONS, default 1: just <log>.1).

§cache_diagnostics: bool§cache_ttl: CacheTtlSetting

Prompt-cache TTL strategy: “auto” (default: 1h on Anthropic OAuth / subscription credentials, 5m on an API key) | “5m” | “1h” | “hybrid”.

§cache_keepwarm: CacheKeepWarm

Prompt-cache keep-warm while idle (cache_keepwarm): off (default) | auto | <N>h. See CacheKeepWarm and docs/specs/cache-ttl-spec.md §7.

§cache_keepwarm_auto_max_hours: u32

Longest an auto keep-warm idle period may run, in hours (cache_keepwarm_auto_max_hours, 1–48, default DEFAULT_CACHE_KEEPWARM_AUTO_MAX_HOURS). An explicit <N>h mode is its own window and ignores this.

§cache_keepwarm_headless: bool

Let keep-warm run for daemon sessions driven only by non-interactive clients (cache_keepwarm_headless, default false): synaps chat, rpc/server clients over the daemon, piped synaps attach. Off, only a session a TUI or interactive attach has seen qualifies.

§cache_keepwarm_tools: bool

Keep the prompt cache warm while a tool round runs (cache_keepwarm_tools, default true): once a round’s tools have run for the TTL minus a safety margin (4.5 min on 5m, 55 min on 1h), re-send that round’s request with a minimal output cap so the next request reads the prefix instead of rewriting it. Foreground and workers alike; independent of the idle cache_keepwarm.

§request_compression: RequestCompressionMode

gzip for Anthropic request bodies (request_compression): auto (default) | on | off. See RequestCompressionMode.

§request_compression_level: u32

gzip level 1–9 (request_compression_level, default DEFAULT_REQUEST_COMPRESSION_LEVEL). Higher shrinks more and costs more CPU: raise it on a slow uplink.

§client_input: ClientInput

Who may drive a daemon session with several clients attached (client_input): shared (default) | exclusive. The daemon reads it at start, for every session it creates or restores. See ClientInput.

§thinking_display: ThinkingDisplay

thinking_display: summarized (default) | omitted. The foreground session’s thinking.display; see ThinkingDisplay.

§max_fps: u32

Max TUI redraw rate in frames/sec — caps streaming redraws (e.g. 60, 144, 240). User input always redraws immediately regardless. Default 60. Range 1–1000. The frame budget is 1000 / max_fps ms.

§scroll_lines: Option<u16>

Lines to scroll per mouse-wheel event. Different terminal emulators emit 1–9+ scroll events per physical notch; set this to compensate. Default: 3. Range 1–20.

§theme: Option<String>§theme_transition: ThemeTransitionMode

Animated theme transitions: "on" (350 ms cross-fade, default), "off" (instant snap), or integer milliseconds (0–2000).

§tui_background_opaque: bool

Whether the TUI paints its own opaque background. false preserves the terminal background.

§tui_streaming_glow: bool

Whether the prompt shows a glow sweeping across it while a turn streams. Default off.

§tui_smooth_streaming: bool

Whether the TUI reveals a burst of streamed text (a provider flushing a backlog at once) over a few frames instead of in one. Default on.

§process_scopes: bool

Run the daemon, bash tool commands and PTY shells each in their own systemd scope (Linux, when a systemd user manager is reachable), so the out-of-memory killer can stop one runaway command instead of the whole terminal scope with the daemon in it. process_scopes = off disables; env SYNAPS_PROCESS_SCOPES overrides. Default on.

§tool_scope_slice: Option<String>

The systemd slice for every scope Synaps makes for a tool command (bash tool commands, PTY shells): tool_scope_slice = synaps_tools.slice passes --slice=synaps_tools.slice to systemd-run, so an operator can cap tool work on that slice apart from the desktop’s app.slice. Unset or empty (the default) leaves systemd’s placement as it is. Read with the config each spawn loads. Synaps sets no limits itself. Use a top-level (dash-free) name: CPUWeight only weighs a slice against its siblings (docs/daemon-mode.md).

§daemon_scope_slice: Option<String>

The systemd slice for the daemon’s own scope, applied when the daemon starts (a reload re-execs in the same scope). Separate from Self::tool_scope_slice, so tools can be capped without the daemon. Unset or empty: no --slice.

§agent_name: Option<String>§identity: Option<String>§disabled_plugins: Vec<String>§favorite_models: Vec<String>§disabled_skills: Vec<String>§progressive_tool_disclosure: bool

Opt-in progressive tool disclosure (Task 18). When false, providers receive the existing full tool schema byte-for-byte. When true, each stream starts with the small essential local core plus discovery and authorization gateways; exact activations are added per session.

§tools_activation_confirm: ActivationConfirm

Host confirmation policy for MODEL-INITIATED activate_tools (tools.activation_confirm). Auto (default) authorizes without prompting; Prompt asks the host (y/n confirm dialog); Deny never authorizes (locked-down hosts). server.auto_approve_confirms = true still authorizes regardless of this key.

§tools_deferred_loading: bool

tools.deferred_loading (default on). With progressive disclosure on the native Anthropic transport, every activatable tool is sent from the first request with defer_loading: true and activate_tools answers with tool_reference blocks, so an activation never changes the cached prompt prefix. off restores the per-activation tools-array change.

§session_persistence: SessionPersistence

Opt-in session persistence strategy (Task 35, spec §9.8). Json (default) is the unchanged legacy full-rewrite path; Journal adds an append-only delta journal with periodic atomic snapshots. See docs/decisions/T35-session-journal-opt-in.md.

§disabled_tools: Vec<String>

Built-in tools to disable by runtime name (e.g. “bash”, “ls”). Removed from the registry at boot so they’re never offered to the model.

§shell: ShellConfig§server: ServerConfig§bridge: BridgeConfig§auth: AuthConfig§events: EventsConfig§provider_keys: BTreeMap<String, String>§keybinds: HashMap<String, String>§turn_budgets: TurnBudgetsConfig

Typed per-role turn budgets (Task 23, spec §8.1).

§memory: MemoryConfig

Continuous-memory settings surface (Task A2, spec §12).

§memory_backend: MemoryBackendConfig

Host-owned backend; selecting it does not enable recall or capture.

§warnings: Vec<String>

Non-fatal problems found while parsing the config file (unknown keys, unparseable values). Surfaced once at startup — never block boot.

Trait Implementations§

Source§

impl Clone for SynapsConfig

Source§

fn clone(&self) -> SynapsConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SynapsConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for SynapsConfig

Source§

fn default() -> SynapsConfig

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more