Claude for Nova
Claude Code inside Nova: a sidebar for the session, a live transcript in an editor tab, and every tool call routed through an approval you can review before it touches your files.
The extension drives the claude executable already installed on your machine,
speaking its streaming JSON protocol over stdio. Your existing sign-in, settings,
CLAUDE.md, skills, plugins, and MCP servers all apply — this is the same agent
you get in a terminal, wearing Nova's interface.
Requirements
- Nova 10 or later (built against Nova 14; not exercised on older versions)
- Claude Code installed and on disk
(
~/.local/bin/claude, Homebrew, or a path you set in settings)
Getting started
- Open the Claude sidebar (the starburst in the sidebar rail).
- If the Account row says Not signed in, click it and choose how to sign in.
- Press ⌘⇧L, or use the ✳︎ button in the sidebar header, and ask for something.
The first prompt starts a session in your project directory. The transcript opens as a tab and updates as Claude works.
Signing in
Authentication is handled by Claude Code itself — the extension never sees your credentials. Sign In offers three routes:
| Route | What happens |
|---|---|
| Claude Subscription | Runs claude auth login, opens the authorization page in your browser, and relays the code back |
| Anthropic Console | The same flow with --console, for API-billed accounts |
| Open a Terminal | Runs claude auth login in a terminal window — use this for SSO or if the in-app flow stalls |
You can also store an API key with Set API Key…. It goes in the macOS
keychain and is passed to Claude Code as ANTHROPIC_API_KEY, taking precedence
over a signed-in account. Clear Stored API Key removes it.
Approving tool use
In the default Manual permission mode, Claude asks before each tool that needs permission. Every request appears in Needs Approval in the sidebar and as a panel, so dismissing the panel never strands the session — the request waits until you answer it from the sidebar's context menu.
Reviewing a file change
When Claude wants to edit or create a file, the file as it would be after the change opens in a tab. Review it there, and settle it with ordinary editor gestures:
| Gesture | Result |
|---|---|
| ⌘S save | Apply the change |
| ⌘W close | Reject it |
The tab is editable, and that is the point: fix the variable name Claude got wrong, delete the half you don't want, then save — your version is what gets written, not Claude's. A notification carries the same choices, and they appear as rows under the request in the sidebar; Show Diff gives the unified diff if you'd rather see just what moved.
Prefer the old quick yes/no? Set Reviewing file changes to Ask in a panel.
Allow for Session adds an allow rule for that tool for the rest of the session, so Claude stops asking about it.
Two tools are their own interaction surface rather than a yes/no gate, and get purpose-built handling — see Plan mode and Questions below.
Plan mode
Plan with Claude… (⌘⇧P) switches the session into plan mode and prompts you. Claude researches and proposes but changes nothing. When it has a plan, the plan opens in a tab and you choose:
| Choice | What happens |
|---|---|
| Approve — auto-accept edits | Plan accepted; the session moves to Accept Edits so Claude can work uninterrupted |
| Approve — ask before each edit | Plan accepted; you keep approving each change |
| Keep Planning… | Send it back for revision; Claude revises and re-presents |
| Show Plan Again | Re-open the plan |
When a plan is ready you get a notification, not a modal sheet — the plan tab stays scrollable and editable while you decide. The same choices also appear as rows under the request in Needs Approval, so you can dismiss the notification and take your time.
Giving feedback on a plan
The plan is an ordinary editable document, and there are three ways to respond — they combine freely:
- Edit the plan in its tab. Rewrite, delete, or add steps directly. When you approve, your version is sent back and becomes the plan of record — Claude works from what you wrote, not its own draft. Unsaved edits count.
- Highlight a passage, then choose Keep Planning…. The selected lines are quoted back to Claude along with your note, so "this part is wrong" has an unambiguous referent.
- Write Feedback… opens a scratch tab you can type into freely — as many paragraphs, lists, and code snippets as you want. When you're done, choose Send Feedback in the sidebar. Nova gives extensions no multi-line field of their own, so the editor itself is the text box.
If you edit the plan and send feedback, your rewrite goes along with it, marked authoritative.
Nothing is lost by ignoring the notification: the plan waits in Needs Approval
with its choices until you act. Plans are saved by Claude Code under
~/.claude/plans/, so you can reopen one later.
You can also stay in plan mode for a whole session by setting the permission mode to Plan.
Questions
When Claude needs a decision from you it asks a real question, and the options appear in a Nova choice palette. Pick one — or Other… to type your own answer. Multi-select questions let you toggle several options and then choose Done. Your answer goes straight back to Claude as the tool's result.
Permission modes
Change the mode any time from the Permissions row:
| Mode | Behaviour |
|---|---|
| Manual | Ask before each tool (default) |
| Accept Edits | File edits apply automatically; other tools still ask |
| Plan | Research only — Claude proposes, changes nothing |
| Auto | Claude decides what is worth asking about |
| Bypass | Approve everything. Only in a directory you trust |
The sidebar
- Session — status, account, model, permission mode, and running cost. Double-click Model or Permissions to change them mid-session.
- Needs Approval — anything waiting on you, with its choices as rows underneath: Allow / Allow for Session / Review / Deny for an ordinary tool, or the approve-and-feedback options for a plan. Double-click a row to take it.
- Activity — every tool call, newest first. Double-click one that touched a file to open it.
- Changed Files — files Claude actually modified. Double-click to open, or use Show Change… to see the last edit as a diff.
Commands
| Command | Shortcut |
|---|---|
| Ask Claude… | ⌘⇧L |
| Plan with Claude… | ⌘⇧P |
| Ask Claude About Selection… (Editor menu) | ⌃⌘L |
| Add File to Claude's Context (Editor menu) | |
| Add Files to Context… | |
| Show Transcript | |
| New Session / Resume Session… | |
| Stop Claude / End Session | |
| Set Model… / Set Permission Mode… |
Add Files to Context… opens a file chooser — pick any files or folders in the project and ask about them together, without opening them first.
Ask Claude About Selection… sends the file, the line range, and the selected text with your question. Plain Ask Claude does the same automatically when there is a selection — turn that off with the Include the editor selection setting.
Resume Session… lists this project's recent Claude Code sessions, labelled with their opening prompt, including ones started in a terminal.
Settings
Model, effort, permission mode, and the claude executable path are set in
Extension Settings; Model and Permission Mode can also be overridden per project
in Project Settings. Other options:
- Reviewing file changes — an editable proposal tab, or a panel
- Open the transcript automatically when a session starts
- Stream text as it is generated — token-by-token output
- Show thinking in the transcript
- Include the editor selection with prompts
- Additional CLI arguments — appended to the
claudecommand line
How it works
Nova extension ──stdio (stream-json)──> claude --print
│ │
│ <── assistant / tool / result ───────┤
├──── control_response (allow/deny) ────┤
└──── control_request (interrupt) ─────>┘
One claude process per window, launched with
--input-format stream-json --output-format stream-json. Session messages and
control traffic share the pipe: the CLI raises a can_use_tool control request
for each permission prompt, and the extension answers it with your decision.
Questions are answered by returning the choices as updatedInput; approving a
plan returns a setMode permission update, which is what moves the session out
of plan mode. Interrupts and mid-session model or permission changes travel the
same channel.
There is no bundled copy of Claude Code, no Node sidecar, and no network access of its own — the extension only talks to the executable you already trust.
Known limits
- Nova has no scriptable diff viewer, so proposed changes are shown as a unified diff in a scratch tab rather than in a side-by-side editor.
- Extension sidebars can only contain tree rows — there is no API for a multi-line field like the one in Nova's own Source Control sidebar. Feedback is written in a scratch tab instead, and decisions are tree rows.
- Ordinary tool approvals still use a panel, since they are a quick yes/no.
- Questions and plan approvals are handled natively. Any other tool that needs its own interactive prompt is declined with an explanation — run those from a terminal.
- The transcript is a Markdown document, so it renders text, not widgets.
- Sessions run in the workspace directory. Open a folder in Nova before asking.
Development
nova extension validate . # check the bundle
nova extension activate . # load it into Nova for development
Extension logs (with nova.inDevMode() output) appear in Nova's Extension
Console. Keyboard shortcuts can be rebound in Preferences → Key Bindings if any
of the defaults collide with yours.