diff --git a/src/cli.ts b/src/cli.ts index 6879d4b..6946c54 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -22,8 +22,9 @@ program .command("new") .argument("", "branch name") .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) => { + .action(async (branch: string, prompt: string | undefined, opts: { print?: string }) => { const root = await git.repoRoot() const worktreeAbs = join(homedir(), '.sandlot', basename(root), branch) @@ -56,7 +57,7 @@ program created_at: new Date().toISOString(), }) - await vm.claude(worktreeAbs, prompt) + await vm.claude(worktreeAbs, { prompt, print: opts.print }) }) // ── sandlot list ────────────────────────────────────────────────────── diff --git a/src/vm.ts b/src/vm.ts index e1ee86a..e409a5d 100644 --- a/src/vm.ts +++ b/src/vm.ts @@ -107,7 +107,7 @@ export async function status(): Promise<"running" | "stopped" | "missing"> { } /** Launch claude in the container at the given workdir. */ -export async function claude(workdir: string, prompt?: string): Promise { +export async function claude(workdir: string, opts?: { prompt?: string; print?: string }): Promise { const cwd = containerPath(workdir) const systemPrompt = [ "You are running inside a sandlot container (Apple Container, ubuntu:24.04).", @@ -117,7 +117,8 @@ export async function claude(workdir: string, prompt?: string): Promise { ].join("\n") const args = ["container", "exec", "-it", "--user", USER, "--workdir", cwd, CONTAINER_NAME, CLAUDE_BIN, "--dangerously-skip-permissions", "--model", "claude-opus-4-6", "--append-system-prompt", systemPrompt] - if (prompt) args.push(prompt) + if (opts?.print) args.push("-p", opts.print) + else if (opts?.prompt) args.push(opts.prompt) const proc = Bun.spawn(args, { stdin: "inherit", stdout: "inherit", stderr: "inherit" }) await proc.exited }