The Mac and Windows app
Nirvaana lives in its app for Mac and Windows. Everything is in the sidebar on the left: your day, what waits for your approval, your promises, your calendar, your worlds and your connections. You can do most things by pressing, not only by asking, and every press can be taken back for five seconds.
Getting it, and signing in
- Download it from nirvaana.ai/download, for Mac or Windows, and open it.
- Press “Email me a code”, or “Continue with” the account you use for work where you see its button. A button finishes in your browser, then brings you back.
- On “One more step”, type your second code: from your authenticator app, or emailed to you. The first time, the app walks you through setting it up.
- The first time you sign in on a computer, the app opens on your own world and says welcome. Press “Talk to Nirvaana” to start, or “Got it” to look around.
Today
Today opens with a greeting and one big button, “Talk to Nirvaana”, which takes you to the chat. Under it:
- “Due soon”: your promises due this week, with “All promises”.
- “Reminders”, where they are on for you: what is coming due, with Dismiss and Snooze.
- “Waiting on you”: how many cards wait for your approval, and “Look at them”.
- “This computer”: what Nirvaana may touch on this computer, and a link to Your lines.
Done, Let go, Snooze, and Undo
In the Mac and Windows app 0.1.8 or later.
You look after your promises and reminders by pressing, the same as by telling Nirvaana. Every press waits five seconds before it counts, so a slip is never a problem.
- The circle beside a promise or a reminder means done. Press it and it fills in.
- ⋯ on a promise you owe opens “Let go” (you are not doing it, and that is fine to say), “Change date” and “Edit” (Enter keeps your words, Escape leaves them as they were). A promise someone owes you has the circle only.
- A reminder has “Dismiss” and “Snooze”: “Later today”, “Tomorrow” (9 AM), “Next week” (Monday, 9 AM) or “Pick a time…”.
- Undo. After each press a note says what happened, with “Undo” and a bar that runs out in five seconds. Press Undo, or ⌘Z (Ctrl+Z on Windows), and it is as it was. Nothing is sent or shared until the bar runs out.
Waiting on you
When Nirvaana thinks something you said belongs in a world you share, it waits here for your approval. Each card says which world, the sentence, the words it came from, and who would see it.
- “Approve” puts it in that world. In the app 0.1.8 or later it waits five seconds first, so you can press Undo.
- “Keep it private” keeps it yours. Nobody is told.
- Under “Before it goes out” are steps one of your connected apps would take for you, such as an event or an issue, shown whole. “Approve” sends it (in 0.1.8 or later, after five seconds, unless you press Undo); “Decline” sends nothing.
Your calendar
“Calendar” (⌘8) has everything of yours with a day: your promises and reminders, the deadlines and goals of the worlds you are in, and your Google Calendar if you connected it. A small dot says which world a thing is from; no dot means it is yours alone.
- Choose “Day”, “Week”, “Month” or “Agenda”; it remembers. T goes to today, and the arrow keys step back and forward.
- Google Calendar's events are shown here, never changed.
These are in the Mac and Windows app 0.1.8 or later:
- Drag one of your own promises to another day to change its date.
- If you see “New event”, a world's owners and builders can put an event on its calendar: press it (or N), or drag down across the hours in Day or Week. Give it a name, a start and an end (or All day), a place, notes, who to invite and its world, then Save. Drag an event to move it, or drag its bottom edge to make it longer or shorter.
- Open an event to answer “Going?” with Yes, Maybe or No. Whoever made it, or the world's owner, can Edit it or “Cancel event”, which takes it off everyone's calendar after five seconds, unless you press Undo.
Each world has a Calendar tab of its own, with what falls on which day there. Your calendar has the rest.
Connections
- Open “Connections”, at the foot of the sidebar. It lists what you have connected and what you can.
- Press “Connect” beside an app. Your browser opens so you can say yes on the app's page; then come back. The list checks again when you do. To add Nirvaana to Claude Code, Codex, Gemini CLI or Claude, use Connect my AI apps instead.
- If one says “Needs reconnecting”, its sign-in ran out. Press “Reconnect” and say yes again.
“Disconnect” asks first, then ends it. What each app lets Nirvaana see and do is on Connecting your apps.
Connect my AI apps
In the Mac and Windows app 0.1.8 or later.
One button in this app adds Nirvaana to the AI apps on this computer. Nothing to type, no address to paste.
One Approve adds Nirvaana to the AI apps on this Mac. Each one then asks you to press Allow.
- In “Connections”, under “Your AI apps”, press “Connect my AI apps”. Nirvaana looks on this computer for Claude Code, Codex and Gemini CLI, and lists each one with where it stands. Claude's own apps (the web, the desktop app, your phone and Cowork) are a row too.
- One question comes first, in Nirvaana's own window. It shows every command it will run on this computer and every file it writes, whole, and nothing runs or is written until you press “Approve”. “Not now” runs nothing. It adds Nirvaana to Claude Code as a plugin, with its skill for working with Nirvaana and its /wrap-up command; to Codex as a server; and to Gemini CLI as an extension, with its context file,
GEMINI.md. It never reads or sends those apps' own sign-ins.
Nirvaana's instructions
The same Approve puts Nirvaana's instructions in the file each of those apps reads at the start of every session: ~/.claude/CLAUDE.md for Claude Code and ~/.codex/AGENTS.md for Codex, for each one that's installed. They're a short block, the same one npx @nirvaana/mcp setup offers, so each app uses Nirvaana for your everyday work without you naming it, and leaves it out of questions about code. Gemini CLI gets the same words once, never twice: Nirvaana's Gemini extension carries them in its own GEMINI.md, so ~/.gemini/GEMINI.md gets the block only where Gemini CLI has Nirvaana without the extension. The question shows the block word for word and names every file. It goes between Nirvaana's own markers, after a copy of each file is kept beside it; nothing else in the file changes. If a file's Nirvaana markers aren't one begin and one end, it's left as it is, and its row says so.
Written in ~/.claude/CLAUDE.md and ~/.codex/AGENTS.md, between Nirvaana's own markers:
Remove Nirvaana's instructions
Under each app, a line says whether its instructions are in. To take them out, press “Remove Nirvaana's instructions”, under the list, then “Approve”. Only Nirvaana's block comes out of each file, after a copy is kept; everything else stays, and the apps stay connected, using Nirvaana when you ask. “Connect my AI apps” puts them back.
Cursor and VS Code
Cursor and VS Code have a row of their own. “Connect my AI apps” adds Nirvaana to them last, by running npx @nirvaana/mcp setup on this computer, under the same Approve, which shows the command whole. npx fetches setup from npm. Setup reaches Nirvaana's own servers, to sign in at nirvaana.ai and check that Nirvaana answers, and runs Claude Code's, Codex's and Gemini CLI's own commands to see whether Nirvaana is in them already. Every change it would make comes to this app's Approve window first, word for word: signing in, Nirvaana's entry in Cursor's or VS Code's MCP file, and anything Claude Code, Codex or Gemini CLI is still missing, such as its hooks. Only “Approve” says yes; “Not now” skips that one change. To sign in, this app then opens nirvaana.ai/connect and fills in setup's code there, where you press Allow. Then the row says what setup did for each app, and what it didn't add. Setup needs Nirvaana's package (@nirvaana/mcp) on npm, and Node.js on this computer; until then the row says so plainly (“Not on npm yet”, or “Needs Node.js”), and the other apps connect as before.
- Then claude.ai opens in your browser with Nirvaana already filled in. Press Add, then Allow. That one connector reaches Claude on the web, Claude's desktop app, your phone and Cowork.
- “Waiting for Allow” means Nirvaana is added to that app, and the app now needs your yes on Nirvaana's own Allow page before it can use it. Codex opens that page in your browser by itself while it adds Nirvaana; if that sign-in didn't finish, or ran out later, Codex's row says so and “Connect my AI apps” opens it again. In Claude Code, choose nirvaana in /mcp; in Gemini CLI, run /mcp auth nirvaana. The line under each row says which. Once you press Allow, the row says “Connected”, usually within a few seconds.
“Not installed — get it” means the app isn't on this computer. Press it to open the app's own download page. Once it's installed, come back to Connections and it's found.
“Couldn't add it” means that app said no; the line under it says why, in its own words. The other apps carry on. Press “Connect my AI apps” to try again: it only adds what is still missing.
Work from your phone
Nirvaana on your phone can send a task to your computer, and Claude Code does it there. You need Claude Code on the computer.
- Open “From your phone” (⌘9) and press the button that lets your phone send work to this computer. Type the code it shows at nirvaana.ai/connect, then press Allow.
- When a task comes in, press “Do it here”. The first time in each folder it asks: “Allow once”, “Always allow for this folder” or “Don't”. Claude Code may read and change files in that folder only. It can't run commands or reach the web.
- If the task doesn't say which folder, it asks “Which folder should this task work in?”, on the computer when you're at it, and as a card on the task in the chat, on any device. Choose a folder and press “Approve”. “Not now” on the card, or “Cancel” on the computer, leaves it waiting on you. Only folder names are shown, and the computer still asks you to allow a new folder.
- “Stop” ends a task that is running. To have tasks run by themselves, choose a folder under “Run tasks from your phone by themselves in”; it starts as Off, so each one waits for you.
Use my subscription for chat
The chat's real work runs on this computer with your own AI plan, through its app: Claude Code for Claude, Codex for ChatGPT, Gemini CLI for Gemini. Quick questions about what Nirvaana already knows still run on Nirvaana.
- In “Settings”, under “This computer”, “Use my subscription for chat” is on unless you turn it off. It needs Claude Code on this computer, signed in to your Claude account, and this computer taking “Work from the chat”.
- Ask in the chat as you always do. Drafting, research, plans and anything across your connected apps runs here: the reply says “Working on it on your computer”, and the answer appears under it as it is written. Each answer says where it ran: “Ran on Nirvaana”, or “Ran on your ChatGPT plan (Codex)” and the like.
- When this computer is off, the chat says “I'll start this when your computer is on”, and starts it when it is. “Cancel” on its card stops it, here too, and so does turning the setting off, pausing this computer or disconnecting it.
- On a Mac, a message you send from the chat in the Nirvaana app is done on your computer by your own AI app: Claude Code, Codex or Gemini CLI. It makes and changes files in the folders you let Nirvaana change, and every command it wants to run asks you first in the chat, showing the command exactly.
- Commands run in a sandbox: they change only those folders, can't read your keys or sign-ins, and can serve a page on your computer (localhost). Something left running, like a local server, shows on Live with Stop.
- A message from the web or your phone, a message in a shared world, and any message on Windows is answered in the chat only, with no files and no commands.
- Its other tools are Nirvaana's, with a key good for that one answer, so it can read your classes and make a slate. Anything that would reach other people (an email, a message, a post) becomes an Approve card, as always.
- Nirvaana never reads, copies or sends your app's own sign-in. The thinking runs on your own Claude, ChatGPT or Gemini plan, never an API key: if the app is set up with an API key, or isn't signed in, the chat says so instead of answering. The Nirvaana tools it uses count toward your Nirvaana plan like any other use.
Your lines
“Your lines” (⌘6, or ⌘, ) is what Nirvaana may touch on this computer, and nothing else. Everything starts off.
- “Folders it may read” and “Folders it may change”: “Add a folder…” and “Remove this folder”.
- Running commands, opening apps, and seeing the screen: each is a switch, and each still asks you every time.
- “Open Nirvaana when I log in”, and the “Activity log” of every answer you gave.
The new chat
Chat drawn by this app: the › line, / commands, @ for your own sessions on Live, the cards under a reply and their buttons, and the same conversations as on the web and your phone. Off unless you turn it on.
- The new chat is “Chat” drawn by this app instead of the web's page. It starts off. To try it, open “Settings”, and under This app turn on The new chat. Turn it off there and Chat is the web's page again, at once.
- Press “Chat” (⌘2). Type at the › line and press Enter to send; Shift+Enter is a new line. The reply comes in as it is written. Where your account has the one chat on, a small line under it says who answered: answered by Nirvaana, on your Claude plan once work it sent to your computer has started, queued for your computer while nothing has, or answered by Nirvaana · from what's stored. An empty chat shows only the Nirvaana logo and the line Build your world. Type Catch me up for what is due. Your very first chat says in full that you're talking to an AI; after that, the line under the box says it.
- Type / for the commands, or press ⌘K: ↑ and ↓ choose, Enter picks, Esc closes. /world switches world, /approve brings the first card in this conversation waiting for your approval into view (it never approves anything), and /help lists the commands and keys, with More in the How-to. Where your account has the one chat on, /agents, /history and /catchup are there too, and /run and /stop where work also goes to your computer. Nirvaana tells the app which ones your account has, so it shows the same commands as the web. ↑ and ↓ in an empty box bring back what you asked before in this conversation.
- @ lists your own sessions running on “Live”, such as Claude Code in a terminal, where your account has the one chat, work on your computer and Live on. Pick one and its @name goes in the box: only a name you picked counts, and one typed by hand is just words. Your words go to it with the message, for its next turn, and the card under the reply follows it, with Raw log for the last steps Live keeps, in an older chat too, while Live still has that session. @all goes to every one of them, at most 6: the line over the box says who it goes to first, and a second Enter sends (Esc puts it back). /stop @name stops what that session hasn't read yet. Sessions aren't offered to someone 13 to 17 unless teen mode is on. The pill at the top, such as 2 agents running, opens Live.
- The world's name at the top (⌘J) is the world the chat is in. A new chat starts in it. In a chat already under way, the world you choose comes in and the one before goes out; where Nirvaana can't do that yet, the next words start a new chat in that world, and the chat says so. Chats lists your conversations, the same ones as on the web and your phone, with Earlier for older ones; New chat starts a fresh one.
- Photos (PNG, JPEG, WebP or GIF) and PDFs go with a message: press the paperclip, drop them on the chat, or paste a picture. Up to 5 a message; one that can't go says why, and Remove takes it off. Once sent, a file opens from its chip, and in a world where you can keep things, Keep in that world's Files copies it there.
- Cards under a reply. A task for your computer says where it stands, with Cancel while it waits or runs; when your computer asks which folder it should work in, pick one and press Approve, or Not now to leave it waiting on you. When it's done, it shows what your computer said, and Open the pull request when it made one; with ship mode on, a task that went wrong says what, and Fix it puts a message in the box for you to send. A chat turn your computer runs on your Claude plan writes its answer in its card, then under the reply. A step in one of your connected apps, such as an email, has Approve and Decline, held five seconds with Undo as on “Today”; an invite you asked for has Approve and Don't. A file Nirvaana made shows its picture and opens in each of its formats. When it's a rebuild of a file you sent, compare it with yours and press Looks right: the chat tells Nirvaana it looks right, and it can change it from then on (if something is off, say what instead). In a world where you can keep things, Keep in that world's Files copies it there.
- A project from ship mode has its buttons right on its card. Before anything starts it shows the plan: each step, who does it (a coding agent, an agent in one of your apps, or a teammate) and what it may use, then the checks, the review and the change request; The AI that does the work chooses which of your AI apps runs its agent steps, Approve starts it, Don't drops it, and a new project asks which folder it goes in first. As it runs, each step says where it stands, with Stop. A teammate's turn says where the message goes and has Send; what went wrong says so in one sentence with Fix it (one that sends to GitHub asks for Approve first), Try again or Open a change request anyway. Putting the changes into your main version takes Approve and your authenticator's code or your password (or a code Nirvaana emails you, if you have neither). Undo the last step takes the same for a merge. At the end comes one summary, and a tool worth running each week offers Run it every Monday at 9:00?, which goes in Automations on your Approve. A card that needs your second step and a fact for a world are decided on Today: each has the button that opens it.
- After a reply, the chat may offer one of your worlds when what you said sounds like it: This sounds like Launch. Bring it in? Yes moves the chat into that world, Not now hides it, and Stop asking ends these offers. When you say you're stuck on something, Want a hand? offers to draft a note to someone in your worlds who could help: it waits on the web for you to send, or, where Nirvaana can't send it to them, it's a note to change and copy. Nothing is sent for you.
- Think harder (⌘Enter) thinks your message all the way through with the deepest model, for that message only. If a reply is cut off, the chat says it is still on it and shows the reply when it is done; if your message never got there, it goes back in the box. A chat whose reply is still being written says so when you open it, and shows it when it comes. When your plan's chat for the day or month is used up, the chat says so, with See Personal or Connect Nirvaana to Claude.
If you see them: Messages, Live and Slack
These open account by account. If one is not in your app yet, nothing is missing on your side.
- Messages (⌘7): one to one with someone you share a world with. “New message”, then pick them. Enter sends; Shift and Enter starts a new line. See Team chat and Messages.
- Live, under How-to: what your agents are doing right now, such as a Claude Code session. Live on the web also has “Pause” and “Stop” for your own coding sessions, and “Pause all” and “Stop all” above the list; Live in the app doesn't have those buttons yet. A coding session in a terminal can't be interrupted in the middle of a turn: stopped, it finishes the turn it is on and takes nothing more from Nirvaana. See Live. “Who sees yours” chooses, world by world, what your teammates see.
- Preview, on a project in Live that builds something: a picture of what it built, inside the app, taken out of sight so no window opens. “On this computer” shows its own page from its copy here (its dev script if it has one, else a plain index.html, else npm start, asked to listen on this computer only and stopped if it opens itself to the network); “Its change request” shows the preview address GitHub lists for it. “Refresh” takes a new picture, and “Stop the preview” ends what it started. See Preview.
- Slack: drop your Slack export's .zip on the window and press “Import”. It uploads (you can pause it), reads it, then “Choose channels” opens the rest. See Moving your Slack in.
Keyboard shortcuts
- ⌘1 to ⌘9: the places, in the sidebar's order.
- ⌘Z: undo the last press, while its note shows (0.1.8 or later).
- ⌘, : Your lines. ⌘⇧H: back to the chat. ⌘R: reload the page.
- ⌘F in How-to: search it.
- In Calendar: T for today and the arrow keys to step; N for a new event (0.1.8 or later).
- On Windows, use Ctrl where a Mac uses ⌘. Tap Alt on its own to open the menu.