@rness/cli 0.13.0 → 0.15.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
@@ -60,11 +60,15 @@ when dropped, red `?` when missing.
60
60
  screen back. Read-only.
61
61
  - Off a terminal — a pipe, CI, an agent's tool — Markdown: a table per tab.
62
62
  - From Claude Code, `/rness:status [tab]` shows those tables (see "Agent
63
- targets"). For the view itself: `Ctrl+Z` suspends Claude Code, run
64
- `npx @rness/cli status` (or `rness status` with a global install), `q`,
65
- then `fg` resumes it — the skill ends with that line. Nothing started from inside
66
- Claude Code gets the terminal, so the view cannot open from there
67
- (verified with Claude Code 2.1.284 on 2026-09-29).
63
+ targets"). Nothing started from inside Claude Code gets the terminal, so
64
+ the view cannot open from there (verified with Claude Code 2.1.284 on
65
+ 2026-09-29). Two ways to reach it, and the skill ends with both: in the
66
+ same terminal, `Ctrl+Z` suspends Claude Code, run `npx @rness/cli status`
67
+ (or `rness status` with a global install), `q`, then `fg` resumes it
68
+ (Unix only); or in another terminal, from the workspace's `.rness/`, with
69
+ the manager it installs with — `pnpm rness status`, `npx rness status`,
70
+ `yarn rness status` or `bunx rness status` — which runs the pinned copy
71
+ without the network (verified with each manager on 2026-09-30).
68
72
 
69
73
  ### Agent targets
70
74
 
@@ -91,11 +95,33 @@ the files a given agent needs, for the agents the team declares in
91
95
  which registers the MCP server; see "MCP server". The same settings file
92
96
  carries three hooks, and so does `.claude/settings.json` at the workspace
93
97
  root, which `sync` writes on every machine; see "Hooks". Both places also
94
- get a Claude Code plugin, `.claude/skills/rness/`, with one command:
95
- `/rness:status [tab]`, the tables of `rness status`. rness owns those
96
- files whole — an edit by hand is reported by `sync --check` and written
97
- back by `sync` — and nothing in them depends on the version. Claude Code
98
- loads the plugin once the folder is trusted, in a session started there.
98
+ get a Claude Code plugin, `.claude/skills/rness/`, with five commands:
99
+ `/rness:status [tab]`, the tables of `rness status`, and the lifecycle
100
+ skills below. rness owns those files whole — an edit by hand is reported
101
+ by `sync --check` and written back by `sync`. Nothing in them depends on
102
+ the version; the last line of the status skill names the workspace's
103
+ package manager, so changing `packageManager` in `.rness/package.json`
104
+ leaves it stale until the next `sync`. Claude Code loads the plugin once
105
+ the folder is trusted, in a session started there.
106
+ - **The lifecycle skills**: `/rness:adr [subject | NNNN]` records a decision
107
+ as an ADR, `/rness:spec [subject | NNNN]` writes a specification,
108
+ `/rness:plan <spec>` turns an approved specification into a plan, and
109
+ `/rness:done [plan]` closes a piece of work — each task checked on
110
+ evidence, then the plan `Completed`, its specification `Implemented`, and
111
+ the documents the work made inaccurate corrected. Each is a procedure
112
+ loaded into the conversation, not a file generator: after a decision has
113
+ been discussed, `/rness:adr` writes it from the conversation; otherwise
114
+ it asks, one question at a time. The skill stays in the conversation for
115
+ the next turns, and the file carries the work to the next session
116
+ (`/rness:adr 0010` reopens it). The agent may start one itself — an ADR
117
+ when a choice is expensive to reverse — but writes nothing without a yes.
118
+ The rules stay in `.rness/CONVENTIONS.md`; the skills only add the steps.
119
+ A new document takes the collection's first status (`Proposed` for an
120
+ ADR, `Draft` otherwise) and the next number of the local checkout; two
121
+ branches can pick the same one. Each skill records its session: it adds
122
+ the Claude Code session id to `sessions:` in the front matter of what it
123
+ writes or closes — an edit made without a skill leaves none. No skill
124
+ commits.
99
125
  - rness owns values, not files: what is missing is added, nothing else is
100
126
  touched, and a file it cannot parse is reported, never rewritten.
101
127
  `sync --check` and `validate` report a missing value. Removing an agent
@@ -209,7 +235,11 @@ in its Settings`.
209
235
  `.rness/`, in lifecycle order, at most 50), `Collection` (one option per tab of
210
236
  `rness status`; not `Type`, which is GitHub's own issue-type field and
211
237
  filter), `Agent` (`working`), `Session` (`claude · 1a2b3c4d`, plus the
212
- agent type for a subagent) and `Path`. A board per directory, named as
238
+ agent type for a subagent), `Path` and `Sessions` — the document's
239
+ `sessions:` (see "Agent targets"), joined by `, `, written by sync and
240
+ never cleared: which sessions wrote a specification or implemented a plan,
241
+ after they ended (`claude --resume <id>` reopens one on the machine it ran
242
+ on). A board made before 0.15.0 gains `Sessions` at its next sync. A board per directory, named as
213
243
  `rness status` names its tab, filtered on its `Collection`, its columns
214
244
  that collection's own steps: each collection has its own status field
215
245
  (`ADR status`, `Specs status`, …; a directory without statuses is columned
@@ -264,7 +294,9 @@ added to project`) may change a field of rness's items; the next sync
264
294
  - **Hooks**, with `claude` in `agents` and a pulse declared: session start
