From 1aaeb53ead7e544588f02f408e8cd2e79956cb8e Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Thu, 19 Feb 2026 09:56:04 -0800 Subject: [PATCH] Auto-derive branch name from `-p` prompt when branch arg is omitted --- src/cli.ts | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index 67dc353..e6767c5 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -18,23 +18,33 @@ program.name("sandlot").description("Branch-based development with git worktrees // ── sandlot new ────────────────────────────────────────────── +function branchFromPrompt(text: string): string { + return text + .toLowerCase() + .replace(/[^a-z0-9\s-]/g, "") + .trim() + .replace(/\s+/g, "-") + .slice(0, 20) + .replace(/-$/, "") +} + program .command("new") - .argument("", "branch name or prompt (if it contains spaces)") + .argument("[branch]", "branch name or prompt (if it contains spaces)") .argument("[prompt]", "initial prompt for Claude") .option("-p, --print ", "run Claude in non-interactive mode with -p") .description("Create a new session and launch Claude") - .action(async (branch: string, prompt: string | undefined, opts: { print?: string }) => { - // If the "branch" contains spaces, it's actually a prompt — derive the branch name - if (branch.includes(" ")) { + .action(async (branch: string | undefined, prompt: string | undefined, opts: { print?: string }) => { + // No branch given — derive from -p prompt + if (!branch && opts.print) { + branch = branchFromPrompt(opts.print) + } else if (!branch) { + console.error("Branch name or prompt is required.") + process.exit(1) + } else if (branch.includes(" ")) { + // If the "branch" contains spaces, it's actually a prompt — derive the branch name prompt = branch - branch = branch - .toLowerCase() - .replace(/[^a-z0-9\s-]/g, "") - .trim() - .replace(/\s+/g, "-") - .slice(0, 20) - .replace(/-$/, "") + branch = branchFromPrompt(branch) } const root = await git.repoRoot() const worktreeAbs = join(homedir(), '.sandlot', basename(root), branch)