@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 +69 -0
- package/README.md +131 -211
- package/package.json +1 -1
- package/src/commands/ab.js +198 -0
- package/src/commands/add-project.js +11 -11
- package/src/commands/add-repo.js +23 -23
- package/src/commands/build.js +5 -5
- package/src/commands/delete.js +3 -3
- package/src/commands/edit.js +11 -11
- package/src/commands/info.js +2 -2
- package/src/commands/init.js +108 -87
- package/src/commands/login.js +25 -5
- package/src/commands/projects.js +1 -1
- package/src/commands/release.js +7 -7
- package/src/commands/remove.js +5 -5
- package/src/commands/start.js +567 -0
- package/src/commands/takeover.js +19 -19
- package/src/commands/watch.js +35 -35
- package/src/index.js +57 -3
- package/src/lib/folderSync.js +13 -8
- package/src/lib/moduleExcludeSuggestions.js +5 -5
- package/src/lib/nestedOutput.js +49 -0
- package/src/lib/onboardTarget.js +5 -5
- package/src/lib/prompt.js +3 -0
- package/src/lib/service.js +20 -12
- package/src/lib/spinner.js +28 -7
- package/src/lib/watchDaemon.js +9 -9
- package/src/mcp/setup.js +198 -160
- package/src/mcp/teardown.js +53 -53
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
|
|
1
|
+
# niro: CLI + MCP server (`@niroai/niro`)
|
|
2
2
|
|
|
3
|
-
|
|
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
|
|
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
|
-
|
|
8
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
## Working on branches
|
|
12
|
+
---
|
|
16
13
|
|
|
17
|
-
|
|
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
|
-
|
|
17
|
+
cd ~/code/my-service
|
|
18
|
+
npx @niroai/niro start
|
|
23
19
|
```
|
|
24
20
|
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
32
|
-
niro discard-temp-project
|
|
33
|
-
```
|
|
24
|
+
Then restart your assistant and ask it something:
|
|
34
25
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
26
|
+
```
|
|
27
|
+
"What breaks if I change PaymentService.refund?"
|
|
28
|
+
```
|
|
38
29
|
|
|
39
30
|
---
|
|
40
31
|
|
|
41
|
-
##
|
|
32
|
+
## What you can ask for
|
|
42
33
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
##
|
|
43
|
+
## Everyday commands
|
|
55
44
|
|
|
56
45
|
```bash
|
|
57
|
-
niro
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
79
|
-
|
|
65
|
+
```bash
|
|
66
|
+
niro build
|
|
67
|
+
```
|
|
68
|
+
Rebuild the index by hand and watch it finish.
|
|
80
69
|
|
|
81
70
|
---
|
|
82
71
|
|
|
83
|
-
##
|
|
72
|
+
## Working on a branch
|
|
84
73
|
|
|
85
|
-
|
|
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
|
-
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
92
|
+
## Measure what Niro changes
|
|
108
93
|
|
|
109
|
-
**Terminal**
|
|
110
94
|
```bash
|
|
111
|
-
niro
|
|
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
|
-
|
|
100
|
+
```bash
|
|
101
|
+
niro ab report
|
|
102
|
+
```
|
|
103
|
+
The with-Niro and without-Niro comparison.
|
|
118
104
|
|
|
119
|
-
|
|
120
|
-
|
|
105
|
+
```bash
|
|
106
|
+
niro ab disable
|
|
107
|
+
```
|
|
108
|
+
Stop early. Every session uses Niro again.
|
|
121
109
|
|
|
122
110
|
---
|
|
123
111
|
|
|
124
|
-
##
|
|
112
|
+
## Connect another assistant
|
|
125
113
|
|
|
126
|
-
**Terminal**
|
|
127
114
|
```bash
|
|
128
|
-
niro
|
|
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
|
|
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
|
-
|
|
148
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
|
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
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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
|
-
|
|
145
|
+
```bash
|
|
146
|
+
niro edit --alias new-name
|
|
147
|
+
```
|
|
148
|
+
Rename a project.
|
|
175
149
|
|
|
176
|
-
**Terminal**
|
|
177
150
|
```bash
|
|
178
|
-
niro
|
|
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
|
-
|
|
185
|
-
|
|
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
|
-
##
|
|
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
|
|
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
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
174
|
+
```bash
|
|
175
|
+
niro watch
|
|
176
|
+
```
|
|
177
|
+
Watch this folder in the foreground instead, for one session.
|
|
215
178
|
|
|
216
179
|
---
|
|
217
180
|
|
|
218
|
-
##
|
|
181
|
+
## Reference
|
|
219
182
|
|
|
220
|
-
|
|
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
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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
|
-
|
|
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
|
-
|
|
230
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
217
|
+
## If something is wrong
|
|
277
218
|
|
|
278
|
-
|
|
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
|
-
|
|
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
|
-
|
|
226
|
+
**Auto-sync is not running.** `npm install -g pm2`, then `niro service install`.
|
|
295
227
|
|
|
296
|
-
|
|
297
|
-
|
|
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
|