@rness/cli 0.9.2 → 0.11.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.
package/README.md CHANGED
@@ -28,6 +28,7 @@ Inside a workspace, every `rness` delegates to the copy pinned in
28
28
  rness login [--setup-git|--no-setup-git]
29
29
  rness logout
30
30
  rness context [--scope <name>] [--json]
31
+ rness status [<tab>]
31
32
  rness validate
32
33
  rness mcp
33
34
 
@@ -41,6 +42,28 @@ writes nothing and exits 1 when a block is out of date — use it in CI.
41
42
  `.rness/` goes to the network. Bring repositories in with
42
43
  `rness add <owner>/<repo>` or a git URL — a bare name needs an `"org"`.
43
44
 
45
+ ### Status
46
+
47
+ rness status # every decision, specification and plan, a tab per directory
48
+ rness status specs # open on one tab (off a terminal: print only that one)
49
+
50
+ A tab for `ADR`, `Specs` and `Plans`, always, then one for each other
51
+ directory of `.rness/` whose Markdown files carry a `status` in their front
52
+ matter (a `marketing/` of dated posts, say). A line per document, newest
53
+ first: its number (or date), its title, its status — green when done, grey
54
+ when dropped, red `?` when missing.
55
+
56
+ - In a terminal, a full-screen view: `←`/`→` or `Tab` change tab, `↑`/`↓`,
57
+ `PgUp`/`PgDn`, `Home`/`End` scroll, `q` or `Esc` closes and gives the
58
+ screen back. Read-only.
59
+ - Off a terminal — a pipe, CI, an agent's tool — Markdown: a table per tab.
60
+ - From Claude Code, `/rness:status [tab]` shows those tables (see "Agent
61
+ targets"). For the view itself: `Ctrl+Z` suspends Claude Code, run
62
+ `npx @rness/cli status` (or `rness status` with a global install), `q`,
63
+ then `fg` resumes it — the skill ends with that line. Nothing started from inside
64
+ Claude Code gets the terminal, so the view cannot open from there
65
+ (verified with Claude Code 2.1.284 on 2026-09-29).
66
+
44
67
  ### Agent targets
45
68
 
46
69
  The `AGENTS.md` block is what every agent reads. On top of it, rness writes
@@ -63,7 +86,14 @@ the files a given agent needs, for the agents the team declares in
63
86
  repository reads the context repository without a prompt. Claude Code
64
87
  applies it once the repository has been trusted interactively. Verified
65
88
  with Claude Code 2.1.284 on 2026-09-29. Each clone also gets `.mcp.json`,
66
- which registers the MCP server; see "MCP server".
89
+ which registers the MCP server; see "MCP server". The same settings file
90
+ carries two hooks, and so does `.claude/settings.json` at the workspace
91
+ root, which `sync` writes on every machine; see "Hooks". Both places also
92
+ get a Claude Code plugin, `.claude/skills/rness/`, with one command:
93
+ `/rness:status [tab]`, the tables of `rness status`. rness owns those
94
+ files whole — an edit by hand is reported by `sync --check` and written
95
+ back by `sync` — and nothing in them depends on the version. Claude Code
96
+ loads the plugin once the folder is trusted, in a session started there.
67
97
  - rness owns values, not files: what is missing is added, nothing else is
68
98
  touched, and a file it cannot parse is reported, never rewritten.
69
99
  `sync --check` and `validate` report a missing value. Removing an agent
@@ -71,6 +101,39 @@ the files a given agent needs, for the agents the team declares in
71
101
  - Other agents (Codex, Cursor, GitHub Copilot) read the `AGENTS.md` block;
72
102
  `sync` refuses an agent it has no target for.
73
103
 
104
+ ### Hooks
105
+
106
+ With `claude` in `agents`, each clone's `.claude/settings.json` and the
107
+ workspace root's carry two Claude Code hooks, both run by the pinned copy:
108
+
109
+ - **At session start** (`SessionStart`, every source): a line for the
110
+ developer — `rness 0.10.0 · acme · scope web — 3 standards, 2 decisions`
111
+ — and, for the model, the scope's documents as `rness_context` lists
112
+ them. When the context may be wrong, both say why: no `.rness` next to the
113
+ repository or nothing installed there, a `rness.json` rness refuses, a pin
114
+ the installed copy does not match, the problems `rness validate` reports.
115
+ After a compaction, the context only.
116
+ - **After an edit** (`PostToolUse` on `Edit|Write`): when the file is under
117
+ `.rness/`, its front-matter problems — or those of `rness.json` — go back
118
+ to the model, which fixes them in the same turn. Any other edit costs one
119
+ path check. Stale blocks are left to `sync`.
120
+
121
+ Each hook is one fixed `sh` line: it runs
122
+ `<.rness>/node_modules/@rness/cli/dist/bin/rness.js hook <event>` when that
123
+ file exists, and otherwise says so at session start and nothing after an
124
+ edit. The line never changes between versions — what the hook does lives in
125
+ the CLI — because rness compares its entry as a whole: an entry edited by
126
+ hand counts as missing, and the next `sync` adds a second one. The team's
127
+ own hooks stay where they are.
128
+
129
+ Claude Code runs hooks from a committed settings file without asking each
130
+ developer, including in `claude -p`. These two read `.rness/` and nothing
131
+ else: they write no file, run no install and reach no network. Review a
132
+ change to them like code. Verified with Claude Code 2.1.284 on 2026-09-29:
133
+ in a clone and at the root, the model received the context; after an edit
134
+ that broke a status, it received the problem. The `sh` line is not verified
135
+ on Windows.
136
+
74
137
  ### MCP server
75
138
 
76
139
  rness mcp # started by the agent over stdio, not by hand
@@ -243,6 +306,31 @@ per repository, the files to commit there.
243
306
  Exit codes: 0 success, 1 failure, 2 usage — or a refusal without a TTY.
244
307
  `RNESS_DEBUG=1` adds stack traces; `RNESS_NO_DELEGATE=1` skips the delegation.
245
308
 
309
+ ## 0.11.0 — `rness status`; `/rness:status` in Claude Code
310
+
311
+ - `rness status [tab]`: every decision, specification and plan — and any
312
+ other directory of `.rness/` whose documents carry a status — a tab per
313
+ directory, a line per document. A full-screen view in a terminal,
314
+ Markdown off one. See "Status".
315
+ - With `claude` in `agents`, `sync` writes the `rness` plugin
316
+ (`.claude/skills/rness/`) in each clone and at the workspace root:
317
+ `/rness:status` in Claude Code. `rness upgrade` syncs, so it adds them;
318
+ then commit `.claude/skills/rness/` in each repository, as its next steps
319
+ list. Until then `sync --check` and `validate` report the files missing.
320
+ - Blocks are unchanged.
321
+
322
+ ## 0.10.0 — hooks: the context at session start, validation after an edit
323
+
324
+ - With `claude` in `agents`, `sync` adds two hooks to each clone's
325
+ `.claude/settings.json`, and writes `.claude/settings.json` at the
326
+ workspace root with the same two. See "Hooks". `rness upgrade` syncs, so
327
+ it adds them; then commit `.claude/settings.json` in each repository, as
328
+ its next steps list. Until then `sync --check` and `validate` report the
329
+ hooks missing.
330
+ - A settings file keeps the team's own hooks: rness appends its entries
331
+ after them.
332
+ - Blocks are unchanged.
333
+
246
334
  ## 0.9.2 — the sync summary reads as a sentence
247
335
 
248
336
  - `rness sync` counts agent files apart from blocks: "4 blocks: 4
package/dist/bin/rness.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  findDelegate,
7
7
  reportError,
8
8
  run
9
- } from "../chunk-JKDF7ROY.js";
9
+ } from "../chunk-LW4S5OLI.js";
10
10
 
11
11
  // src/bin/rness.ts
12
12
  import { pathToFileURL } from "url";