feat: expose --name CLI flag as session name at startup (#226)

Adds session_name to ClaudeStartOptions and passes --name to Claude Code
on initial session start, keeping tab names in sync with Claude Code.
This commit is contained in:
2026-03-20 09:49:34 -07:00
committed by Naomi Carrigan
parent feb500ba2b
commit 3c892b95cf
9 changed files with 69 additions and 0 deletions
+56
View File
@@ -287,6 +287,13 @@ impl WslBridge {
}
}
// Pass session name to Claude Code if specified
if let Some(ref name) = options.session_name {
if !name.is_empty() {
cmd.args(["--name", name]);
}
}
// Add worktree flag if requested
if options.use_worktree {
cmd.arg("--worktree");
@@ -466,6 +473,14 @@ impl WslBridge {
}
}
// Pass session name to Claude Code if specified
if let Some(ref name) = options.session_name {
if !name.is_empty() {
let escaped = name.replace('\'', "'\\''");
claude_cmd.push_str(&format!(" --name '{}'", escaped));
}
}
// Add worktree flag if requested
if options.use_worktree {
claude_cmd.push_str(" --worktree");
@@ -3577,4 +3592,45 @@ mod tests {
"Session stopped due to an unknown API error"
);
}
/// Build the --name argument string without executing a command (for testing)
#[cfg(test)]
fn build_session_name_arg(name: &str) -> Option<(String, String)> {
if name.is_empty() {
return None;
}
Some(("--name".to_string(), name.to_string()))
}
#[test]
fn test_e2e_session_name_passed_when_set() {
let name = "Sakura";
let result = build_session_name_arg(name);
assert!(result.is_some());
let (flag, value) = result.unwrap();
assert_eq!(flag, "--name");
assert_eq!(value, "Sakura");
}
#[test]
fn test_e2e_session_name_not_passed_when_none() {
let options = ClaudeStartOptions {
session_name: None,
..Default::default()
};
// When session_name is None, no --name arg should be produced
let has_name = options.session_name.as_deref().map(|n| !n.is_empty()).unwrap_or(false);
assert!(!has_name);
}
#[test]
fn test_e2e_session_name_not_passed_when_empty() {
let options = ClaudeStartOptions {
session_name: Some(String::new()),
..Default::default()
};
// When session_name is Some(""), no --name arg should be produced
let has_name = options.session_name.as_deref().map(|n| !n.is_empty()).unwrap_or(false);
assert!(!has_name);
}
}