# Launching sessions **Status:** Implemented ยท **Code:** `Scripts/launch.js` Prepares the command that starts or resumes a Claude Code session and puts it on the clipboard. ## Why the clipboard **Nova exposes no terminal API to extensions.** Verified three ways: no terminal type in `@types/nova-editor-node`, nothing in the API reference, and in the Nova 14 binary `newTerminal:` is an Objective-C menu selector with no JS bridge. An extension cannot open a terminal tab, cannot target an existing one, and cannot type into either. The options were an external terminal app (a separate window, outside Nova) or the clipboard. The clipboard keeps everything in Nova at the cost of one paste. If Panic ever ships a terminal API, `copyCommand()` is the only function that changes. ## The command ``` cd && claude [--resume ] [--remote-control] [configured flags] ``` - `cd` is included so a terminal opened anywhere lands in the project. - The executable is spelled `claude` when it resolves to a standard install location (which interactive shells have on `PATH`) and as an absolute path otherwise โ€” a version-manager shim or a configured path is not guaranteed to be on the shell's `PATH`. - Configured flags come from settings: `--model`, `--effort`, `--permission-mode`, plus `claudenova.extraArgs`. A launched session therefore matches what the sidebar says it will be. - Everything is escaped with `shellQuote()` โ€” paths with spaces are common enough to matter. ## Remote Control `--remote-control` is offered as a separate action per session. It is the CLI's own flag for driving a session from elsewhere; because the extension launches an ordinary CLI session, nothing extra is needed to support it. ## Gotchas - The notification is a courtesy โ€” the clipboard write is the actual outcome, so a failed notification is logged and ignored. - Do not name a specific Nova menu path in user-facing copy; the terminal's location in the menus has not been verified from here.