@niroai/niro 0.9.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,75 @@
2
2
 
3
3
  Notable changes to `@niroai/niro`. Dates are release dates.
4
4
 
5
+ ## 0.10.0 — 2026-08-28
6
+
7
+ One command to get started, and a way to check what Niro is worth.
8
+
9
+ ### Upgrading
10
+
11
+ ```bash
12
+ npm install -g @niroai/niro@latest
13
+ ```
14
+
15
+ Nothing extra is needed from 0.9.0. Every existing command works exactly as before; the new
16
+ ones sit alongside them.
17
+
18
+ **`niro start` replaces four steps with one.** Getting started used to mean learning a sequence
19
+ from a README: install, `niro login`, change into the right folder, `niro init`, then
20
+ `niro mcp install`. Each step was fine on its own; the sequence was the problem, because the
21
+ entry point was documentation and documentation is optional. One user ran `niro init` in their
22
+ home folder. Typing `niro` on its own printed an eighteen-command help listing, which is the
23
+ worst possible first screen for someone who knows none of them.
24
+
25
+ ```bash
26
+ npx @niroai/niro start
27
+ ```
28
+
29
+ That signs you in, installs itself properly, shows you what it is about to index and asks
30
+ before uploading anything, builds the graph, connects your assistant, and offers to measure
31
+ the difference. Run it again in any other repo and it skips whatever is already done. It opens
32
+ by saying what Niro does and roughly how long this takes, and it asks whether you have an
33
+ access code before it installs anything, so nobody without one fills in a form that rejects
34
+ them at the end.
35
+
36
+ Two screens are worth calling out. Before uploading, it shows you the folder, the build files
37
+ it recognised, the module count and the git branch, and waits: the one screen worth reading
38
+ rather than skipping. And a folder it refuses, such as your home folder, now asks for a
39
+ different one instead of exiting, which is what made that mistake so easy to make.
40
+
41
+ `niro init`, `niro login` and `niro mcp install` are untouched. They are the scriptable path,
42
+ they take flags, and `niro start` simply calls them in order.
43
+
44
+ **`niro ab` measures what Niro changes.** Rather than take our word for it, Niro can run
45
+ *itself off* for half your sessions and show you the two halves side by side. While a window is
46
+ open each session lands in an "on" or "off" bucket by a deterministic split; the off half works
47
+ without Niro.
48
+
49
+ ```bash
50
+ niro ab enable # start a 14-day window (it states the scope and asks first)
51
+ niro ab report # the with-Niro / without-Niro comparison
52
+ niro ab disable # stop early
53
+ ```
54
+
55
+ It applies to your whole account, not just the repo you are standing in, and it says so before
56
+ starting. `niro start` offers it once, at the end of a first setup, and defaults to no.
57
+
58
+ **Setup prints about half as much.** A real run printed roughly 230 lines and only half were
59
+ ours. PM2's process table and generated systemd unit file, about 55 lines, are captured now and
60
+ shown only if something fails. The assistant list shows five clients and a count rather than all
61
+ fourteen with their config paths (`niro mcp install --list` for the rest). `niro init` stopped
62
+ telling you to run `niro mcp install` two seconds before the wizard did it for you.
63
+
64
+ **Output is indented consistently.** Printed lines used eight different indents across the CLI,
65
+ so nothing said what belonged to what. Everything now sits on one ladder: headings and step
66
+ markers, their messages one level in, detail one level further. Output from `niro init`, and
67
+ from the editor CLIs it shells out to, is folded into that ladder instead of printing flush
68
+ left in the middle of a step.
69
+
70
+ **Fixes.** The spinner and the upload progress bar wrote straight to the terminal and so
71
+ ignored indentation entirely. `niro mcp install --list` was added. Two em-dashes and one
72
+ invented URL were removed from text you read on screen.
73
+
5
74
  ## 0.9.0 — 2026-08-26
6
75
 
7
76
  One change to how the client waits, and two fixes for cases where Niro and your machine
package/README.md CHANGED
@@ -1,313 +1,233 @@
1
- # niro — MCP server + CLI (@niroai/niro)
1
+ # niro: CLI + MCP server (`@niroai/niro`)
2
2
 