265
295
  marks the `In progress` plans of the session's scope `Agent: working`, with
266
296
  the session; an edit of a document of `.rness/` marks it — one the agent has just written, with no item yet, gets its issue first
267
- through a sync, and an edit of any other file of `.rness/` costs no sync;
297
+ through a sync, and so does one whose status the edit changed, so its
298
+ card moves within seconds rather than at the session's end; an edit that
299
+ leaves the status alone, or of any other file of `.rness/`, costs no sync;
268
300
  the hooks' syncs run one at a time, an edit's skipped while another runs,
269
301
  the session end's waiting its turn; session end clears
270
302
  the marks of that session (its subagents' included) and syncs. Each one
@@ -279,7 +311,7 @@ added to project`) may change a field of rness's items; the next sync
279
311
  `cannot reach GitHub: …`. Two sessions marking one plan both write; the
280
312
  last wins.
281
313
  - **Rate**: rness sends one request at a time. A new document costs an
282
- issue, its addition to the board, up to four fields, then its body. An
314
+ issue, its addition to the board, up to five fields, then its body. An
283
315
  unchanged document costs nothing but its share of the listing, which
284
316
  reads every item's body. On one of GitHub's rate limits rness waits as
285
317
  long as GitHub says (`waiting 60 s — GitHub's rate limit`), 10 minutes
@@ -313,7 +345,7 @@ repository, the board).
313
345
  `contract`, `provider`, `org`, `agents`, `pulse`, `repos`, `scopes`.
314
346
  - A provider _written_ in `rness.json` that this version cannot talk to
315
347
  (`gitlab`) is refused by `validate`, `create`, `login` and `pulse`:
316
- `provider "gitlab" is not supported by @rness/cli 0.13.0 (supported:
348
+ `provider "gitlab" is not supported by @rness/cli 0.15.0 (supported:
317
349
  github)`. `add`, `sync` and the local commands never refuse. `null` is not a
318
350
  value: an absent key means none.
319
351
 
@@ -490,6 +522,36 @@ per repository, the files to commit there.
490
522
  Exit codes: 0 success, 1 failure, 2 usage — or a refusal without a TTY.
491
523
  `RNESS_DEBUG=1` adds stack traces; `RNESS_NO_DELEGATE=1` skips the delegation.
492
524
 
525
+ ## 0.15.0 — Agent Pulse follows a status change; the sessions are kept
526
+
527
+ - An edit that changes a document's status syncs Agent Pulse at once: its
528
+ card moves within seconds, not at the session's end. An edit that leaves
529
+ the status alone still costs nothing. See "Pulse".
530
+ - `sessions:` in a document's front matter lists the Claude Code sessions
531
+ that wrote or changed it. The lifecycle skills add theirs; the board
532
+ shows them in a new field, `Sessions`, which a session's end never
533
+ clears. A board gains the field at its first sync with 0.15.0. See
534
+ "Pulse" and "Agent targets".
535
+ - `rness upgrade` rewrites the four lifecycle skills; commit
536
+ `.claude/skills/rness/` in each repository.
537
+ - Blocks are unchanged.
538
+
539
+ ## 0.14.0 — the lifecycle skills; `/rness:status` names a second terminal
540
+
541
+ - The `rness` plugin of Claude Code gains `/rness:adr`, `/rness:spec`,
542
+ `/rness:plan` and `/rness:done`: the workspace's lifecycle as procedures
543
+ the developer or the agent starts, which write nothing without a yes. See
544
+ "Agent targets".
545
+ - `/rness:status` ends with two ways to the full-screen view: `Ctrl+Z` in
546
+ the same terminal, or another terminal from `.rness/` —
547
+ `pnpm rness status`, or the command of the workspace's package manager.
548
+ See "Status".
549
+ - `rness upgrade` syncs, so it writes the four skills and rewrites
550
+ `plugin.json` and the status skill; then commit `.claude/skills/rness/` in
551
+ each repository, as its next steps list. Until then `sync --check` and
552
+ `validate` report them.
553
+ - Blocks are unchanged.
554
+
493
555
  ## 0.13.0 — Agent Pulse: each document an issue of `.rness`, its content on the card
494
556
 
495
557
  - Each item of Agent Pulse is an issue of `<org>/.rness`, labelled
package/dist/bin/rness.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  findDelegate,
7
7
  reportError,
8
8
  run
9
- } from "../chunk-4VTYSPZW.js";
9
+ } from "../chunk-HGT7BIWK.js";
10
10
 
11
11
  // src/bin/rness.ts
12
12
  import { pathToFileURL } from "url";