Home / Docs

Docs & Setup

Everything you need to go from npm install to your first shipped change. Two minutes of setup, then one page of reference.

The complete manual, command reference and architecture notes live in the public documentation repository. This page covers what you need to start.

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.

ProviderSet thisGet a key
Groq fast, free tierGROQ_API_KEYconsole.groq.com
Google GeminiGEMINI_API_KEYaistudio.google.com
NVIDIA NIMNVIDIA_API_KEYbuild.nvidia.com
OpenRouter 300+ modelsOPENROUTER_API_KEYopenrouter.ai/keys
Ollama local, freenothing — install & run Ollamaollama.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

QuestionGovernsSet it with
Who may trigger the agent?inboundnuvira config gateway allow <platform> user <id>
Who may the agent send to?outboundnuvira 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 chat

nuvira 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" --verbose

nuvira 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 dashboard

nuvira 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 start

nuvira 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 excluded

There 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

SymptomDo this
Whole-system checknuvira doctor --verbose
A provider is not being usednuvira models excluded, then nuvira models unblock <provider>
"Model does not exist" errorsnuvira models staleness — the provider/model pair may be dead; pin --provider and --model to be explicit
Key handlingnuvira config vault status · nuvira config vault migrate-keys
Dashboard stale or mismatchednuvira dashboard --force
Gateway silentnuvira gateway status · nuvira gateway logs · nuvira gateway delivery
Someone cannot trigger the botnuvira config gateway allow <platform> user <id> — this is separate from send-by-name contacts
Cannot send to a third partyGrant outbound authority: nuvira config gateway send-authority add …
Slow first runExpected — 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