1. Requirements
- Node.js ≥ 18.18.0 — the CLI is an npm package.
- macOS, Linux or Windows.
- A model to talk to. Either a cloud API key (Groq, Google Gemini, NVIDIA NIM, OpenRouter, OpenAI, Anthropic, Mistral, …) or a local model via Ollama — local is a first-class path, not a fallback, and costs nothing per token.
No account with us is required, and nothing is sent anywhere except the model providers you configure yourself. There is no telemetry and no cloud dashboard — the local dashboard is the source of truth.
2. Install
Install globally from the public npm registry:
$ npm install -g agent-nuvira
Then confirm the binary answers:
$ nuvira --version
agent-nuvira, buff and nuvira are the same program. This page uses nuvira because it is the shortest to type; every example works with any of the three.
3. Connect a provider
Pick one provider to start — you can add more later, and the router will use all of them. A free key is enough to try everything.
| Provider | Set this | Get a key |
|---|---|---|
| Groq fast, free tier | GROQ_API_KEY | console.groq.com |
| Google Gemini | GEMINI_API_KEY | aistudio.google.com |
| NVIDIA NIM | NVIDIA_API_KEY | build.nvidia.com |
| OpenRouter 300+ models | OPENROUTER_API_KEY | openrouter.ai/keys |
| Ollama local, free | nothing — install & run Ollama | ollama.ai |
Environment variable (fastest):
$ export GROQ_API_KEY='gsk_your_key_here'
Or store it in config so it survives the shell session — use the OS keychain instead of a plaintext file:
$ nuvira config set providers.groq.apiKey "gsk_..."
$ nuvira config vault set groq # OS keychain instead of plaintext
Priority, highest first: CLI flags (--provider, --model) → environment variables → config file (~/.nuvira/) → defaults.
4. First run
$ nuvira doctor
nuvira doctor is the fastest way to know whether your setup is sound. It prints a full health report — config directory, secret vault tier, memory store, plugin directories, and a probe of every provider you hold a key for.
$ nuvira chat "explain what this project does"
Expect the first run to be slow. Model discovery walks every provider you have a key for; later runs use the cache. If it reports nothing usable, nuvira doctor --verbose names exactly what it found.
5. The dashboard and a channel
The CLI is one surface, not the whole product. The dashboard is the visual one, and the gateway puts the same agent inside a chat app. Both take a few minutes.
Start it, and log in
$ nuvira dashboard
It serves http://127.0.0.1:3030 and opens a browser. --port moves it, --host 0.0.0.0 exposes it on your network, --no-open stays quiet, --force restarts a stale instance, and nuvira dashboard stop shuts it down from any terminal.
Your first login is admin / admin. That pair is published, so the account it creates can do exactly one thing: change the password. Every write route — provider config, API keys, users, shutdown — is refused until you set a real one of at least 8 characters. That is deliberate: the default is a doorway, never a resting state. Sessions last 8 hours and are dropped when the server restarts.
Add the people who may use it
An admin adds users from the Admin page, each with an explicit role. You cannot remove your own user, and the last admin cannot be removed, so the UI cannot leave an installation with nobody able to administer it. An unknown user resolves to viewer — the failure mode is deny, not allow.
Open a project in the console
The console is directory-scoped, like the CLI. The picker offers the dashboard's own working directory plus every path attached to the session, with a folder browser behind it. Choose one and the chat, the file tools, the diffs and the run all operate on that directory — the same as starting nuvira chat inside it.
A messaging channel in two minutes
$ nuvira gateway setup telegram && nuvira gateway status
The wizard asks for exactly the variables the platform needs and then validates the credential against the live service before telling you it worked. Telegram needs a bot from @BotFather; send your bot a message afterwards to learn your own chat id for the allow-list.
WhatsApp uses your own number through a pairing QR — no Meta Business account and no paid API:
$ nuvira whatsapp pair
Platform tokens are stored in ~/.nuvira/.env, written by both the wizard and the dashboard's Channels tab. WhatsApp is the exception: a paired session on disk, not a token.
Who may trigger the agent
| Question | Governs | Set it with |
|---|---|---|
| Who may trigger the agent? | inbound | nuvira config gateway allow <platform> user <id> |
| Who may the agent send to? | outbound | nuvira config gateway send-authority add <platform> <id> |
An unknown sender is neither obeyed nor necessarily dropped — nuvira gateway contact list shows them pending, and approve or reject decides.
Adding a contact for send-by-name does not grant trigger access. They are separate lists on purpose: who may drive the agent and who may be spoken to as you are two different permissions.
Keep it up
nuvira gateway start --supervise restarts the adapters after a crash; surviving a reboot needs a login unit — the manual has the recipe for macOS, Linux and Windows. One trap: nuvira dashboard already starts a gateway beside itself, so don't give the same platform two owners.
6. Everyday commands
The same pipeline, tools and router sit behind every surface, so you can start in the terminal and pick up the same thread in the dashboard or from a messaging channel.
nuvira chat talk, explore, ask
An interactive conversation about your code. The agent reads files, runs checks and edits — showing each step.
$ nuvira chatnuvira execute run the full multi-agent pipeline
Plans the work, then runs specialist agents — context-gatherer, writer, runner, reviewer — and shows the plan as it goes.
$ nuvira execute "add input validation to the API routes" --verbosenuvira workflow run a fixed, repeatable plan
Ten built-in pipelines (bug-hunt, quick-fix, security-audit, refactor-module, …) when you already know the shape of the job.
$ nuvira workflow run bug-hunt "login fails when the email has a plus sign"nuvira dashboard the visual surface
Chat, review diffs, watch the execution graph, inspect a run's trace, see why a model was chosen, and track cost — all locally.
$ nuvira dashboardnuvira gateway drive it from anywhere
Connect a messaging platform and the agent answers there, running the same pipeline. Two separate permission lists govern who may trigger the agent and who may direct it to send to other people.
$ nuvira gateway setup telegram && nuvira gateway startnuvira models / nuvira provider see and control what runs
Show which providers and models are in play, why one was chosen, and unblock one that was parked.
$ nuvira provider list && nuvira models excludedThere are 289 command entries across 48 groups. The full command surface is generated from the live CLI, so it cannot describe a command that does not exist.
7. Recipes
Fix a bug end to end
nuvira workflow run bug-hunt "login fails when the email has a plus sign"
nuvira ci check "the login plus-sign bug is fixed"
Audit your own repository
nuvira skill run security-audit --params "focus=secrets,ssrf"
nuvira security scan "$(git diff --cached)"
nuvira sbom > sbom.json
nuvira code-map src > map.txt
Ask about a project you do not own
nuvira chat "clone vercel/next.js and summarise how routing is implemented"
The repo is shallow-cloned into an ephemeral cache — your workspace is untouched.
Wire it into CI
- run: nuvira ci check "no TypeScript errors introduced"
- run: nuvira security scan "$(git log -1 --pretty=%B)"
See what you are saving
nuvira stats
nuvira retrieval stats
8. Troubleshooting
| Symptom | Do this |
|---|---|
| Whole-system check | nuvira doctor --verbose |
| A provider is not being used | nuvira models excluded, then nuvira models unblock <provider> |
| "Model does not exist" errors | nuvira models staleness — the provider/model pair may be dead; pin --provider and --model to be explicit |
| Key handling | nuvira config vault status · nuvira config vault migrate-keys |
| Dashboard stale or mismatched | nuvira dashboard --force |
| Gateway silent | nuvira gateway status · nuvira gateway logs · nuvira gateway delivery |
| Someone cannot trigger the bot | nuvira config gateway allow <platform> user <id> — this is separate from send-by-name contacts |
| Cannot send to a third party | Grant outbound authority: nuvira config gateway send-authority add … |
| Slow first run | Expected — model discovery walks every provider you hold a key for |
9. Go deeper
The complete documentation is public — read it in the browser on GitHub, no account needed.
Something wrong, missing, or worth asking about?
Open an issue