opennori 0.1.0

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.
@@ -0,0 +1,272 @@
1
+ # OpenNori Protocol
2
+
3
+ OpenNori is the product; Nori is the agent-facing role that turns goals into Nori Contracts.
4
+
5
+ The human-facing surface is acceptance state:
6
+
7
+ - goal
8
+ - user acceptance criteria
9
+ - current acceptance gap
10
+ - evidence summary
11
+ - final status
12
+
13
+ Implementation plans are allowed inside the agent's private reasoning, but they are not the default
14
+ progress surface and they are not completion evidence.
15
+
16
+ ## Layered Acceptance Criteria v1
17
+
18
+ OpenNori itself is accepted only when it satisfies user-tool-operation acceptance criteria.
19
+
20
+ Each criterion must follow this shape:
21
+
22
+ ```text
23
+ As a user,
24
+ using [tool or entrypoint],
25
+ I perform [concrete operation],
26
+ and can [make a judgment or take an action],
27
+ within [measurable threshold].
28
+ ```
29
+
30
+ The first complete OpenNori acceptance set is layered. The layers prevent the project from
31
+ mistaking a working protocol kernel for the complete product.
32
+
33
+ ### L1 Protocol AC
34
+
35
+ The protocol layer proves that the repository can hold a Nori Contract, evidence record,
36
+ current gap, risk gate, and report.
37
+
38
+ | ID | Tool / entrypoint | User operation | User acceptance criterion | Passing threshold |
39
+ | --- | --- | --- | --- | --- |
40
+ | AC-P-1 | Editor / file browser | Open the active Nori Contract | The user understands goal, layered ACs, each status, and the current gap. | No chat history or implementation explanation required; understandable within 60 seconds. |
41
+ | AC-P-2 | CLI | Run `nori check` | The user can reject technical implementation details masquerading as ACs. | Files, fields, commands, tests, or modules cannot be accepted as user ACs by themselves. |
42
+ | AC-P-3 | CLI | Run `nori next` or `nori status` | The user sees the current acceptance gap and completion answer, not a process-step list. | Output answers which AC is missing, whether complete, and whether human action is required. |
43
+ | AC-P-4 | CLI / report | Inspect a high-risk AC | The user sees that weak evidence cannot make it passing. | High-risk passing cannot rely only on agent self-summary. |
44
+ | AC-P-5 | CLI / Codex | Trigger `nori report` | The user sees goal, layered AC statuses, evidence summaries, current gap, intervention, and conclusion. | Report is organized by acceptance state and evidence, not process steps. |
45
+ | AC-P-6 | CLI / report | Inspect evidence basis | The user can tell what evidence supports passing, blocked, or waived ACs. | Report/status shows evidence summary, basis, confidence, and limitations, not only an agent conclusion. |
46
+ | AC-P-7 | CLI / report | Review evidence sources | The user can review evidence sources without constraining how the agent gathered them. | Sources can be commands, artifacts, URLs, screenshots, diffs, human confirmations, or other reviewable references. |
47
+ | AC-P-8 | CLI / report | Compare evidence basis types | The user can distinguish tool observations, human confirmations, artifact reviews, protocol checks, and agent observations. | Evidence basis is shown clearly and agent judgment is not disguised as tool or human verification. |
48
+ | AC-P-9 | CLI / report | Inspect reviewability and limitations | The user sees how to review evidence and what it does not cover. | Report shows reviewability and limitations for structured evidence. |
49
+ | AC-P-10 | CLI / report | Inspect combined evidence sources | The user can see one AC supported by multiple sources. | Evidence can contain multiple sources without forcing them into fixed adapters. |
50
+ | AC-P-11 | Codex conversation | Ask the agent to record a verification as evidence | The user does not need to remember evidence CLI flags. | The OpenNori Skill tells the agent to choose a suitable verification method, then record basis, sources, reviewability, confidence, and limitations. |
51
+
52
+ ### L2 Operator AC
53
+
54
+ The operator layer proves that Codex can actually use OpenNori as the work protocol in conversation.
55
+
56
+ | ID | Tool / entrypoint | User operation | User acceptance criterion | Passing threshold |
57
+ | --- | --- | --- | --- | --- |
58
+ | AC-O-1 | Codex conversation | Start a task with "use OpenNori for this goal" | The user sees a draft Nori Contract written from the user's perspective. | Draft ACs describe user actions or judgments; user can approve or revise. |
59
+ | AC-O-2 | Codex conversation | Approve or revise the acceptance criteria | The user controls what "done" means. | Agent cannot decide completion before user-confirmed criteria exist. |
60
+ | AC-O-3 | New Codex session | Ask to continue OpenNori | The agent restores the active goal and current acceptance gap. | Recovery uses repo files, not old chat context. |
61
+ | AC-O-4 | Codex conversation | Ask "is it done?" | The agent answers only from required AC status and evidence. | Complete is allowed only when required ACs are all `passing` or `waived`. |
62
+ | AC-O-5 | Codex conversation | Ask "what do I need to do?" | If blocked, the user sees a concrete human action. | Blocked output asks for a decision, input, permission, cost approval, or similar human action. |
63
+ | AC-O-6 | Codex conversation | Revise an AC after new facts appear | The changed acceptance basis is preserved. | Updated ACs become the basis for `current_gap` and completion; old criteria are not silently reused. |
64
+ | AC-O-7 | Codex conversation | Ask OpenNori to brainstorm a fuzzy idea | The user sees selectable acceptance directions without remembering CLI syntax. | Brainstorm candidates describe user value, observable acceptance direction, and risk; they are not treated as a contract or completion evidence. |
65
+ | AC-O-8 | Codex conversation | State required Skills, preferred stacks, avoided tools, or execution constraints | The agent records a Nori Profile without making the user remember CLI syntax. | Must/avoid profile items are shown in contract and report; unsatisfied must items or violated avoid items block completion unless waived. |
66
+
67
+ ### L3 Productization AC
68
+
69
+ The productization layer proves that OpenNori can be installed, reused, reviewed, and cleaned up as
70
+ a durable workflow asset.
71
+
72
+ | ID | Tool / entrypoint | User operation | User acceptance criterion | Passing threshold |
73
+ | --- | --- | --- | --- | --- |
74
+ | AC-Z-1 | CLI | Run `nori skill export` | The user gets a usable Codex Skill draft for OpenNori. | The Skill tells agents to drive work through resume, next, evidence, evaluate, status, and report. |
75
+ | AC-Z-2 | CLI | Run `nori install` | The user can install OpenNori into a project without unexpected overwrites. | Install shows created/skipped assets; existing user content is not overwritten by default. |
76
+ | AC-Z-3 | Git / PR diff | Review the agent's changes | The user can separate acceptance evidence changes from implementation noise. | Summary defaults to AC status changes, evidence changes, and user impact. |
77
+ | AC-Z-4 | CLI | Run `nori list` and select a goal | The user can see multiple active goals and choose one explicitly. | Multiple active goals are listed with status, gap, and paths; `--goal` selects the target. |
78
+ | AC-Z-5 | CLI | Archive a completed or blocked goal | The user removes it from active work while preserving evidence and report. | Active no longer lists the goal; contract, ledger, and report remain recoverable. |
79
+ | AC-Z-6 | Project file browser | Inspect the project after running OpenNori | The user sees OpenNori-owned state under `.opennori/` instead of a generic project `process/` directory. | Install, draft, brainstorm, report, and archive write OpenNori state under `.opennori/` by default. |
80
+ | AC-Z-7 | CLI / project file browser | Run `nori install` | The user can inspect project OpenNori registration and judge version, managed entries, active goals, Skill status, and protocol capabilities. | Install output uses create, skip, overwrite, or update semantics; `.opennori/manifest.json` records version, managed files, active goals, Skill state, and capabilities. |
81
+ | AC-Z-8 | CLI | Run `nori doctor` | The user can judge whether the project is `ready`, `needs-action`, or `broken`, and see the next recovery action. | Doctor checks `.opennori` structure, manifest consistency, active goal recoverability, Skill sync, CLI runtime, and recovery suggestions. |
82
+ | AC-Z-9 | CLI | Preview install with `nori install --dry-run` | The user can judge what OpenNori would create, skip, update, or overwrite before writing to the project. | Install plan lists action, kind, managed status, write intent, destructive flag, and reason; dry-run reports zero actual writes. |
83
+ | AC-Z-10 | CLI | Apply force install | The user must preview and explicitly confirm destructive install actions before files are overwritten. | Real `nori install --force` fails without confirmation; dry-run previews destructive overwrites; confirmed force install may write. |
84
+ | AC-Z-11 | CLI | Preview and apply uninstall | The user can uninstall OpenNori entry assets without losing acceptance state by default. | Uninstall plan shows removals and preserved state; real uninstall requires confirmation; `.opennori` state is deleted only with `--include-state --confirm`. |
85
+ | AC-Z-12 | CLI / Codex Skills | Install OpenNori Skill Pack | The agent gets focused OpenNori Skills for acceptance, evidence, Nori Profile, project health, and reporting while the user keeps using natural language. | `nori skill export --pack` exposes the pack; `nori install --skill` writes it; manifest records `skill_pack`; doctor detects missing or stale pack Skills. |
86
+
87
+ ## Required Artifact Pair
88
+
89
+ OpenNori writes its project-local state under `.opennori/`.
90
+
91
+ ```text
92
+ .opennori/
93
+ manifest.json
94
+ protocol.md
95
+ active/
96
+ <goal>.acceptance.md
97
+ <goal>.evidence.json
98
+ completed/
99
+ blocked/
100
+ reports/
101
+ brainstorms/
102
+ ```
103
+
104
+ Each active goal has:
105
+
106
+ - `<goal>.acceptance.md` for human review
107
+ - `<goal>.evidence.json` for deterministic agent/tool updates
108
+
109
+ `.opennori/manifest.json` records the project-local OpenNori registration:
110
+
111
+ - manifest schema and OpenNori protocol version
112
+ - OpenNori package version
113
+ - managed `.opennori` files and directories
114
+ - active goals recoverable from `.opennori/active`
115
+ - optional repo-local OpenNori Skill state
116
+ - optional repo-local OpenNori Skill Pack state
117
+ - protocol capabilities exposed by this CLI
118
+
119
+ `nori install` creates or refreshes the manifest. State-changing OpenNori commands refresh it when
120
+ `.opennori/` already exists.
121
+
122
+ `nori install --dry-run` returns an install plan. The plan uses deterministic action semantics:
123
+
124
+ - `create`: missing OpenNori asset would be created
125
+ - `exists`: required OpenNori directory already exists
126
+ - `skip`: existing file is preserved because `--force` was not used
127
+ - `overwrite`: existing file would be overwritten because `--force` was used
128
+ - `update`: generated OpenNori state, such as the manifest, would be refreshed
129
+
130
+ Each planned action also reports `kind`, `managed`, `would_write`, `will_write`, `destructive`,
131
+ and a short human-readable reason.
132
+
133
+ Real `nori install --force` can overwrite OpenNori-managed files, so it requires explicit confirmation.
134
+ Run `nori install --dry-run --force` first to inspect destructive actions, then rerun with
135
+ `--confirm` only if those writes are acceptable.
136
+
137
+ `nori uninstall --dry-run` returns an uninstall plan. By default it removes entry assets such as the
138
+ repo-local OpenNori Skill and manifest, while preserving Nori Contracts, evidence records,
139
+ reports, archives, and brainstorms. Real uninstall requires `--confirm`. Deleting the whole `.opennori`
140
+ state directory requires both `--include-state` and `--confirm`.
141
+
142
+ ## Skill Pack
143
+
144
+ OpenNori exposes a Skill Pack for agent use. The user should not need to remember these Skill names;
145
+ the root `nori` Skill routes natural-language requests to focused Skills:
146
+
147
+ - `nori`: root router for OpenNori turns
148
+ - `nori-acceptance`: brainstorm, draft, approve, and revise human-facing ACs
149
+ - `nori-evidence`: record reviewable evidence without forcing fixed adapters
150
+ - `nori-capability-profile`: record required Skills, preferred stacks, avoided tools, and install policy
151
+ - `nori-project-health`: install, uninstall, doctor, manifest, and Skill Pack sync
152
+ - `nori-reporting`: status, report, current gap, user intervention, and changes
153
+
154
+ `nori install --skill` installs the pack under `.agents/skills/`. The manifest records `skill_pack`
155
+ state, and `nori doctor` checks whether the pack is installed and in sync.
156
+
157
+ ## Nori Profile
158
+
159
+ Acceptance criteria remain human-facing outcomes. A Nori Profile is separate execution
160
+ guidance for the agent when the user says things like:
161
+
162
+ - must use an existing Skill
163
+ - prefer a library or stack
164
+ - avoid a tool
165
+ - ask before installing a dependency
166
+ - follow a project-specific constraint
167
+
168
+ Profile items have:
169
+
170
+ - `type`: `skill`, `stack`, or `constraint`
171
+ - `strength`: `must`, `prefer`, or `avoid`
172
+ - `purpose`: why the user wants it
173
+ - `install_policy`: `existing_only`, `ask_before_install`, or `allowed`
174
+
175
+ Completion rules:
176
+
177
+ - `must` blocks completion until satisfied or waived.
178
+ - `prefer` is reported but does not block completion.
179
+ - `avoid` blocks completion if violated.
180
+
181
+ Agents translate the user's natural-language preferences into profile records. Users should not
182
+ need to remember `nori profile` commands.
183
+
184
+ ## Status Model
185
+
186
+ - `unknown`: no user-understandable evidence exists
187
+ - `failing`: evidence shows the criterion is not satisfied
188
+ - `passing`: evidence shows the criterion is satisfied
189
+ - `blocked`: user decision or external condition required
190
+ - `waived`: user explicitly accepts the unmet criterion with a reason
191
+
192
+ The workflow is complete only when every required criterion is `passing` or `waived`.
193
+
194
+ ## Risk Gate
195
+
196
+ OpenNori separates acceptance status from evidence strength.
197
+
198
+ For `high` risk criteria, weak evidence cannot make an AC `passing`. If an agent submits
199
+ `passing` evidence with a weak kind, OpenNori downgrades the criterion to `failing` with
200
+ `confidence: strong-evidence-required`.
201
+
202
+ Strong evidence kinds:
203
+
204
+ - `test-summary`
205
+ - `screenshot`
206
+ - `artifact`
207
+ - `review-result`
208
+ - `human-confirmation`
209
+ - `protocol-v1`
210
+
211
+ Strong explicit confidence values:
212
+
213
+ - `verified`
214
+ - `reviewed`
215
+ - `human-confirmed`
216
+
217
+ This keeps high-risk completion from relying on agent self-summary.
218
+
219
+ ## Free Evidence Structure
220
+
221
+ OpenNori does not require the agent to use a fixed set of evidence adapters. The agent may choose the
222
+ verification approach that fits the task: tests, Git diff, screenshots, browser checks, logs,
223
+ artifacts, URLs, AW doctor, human confirmation, or another reviewable signal.
224
+
225
+ When the agent submits evidence, the user-facing record should explain:
226
+
227
+ - `basis`: why this evidence can support the AC, such as `tool-observation`,
228
+ `human-confirmation`, `artifact-review`, `protocol-check`, or `agent-observation`
229
+ - `sources`: one or more reviewable references, each with a label and optional command, path, URL,
230
+ outcome, or other useful metadata
231
+ - `reviewability`: how the user can rerun, reopen, inspect, or otherwise review the evidence
232
+ - `confidence`: the evidence strength used by completion and risk gates
233
+ - `limitations`: what the evidence does not cover
234
+
235
+ The shape is intentionally open. OpenNori should preserve arbitrary source metadata instead of forcing
236
+ all evidence through a narrow adapter taxonomy.
237
+
238
+ ## Agent Rule
239
+
240
+ On every turn:
241
+
242
+ 1. If the user wants to discuss, brainstorm, explore, or is not ready to define acceptance criteria, run `nori brainstorm --idea "<idea>" --root <repo> --json`.
243
+ 2. Show only candidate acceptance directions and ask the user to choose or revise a direction. Brainstorm output is not a contract or completion evidence.
244
+ 3. If the user chooses a candidate, run `nori draft --from-brainstorm <brainstorm-id> --candidate <A|B|C> --root <repo> --json`.
245
+ 4. If the user starts with "use OpenNori" / "用 OpenNori 跑这个任务", run `nori draft --goal "<goal>" --root <repo> --json`.
246
+ 5. Show the draft acceptance criteria and ask the user to approve or revise them.
247
+ 6. After approval, run `nori approve --root <repo> --summary "<approval>" --json`.
248
+ 7. If the user states required Skills, preferred stacks, avoided tools, install policy, or execution constraints, run `nori profile add --root <repo> ... --json` and keep those items out of the user acceptance criteria.
249
+ 8. If the user revises a criterion later, run `nori criterion update --root <repo> --criterion <id> ... --json`; old evidence for the changed criterion is cleared.
250
+ 9. Run `nori resume --root <repo>` or `nori next --root <repo>` to recover the active goal and current acceptance gap from repository files.
251
+ 10. Work only to produce evidence for that gap.
252
+ 11. Add acceptance evidence with `nori evidence add`; choose any suitable verification method, but record basis, sources, reviewability, confidence, and limitations. Add profile compliance evidence with `nori profile evidence` when profile items exist.
253
+ 12. Run `nori evaluate`.
254
+ 13. Report acceptance state, profile compliance, and evidence, not implementation steps.
255
+
256
+ Useful commands:
257
+
258
+ - `nori brainstorm --idea "<idea>" --root <repo>`: create selectable acceptance directions before a contract exists.
259
+ - `nori draft --goal "<goal>" --root <repo>`: create a draft Nori Contract that needs user approval.
260
+ - `nori draft --from-brainstorm <brainstorm-id> --candidate <A|B|C> --root <repo>`: convert a selected brainstorm direction into a draft contract.
261
+ - `nori approve --root <repo>`: mark the acceptance basis as approved so completion can be decided.
262
+ - `nori criterion update --root <repo> --criterion <id> ...`: preserve a user revision as the new acceptance basis.
263
+ - `nori evidence add --root <repo> --criterion <id> --kind <kind> --summary "<summary>" --result <passing|failing|blocked|waived> --basis <basis> --source '<json-or-label>' --reviewability "<how to review>" --limitations "<known limits>"`: attach user-understandable, reviewable evidence without forcing a fixed adapter.
264
+ - `nori profile add --root <repo> --type <skill|stack|constraint> --name "<name>" --strength <must|prefer|avoid>`: record user execution preferences separately from ACs.
265
+ - `nori profile evidence --root <repo> --item <item-id> --result <satisfied|violated|waived>`: record whether the agent followed the profile.
266
+ - `nori profile show --root <repo>`: show profile compliance and blocking items.
267
+ - `nori list --root <repo>`: list active OpenNori goals.
268
+ - `nori install --root <repo>`: create or refresh project-local OpenNori assets and manifest.
269
+ - `nori doctor --root <repo>`: inspect project OpenNori health and recovery actions.
270
+ - `nori resume --root <repo>`: recover the active goal, current gap, completion answer, and intervention state.
271
+ - `nori status --root <repo>`: answer whether the goal is complete and whether the user needs to act.
272
+ - `nori report --root <repo>`: generate the human acceptance report.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 okbexx
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,79 @@
1
+ # OpenNori
2
+
3
+ OpenNori.
4
+
5
+ OpenNori gives coding agents a protocol surface centered on human acceptance criteria and evidence.
6
+ The user sees whether the goal is satisfied, why, and what is still missing. The agent can still
7
+ plan internally, but progress is determined by acceptance evidence.
8
+
9
+ ## Shape
10
+
11
+ ```text
12
+ .opennori/
13
+ manifest.json
14
+ protocol.md
15
+ active/
16
+ <goal>.acceptance.md
17
+ <goal>.evidence.json
18
+ completed/
19
+ blocked/
20
+ reports/
21
+ brainstorms/
22
+ ```
23
+
24
+ ## Quick Start
25
+
26
+ ```bash
27
+ node ./bin/nori.js install --root . --dry-run --json
28
+ node ./bin/nori.js install --root . --skill --json
29
+ node ./bin/nori.js doctor --root . --json
30
+ node ./bin/nori.js skill export --pack --json
31
+ node ./bin/nori.js brainstorm --idea "Explore a fuzzy goal before acceptance" --root . --json
32
+ node ./bin/nori.js draft --from-brainstorm explore-a-fuzzy-goal-before-acceptance --candidate A --root . --json
33
+ node ./bin/nori.js draft --goal "Ship a user-visible task" --root . --json
34
+ node ./bin/nori.js approve --root . --summary "User approved acceptance criteria." --json
35
+ node ./bin/nori.js init examples/opennori-self.json --root . --json
36
+ node ./bin/nori.js resume --root . --json
37
+ node ./bin/nori.js next --root . --json
38
+ node ./bin/nori.js status --root . --json
39
+ node ./bin/nori.js criterion update --root . --criterion AC-P-1 --user-story "作为用户,我能判断当前验收缺口。" --json
40
+ node ./bin/nori.js evidence add --root . --criterion AC-P-1 --kind test-summary --summary "User can inspect the Nori Contract." --result passing --basis tool-observation --source '{"type":"command","label":"npm test","command":"npm test","outcome":"passed"}' --reviewability "User can rerun the command." --limitations "Does not prove visual UX." --json
41
+ node ./bin/nori.js profile add --root . --type skill --name design-taste-frontend --strength must --purpose "Use this Skill for the design read and theme token pass." --install-policy existing_only --json
42
+ node ./bin/nori.js profile add --root . --type stack --name radix-ui --strength prefer --purpose "Use accessible primitives for custom components." --install-policy ask_before_install --json
43
+ node ./bin/nori.js profile show --root . --json
44
+ node ./bin/nori.js profile evidence --root . --item skill-design-taste-frontend --result satisfied --summary "Agent used the required Skill before implementation." --json
45
+ node ./bin/nori.js evaluate --root . --json
46
+ node ./bin/nori.js report --root . --json
47
+ ```
48
+
49
+ `nori install` writes `.opennori/manifest.json` with the OpenNori version, managed files, active goals,
50
+ optional project Skill Pack state, and supported protocol capabilities. `nori doctor` reports whether a
51
+ project is `ready`, `needs-action`, or `broken`, with recovery actions for missing structure, stale
52
+ manifest data, broken active goals, and stale Skills.
53
+
54
+ `nori install --dry-run` returns an `install_plan` that shows each planned action, asset kind,
55
+ managed status, write intent, destructive overwrite flag, and reason. Dry-run plans report
56
+ `will_write: 0` so users can review install impact before applying it.
57
+
58
+ Real `nori install --force` requires `--confirm`. Preview destructive actions with
59
+ `nori install --force --dry-run --json` before applying a confirmed overwrite.
60
+
61
+ `nori uninstall --dry-run --json` previews removals. Default uninstall removes entry assets while
62
+ preserving active goals, evidence, reports, archives, and brainstorms; deleting `.opennori` state
63
+ requires `nori uninstall --include-state --confirm --json`.
64
+
65
+ Evidence is intentionally open-ended. Agents can use tests, diffs, screenshots, logs, artifacts,
66
+ URLs, human confirmation, AW doctor, or any other useful signal. OpenNori only requires the submitted
67
+ evidence to be reviewable by the user: include a basis, one or more sources, reviewability,
68
+ confidence, and limitations when the evidence affects completion.
69
+
70
+ `nori install --skill` installs the OpenNori Skill Pack under `.agents/skills/`: the root `nori` router
71
+ plus focused Skills for acceptance, evidence, Nori Profile, project health, and reporting.
72
+ Users keep using natural language; the Skills route agent behavior to the right CLI loop.
73
+
74
+ ## Development
75
+
76
+ ```bash
77
+ npm test
78
+ npm run check
79
+ ```
package/bin/nori.js ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ import { main } from "../src/cli.js";
3
+
4
+ main(process.argv.slice(2)).catch((error) => {
5
+ console.error(JSON.stringify({
6
+ ok: false,
7
+ error: {
8
+ type: "unexpected_error",
9
+ message: error instanceof Error ? error.message : String(error)
10
+ }
11
+ }, null, 2));
12
+ process.exitCode = 1;
13
+ });