From 4f4c610a0d9858c21b57aefb605b54034fe537d5 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 29 Oct 2026 00:33:58 +0000 Subject: [PATCH 1/6] Sonny: /config, and a side chat that can fork with every tool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `[sonny] side_chat = "fork"` in ~/.agent/config.toml makes /side a full fork of the agent: its tools, its folder, its approvals. The default, "answer", keeps today's copy that calls no tool. /config (or /settings) lists every key config.toml takes over the composer, with its value or default: ←/→ steps a key with a few values, Enter types a name, ⌫ takes a key back to its default. Each change is written at once, comments and order kept; config::write takes a key's line out (and a table left empty) for its default. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013jkdGFnmxBQ9BRPqGJYwrE --- client/src/config.rs | 93 +++++++++- docs/sonny/config.png | Bin 0 -> 47960 bytes docs/sonny/side-fork.png | Bin 0 -> 50430 bytes sonny/README.md | 31 +++- sonny/src/config.rs | 367 +++++++++++++++++++++++++++++++++++++++ sonny/src/main.rs | 95 ++++++++-- 6 files changed, 558 insertions(+), 28 deletions(-) create mode 100644 docs/sonny/config.png create mode 100644 docs/sonny/side-fork.png create mode 100644 sonny/src/config.rs diff --git a/client/src/config.rs b/client/src/config.rs index 7a1bac6b2..cd7019b7b 100644 --- a/client/src/config.rs +++ b/client/src/config.rs @@ -15,6 +15,7 @@ //! [sonny] //! lead_effort = "medium" # a new lead's effort //! task_effort = "high" # each new task's +//! side_chat = "fork" # "answer", the default, calls no tool //! ``` //! //! Each unset value is the model's own, or, for a task, its lead's. @@ -62,6 +63,17 @@ pub struct Judge { pub struct Sonny { pub lead_effort: Option, pub task_effort: Option, + pub side_chat: SideChat, +} + +/// What the copy `/side` talks to may do: `"answer"`, the default, from +/// what its agent knows, calling no tool; or `"fork"`, anything its agent +/// may, with its tools, in its folder, under its approvals. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] +pub enum SideChat { + #[default] + Answer, + Fork, } pub fn path() -> Option { @@ -127,7 +139,7 @@ fn parse(text: &str) -> Result { .ok_or_else(|| format!("unknown key {name}"))?; let keys: &[&str] = match name.as_str() { "judge" => &["model", "effort"], - "sonny" => &["lead_effort", "task_effort"], + "sonny" => &["lead_effort", "task_effort", "side_chat"], _ => return Err(format!("unknown table [{name}]")), }; for (key, value) in section { @@ -135,6 +147,14 @@ fn parse(text: &str) -> Result { return Err(format!("unknown key {name}.{key}")); } let value = string(&format!("{name}.{key}"), value)?; + if key == "side_chat" { + config.sonny.side_chat = match value.as_str() { + "answer" => SideChat::Answer, + "fork" => SideChat::Fork, + other => return Err(format!("sonny.side_chat is answer or fork, not {other}")), + }; + continue; + } // The daemon judges models and levels when the agents are made. *match (name.as_str(), key.as_str()) { ("judge", "model") => &mut config.judge.model, @@ -161,6 +181,13 @@ fn string(key: &str, value: &toml::Value) -> Result { /// new one goes at the end of its table, or of the top level for a bare /// key. The file is written whole, and only if it still reads. pub fn set(path: &Path, pairs: &[(&str, &str)]) -> Result<(), String> { + let pairs: Vec<(&str, Option<&str>)> = pairs.iter().map(|(k, v)| (*k, Some(*v))).collect(); + write(path, &pairs) +} + +/// As `set`, where a key with no value has its line taken out, so it is +/// its default again; one the file does not name is left so. +pub fn write(path: &Path, pairs: &[(&str, Option<&str>)]) -> Result<(), String> { let unwritable = |e: &dyn std::fmt::Display| format!("config_unwritable: {}: {e}", path.display()); read(path)?; @@ -171,7 +198,6 @@ pub fn set(path: &Path, pairs: &[(&str, &str)]) -> Result<(), String> { let mut lines: Vec = text.lines().map(str::to_owned).collect(); for (key, value) in pairs { let (table, name) = key.split_once('.').unwrap_or(("", key)); - let line = format!("{name} = {}", toml::Value::String((*value).to_owned())); let at = |line: &str| { line.trim_start().strip_prefix('[').map(|h| { h.trim_start_matches('[') @@ -184,10 +210,12 @@ pub fn set(path: &Path, pairs: &[(&str, &str)]) -> Result<(), String> { }; // The lines of `table`: after its header, or the top level's // before the first header, up to the next header. + let header = lines.iter().position(|l| at(l).as_deref() == Some(table)); let begin = match table { "" => 0, - _ => match lines.iter().position(|l| at(l).as_deref() == Some(table)) { + _ => match header { Some(header) => header + 1, + None if value.is_none() => continue, None => { if lines.last().is_some_and(|l| !l.trim().is_empty()) { lines.push(String::new()); @@ -205,6 +233,19 @@ pub fn set(path: &Path, pairs: &[(&str, &str)]) -> Result<(), String> { .split_once('=') .is_some_and(|(k, _)| k.trim().trim_matches('"') == name) }); + let Some(value) = value else { + if let Some(i) = named { + lines.remove(i); + // A table left with nothing in it goes too. + if let Some(header) = header + && lines[begin..end - 1].iter().all(|l| l.trim().is_empty()) + { + lines.drain(header..end - 1); + } + } + continue; + }; + let line = format!("{name} = {}", toml::Value::String((*value).to_owned())); match named { Some(i) => lines[i] = line, None => { @@ -219,8 +260,16 @@ pub fn set(path: &Path, pairs: &[(&str, &str)]) -> Result<(), String> { } } } + while lines.last().is_some_and(|l| l.trim().is_empty()) { + lines.pop(); + } + let before = text; let mut text = lines.join("\n"); text.push('\n'); + // Nothing changed, as a default taken out of a file without it. + if text == before || (before.is_empty() && lines.is_empty()) { + return Ok(()); + } parse(&text).map_err(|reason| format!("config_invalid: {}: {reason}", path.display()))?; if let Some(dir) = path.parent() { std::fs::create_dir_all(dir).map_err(|e| unwritable(&e))?; @@ -252,6 +301,9 @@ mod tests { assert_eq!(config.web_search, WebSearch::Live); let off = parse("web_search = \"disabled\"").unwrap(); assert_eq!(off.web_search, WebSearch::Disabled); + assert_eq!(config.sonny.side_chat, SideChat::Answer); + let fork = parse("[sonny]\nside_chat = \"fork\"").unwrap(); + assert_eq!(fork.sonny.side_chat, SideChat::Fork); for (text, error) in [ ( "web_search = \"cached\"", @@ -264,6 +316,10 @@ mod tests { ("[sonny]\neffort = \"low\"", "unknown key sonny.effort"), ("[judge]\neffort = 3", "judge.effort must be a string"), ("[judge]\nmodel = \"\"", "judge.model must not be empty"), + ( + "[sonny]\nside_chat = \"all\"", + "sonny.side_chat is answer or fork, not all", + ), ] { assert_eq!(parse(text).unwrap_err(), error, "{text}"); } @@ -312,6 +368,37 @@ mod tests { std::fs::remove_dir_all(&dir).unwrap(); } + #[test] + fn a_key_written_with_no_value_is_its_default_again() { + let dir = std::env::temp_dir().join(format!("agent-config-unset-{}", std::process::id())); + let _ = std::fs::remove_dir_all(&dir); + let file = dir.join("config.toml"); + // Nothing to take out leaves no file and no table behind. + write(&file, &[("judge.model", None)]).unwrap(); + assert!(!file.exists()); + std::fs::create_dir_all(&dir).unwrap(); + std::fs::write( + &file, + "# mine\nmodel = \"a/b\"\n\n[judge]\neffort = \"low\"\n\n[sonny]\nlead_effort = \"low\" # cheap\nside_chat = \"fork\"\n", + ) + .unwrap(); + write( + &file, + &[ + ("sonny.lead_effort", None), + ("sonny.task_effort", Some("high")), + ("model", None), + ("judge.effort", None), + ], + ) + .unwrap(); + assert_eq!( + std::fs::read_to_string(&file).unwrap(), + "# mine\n\n[sonny]\nside_chat = \"fork\"\ntask_effort = \"high\"\n" + ); + std::fs::remove_dir_all(&dir).unwrap(); + } + #[test] fn a_missing_file_is_the_defaults() { let dir = std::env::temp_dir().join(format!("agent-config-{}", std::process::id())); diff --git a/docs/sonny/config.png b/docs/sonny/config.png new file mode 100644 index 0000000000000000000000000000000000000000..1eb614d576f329085c6534f036877b4e98590db9 GIT binary patch literal 47960 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