pub struct AprSettings {
pub model: Option<String>,
pub max_turns: Option<u32>,
pub extra_system_prompt: Option<String>,
pub project: Option<PathBuf>,
pub permission_mode: Option<String>,
pub allowed_hosts: Option<Vec<String>>,
}Expand description
Claude-Code-parity settings layer (apr code).
Every field is Option<_> so we can tell “explicitly set” apart from
“use the next layer’s default” during merge. After merge, unset fields
fall back to super::manifest::ModelConfig::default() /
build_default_manifest values.
Fields§
§model: Option<String>Path to local model file OR HuggingFace repo (e.g. qwen3:1.7b-q4k).
Mirrors Claude Code’s model: "claude-3-5-sonnet-20241022".
max_turns: Option<u32>Maximum REPL/agent turns before stopping. Claude Code uses no equivalent (it caps via budget); this is an apr-code-specific knob.
extra_system_prompt: Option<String>Extra text appended to the agent’s system prompt. Mirrors
Claude Code’s customApiKeyResponses / extraSystemPrompt.
project: Option<PathBuf>Default working-directory project root override. Resolved relative to the settings file’s directory; absolute paths pass through.
permission_mode: Option<String>Permission mode for the agent’s tool dispatch (PMAT-CODE-CONFIG-LADDER-FIELDS-001).
Mirrors Claude Code’s permissionMode field. Accepts the camelCase /
kebab-case / snake_case aliases that
crate::agent::permission::PermissionMode::parse honors:
"default" | "plan" | "acceptEdits" | "bypassPermissions" (and
case-insensitive equivalents). Unknown strings produce a settings-load
error from apply_settings_to_manifest (Poka-Yoke).
Stored as Option<String> rather than Option<PermissionMode> so the
settings type stays JSON-trivial and so unknown values surface a
clear apr code error message at apply time rather than a generic
serde error at parse time.
allowed_hosts: Option<Vec<String>>Hostnames the agent’s NetworkTool / BrowserTool may reach
(PMAT-CODE-CONFIG-LADDER-FIELDS-001). Mirrors AgentManifest.allowed_hosts.
Sovereign privacy tier always blocks network tools regardless of this
list (Poka-Yoke; tier wins over config). Empty list = no network
tools registered.
Implementations§
Source§impl AprSettings
impl AprSettings
Sourcepub fn merge(&mut self, other: &AprSettings)
pub fn merge(&mut self, other: &AprSettings)
Field-by-field merge: other wins over self for any Some(_) field.
Used to fold project-local over user-global, then CLI over that.
Sourcepub fn from_json_str(buf: &str) -> Result<Self>
pub fn from_json_str(buf: &str) -> Result<Self>
Parse JSON text into a settings layer. Empty/whitespace-only text is treated as “no settings here” (returns Default), matching the missing-file convention. Malformed JSON returns a hard error so the operator notices instead of silently running on partial config.
Sourcepub fn read_from_path(path: &Path) -> Result<Self>
pub fn read_from_path(path: &Path) -> Result<Self>
Read a settings file. Missing files return Default (non-error).
Malformed JSON or non-readable files are hard errors.
Sourcepub fn user_global_path() -> Option<PathBuf>
pub fn user_global_path() -> Option<PathBuf>
User-global settings path: $APR_CONFIG/settings.json if set,
else ~/.config/apr/settings.json (XDG-style).
Sourcepub fn project_local_path(project_root: &Path) -> PathBuf
pub fn project_local_path(project_root: &Path) -> PathBuf
Project-local settings path: <project_root>/.apr/settings.json.
Sourcepub fn load_layered(project_root: &Path) -> Result<Self>
pub fn load_layered(project_root: &Path) -> Result<Self>
Load and merge the user-global → project-local layers. CLI overrides happen at the call site (after this returns).
Field precedence: project-local > user-global > defaults.
Trait Implementations§
Source§impl Clone for AprSettings
impl Clone for AprSettings
Source§fn clone(&self) -> AprSettings
fn clone(&self) -> AprSettings
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AprSettings
impl Debug for AprSettings
Source§impl Default for AprSettings
impl Default for AprSettings
Source§fn default() -> AprSettings
fn default() -> AprSettings
Source§impl<'de> Deserialize<'de> for AprSettingswhere
AprSettings: Default,
impl<'de> Deserialize<'de> for AprSettingswhere
AprSettings: Default,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for AprSettings
impl PartialEq for AprSettings
Source§fn eq(&self, other: &AprSettings) -> bool
fn eq(&self, other: &AprSettings) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for AprSettings
impl Serialize for AprSettings
impl StructuralPartialEq for AprSettings
Auto Trait Implementations§
impl Freeze for AprSettings
impl RefUnwindSafe for AprSettings
impl Send for AprSettings
impl Sync for AprSettings
impl Unpin for AprSettings
impl UnsafeUnpin for AprSettings
impl UnwindSafe for AprSettings
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.