3
- The command-line tool **and** MCP server for [Niro](https://niroai.dev) — the AI code-intelligence platform.
3
+ Command-line tool and MCP server for [Niro](https://niroai.dev). Niro reads your code and builds
4
+ a map of how it fits together, so your AI assistant answers from that map instead of guessing.
4
5
 
5
- One package gives you three things:
6
+ One package installs three things: the `niro` command, the MCP server your assistant talks to,
7
+ and two agent skills so you can ask for Niro tasks in plain English.
6
8
 
7
- 1. **`niro` CLI** — onboard repos, build the code graph, and manage projects from the terminal.
8
- 2. **A Niro MCP server** — lets an AI assistant answer questions about *your* codebase using Niro's graph. 14 clients supported (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, GitHub Copilot CLI, Factory, Goose, OpenCode, Cline, Kiro, Antigravity, Claude Desktop) — see **[docs/connect-your-ai-assistant.md](https://unpkg.com/@niroai/niro/docs/connect-your-ai-assistant.md)** for the exact command per client.
9
- 3. **Two agent skills** (installed by `niro mcp install`) so you can drive Niro from chat in plain English instead of typing CLI commands:
10
- - **`niro-skill`** — answers questions about your code (structure, call chains, blast radius) using the Niro MCP tools.
11
- - **`niro-cli`** — runs the CLI for you (onboard, status, rebuild, edit env vars, remove) from a conversation.
9
+ Requires Node.js 18 or newer. Niro is in private beta: you need an access code, which you get
10
+ from the **Request Access** button at [www.niro.ai](https://www.niro.ai).
12
11
 
13
- > **Two ways to do everything:** every task below shows the **terminal** command *and* how you'd **ask the agent**. Pick whichever you prefer — they call the same code.
14
-
15
- ## Working on branches
12
+ ---
16
13
 
17
- Your projects cover the repos and branches you chose to index. On every question, Niro routes
18
- to the project matching your repo and current branch. When you are on a branch **no project
19
- covers** (with real changes), Niro refuses to answer from stale code. Your assistant offers the fix:
14
+ ## Get started
20
15
 
21
16
  ```bash
22
- niro new-temp-project # run once in the repo folder
17
+ cd ~/code/my-service
18
+ npx @niroai/niro start
23
19
  ```
24
20
 
25
- This creates your own private copy of the project that follows your branch and your
26
- uncommitted edits, live (keep `niro watch` running). Your original project is not changed.
27
- Switching branches needs nothing: Niro answers from your copy on the new
28
- branch, and from the matching indexed project on branches you already cover. When your branch
29
- is merged:
21
+ Signs you in, installs itself, shows you what it is about to index and asks first, builds the
22
+ graph, and connects your assistant. Run it again in any other repo; it skips what is done.
30
23
 
31
- ```bash
32
- niro discard-temp-project
33
- ```
24
+ Then restart your assistant and ask it something:
34
25
 
35
- If you forget, idle copies are cleaned up automatically after two weeks. Full guide:
36
- [docs/working-on-branches.md](https://unpkg.com/@niroai/niro/docs/working-on-branches.md)
37
- (plain-text file, ships inside the package too).
26
+ ```
27
+ "What breaks if I change PaymentService.refund?"
28
+ ```
38
29
 
39
30
  ---
40
31
 
41
- ## Install
32
+ ## What you can ask for
42
33
 
43
- ```bash
44
- npm install -g @niroai/niro
45
- niro --version
46
- ```
47
-
48
- Requires **Node.js 18+**. Background auto-sync of local folders uses [PM2](https://pm2.keymetrics.io/) — `niro init` offers to install it for you (or run `npm install -g pm2` yourself).
49
-
50
- By default the CLI talks to Niro's cloud (`https://aiorchestrator.niroai.dev`) and the MCP server to `https://aiassistant.niroai.dev`. To point at your own instance, set `NIRO_API_URL`, and pass `--url <url>` to `niro mcp install` (or set `NIRO_MCP_SERVER_URL`).
34
+ | | |
35
+ |---|---|
36
+ | Anything about your code | call chains, structure, entry points, API endpoints |
37
+ | What breaks if you change something | blast radius across services, including callers a search cannot find |
38
+ | A standing review | issues already in the code, by severity, in the browser |
39
+ | Root causes from your alerts | connect Sentry, Slack, Jira, Linear or CloudWatch and an alert arrives as a bug with the analysis done |
51
40
 
52
41
  ---
53
42
 
54
- ## 60-second setup
43
+ ## Everyday commands
55
44
 
56
45
  ```bash
57
- niro login # opens your browser to approve this device
58
- cd ~/code/my-service
59
- niro init # onboard this folder: create project, upload, build the graph
60
- niro mcp install # connect one AI assistant — pick it at the prompt, or pass --client
46
+ niro status
61
47
  ```
48
+ Is my index up to date?
62
49
 
63
- `niro mcp install` configures **one** assistant per run — pick it at the prompt, or pass `--client <id>`. 14 clients supported; see **[docs/connect-your-ai-assistant.md](https://unpkg.com/@niroai/niro/docs/connect-your-ai-assistant.md)** for the full list and the exact command for each. Run it once for each assistant you use. The MCP server URL is picked automatically (own instance? pass `--url <url>`). Restart your AI assistant once after, and you're done — ask it about your code, or ask it to run Niro tasks for you.
64
-
65
- ---
66
-
67
- ## Scenario 1 — Log in
50
+ ```bash
51
+ niro start
52
+ ```
53
+ Index another repo. Cross-service answers need more than one.
68
54
 
69
- `niro login` opens a browser, you approve the device, and a long-lived credential is stored at `~/.niro/credentials.json` (mode `0600`). Short-lived tokens refresh automatically.
55
+ ```bash
56
+ niro info
57
+ ```
58
+ What does Niro know about this folder: repo, branch, which project it maps to.
70
59
 
71
- **Terminal**
72
60
  ```bash
73
- niro login # browser device flow (default)
74
- niro whoami # who am I logged in as?
75
- niro logout # revoke + remove local credentials
61
+ niro projects
76
62
  ```
63
+ Every project in your account.
77
64
 
78
- **Ask the agent**
79
- > "Am I logged in to Niro?" — the agent runs `niro whoami`. If you're not, it will **ask you to run `niro login` yourself** in your terminal (it can't drive a browser sign-in or handle your credentials).
65
+ ```bash
66
+ niro build
67
+ ```
68
+ Rebuild the index by hand and watch it finish.
80
69
 
81
70
  ---
82
71
 
83
- ## Scenario 2 — Onboard a folder you're working in
72
+ ## Working on a branch
84
73
 
85
- `niro init` does the whole thing end-to-end: detect the repo, **upload its source + config files**, create a Niro project, scan for environment variables, build the graph, and (optionally) keep it synced.
74
+ Your index covers the branches you chose to build. On a branch nothing covers, Niro says so
75
+ rather than answering from stale code.
86
76
 
87
- **Terminal**
88
77
  ```bash
89
- cd ~/code/my-service
90
- niro init # onboard the current folder
91
- niro init ./api # onboard a specific path
92
- niro init --defaults # accept discovered defaults, don't prompt
93
- niro init -X '**/test/**' -F '**/*.spec.ts' # exclude modules / files
78
+ niro new-temp-project
94
79
  ```
80
+ Run once in the repo folder. Makes a private copy that follows your branch and uncommitted
81
+ edits. Your shared project is untouched.
95
82
 
96
- During `init` you'll be asked, **per environment variable**, which value to use — and when a variable is defined in more than one config file you pick which file drives it (see Scenario 6).
97
-
98
- **Ask the agent**
99
- > "Onboard this folder into Niro." The `niro-cli` skill checks auth, runs `niro info` to see if it's already indexed, then runs `niro init` for you and walks you through the env-var values in chat.
100
-
101
- **Note for cloud:** Niro indexes your folder by **uploading its files** (it can't read your laptop's disk). Source and committed config files (`package.json`, `pom.xml`, `application.yml`, …) are uploaded; anything your repo `.gitignore`s (like a real `.env`) is **never** uploaded. One caveat: that filtering needs the folder to be a git repository. If you onboard a plain folder that is not a git repository, there is no `.gitignore` to honour and only the filename rules apply, so keep secrets out of it.
83
+ ```bash
84
+ niro discard-temp-project
85
+ ```
86
+ Run when the branch is merged. Forgotten copies are cleaned up after two weeks.
102
87
 
103
- **What can be onboarded:** the folder has to look like a project — a build file (`package.json`, `pom.xml`, `go.mod`, `*.csproj`, …) at the folder itself or just below it. A monorepo root whose build files sit one or two levels down is fine. A folder with no build file is refused; pass `--force` if you really mean it. Your home folder, the filesystem root and system folders are refused outright, and `--force` does not override that — onboarding one of those would upload source from every project on the machine.
88
+ Full guide: [docs/working-on-branches.md](https://unpkg.com/@niroai/niro/docs/working-on-branches.md)
104
89
 
105
90
  ---
106
91
 
107
- ## Scenario 3 — "What does Niro know about this folder?"
92
+ ## Measure what Niro changes
108
93
 
109
- **Terminal**
110
94
  ```bash
111
- niro info # repo URL, branch, which project(s) map here, index status
112
- niro info --json # machine-readable
113
- niro status # live build status for the pinned project
114
- niro status my-service --json
95
+ niro ab enable
115
96
  ```
97
+ Runs Niro **off** for half your sessions for 14 days, so you can compare. Applies to your whole
98
+ account, and asks before it starts.
116
99
 
117
- If a folder maps to **more than one** project, `info` lists them and (in the terminal) `build`/`edit`/`remove` ask you to pick one.
100
+ ```bash
101
+ niro ab report
102
+ ```
103
+ The with-Niro and without-Niro comparison.
118
104
 
119
- **Ask the agent**
120
- > "What does Niro know about this folder?" / "Is this repo indexed?" — the agent runs `niro info --json` and explains it.
105
+ ```bash
106
+ niro ab disable
107
+ ```
108
+ Stop early. Every session uses Niro again.
121
109
 
122
110
  ---
123
111
 
124
- ## Scenario 4 — See all your projects
112
+ ## Connect another assistant
125
113
 
126
- **Terminal**
127
114
  ```bash
128
- niro projects # account-wide list (alias: `niro ls`)
129
- niro projects --json
115
+ niro mcp install
130
116
  ```
117
+ Pick from the list, or `--client <id>` to skip the prompt. Restart the assistant afterwards.
131
118
 
132
- **Ask the agent**
133
- > "List my Niro projects." — runs `niro projects --json`.
134
-
135
- ---
136
-
137
- ## Scenario 5 — Rebuild the index after changes
138
-
139
- **Terminal**
140
119
  ```bash
141
- niro build # full rebuild of the project pinned to this folder
142
- niro build my-service # by alias or id
143
- niro build --no-full-rebuild # incremental
144
- niro build --no-watch # trigger and return immediately
120
+ niro mcp install --list
145
121
  ```
122
+ All 14 supported clients and the file each one is configured through.
146
123
 
147
- **Ask the agent**
148
- > "Rebuild the Niro index for this project." — runs `niro build`.
124
+ ```bash
125
+ niro mcp uninstall --all -y
126
+ ```
127
+ Removes everything install added: MCP config, hooks and skills. Leaves you logged in.
149
128
 
150
- *(If you set up auto-sync in Scenario 8, you rarely need to rebuild by hand.)*
129
+ Per-client details: [docs/connect-your-ai-assistant.md](https://unpkg.com/@niroai/niro/docs/connect-your-ai-assistant.md)
151
130
 
152
131
  ---
153
132
 
154
- ## Scenario 6 — Manage environment variables (and pick which file drives each)
155
-
156
- Niro discovers env-var **names** from your code and their **default values** from committed config files. When the same variable appears in several files (e.g. `application.yml` vs `application-prod.yml`), you choose which file's value to use — the same as the web UI.
133
+ ## Managing projects
157
134
 
158
- **Terminal**
159
135
  ```bash
160
- niro edit --list-env # show vars, which file drives each, "appears in N files"
161
- niro edit --list-env --json # machine-readable (secret values masked)
162
- niro edit --set-env PORT=9000 # set a value directly (never printed back)
163
- niro edit --set-env-from PORT=application-prod.yml # adopt that file's value for PORT
164
- niro edit --rescan-env # re-scan after adding config files
136
+ niro edit --list-env
165
137
  ```
138
+ Environment variables Niro found, with secret values masked.
166
139
 
167
- Secret values are always masked (`****`) — whether the variable *name* looks secret (`DB_PASSWORD`) **or** its *value* embeds credentials (`DATABASE_URL=postgres://user:pass@host`). You pick those by file name; the value is never shown.
168
-
169
- **Ask the agent**
170
- > "Set PORT from application-prod.yml" or "What env vars does this project have?" — the agent runs `niro edit --list-env --json`, shows you the choices, and applies your pick with `--set-env-from`. It chooses **by file name** and never handles raw secret values.
171
-
172
- ---
140
+ ```bash
141
+ niro edit --set-env KEY=VALUE
142
+ ```
143
+ Set one. The value is never printed or logged.
173
144
 
174
- ## Scenario 7 — Rename a project, or add/remove a repo
145
+ ```bash
146
+ niro edit --alias new-name
147
+ ```
148
+ Rename a project.
175
149
 
176
- **Terminal**
177
150
  ```bash
178
- niro edit --alias new-name # rename the project
179
- niro edit --add-repo <gitId> # map a registered repo into the project
180
- niro edit --remove-repo <gitId> # unmap a repo (non-destructive)
181
- niro edit --project my-service --alias renamed # target a project explicitly
151
+ niro remove --unmap-repo <gitId>
182
152
  ```
153
+ Detach a repo from a project. Nothing is deleted.
183
154
 
184
- **Ask the agent**
185
- > "Rename this Niro project to `payments-api`." / "Remove repo X from this project."
155
+ ```bash
156
+ niro remove --project --confirm-name <name>
157
+ ```
158
+ Delete a whole project. Destructive, hence the confirmation.
186
159
 
187
160
  ---
188
161
 
189
- ## Scenario 8 — Keep a local folder auto-synced
190
-
191
- `niro init` and `niro add repo` install a background daemon (via PM2) that re-uploads your changes and keeps the graph fresh — honoring `.gitignore` so secrets never leave your machine.
162
+ ## Keeping in sync
192
163
 
193
- **Terminal**
194
164
  ```bash
195
- niro service install # install + start the niro-watch daemon (auto-starts on login)
196
165
  niro service status
197
- niro service uninstall
198
- niro watch # run a watch in the foreground (debugging / no PM2)
199
166
  ```
167
+ Is the background watcher running? It syncs your indexed folders as you edit.
200
168
 
201
- ---
202
-
203
- ## Scenario 9 — Remove a project or detach a repo
204
-
205
- **Terminal**
206
169
  ```bash
207
- niro remove --unmap-repo <gitId> # detach one repo (non-destructive)
208
- niro remove --project --confirm-name my-service # delete the WHOLE project (guarded)
170
+ niro service install
209
171
  ```
172
+ Start it and have it come back on login. Needs PM2 (`npm install -g pm2`).
210
173
 
211
- `--project` is destructive, so it **requires** `--confirm-name` to exactly match the project's alias or id.
212
-
213
- **Ask the agent**
214
- > "Remove the Niro project `my-service`." — the agent confirms with you, then runs `niro remove --project --confirm-name my-service`.
174
+ ```bash
175
+ niro watch
176
+ ```
177
+ Watch this folder in the foreground instead, for one session.
215
178
 
216
179
  ---
217
180
 
218
- ## Scenario 10 — Ask your AI assistant about your code
181
+ ## Reference
219
182
 
220
- After `niro mcp install` (and a restart of your assistant), the `niro-skill` routes code questions through Niro's graph instead of grep:
183
+ Add `--help` to any command for its flags. Add `--json` to `whoami`, `info`, `status`,
184
+ `projects`, `build`, `ab report` and `edit --list-env` for machine-readable output.
221
185
 
222
- > "What calls `chargeCard()`?"
223
- > "What breaks if I change the `Invoice` schema?"
224
- > "Where is the auth middleware wired up?"
225
- > "Is there existing code that parses webhooks before I write a new one?"
186
+ | File | What it holds |
187
+ |---|---|
188
+ | `~/.niro/credentials.json` | Your login, mode `0600` |
189
+ | `~/.niro/config.json` | Backend URLs saved during setup |
190
+ | `~/.niro/projects.json` | Per-folder sync state |
191
+ | `.niro-project` | Pins a repo folder to a Niro project |
226
192
 
227
- This works in any folder that resolves to a Niro project (via its git remote or a `.niro-project` pin).
193
+ | Variable | What it sets | Default |
194
+ |---|---|---|
195
+ | `NIRO_API_URL` | Backend the CLI talks to | `https://aiorchestrator.niroai.dev` |
196
+ | `NIRO_MCP_SERVER_URL` | Backend the MCP server talks to | `https://aiassistant.niroai.dev` |
197
+ | `NIRO_API_KEY` | Read by the MCP server when running headless. For CI, prefer `niro login --api-key` | none |
198
+ | `NIRO_UPLOAD_CONCURRENCY` / `_TIMEOUT_MS` / `_MAX_TOTAL_BYTES` / `_MAX_FILES` | Tune the first upload | 4 / 60000 / 1 GiB / 50000 |
228
199
 
229
- **Where does the MCP point?**
230
- > "Which backend is my Niro MCP connected to?" — the `niro-cli` skill inspects your editor's MCP config and reports the URL + connection status.
200
+ Running your own instance? Set `NIRO_API_URL` before `niro login`, and pass `--url <url>` to
201
+ `niro mcp install`.
231
202
 
232
203
  ---
233
204
 
234
- ## Scenario 11 — Disconnect an AI assistant (uninstall the MCP)
235
-
236
- `niro mcp uninstall` is the exact inverse of `niro mcp install`: it removes the MCP server registration and everything install added for that editor — the niro hooks in `~/.claude/settings.json`, the `## Niro MCP` section in `CLAUDE.md` / `AGENTS.md`, the generated `niro-skill` / `niro-cli` skills, and Cursor's allowlist entry + project rule. It only touches niro's own entries; your other hooks, MCP servers, and notes are left intact.
237
-
238
- **Terminal**
239
- ```bash
240
- niro mcp uninstall # interactive: pick client(s) (or "all")
241
- niro mcp uninstall --client claude-code # remove from one editor, no prompt
242
- niro mcp uninstall --client claude-code,codex # remove from several in one go
243
- niro mcp uninstall --all -y # remove from every editor, skip the confirm
244
- ```
245
-
246
- It does **not** sign you out — your `niro login` session in `~/.niro/credentials.json` is kept (run `niro logout` to clear it), and the `niro` command itself stays installed (remove it with `npm rm -g @niroai/niro`). The shared `~/.agents/skills` (used by both Codex and Windsurf) is only deleted once the last of those two editors is disconnected, so uninstalling one never breaks the other.
247
-
248
- **Ask the agent**
249
- > "Disconnect Niro from Claude Code." / "Uninstall the Niro MCP from all my editors."
250
-
251
- ---
205
+ ## What leaves your machine
252
206
 
253
- ## Command reference
207
+ Source and config files from the folder you confirmed, and nothing else. `.gitignore` is
208
+ honoured, so a gitignored `.env` is never sent. Raw `.env` and `*.properties` files are not in
209
+ the upload set; committed files like `application.yml` and `.env.example` are, because they hold
210
+ defaults rather than secrets.
254
211
 
255
- | Command | What it does |
256
- |---|---|
257
- | `niro login` / `logout` / `whoami` | Authenticate / sign out / show current account |
258
- | `niro init [path]` | Onboard a folder end-to-end (upload, project, env scan, build, watch) |
259
- | `niro info [path]` | What Niro knows about this folder (repo, branch, project(s), status) |
260
- | `niro projects` (`niro ls`) | List all projects in your account |
261
- | `niro status [project]` | Live build status for a project |
262
- | `niro build [project]` | Trigger a rebuild and stream progress |
263
- | `niro edit …` | Rename, map/unmap repos, manage env vars (incl. `--set-env-from`) |
264
- | `niro remove …` | Delete a project (`--project`, guarded) or detach a repo (`--unmap-repo`) |
265
- | `niro add repo [path\|url]` | Register a local folder or remote git URL |
266
- | `niro add project` | Create a project from registered repos |
267
- | `niro watch [path]` / `niro service …` | Foreground watch / manage the auto-sync daemon |
268
- | `niro mcp install` | Connect an AI assistant + install the agent skills (one per run; `--client <id>` to skip the prompt, `--url <url>` for your own backend) |
269
- | `niro mcp uninstall` | Disconnect an AI assistant — reverses `mcp install` (`--client <id>` / `--all`, `-y` to skip confirm) |
270
- | `niro delete [project]` | Older whole-project delete (prefer `niro remove --project`) |
271
-
272
- Add `--json` to `whoami`, `info`, `status`, `projects`, `build`, and `edit --list-env` for machine-readable output. Add `--help` to any command for its full flags.
212
+ Secret values are never printed: `--set-env` does not echo them, and `--list-env` masks anything
213
+ that looks like a secret by name or by content.
273
214
 
274
215
  ---
275
216
 
276
- ## Config & local state
217
+ ## If something is wrong
277
218
 
278
- | Location | Purpose |
279
- |---|---|
280
- | `~/.niro/credentials.json` | Auth credential + token (mode `0600`) |
281
- | `~/.niro/config.json` | `apiUrl` / `mcpServerUrl` saved during setup |
282
- | `~/.niro/projects.json` | Per-folder sync state (gitId, patterns, file hashes) |
283
- | `.niro-project` (in a repo) | Pins that folder to a Niro project (single line: project id or alias) |
219
+ **The assistant ignores Niro.** Restart it. Skills load at startup, so a fresh `niro mcp install`
220
+ does nothing until you do.
284
221
 
285
- | Environment variable | Purpose | Default |
286
- |---|---|---|
287
- | `NIRO_API_URL` | CLI → ai-orchestrator base URL | `https://aiorchestrator.niroai.dev` |
288
- | `NIRO_MCP_SERVER_URL` | MCP server (ai-assistant) base URL | `https://aiassistant.niroai.dev` |
289
- | `NIRO_API_KEY` | Read by the **MCP server** (e.g. headless `niro mcp serve`) — not a CLI-command auth path; for CI use `niro login --api-key` | — |
290
- | `NIRO_UPLOAD_CONCURRENCY` / `NIRO_UPLOAD_TIMEOUT_MS` / `NIRO_UPLOAD_MAX_TOTAL_BYTES` / `NIRO_UPLOAD_MAX_FILES` | Tune the initial upload | 4 / 60000 / 1 GiB / 50000 |
222
+ **`niro: command not found`.** Your global npm bin is not on `PATH`. Check with `npm bin -g`.
291
223
 
292
- ---
224
+ **This folder maps to several projects.** Pass `--project <alias|id>`, or pick one when asked.
293
225
 
294
- ## Security notes
226
+ **Auto-sync is not running.** `npm install -g pm2`, then `niro service install`.
295
227
 
296
- - **Secrets stay on your machine.** Uploads honor `.gitignore` (and `.git/info/exclude` / global excludes), so a gitignored `.env` is never sent. Raw `.env`/`*.properties` files aren't in the upload set; committed config files (`application.yml`, `.env.example`, …) are, because they hold *behavioral* defaults, not secrets.
297
- - **Secret values are never printed.** `--set-env` / `--set-env-from` never echo a value, and `--list-env` masks any value that looks like a secret — by key name *or* by content (connection strings, keys).
298
- - **The agent never handles raw secret values.** It picks env sources *by file name*; you type any real secret yourself.
228
+ **A folder was refused.** Niro will not index your home folder, or a folder with no build file
229
+ in it. Point it at the repo you meant.
299
230
 
300
231
  ---
301
232
 
302
- ## Troubleshooting
303
-
304
- - **The agent doesn't run Niro commands** — restart your AI assistant after `niro mcp install` (skills load at startup). Re-running `niro mcp install` refreshes the skills if they've been updated.
305
- - **`niro` not found** — ensure your global npm bin is on `PATH` (`npm bin -g`).
306
- - **A folder maps to multiple projects** — pass `--project <alias|id>` (or pick one when prompted).
307
- - **Auto-sync isn't running** — install PM2 (`npm install -g pm2`) then `niro service install`.
308
-
309
- ---
310
-
311
- ## License
312
-
313
233
  MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@niroai/niro",
3
- "version": "0.9.0",
3
+ "version": "0.10.1",
4
4
  "description": "Niro — one package: the niro CLI plus the Niro MCP server (code intelligence for AI coding assistants).",
5
5
  "keywords": [
6
6
  "niro",