Nirvaana in Claude Code
If you work in Claude Code, Nirvaana can join the session. Your assistant there can look things up in what Nirvaana remembers, and hand back what it learned at the end. Nirvaana reads everything it hands back before it keeps any of it.
This page is for people who use a terminal. Nothing on the rest of the help needs it. To add Nirvaana to Claude on your phone, the web, the desktop app or Cowork, see Connect Claude instead: no terminal needed.
Setting it up, once
In the Mac or Windows app (0.1.8 or later), open Connections and press Connect my AI apps. One Approve adds Nirvaana's plugin to Claude Code; then choose nirvaana in /mcp and press Allow. That's all. Without the app:
- In a terminal, in your project folder:
npx @nirvaana/mcp setup. It adds Nirvaana's connector to Claude Code, writes the Nirvaana line in the project'sCLAUDE.mdonce you say yes (between its own markers; the rest of the file stays as it is), signs this terminal in if it isn't (a short code, and Allow in your browser), checks the connection works, offers your Nirvaana preferences (below), offers to add Nirvaana to Cursor and VS Code where they're installed (it shows the entry and asks before each file), and prints the steps for claude.ai and Cowork. If it finds Claude Desktop, it says how to add Nirvaana there too. If it prints only a usage line, use Connect my AI apps in the Mac or Windows app, or theclaude mcp addline below. - In Claude Code, type
/mcp, choose nirvaana and sign in. Your browser opens Nirvaana, where you're already signed in; check the page names Claude Code, and press Allow. No key, and nothing to install.
Setup is safe to run again: it looks first and changes only what is missing, never touches settings that aren't Nirvaana's, and keeps a copy of a settings file before it adds to it. Rather do it by hand? The line it runs is claude mcp add --scope user --transport http nirvaana https://nirvaana.ai/api/mcp. To take Nirvaana back out: npx @nirvaana/mcp setup --uninstall takes out exactly these, after a copy of each file: Nirvaana's entry in Cursor's and VS Code's mcp.json, its Claude Code hooks in ~/.claude/settings.json, and the preferences block in ~/.claude/CLAUDE.md, ~/.codex/AGENTS.md and ~/.gemini/GEMINI.md. It prints the commands that take Nirvaana out of Claude Code, Codex and Gemini CLI, and runs none of them. It leaves the Nirvaana entry that --local put in Claude Desktop's claude_desktop_config.json, the Nirvaana line in a project's CLAUDE.md, AGENTS.md or GEMINI.md, and this terminal's sign-in (npx @nirvaana/mcp logout ends it).
That's the way we recommend: it's always the current Nirvaana, with nothing to update. The connection shows in Settings, under Apps and terminals, where you can sign it out.
Nirvaana without saying its name
You shouldn't have to say “Nirvaana”. Ask “what's due this week?”, “remind me to call Sam Friday” or “run my Monday summary”, and Claude uses Nirvaana by itself; ask it to fix a TypeScript error, and it leaves Nirvaana alone.
- The plugin starts every session caught up: when a session starts, it brings in what's late or due and what changed since your last catch-up, and its guidance covers your everyday work, so Claude reaches for it without the word Nirvaana.
/catch-upand/wrap-upare there when you want them. - Your Nirvaana preferences: setup shows you a short block, word for word, and asks (Enter is yes) before putting it in
~/.claude/CLAUDE.md, which Claude Code reads in every session, in~/.codex/AGENTS.mdwhere Codex is installed, and in~/.gemini/GEMINI.mdwhere Gemini CLI is installed without Nirvaana's extension, whose own GEMINI.md already carries it. It sits between its own markers, after a copy of each file; nothing else in the file changes. It says Claude is your Nirvaana-backed assistant: catch up once, look things up before answering about your work, keep what you decide and promise, run your saved automations by name. Claude stays Claude. - To take it out:
npx @nirvaana/mcp setup --remove-preferences. To skip it:npx @nirvaana/mcp setup --no-preferences.
Anything Claude keeps still goes past Nirvaana, which decides; anything for a shared world waits for your approval. For Claude on the web, ChatGPT and Muse, copy the same preferences from Connect Claude.
Hooks: start caught up, and keep what you say (optional)
Claude Code hooks, off unless you say yes. Setup offers them once npm has the release that runs them, asks in a terminal, and Enter means no. Add them with npx @nirvaana/mcp setup --hooks; they go in ~/.claude/settings.json, beside any hooks of your own, so they run in every project.
- When a session starts,
npx @nirvaana/mcp catch-upgives Claude whatcatch_me_upwould: what's late or due, what waits for your approval, and what changed in your worlds. It only reads. If you already start sessions with the brief, setup asks before replacing it. - As you work,
npx @nirvaana/mcp session-notes --autosends excerpts of what you type (never Claude's replies) to Nirvaana, where Nirvaana reads them and keeps what matters in your own world only. It runs before Claude Code compacts the conversation, and after a stretch of work (six new messages, or twenty minutes), at most twelve times a day, never the same message twice. A line in Claude Code shows what was sent. - Before anything is sent, it leaves out lines that look like settings, keys, tokens, passwords, logins, codes, account, card or ID numbers, or code, and whole pastes, quotes and forwarded messages. That is a best effort, not a guarantee: turn the hooks off for work where you handle secrets.
- The excerpts are sent private: they stay in your own world, and never become a card for a shared world.
- Live:
npx @nirvaana/mcp live --hookruns in the background at each step and sends a few words of what the session is doing, like “Editing a file” or “Running tests”, for your Live page. Never what you type, your code, or a command beyond its program's name; a file's name only while you share every step with a world. Only you see it unless you choose a world in Settings, under Privacy, then Live, and it is gone after a day. - To take them out:
npx @nirvaana/mcp setup --remove-hooks. It removes Nirvaana's hooks and nothing else.
They sign in as this terminal, so they need npx @nirvaana/mcp login once (setup does it for you).
Or the terminal way
Nirvaana also runs as a small program on your own computer. It does the few things only your computer can, listed below; everything else is the same.
- Sign in:
npx @nirvaana/mcp login. It shows a short code and opens nirvaana.ai in your browser, where you're already signed in. Type the code, check the page names your computer, and press Allow. No email, no second code, no key. The sign-in shows in Settings, under Apps and terminals, where you can sign it out. If you can't use the website to allow it,npx @nirvaana/mcp login --email you@yourcompany.comsigns in with an emailed code and your second code instead. - That saves a session to
~/.config/nirvaana/session.json, readable only by you. It holds your sign-in tokens. It does not hold any service key. - Tell Claude Code about it:
claude mcp add --scope user nirvaana -- npx -y @nirvaana/mcp. In Cursor, the same command,npx -y @nirvaana/mcp, goes in its MCP settings. - To end it:
npx @nirvaana/mcp logout. It revokes the session and deletes the file. Be aware the last access token keeps working for a short while after — about an hour — because Nirvaana checks signatures rather than asking whether a session was revoked.
What only the terminal way does:
- Tasks you hand your computer from the Nirvaana chat: it takes them with
take_taskand marks them done withfinish_task, and it checks in, so the chat knows your computer is there. The connector only lists them. The chat hands a task over only from a message you typed, and not from one where it has already searched the web or read a world's app. review_pendingshows Nirvaana's own form in Claude Code, then opens the confirm page. The connector gives you the page's link instead.- When
tellfiles a draft, it opens it in your browser as well as linking to it. - The brief at the start of each session, below, reads through this sign-in.
A brief at the start of each session (optional)
Claude now catches you up by itself: at the start of a session it calls catch_me_up, below. So the brief here is optional.
Claude Code can start every session with a few lines about your world: your open promises due this week or overdue, how many cards wait for your approval, and your worlds. npx @nirvaana/mcp brief prints them, reading as you. It never writes anything.
- Sign in once in a terminal:
npx @nirvaana/mcp login, as above. Without it, the brief is one line saying you aren't signed in. - In your project folder, save this as
.claude/settings.local.json, which stays on your computer, or add it to~/.claude/settings.jsonfor every folder. If the file is already there, add theSessionStartpart to itshooks.{ "hooks": { "SessionStart": [ { "matcher": "startup|clear", "hooks": [ { "type": "command", "command": "npx -y @nirvaana/mcp brief", "timeout": 15 } ] } ] } } - Start Claude Code in that folder. The brief is read at the start of the session. If Nirvaana is slow to answer, the brief gives up rather than hold you up, and the session starts anyway.
The folder from Open in Claude, in Settings under Your world, has the same lines in its README.
Fewer questions: it looks things up first
Claude looks things up before it asks you. A status, a setting, a version, a plan, or whether something exists is one call away, so it checks for itself, with Nirvaana or its own tools (such as gh api orgs/your-org for your GitHub organisation's plan), and asks you only for decisions, approvals, money, legal, or what only you can see or know.
Before it puts a question to you, it calls ask with the question and what it already checked. A question it could look up goes back to Claude with the call that answers it; where Nirvaana keeps the answer (your worlds, promises, tasks, connected apps, automations), that is the Nirvaana tool by name. A decision goes through, always when it has options to choose from or Claude marks it as your call. If ask sends back one that is yours to decide, it tells Claude to send it again marked as your call, and then it goes. ask reads nothing of yours, and Nirvaana doesn't keep the question: in the terminal package it is checked on your computer; through the remote connector (ChatGPT, Claude.ai), on Nirvaana's server. In the terminal package from 0.34.
What it can look up
Tools that only read. They run as you, so they see exactly what you would see and nothing else.
catch_me_up— what's new for you, in one call. Claude calls it once at the start of a session: your promises that are late or due in the next two days, what waits for your approval, and what others added to your worlds since you last looked, with the latest decisions. It also says when Nirvaana doesn't yet know your name or what you're working toward, so Claude can ask you once. It never reads Team chat or anyone else's own world. If you signed in with an emailed code, it gives the brief's few lines instead and asks you to sign in again withnpx @nirvaana/mcp loginand press Allow.recall— searches what Nirvaana has kept about you.list_capabilities— lists your connected accounts, saved procedures and devices, and what your connected assistant does for you.list_schedules— the things you've asked Nirvaana to do on a schedule. Making, pausing or deleting one happens in the app.list_worldsandworld_facts: the worlds you are in, and what one of them knows, one line per fact, with the words each fact came from when your assistant asks for them. Withdecisions, only what the world decided, never a decision that was replaced.list_keepersandget_keeper: Nirvaana's ready-made helpers and each one's working card, its job and method, if your own assistant wants to work the same way. Nirvaana's own principles are not on any card.list_keepsakes,find_keepsake,get_keepsakeandread_keepsake: the files your worlds have kept, a search of them, a download link that lasts a minute, and the words of a text, Markdown, CSV or PDF file, a page at a time. A doc your assistant kept for you is found by its title.status— who it's signed in as, your worlds, and whether the connection is healthy. Ask it when something seems off.
What it can hand back
Four tools that write. None of them writes anything itself. Each one sends to Nirvaana, and Nirvaana decides what to keep.
remember— one fact, in a self-contained sentence with the names in it, or several small ones at once (up to 12). Up to 500 characters each.note_promise— something you owe someone, or something someone owes you, with a date if one was said. Up to 500 characters.submit_session_notes— a plain summary of the session: decisions, facts, promises, questions left open. A few paragraphs, under about 2,000 characters; never a whole document.propose_world_update— a fact for a world you share with other people. Up to 2,000 characters. It becomes a proposal you approve in the app; saying it here shares nothing. Name the world it is for; if you are in more than one and none is named, Nirvaana asks which instead of guessing.
Two more change what is already kept, only when you say so. memory updates one of your memories to new words (Nirvaana reads them like any remember, and the old one is marked replaced) or forgets one: it stops coming up, nothing is deleted, and you can bring it back in Settings, under Forgotten. Given a fact from one of your worlds, it only proposes the change, for your approval. promises lists your open promises, marks one done, or snoozes one off your Now until a day you name. A promise someone shared with you is settled as your Done in the app settles it: the person waiting on it is told it's their turn, in their day and with a notification.
keep_doc keeps a document your assistant wrote for you, such as a handoff, a runbook or a spec, as a Markdown file in a world's Files, under its title, so “open my 0.2.0 handoff” brings it back without pasting it. This one keeps straight away: it is your own words, kept where you keep files. It goes to the world you name, else the one world nobody else can read; a world you share is never chosen for you, your assistant asks which. Only a world's owners and builders keep docs there, and everyone who reads that world's Files can read them. If you're under 18, your assistant keeps a doc only in a world nobody else reads; to share one, add it yourself on that world's Files page. In Files its card says Doc. A doc with a password, key or token anywhere in it, code included, is refused before it leaves your computer, and so is one over 200 KB. One that only might hold a secret (a bare code, a passphrase in words) is kept, and your assistant tells you so. Kept again under the same title, it is a new version, and the one before moves to Retired, where Bring it back restores it.
And tell sends a message to someone you share a world with, when you ask it to: it goes to your shared world's Team chat straight away, as you, marked “via Claude”. If you'd rather press Send yourself, turn that off in Nirvaana's Settings, and it files a draft instead.
list_worker_bees lists your automations, a line each, and run_worker_bee runs one by its name inside Nirvaana, on what you have kept, and hands back what it made (the tools keep their old names). Its steps stay in Nirvaana. A message or a fact for a world that it makes waits for your approval in the app. Each of your automations is also a prompt named like it, such as /friday-recap.
Nirvaana tells the assistant the essentials when it connects, in a few lines. The rest it can read when it needs it, with nirvaana_help, and a prompt called working-with-nirvaana has all of it. Each tool also says whether it only reads, which an app can use to run the reads without asking you.
Slash commands
Type / in Claude Code to find these. Each one asks Claude to use the tools above for you.
/mcp__nirvaana__catch-me-up— what's new, then what needs you first./mcp__nirvaana__wrap-up— a short summary of the session, kept in your own world, never sent to a shared world as a recap. A decision meant for a team goes on its own and waits for your approval./mcp__nirvaana__decide— logs a decision you give it to the world you pick. It waits for your approval./mcp__nirvaana__what-did-we-decide— what your worlds decided about a topic you name./mcp__nirvaana__tell— sends a message to someone you share a world with, as above./mcp__nirvaana__working-with-nirvaana— tells Claude when to use each tool.
Every tool, prompt and command
Each one: what it does, when Claude uses it, something to say that uses it, what you'll see, and who sees it. Claude picks the tool itself from what you ask; you don't have to name one.
Looking things up
catch_me_upWhat's new for you, in one call: promises that are late or due in the next two days, what waits for your approval, and what others added to your worlds since you last looked, with the latest decisions.
- When:
- Once, by itself, at the start of a session. It also says when Nirvaana doesn't know your name or what you're working toward yet, so Claude can ask you once.
- Try:
- “Catch me up.”
- You'll see:
- A few short lines: what's late, what's due, what's waiting, what changed, each with an id Claude can use. Signed in with an emailed code, the brief's lines instead, and a note to sign in again from the browser.
- Who sees it:
- Only you. It reads as you, never Team chat and never anyone else's own world, and it writes nothing.
recallSearches what Nirvaana has kept about you: facts, people, places, decisions and more.
- When:
- Before it answers anything about your life, work, contacts, numbers or dates, and when a name comes up that Nirvaana might know.
- Try:
- “What's Javier's cell number?”
- You'll see:
- An answer from what Nirvaana kept, best match first. It can keep the search to one kind of thing, or to when it was kept.
- Who sees it:
- Only you. It reads your own memory, as you.
list_worldsLists the shared worlds you're in, by name, and whether you can suggest facts to each. Given one world, it shows that world's org chart: its moons, how many are in each, and who is in what role where you're a member; and, for its members, what feeds it.
- When:
- When you ask about your worlds or who is in one, and before it hands a fact to one.
- Try:
- “Who's in Harbor Crew, and what are their roles?”
- You'll see:
- Your worlds by name; or one world's chart, a line for it and each moon under it: your role, how many people, their names and roles where you're in it, who may post in Team chat; then what feeds it (Team chat capture, meeting notes, a GitHub repo), each on or off.
- Who sees it:
- Only you. Names only for worlds you're in, counts elsewhere, as the Org tab shows you; what feeds a world, as its connectors (in its Settings) show its members. Both are changed in Nirvaana, by an owner.
world_factsSearches what one of your worlds knows, one line per fact, with the words each fact was filed from when Claude asks for them. With decisions, only what the world decided.
- When:
- When you ask what a world knows, or the work is plainly one world's.
- Try:
- “What does Corner Bakery know about the Saturday deliveries?”
- You'll see:
- Facts, best match first, or newest first. Who filed each one shows only to that world's own members.
- Who sees it:
- Only you. Reading a world shares nothing.
list_keepsakesLists what one world keeps in its Files: logos, flyers, photos and files, newest first. It can list only the docs Claude kept for you, across your worlds.
- When:
- When you ask what a world has kept, or which docs you have.
- Try:
- “What's in Corner Bakery's Files?”
- You'll see:
- Each file's name, caption, kind, size and date, with a link to it on the world's page. A doc kept with keep_doc says doc, with its version.
- Who sees it:
- Only you, and only in worlds you can read.
find_keepsakeSearches the Files of your worlds by the words in a file's name or caption, a doc's title included.
- When:
- When you ask for a file you remember by its name or what it shows, or for a doc by its title.
- Try:
- “Open my 0.2.0 handoff.”
- You'll see:
- The files that match, each with its world and a link.
- Who sees it:
- Only you, and only in worlds you can read.
get_keepsakeGets a download link for one kept file.
- When:
- When you want the file itself.
- Try:
- “Get me the Corner Bakery logo.”
- You'll see:
- A link that works for about a minute and always downloads.
- Who sees it:
- Only you.
read_keepsakeReads the words of one kept file: a text, Markdown or CSV file, an SVG's source, or a PDF's text, a page at a time.
- When:
- When you ask about what a kept file says.
- Try:
- “Read the opening hours sheet in Corner Bakery's Files and tell me what changed.”
- You'll see:
- The file's words, up to 20,000 characters at a time. Word, PowerPoint and Excel files are read too; a picture, or an older Office file, says it can't be read yet.
- Who sees it:
- Only you.
list_notebooksLists one world's notebooks (code and writing together, like Jupyter), newest change first. Only where notebooks are on.
- When:
- When you ask what notebooks a world has.
- Try:
- “What notebooks does CS 101 have?”
- You'll see:
- Each notebook's title, how many cells it has, when and by whom it last changed, and a link to read it. A notebook in an exam is only counted, never shown.
- Who sees it:
- Only you, and only in worlds you can read.
read_notebookReads one notebook's cells and their outputs as text, a page at a time. It never changes or runs the notebook.
- When:
- When you ask about what a notebook says or what its code does.
- Try:
- “Read the Week 3 notebook in CS 101 and explain the second cell.”
- You'll see:
- The notebook's words, up to 20,000 characters at a time, marked as data. Pictures and web pages in its outputs are named, not shown. A notebook in an exam says it can't be read until it's submitted.
- Who sees it:
- Only you.
list_capabilitiesLists the ways in you and Nirvaana have built together, such as connected accounts and saved procedures, and your connected devices.
- When:
- When you ask what it can do, before a task that needs a way in, and when you ask whether your computer, phone or Claude Code is connected.
- Try:
- “Is my laptop connected to Nirvaana?”
- You'll see:
- Each device, whether it's live now, and when it was last seen.
- Who sees it:
- Only you.
list_schedulesLists what you asked Nirvaana to come back to later, or on repeat: the words, when it asks next, and whether it's paused.
- When:
- When you ask what's scheduled.
- Try:
- “What have I scheduled with Nirvaana?”
- You'll see:
- Your scheduled asks. Nothing runs from here: when one comes round, Nirvaana asks you first. Making, pausing or deleting one happens in the Nirvaana chat.
- Who sees it:
- Only you.
statusChecks the connection: who it's signed in as, your worlds, which app this is and when it was last used, whether it's healthy, your other connected devices, and which of your apps (Google Workspace, Canva) are connected to Nirvaana.
- When:
- When you ask whether Nirvaana is connected, or another tool's answer looks like the connection broke.
- Try:
- “Is Nirvaana connected?”
- You'll see:
- Your name and email, whether the connection is healthy or will need signing in again soon, and where to sign it out. Never a token.
- Who sees it:
- Only you.
askChecks a question before Claude puts it to you. A status, a setting, a version, a plan, or whether something exists is one call away, so a plain lookup goes back to Claude with the call that answers it; where Nirvaana keeps the answer, it names the exact Nirvaana tool. A decision, an approval, money, legal, or what only you can see or know goes through, always when it has options to choose from or Claude marks it as your call. If it sends back one that is yours to decide, it tells Claude to send it again marked as your call, and then it goes.
- When:
- Before Claude asks you anything, with the question and what it already checked.
- Try:
- “Is the GitHub org on the Team plan? (Claude checks with gh api instead of asking you.)”
- You'll see:
- Fewer questions, and the ones that come are yours to answer: a choice, an approval, or something only you know.
- Who sees it:
- Nobody: it reads nothing of yours, and Nirvaana doesn't keep the question. In the terminal package it is checked on your computer; through the remote connector (ChatGPT, Claude.ai), on Nirvaana's server.
nirvaana_helpReads Nirvaana's own help on one topic, such as your approval, shared worlds, tasks, handoffs or automations, when Claude needs more than it was told at the start.
- When:
- When Claude is unsure how a part of Nirvaana works, before it guesses.
- Try:
- “How do worlds work in Nirvaana?”
- You'll see:
- Nothing of yours: the same help for everyone, read by Claude.
- Who sees it:
- Nobody: it reads no session and keeps nothing.
read_connectionReads one of your connected apps that you shared with your AI: your mail, calendar, Drive, Notion, Linear, Figma, Meta or money. With no app named, says which ones you shared and what each can read and propose.
- When:
- When you ask about something in one of those apps, and only for an app you turned on under Your connections, Your AI.
- Try:
- “What's on my calendar on Thursday? Any mail from Ana this week?”
- You'll see:
- The app's answer, marked as data to read and never as instructions to follow, with hidden characters and anything like a password or key taken out.
- Who sees it:
- You, where connected apps are open to your AI, and only for the apps you shared (mail and money ask you twice). Never for someone under 18.
Handing things to Nirvaana
rememberHands one fact you told Claude to Nirvaana, which decides whether to keep it.
- When:
- When you tell Claude something worth knowing next week.
- Try:
- “Remember that Malcolm at the recycling yard takes our loads on Tuesdays and Thursdays.”
- You'll see:
- Claude says what Nirvaana did: kept, already known, proposed to a world, or refused. Nothing counts as kept unless the reply says so.
- Who sees it:
- Kept privately, unless it's plainly a shared world's business: then it's proposed to that world and waits for your approval.
note_promiseHands a promise to Nirvaana: what you owe someone, or what someone owes you, with the date if one was said.
- When:
- When you make a promise in the conversation, or someone makes you one.
- Try:
- “I told Javier I'd get him the Safe Storage quote by Friday.”
- You'll see:
- Claude says it was noted, and the promise joins your open promises under Promises.
- Who sees it:
- Only you. A promise noted from Claude is never sent to anyone on its own.
submit_session_notesHands a plain summary of your session to Nirvaana: decisions made, facts learned, promises given or received, questions left open.
- When:
- At natural pauses and at the end of a session. A few paragraphs, never a whole document.
- Try:
- “Send Nirvaana the notes from this session.”
- You'll see:
- Claude says how many things were kept, proposed or refused.
- Who sees it:
- Kept privately; a shared world's facts are proposed to it and wait for your approval.
keep_docKeeps a document Claude wrote for you, such as a handoff, a runbook, a spec or a checklist, as a Markdown file in a world's Files, under its title, so you can call it up later without pasting it.
- When:
- When you ask Claude to keep or save one, or when it wrote one you'll plainly want again; it tells you the title. Asked to open it later ("open my 0.2.0 handoff"), Claude finds it by its title and reads it back.
- Try:
- “Keep this handoff in Nirvaana as Handoff 0.2.0.”
- You'll see:
- Claude says the title and the world it went to. In that world's Files its card says Doc, and Kept by you with the date; a new version of the same doc adds version 2 to that line, and the one before moves to Retired, where Bring it back restores it. A doc with a password, key or token anywhere in it, code included, is refused, and so is one over 200 KB. One that only might hold a secret (a bare code, a passphrase in words) is kept, and Claude tells you so.
- Who sees it:
- Everyone who can read that world's Files. Without a world named, it goes to the one world nobody else can read; a world you share is never chosen for you, Claude asks which. Only a world's owners and builders keep docs there. If you're under 18, Claude keeps a doc only in a world nobody else reads; to share one, add it yourself on that world's Files page.
propose_world_updateProposes a fact for one of your shared worlds: a contact, a deadline, a procedure, a site.
- When:
- When the people in a world should know it. Claude names the world; if you're in several and it doesn't, Nirvaana asks which instead of guessing.
- Try:
- “Tell the Corner Bakery world that flour now comes on Saturdays.”
- You'll see:
- An approval card for that world, waiting for you in Waiting on you.
- Who sees it:
- Nobody until you approve it; then the people in that world.
memoryChanges one of your own memories, by the id recall gives it: update it to new words (Nirvaana reads them like anything you tell it, and the old one is kept as replaced), or forget it (it stops coming up; nothing is deleted, and you can bring it back in Settings, under Forgotten). Given a fact from one of your shared worlds, it only proposes the correction or the forgetting, as an approval card.
- When:
- Only when you say something Nirvaana keeps has changed or no longer holds; never on Claude's own reading of it.
- Try:
- “My dentist moved: it's Dr. Patel on Elm Street now.”
- You'll see:
- Claude says what changed: updated, forgotten, or, for a world's fact, a card waiting for your approval.
- Who sees it:
- Only you, for your own memories. A change to a world's fact reaches its people only once you approve it, and only a world's owners and builders can propose one.
promisesLists your open promises, your Reminders and Blockers (what's coming due, who waits on whom), or your calendar by day, yours across your worlds or one world's; and on your word marks a promise done or snoozes it off your Now until a day, or marks a world's blocker that waits on you done for the world. When your AI sees one of your reminders is no longer true (done, no longer needed, replaced, or said twice), it asks you to close it with a card for your Approve; it never closes one itself.
- When:
- When you ask what you owe or are owed, what's coming up, who you're waiting on, or what's on your calendar; or say one is done or can wait; or when one is plainly no longer true.
- Try:
- “What's on my calendar this week?”
- You'll see:
- A line each ("2026-09-29 (tomorrow)"), then the time where you are; or one line saying it was marked done, or snoozed until the day; and what you waited on that someone finished today. To add something, your AI notes a promise or proposes a world's date. A tidied one is off your Reminders and under Tidied, with the reason and Undo.
- Who sees it:
- Only you: it changes your own promises, and a world's blocker only when it waits on you. Neither your AI nor Nirvaana ever tidies one you owe someone else: that is Done, on your word. One someone shared with you, or such a blocker, is settled as your Done in the app settles it, and whoever was waiting on it is told.
checklistReads your checklist, or a shared world's, a line each with its id (a world's with who added and who checked each item), and on your word adds, checks, unchecks or removes an item.
- When:
- When you ask what's on your list or a team's, or say to add something, tick it off or take it off.
- Try:
- “Add "book the crane" to the Linde Plant checklist.”
- You'll see:
- The list, a line per item; or one line saying what was added, checked, unchecked or removed.
- Who sees it:
- Your own list: only you. A world's list: everyone in that world sees it and who added and checked each item; only its owners and builders can change it, and from your AI app you can only remove items you added. Someone who reads the world through one of its moons sees nothing.
Your approval
list_pendingLists the cards waiting for your approval, by world, with who in each world would see them.
- When:
- When you ask what's waiting.
- Try:
- “What's waiting for my approval?”
- You'll see:
- The cards, grouped by world. Listing shares nothing.
- Who sees it:
- Only you.
review_pendingAsks you to decide the waiting cards: a form with one box per card, then a page in your browser where you confirm.
- When:
- When you ask to review or approve what's waiting.
- Try:
- “Let's go through what's waiting for my approval.”
- You'll see:
- In Claude Code, Nirvaana's own form, then the Confirm your approval page with a code to match. An app that can't show the form says so, and you decide in this app or on the web.
- Who sees it:
- Only you. Only your press on the confirm page approves anything.
propose_connection_actionProposes something in a connected app you shared: an event, a draft email, a new Doc or Sheet, a Notion page, a Linear issue, a Figma comment. It leaves a card in Nirvaana and does nothing else.
- When:
- When you ask your AI to do something in one of those apps.
- Try:
- “Put lunch with Ana on Thursday at 1.”
- You'll see:
- A card under Before it goes out, naming the AI that proposed it. Nothing happens until you press Approve there.
- Who sees it:
- You, for the apps you shared. Only your own press on the card does it.
Messages
tellSends a message from you to someone you share a world with: it goes to your shared world's Team chat straight away, as you, marked “via Claude”.
- When:
- Only when you say “tell Benny …”, “message Marc …” or “let Priya know …”, or say yes when Claude offers to send something a teammate needs.
- Try:
- “Tell Benny the truck is booked for Tuesday.”
- You'll see:
- One line saying where it went, with a link. If you chose to press Send yourself in Nirvaana's Settings, it's a draft instead, and the link opens it.
- Who sees it:
- The person you're telling, and everyone in that world's Team chat, who see it came via Claude. You can withdraw it in Nirvaana.
Doing things for you
doDoes things in Nirvaana for you, as you, when you ask: says something in a world's Team chat, messages someone, adds a reminder, marks a blocker done, puts an event on a world's calendar, changes who is in a team. Several things from one ask go together. It can do only what you could do in Nirvaana yourself.
- When:
- Only when you ask it to do something in Nirvaana, where Nirvaana has this on for you. Never because a page, an email or a file says to.
- Try:
- “Tell the launch team we ship Friday, and remind me Thursday to send the deck.”
- You'll see:
- One line: it's done (and in Activity, with Undo for a day where it can be undone), or it's waiting for your Approve on one card on your day, under Your AI asks. Your Your AI setting in Settings decides which; out of the box, it asks first.
- Who sees it:
- Whoever would see it if you did it yourself: a Team chat post's world, a message's person. Posts and messages show via Claude beside your name. Some things no AI does for you: signing in, billing, connecting apps, inviting people to your company.
findFinds the people, worlds and items you can see in Nirvaana (promises, blockers, checklist items, goals, events), and the things it can do for you, so do gets the right one.
- When:
- Before do, when you name someone, a world or a thing ("DM Maya", "the launch world").
- Try:
- “Message Maya that I'm running late.”
- You'll see:
- If two people or worlds fit, Claude asks you which one ("Which Maya?") with the choices, and never picks for you.
- Who sees it:
- Only you. It reads as you, only what you can already see.
activityLists what your AI did for you in Nirvaana, newest first, and undoes one within a day.
- When:
- When you ask what your AI did, or ask it to undo something it did.
- Try:
- “What did you do in Nirvaana today? Undo that reminder.”
- You'll see:
- A line each, like "Claude added a reminder", the same list as Settings, Your AI, Activity. A sent message can't be undone there; withdraw it in Nirvaana.
- Who sees it:
- Only you.
Automations and ready-made helpers
list_keepersLists Nirvaana's ready-made helpers: each one's name, its job, how deeply it thinks, and what it can read and do.
- When:
- When you ask about the ready-made helpers.
- Try:
- “What ready-made helpers does Nirvaana have?”
- You'll see:
- The ready-made helpers, the same for everyone. The tool's name still says keeper.
- Who sees it:
- Only you.
get_keeperShows one ready-made helper's working card: its job and the method it works under.
- When:
- When you ask how one works, or want Claude to work the same way.
- Try:
- “Show me the Rig keeper's working card.”
- You'll see:
- The card's words. Using its method is up to you; reading it puts nothing to work.
- Who sees it:
- Only you.
list_worker_beesLists your own automations, the ones you made and the ones shared with you, one short line each. Asked for a new one, it gives a link that opens Automations with your words in its + New box, where you draft, try and save it.
- When:
- When you ask what automations you have, or for a new one.
- Try:
- “What automations have I made?”
- You'll see:
- Each one's name, what it does, and what to give it.
- Who sees it:
- Only you.
run_worker_beeRuns one of your own automations inside Nirvaana, by its name.
- When:
- When you ask for one of your automations by name.
- Try:
- “Run my Friday recap.”
- You'll see:
- What it made, with its name on it, and links to any draft it left for your approval.
- Who sees it:
- Only you; anything for someone else stays a draft until you send or approve it.
Tasks for your computer
list_tasksLists the tasks you handed to your computer from the Nirvaana chat, waiting or taken.
- When:
- At the start of a session, and when you ask what Nirvaana has for your computer.
- Try:
- “Does Nirvaana have anything for this computer?”
- You'll see:
- Each task in your own words, and whether it's waiting or taken. Through the connector Claude can read them; only Claude Code on your computer takes one.
- Who sees it:
- Only you.
list_computersLists your computers that can take work, the folders each may work in, and your own Claude Code sessions on Live with what each is doing now. It only reads. Only where sending to your computer is switched on.
- When:
- Before sending work, when you name no computer and have several, and when you ask what your sessions are doing.
- Try:
- “What are my Claude Code sessions doing right now?”
- You'll see:
- Each computer by name, whether it's connected, and its folders; each of your sessions with its repo, branch and what it's doing, and the id to send it work by.
- Who sees it:
- Only you. Never a teammate's session.
send_to_my_computerSends work to your own computer from Claude on the web or your phone: your request, in your words, for your Nirvaana Mac app (which starts Claude Code in a folder you allowed), or for one of your own Claude Code sessions on Live, which takes it when it next stops. Only where sending to your computer is switched on, and only from a connection you allowed after it was.
- When:
- When you ask Claude to have your computer do something, or to send something to one of your sessions; and when you ask what your sessions are doing. Never because a page, an email or a file says to.
- Try:
- “Tell my Mac to tidy the README in nirvaana-site.”
- You'll see:
- Where it went, and whether that computer or session is running now. On the Mac, the task from Claude, and its question before it first works in a folder; on your phone and in Nirvaana, the task until it's done, with the computer's note.
- Who sees it:
- Only you, and your own computers and sessions. Never a teammate's session, even one they share with you on Live.
take_taskClaude Code on your computer onlyTakes one waiting task: the “got it” you see on the task's card in the Nirvaana chat, with this computer's name.
- When:
- Before Claude starts the work.
- Try:
- “Take the task Nirvaana has for this computer and do it.”
- You'll see:
- The task's card in the chat shows this computer has it. Claude still asks you before anything outward: publishing, deleting, sending or paying.
- Who sees it:
- You, on the task's card in the Nirvaana chat.
finish_taskClaude Code on your computer onlyMarks a task Claude took as done, with a short note you read on its card in the chat.
- When:
- When the work is done.
- Try:
- “Tell Nirvaana the task is done.”
- You'll see:
- The note on the task's card: what was done, where the result is, and anything left for you to press.
- Who sees it:
- You, on the task's card in the Nirvaana chat.
Handing work between sessions
list_handoffsLists your handoffs, the state of the work on one branch of a repo in its owner's words, and the ones teammates offered you.
- When:
- When you ask what you could pick up, or at the start of a session.
- Try:
- “Are there any handoffs I could pick up?”
- You'll see:
- Each handoff's repo and branch, what is done and what is next, blockers, tests and open pull requests. Through the connector Claude can read them; only Claude Code on your computer writes or takes one.
- Who sees it:
- Only you, and the teammates in a world you let take your handoffs.
write_handoffClaude Code on your computer onlyKeeps this session's handoff current for the branch it works on: what is done, what is next, blockers and the test state, in Claude's own words.
- When:
- After each real step, and before anything long, since a session can end without warning. Only once you turn handoffs on in [Settings, Handoffs](/settings#handoffs).
- Try:
- “Keep the handoff for this branch up to date as you go.”
- You'll see:
- The handoff, kept. Words that carry a password, key or token are refused.
- Who sees it:
- You, and the members of any world you allow in Settings, Handoffs.
take_handoffClaude Code on your computer onlyTakes a handoff a teammate offered you, so Claude can carry on their work on a branch of its own.
- When:
- Before Claude starts on it, and again with a short note of what it opened.
- Try:
- “Take Benicio's handoff for the permits branch and carry on.”
- You'll see:
- The owner's words and the git commands to stand on their work. The owner is told who took it and when. Claude works on its own takeover branch and never pushes to theirs.
- Who sees it:
- The handoff's owner sees that you took it.
close_handoffClaude Code on your computer onlyCloses one of your own handoffs when its work is merged or dropped.
- When:
- When the branch is done.
- Try:
- “Close the handoff for this branch; it's merged.”
- You'll see:
- It leaves the lists. The next turn on that branch starts a fresh one.
- Who sees it:
- Only you.
now_doingNames what Claude is working on for your Live page, in a few words. Without a name, says what your agents, and teammates' who share theirs with you, are doing right now.
- When:
- When Claude starts a task, and when you ask what your agents or a teammate's are up to.
- Try:
- “What are my agents doing right now? And Dana's?”
- You'll see:
- The name beside the session on /live, and a line per session: what it is, where, what it is doing and how long since. A session that went quiet mid-work says Stopped, and names its handoff if it left one.
- Who sees it:
- You, once Live is on for your account (in a terminal, from the session's first catch-up). Teammates see your agents only in the worlds you choose in [Settings, Privacy, Live](/settings#live), at the level you choose.
Slash commands
/mcp__nirvaana__catch-me-upAsks Claude to call catch_me_up once, then tell you in a few short lines what needs you first.
- When:
- When you sit down and want the state of things before you start.
- Try:
- “/mcp__nirvaana__catch-me-up”
- You'll see:
- What's late, what's due and what waits for your approval, in a few lines.
- Who sees it:
- Only you.
/mcp__nirvaana__wrap-upAsks Claude for a compact summary of the session, sent with submit_session_notes to your own world only, never as a recap to a shared world. A decision a team needs goes on its own, with propose_world_update.
- When:
- At a pause or the end of a session.
- Try:
- “/mcp__nirvaana__wrap-up”
- You'll see:
- One line saying what Nirvaana kept, and what it proposed to a world for your approval.
- Who sees it:
- Only you. A decision proposed to a world reaches its people only once you approve it.
/mcp__nirvaana__decidedecision, and optionally worldLogs one decision to the world you pick, as a proposal that starts “Decided:”.
- When:
- When a decision was made that a team should hold.
- Try:
- “/mcp__nirvaana__decide decision: “We ship on October 3” world: Crew”
- You'll see:
- An approval card for that world, waiting for you.
- Who sees it:
- Nobody until you approve it; then the people in that world.
/mcp__nirvaana__what-did-we-decidetopic, and optionally worldSearches your worlds' decisions about a topic (world_facts with decisions), newest first.
- When:
- When you want to know what was decided, and when.
- Try:
- “/mcp__nirvaana__what-did-we-decide topic: pricing”
- You'll see:
- Each decision, its world and when, in a few lines; or plainly that none match.
- Who sees it:
- Only you. Reading a world shares nothing.
/mcp__nirvaana__tellto, messageAsks Claude to message someone you share a world with, in your words, with the tell tool.
- When:
- When you'd rather pick the prompt than say “tell Marc …”.
- Try:
- “/mcp__nirvaana__tell to: Marc message: the truck is booked for Tuesday”
- You'll see:
- One line saying where it went, with a link; a draft to send yourself if you chose that in Nirvaana's Settings.
- Who sees it:
- The person you're telling, in your shared world's Team chat, marked “via Claude”.
/mcp__nirvaana__working-with-nirvaanaGives Claude the whole guide: when to recall, remember, note promises, submit session notes and propose world updates, and what Nirvaana refuses.
- When:
- When Claude seems unsure how to work with Nirvaana. It reads the same help on its own with nirvaana_help.
- Try:
- “/mcp__nirvaana__working-with-nirvaana”
- You'll see:
- Claude works the way the guide says. Nothing is sent or kept by the prompt itself.
- Who sees it:
- Nobody: it is the same text for everyone.
In a terminal
npx @nirvaana/mcp setupGets you connected in one go: adds the Nirvaana plugin to Claude Code (the connector, https://nirvaana.ai/api/mcp, with its guidance; the connector alone on an older Claude Code), offers it to Codex, Gemini CLI, Cursor and VS Code, says how to add it to Claude Desktop, writes the Nirvaana line in this project's CLAUDE.md (it asks first, and only in a folder with .git or package.json), signs this terminal in if it isn't, checks the connection works, offers your Nirvaana preferences (below), and prints the steps for claude.ai and Cowork. Safe to run again: it changes only what is missing, and copies a file before changing it. --local uses this package instead of the connector; --no-claude-md and --no-preferences leave those alone; --no-prompts asks nothing and adds no hooks or preferences.
- When:
- Once, in a project folder, the first time; again whenever you like.
- Try:
- “npx @nirvaana/mcp setup”
- You'll see:
- A line per step: what it added (the plugin, or the connector, and Codex, Gemini CLI, Cursor or VS Code on your yes), what was already there, and whether the check passed. Then, in Claude Code, type /mcp, choose nirvaana and press Allow once.
- Who sees it:
- Only you: it changes files on your computer and nothing in Nirvaana.
npx @nirvaana/mcp setup --hooksAdds the optional Claude Code hooks to ~/.claude/settings.json, beside any of your own, once npm has a release that runs them: a catch-up when a session starts (SessionStart runs npx @nirvaana/mcp catch-up), and excerpts of what you type, in every project, read by Nirvaana and kept in your own world only (Stop and PreCompact run npx @nirvaana/mcp session-notes --auto). Setup asks about them when it runs in a terminal; Enter means no. If you already start sessions with the brief, it asks before replacing it.
- When:
- When you want every session to start caught up, and what you say in sessions to come home to Nirvaana without asking.
- Try:
- “npx @nirvaana/mcp setup --hooks”
- You'll see:
- The session opens with a few lines of what's new, and after a stretch of work a line showing what was sent.
- Who sees it:
- Only you. The excerpts are sent private: they stay in your own world and never become a card for a shared world.
npx @nirvaana/mcp setup --compact-hooksAdds a lighter pair of Claude Code hooks instead, after a backup. When a session starts, your late and due promises in full and only what else changed since your last catch-up (npx @nirvaana/mcp catch-up --compact, which reads only Nirvaana). When Claude stops, npx @nirvaana/mcp session-notes --wrap-up reads this session's transcript on this computer, only to count your messages and see whether notes were already saved, and sends none of it; once a session, after a long one, it asks Claude to write a short summary in its own words and send it through submit_session_notes, and Nirvaana decides what to keep.
- When:
- When you want sessions to start caught up and end with a summary Claude writes, without sending excerpts of what you type.
- Try:
- “npx @nirvaana/mcp setup --compact-hooks”
- You'll see:
- The session opens with what changed since your last catch-up; after a long session, Claude saves a few lines of notes, or stops if nothing is worth keeping.
- Who sees it:
- Only you. The transcript stays on this computer; only Claude's own summary goes to Nirvaana, as any session notes do.
npx @nirvaana/mcp setup --remove-hooksTakes Nirvaana's hooks out of ~/.claude/settings.json, and nothing else, after a backup.
- When:
- When you don't want the catch-up or the automatic summaries any more.
- Try:
- “npx @nirvaana/mcp setup --remove-hooks”
- You'll see:
- A line saying how many hooks it removed.
- Who sees it:
- Only you.
npx @nirvaana/mcp setup --remove-preferencesYour Nirvaana preferences: setup shows you a short block and, on your yes, puts it in ~/.claude/CLAUDE.md, ~/.codex/AGENTS.md and ~/.gemini/GEMINI.md (unless Nirvaana's Gemini extension already carries it), between its own markers, so Claude Code, Codex and Gemini CLI use Nirvaana for your everyday work without being told to. --remove-preferences takes exactly that block out again, after a copy of each file, and nothing else.
- When:
- When you'd rather Claude Code and Codex used Nirvaana only when you ask.
- Try:
- “npx @nirvaana/mcp setup --remove-preferences”
- You'll see:
- A line per file it took the block out of.
- Who sees it:
- Only you.
npx @nirvaana/mcp setup --uninstallTakes out exactly these, after a copy of each file: Nirvaana's entry in Cursor's and VS Code's mcp.json, its Claude Code hooks in ~/.claude/settings.json, and the preferences block in ~/.claude/CLAUDE.md, ~/.codex/AGENTS.md and ~/.gemini/GEMINI.md. Nothing else in those files changes. It prints the commands that take Nirvaana out of Claude Code, Codex and Gemini CLI, which keep their own lists, and runs none of them. It leaves the Nirvaana entry that --local put in Claude Desktop's claude_desktop_config.json, the Nirvaana line in a project's CLAUDE.md, AGENTS.md or GEMINI.md, and this terminal's sign-in (npx @nirvaana/mcp logout ends it).
- When:
- When you want setup's changes gone from this computer.
- Try:
- “npx @nirvaana/mcp setup --uninstall”
- You'll see:
- A line per file it changed, then the commands for Claude Code, Codex and Gemini CLI.
- Who sees it:
- Only you.
npx @nirvaana/mcp loginSigns this terminal in: it shows a short code and opens nirvaana.ai/connect, where you type it and press Allow. --email you@example.com signs in with an emailed code and your second code instead.
- When:
- Once, before the terminal way, the hooks or the brief; again when a tool says to sign in again.
- Try:
- “npx @nirvaana/mcp login”
- You'll see:
- “Signed in as …”, and the session saved to ~/.config/nirvaana/session.json, readable only by you.
- Who sees it:
- Only you. The sign-in is listed in Settings, under Apps and terminals, where you can sign it out.
npx @nirvaana/mcp logoutSigns this terminal out: it revokes the session and deletes the file.
- When:
- When you're done with Nirvaana on this computer.
- Try:
- “npx @nirvaana/mcp logout”
- You'll see:
- “signed out”. The last pass keeps working for up to an hour.
- Who sees it:
- Only you.
npx @nirvaana/mcp briefPrints a few plain lines about your world: open promises due this week or overdue, how many cards wait for your approval, your worlds, and tasks for this computer. It reads and never writes.
- When:
- As a SessionStart hook you add yourself, or any time in a terminal. The hooks setup adds use catch-up instead.
- Try:
- “npx @nirvaana/mcp brief”
- You'll see:
- The brief, or one line saying you aren't signed in. It always exits 0.
- Who sees it:
- Only you.
npx @nirvaana/mcp catch-upPrints what catch_me_up would tell Claude: late and due promises, what waits for your approval, and what changed in your worlds. It reads and never writes.
- When:
- Run by the SessionStart hook setup adds, so Claude starts caught up; or yourself, any time.
- Try:
- “npx @nirvaana/mcp catch-up”
- You'll see:
- A few short lines, or one line saying why not. It never holds a session up, and always exits 0.
- Who sees it:
- Only you, and the Claude session it starts.
npx @nirvaana/mcp session-notes --autoSends excerpts of what you typed in this Claude Code session, never Claude's replies, to your own world, marked private so nothing is proposed to a shared world. Before anything is sent it leaves out lines that look like settings, keys, tokens, passwords, logins, codes, account, card or ID numbers, or code, and whole pastes, quotes and forwarded messages. That screen is a best effort, so turn the hooks off for work where you handle secrets. Nirvaana decides what to keep.
- When:
- Run by the Stop and PreCompact hooks setup adds: before the context is compacted, and after a stretch of work (six new messages, or twenty minutes and at least two). At most twelve a day, never the same message twice.
- Try:
- “npx @nirvaana/mcp setup --hooks”
- You'll see:
- A line in Claude Code showing what was sent; what Nirvaana kept comes with the next one.
- Who sees it:
- Only you. It stays in your own world, and never becomes a card for a shared world.
npx @nirvaana/mcp handoff --autoKeeps this branch's handoff after every turn (a Stop hook you add yourself), once you allow a world to take handoffs in Settings. handoff alone shows where it stands; --close ends it.
- When:
- When a session could end without warning and a teammate might carry the work on.
- Try:
- “npx @nirvaana/mcp handoff”
- You'll see:
- One line: what it pushed to the hidden ref and what it left out.
- Who sees it:
- You, and the members of the worlds you allow in Settings, Handoffs.
npx @nirvaana/mcp handoff --pickupTakes a handoff a teammate offered you for the repo a Claude Code session is in, without asking, and hands the session the letter so it carries on (a UserPromptSubmit and Stop hook you add yourself). Only for a world you turn Auto-accept in auto mode on for in Settings, Handoffs (each world is off until you do), and only in a session already in auto mode: never one that asks first, nor one that skips its permission checks, nor a subagent. At most one a session and three a day, counted by Nirvaana.
- When:
- When you want your auto-mode sessions to pick up a teammate's work on their own.
- Try:
- “npx @nirvaana/mcp handoff --pickup”
- You'll see:
- Nothing, unless it took one: then Claude tells you in one line whose handoff it picked up, and works on a takeover branch of its own.
- Who sees it:
- You, and the teammate whose handoff it was: they are told who took it and when.
npx @nirvaana/mcp live --hookLive's hook: a few words of what this Claude Code session is doing, like Editing a file or Running tests, for your Live page. setup --hooks adds it to run in the background, so it never holds Claude up. It never reads what you type, your code, or a command beyond its program's name. Its --stop twin runs when the session stops and hands it a task you sent to that session, one a stop.
- When:
- You don't run it yourself: Claude Code runs it at each step once the hooks are on.
- Try:
- “npx @nirvaana/mcp setup --hooks”
- You'll see:
- Nothing in the terminal. The session on /live, with what it is doing now.
- Who sees it:
- You. Teammates only in the worlds you choose in Settings, Privacy, Live, at the level you choose.
npx -y @nirvaana/mcpRuns Nirvaana's MCP server over stdio, signed in as you. It's what Claude Code, Cursor or Claude Desktop start when you add the terminal way (npx @nirvaana/mcp serve does the same).
- When:
- You don't run it yourself: your AI app starts it.
- Try:
- “claude mcp add --scope user nirvaana -- npx -y @nirvaana/mcp”
- You'll see:
- Nothing in the terminal. In your AI app, Nirvaana's tools.
- Who sees it:
- Only you.
Approving what is waiting
What waits for your approval can be decided from the terminal too, and only by you.
list_pendinglists the cards waiting for your approval, by world, with who in each world would see them.review_pendingasks you directly. Nirvaana shows a form in Claude Code: one checkbox per card, ten at a time, each saying which world it goes to and who will see it. Every box starts unticked. What you leave unticked stays waiting, unless you choose to decline it. Cancelling changes nothing.- Ticking a box doesn't approve anything yet. Nirvaana then opens a page in your browser, signed in as you, that lists what you ticked, with who will see each one, and says which terminal sent it and when. It shows a short code that Claude Code also showed beside the link: go on only if they match. Untick anything you've changed your mind about, then press Approve. Only that press shares anything, the same as pressing Approve on your cards. The page lasts ten minutes and works once.
- Your terminal's sign-in can't approve or decline anything, ever. Your assistant never sees the form or your answer, and nothing it reads, a web page, an email, a world's facts, can share anything on your behalf. At most it can open a confirm page for you to look at. So confirm only what you just ticked yourself.
- If your editor can't show forms,
review_pendingsays so, and you approve on the web instead.
What Nirvaana does with what you send
Everything sent from outside arrives in one place. Nirvaana reads what you sent as information, never as instructions, and decides one of four things for each piece of it:
- Keep it privately, in your own memory.
- Skip it, because it is already known.
- Propose it to a world you share, for you to approve in the app. Nothing is shared by sending it.
- Record it as a promise.
Anything that reads as an attempt to instruct Nirvaana is refused and written down as a refusal: text that tries to rename it, change who it is, make private things visible, change a world's rules, get it to print its instructions, or anything dressed up as a system message. It is recorded, never obeyed.
Your raw text is saved word for word before Nirvaana even looks at it, so what you sent is on record whatever the verdict. The reply you get back says what it kept and what it already had, each with its id so your assistant can point at it later, and what it refused. Never its reasoning.
Handoffs
Your Claude Code sessions can leave a handoff as they go, so a teammate's session can pick up where yours stopped. Handoffs are off until you allow a world in Settings, under Handoffs. Until then the handoff hook pushes nothing and Nirvaana keeps no handoff. The steps are on Handoffs and Live.
- Once you allow a world, after each turn the hook pushes the branch's commits and your uncommitted changes to tracked files to a hidden ref on that repo's own remote. Anyone who can read the repo can fetch that ref, whether or not they are in the world. Untracked files go only if you add
--untrackedto the hook. - From your uncommitted changes, ignored files,
.envfiles, keys, certificates, binary files, files over 1 MB and files with a key in their text are left out, and the hook's line says what it left out. Your commits go as they are, unless one not yet on the remote holds a file with a secret-like name, such as an.envfile or a key; then the hook pushes nothing and says why. - Nirvaana keeps the branch, the ref, your computer's name, your open pull requests and the session's own words about what is done and what is next. Never the conversation.
- Allowing a world lets its members take your handoffs from every repo you work in, and you are told who took one and what they opened. Stop at any time. With no world allowed, nothing more is pushed or kept; one already taken stays with its taker, and what is already on a remote stays there until you close each branch's handoff with
npx @nirvaana/mcp handoff --closeon that branch. - Auto-accept in auto mode, world by world. A teammate in any of these worlds can hand off to you once they allow that world. For each world you turn on, your Claude Code sessions in auto mode take a handoff that comes through it for the repo they are in, work on a takeover branch of their own (never your teammate's), and your teammate is told who took it. At most one a session and three a day, counted by Nirvaana. It needs the
npx @nirvaana/mcp handoff --pickuphook, and never happens in a session that asks before it acts, one that skips its permission checks, or a subagent. All off until you turn one on; a world you leave is turned off.
The limits
- 8,000 characters per submission, the most Nirvaana reads at once. Three of the four tools stop well below it, as above.
- At most 12 facts kept from any one submission. The rest is refused as flood.
- 40 submissions in a burst, then 240 a day.
- A session from the editor cannot write a row itself. The database will not let it. Only Nirvaana can write, and only after it has decided. Your approval is always given on the web, as above.
What never leaves the app
Nirvaana's own instructions and its voice never travel over this connection, because they would land inside somebody else's model. What goes out is your own facts, in answer to your own lookups. An assistant in your editor is a visitor to your worlds, not Nirvaana itself.