@rness/cli 0.12.0 → 0.14.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 +189 -32
- package/dist/bin/rness.js +1 -1
- package/dist/{chunk-AEW7ZDFS.js → chunk-AXTFDXN2.js} +1790 -757
- package/dist/chunk-AXTFDXN2.js.map +1 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-AEW7ZDFS.js.map +0 -1
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").
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
(
|
|
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,30 @@ 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
|
|
95
|
-
`/rness:status [tab]`, the tables of `rness status
|
|
96
|
-
files whole — an edit by hand is reported
|
|
97
|
-
|
|
98
|
-
|
|
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. No skill commits.
|
|
99
122
|
- rness owns values, not files: what is missing is added, nothing else is
|
|
100
123
|
touched, and a file it cannot parse is reported, never rewritten.
|
|
101
124
|
`sync --check` and `validate` report a missing value. Removing an agent
|
|
@@ -148,12 +171,63 @@ status, it received the problem. The `sh` line is not verified on Windows.
|
|
|
148
171
|
rness pulse sync # as often as wanted
|
|
149
172
|
|
|
150
173
|
A projection of rness's state on the organization's GitHub Projects: a
|
|
151
|
-
project named **Agent Pulse**, where the team sees
|
|
152
|
-
`.rness
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
- **
|
|
156
|
-
|
|
174
|
+
project named **Agent Pulse**, where the team sees — and reads — every
|
|
175
|
+
document of `.rness/`, and sees when an agent is at work on one. rness
|
|
176
|
+
writes the board; if it is not in rness, it does not belong there.
|
|
177
|
+
|
|
178
|
+
- **Items**: one per document of `rness status`, an issue of
|
|
179
|
+
`<org>/.rness` added to the project. GitHub shows it only to people who
|
|
180
|
+
can read `.rness`. Its title is the document's (`0016 — CLI: rness
|
|
181
|
+
status, …`) and its body the document (see **Body**). It carries the
|
|
182
|
+
label `rness`, made if missing; `-label:rness` leaves these issues out of
|
|
183
|
+
`.rness`'s Issues tab. An issue is open while its document exists. When
|
|
184
|
+
the document is gone, the issue is closed as not planned and its item
|
|
185
|
+
archived. Gone means gone for this clone's git: the path is in its
|
|
186
|
+
history and no longer in its working tree. A path it has never seen is
|
|
187
|
+
judged only on an issue this clone's sync opened — a document its agent
|
|
188
|
+
wrote, then renamed or deleted before any commit. The clone records the
|
|
189
|
+
issues it opens in its own git directory (`rness/opened`, per worktree,
|
|
190
|
+
never pushed), and forgets one as soon as its git has seen the path. Any
|
|
191
|
+
other — a teammate's new document, or yours from another clone, not
|
|
192
|
+
pulled yet — is left alone. An issue closed while its document exists —
|
|
193
|
+
by hand, or by a `fixes #12` in a `.rness` commit — is reopened at the
|
|
194
|
+
next sync. The document's status is its field, not the issue's state.
|
|
195
|
+
rness's items are those with a `Path`
|
|
196
|
+
whose content is an issue of `.rness`. A draft with a `Path` is rness's
|
|
197
|
+
from 0.12.0, and is converted into an issue of `.rness`. An issue of
|
|
198
|
+
`.rness` on the board, labelled `rness`, without `Path`, whose body's
|
|
199
|
+
first line is a document's first line, is one a stopped sync left: it
|
|
200
|
+
gets its `Path` and is brought up to date, and no second issue is made.
|
|
201
|
+
Anything else — an item without `Path`, an issue of another repository,
|
|
202
|
+
any other issue of `.rness` without `Path` — is the team's: never
|
|
203
|
+
edited, closed or archived. Two known limits. A clone behind the others
|
|
204
|
+
writes what its working tree holds — an older title, status or body —
|
|
205
|
+
until it pulls; the next up-to-date sync writes them back. A document
|
|
206
|
+
that lives only on a branch of `.rness` has its issue closed by a sync
|
|
207
|
+
from a branch without it, if git has seen the path or this clone opened
|
|
208
|
+
the issue; back on its branch, it gets a new issue (`.rness` is worked
|
|
209
|
+
on `main`, and branches of it are rare). The project is linked to
|
|
210
|
+
`.rness`, so Agent Pulse shows in its Projects tab. Comments are the
|
|
211
|
+
team's: a spec's discussion lives on its issue, and rness never writes
|
|
212
|
+
or deletes one. `pulse create` and `pulse sync` need Issues on
|
|
213
|
+
`.rness`. Without them they stop before
|
|
214
|
+
writing anything: `the pulse needs Issues on <org>/.rness: turn them on
|
|
215
|
+
in its Settings`.
|
|
216
|
+
- **Body**: the document, the same bytes for the same document. It starts
|
|
217
|
+
with a first line: the document's path and a link to the file. Then comes
|
|
218
|
+
the document without its front matter (the status is a field) and
|
|
219
|
+
without its first heading (the title). Links outside code are rewritten.
|
|
220
|
+
A link to another document becomes the URL of its issue, which opens in
|
|
221
|
+
the board's side panel. A link to any other file of `.rness` points to
|
|
222
|
+
it on GitHub at `main` (an image, raw). An absolute link, a link out of
|
|
223
|
+
`.rness`, or a link to no file stays as written. Outside code spans and
|
|
224
|
+
fenced blocks, `@name` is written `\@name`, and a bare `#12` gets a
|
|
225
|
+
zero-width space after `#`: a body notifies no one and points at no
|
|
226
|
+
wrong issue. A body holds at most 65,536 characters. A longer document
|
|
227
|
+
is cut at the last blank line that fits and ends with
|
|
228
|
+
`The rest: <link>`. A last line, invisible on GitHub,
|
|
229
|
+
`<!-- rness <digest> -->`, is how sync tells a body that changed.
|
|
230
|
+
- **Layout**: the fields `Status` (the union of the
|
|
157
231
|
collection fields' options: every contract status plus the ones found in
|
|
158
232
|
`.rness/`, in lifecycle order, at most 50), `Collection` (one option per tab of
|
|
159
233
|
`rness status`; not `Type`, which is GitHub's own issue-type field and
|
|
@@ -163,7 +237,7 @@ never reads it back; if it is not in rness, it does not belong there.
|
|
|
163
237
|
that collection's own steps: each collection has its own status field
|
|
164
238
|
(`ADR status`, `Specs status`, …; a directory without statuses is columned
|
|
165
239
|
by `Status`, which holds them all for the `All` table). `pulse sync`
|
|
166
|
-
remakes a board built by an earlier version (its URL changes once); a `Working` table, filtered on `Agent: working`. A first view named `View 1` (GitHub's default) becomes `All` when no `All` exists, on create and on sync, showing Title, Collection, Status and Session. Options are coloured (statuses by lifecycle: blue proposed, purple approved, yellow in progress, red blocked, green done, gray
|
|
240
|
+
remakes a board built by an earlier version (its URL changes once); a `Working` table, filtered on `Agent: working`. A first view named `View 1` (GitHub's default) becomes `All` when no `All` exists, on create and on sync, showing Title, Collection, Status and Session. Options are coloured (statuses by lifecycle: blue proposed, purple approved, yellow in progress, red blocked or rejected, yellow superseded, green done, gray abandoned; collections and `working` too); a sync recolours rness's options and leaves other options' colours alone. rness does
|
|
167
241
|
not set the project's visibility: the project gets GitHub's default for a
|
|
168
242
|
new organization project, which is private (`public: false`). Verified
|
|
169
243
|
with Claude Code 2.1.284 on 2026-09-29.
|
|
@@ -190,17 +264,32 @@ never reads it back; if it is not in rness, it does not belong there.
|
|
|
190
264
|
the pin moves first (`rness upgrade`). A workspace without a `provider`
|
|
191
265
|
whose repositories look like GitLab is refused before anything is
|
|
192
266
|
created: write `"provider": "github"` if the organization is on GitHub.
|
|
193
|
-
- **`pulse sync
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
267
|
+
- **`pulse sync`** works in two passes. First every document gets its
|
|
268
|
+
issue — created, converted from a 0.12.0 draft, or reopened — with its
|
|
269
|
+
title, label and fields. Then the bodies whose digest differs are
|
|
270
|
+
written, since a body links to other documents' issues by number. It
|
|
271
|
+
also adds the option or the board that a new status or directory needs.
|
|
272
|
+
It says what it did to the issues, then to the items: `created 1 issue`,
|
|
273
|
+
`reopened 1 issue`, `synced 52 items: 1 created, 2 updated, 49
|
|
274
|
+
unchanged`.
|
|
275
|
+
- **One way**: rness reads the board and the issues only to find its items
|
|
276
|
+
and to tell a changed body. Anything changed by hand — a card moved, a
|
|
277
|
+
field, a title, a body, an issue closed — is written back at the next
|
|
278
|
+
sync, and never reaches `.rness/`. The board is not made read-only:
|
|
279
|
+
whoever runs an agent writes it with their own login, so they need Write
|
|
280
|
+
on the project. Read-only access for anyone else is set by hand, in the
|
|
281
|
+
project's "Manage access". The project's workflows are left alone.
|
|
282
|
+
GitHub turns on "Auto-add sub-issues to project" for a new project, so a
|
|
283
|
+
sub-issue added under a document's issue joins the board without `Path`,
|
|
284
|
+
as the team's item. A workflow someone turns on (`Item closed`, `Item
|
|
285
|
+
added to project`) may change a field of rness's items; the next sync
|
|
286
|
+
writes it back.
|
|
201
287
|
- **Hooks**, with `claude` in `agents` and a pulse declared: session start
|
|
202
288
|
marks the `In progress` plans of the session's scope `Agent: working`, with
|
|
203
|
-
the session; an edit of a document of `.rness/` marks it
|
|
289
|
+
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
|
|
290
|
+
through a sync, and an edit of any other file of `.rness/` costs no sync;
|
|
291
|
+
the hooks' syncs run one at a time, an edit's skipped while another runs,
|
|
292
|
+
the session end's waiting its turn; session end clears
|
|
204
293
|
the marks of that session (its subagents' included) and syncs. Each one
|
|
205
294
|
starts a detached `rness` process and answers at once, so a slow network
|
|
206
295
|
never holds Claude Code; the session-end sync outlives Claude Code's exit.
|
|
@@ -212,11 +301,16 @@ never reads it back; if it is not in rness, it does not belong there.
|
|
|
212
301
|
`the pulse needs the project scope: run rness login` or
|
|
213
302
|
`cannot reach GitHub: …`. Two sessions marking one plan both write; the
|
|
214
303
|
last wins.
|
|
215
|
-
- **Rate**: rness sends
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
304
|
+
- **Rate**: rness sends one request at a time. A new document costs an
|
|
305
|
+
issue, its addition to the board, up to four fields, then its body. An
|
|
306
|
+
unchanged document costs nothing but its share of the listing, which
|
|
307
|
+
reads every item's body. On one of GitHub's rate limits rness waits as
|
|
308
|
+
long as GitHub says (`waiting 60 s — GitHub's rate limit`), 10 minutes
|
|
309
|
+
at most in all. Past that it stops, saying how many changes it did not
|
|
310
|
+
make, and the next sync makes them. Measured on `rness-dev` (54
|
|
311
|
+
documents, 2026-09-30): the migration from 0.12.0 took 169 s with no
|
|
312
|
+
wait; a sync with nothing to change, 4 s; the listing, one page of
|
|
313
|
+
852 KB in about 1 s.
|
|
220
314
|
- **Not yet**: GitLab and Atlassian. `create` lists them, disabled; a
|
|
221
315
|
workspace whose `rness.json` names one is refused by `pulse`. `Waiting`
|
|
222
316
|
and `Review` statuses, several agents on one board and hooks for agents
|
|
@@ -242,7 +336,7 @@ repository, the board).
|
|
|
242
336
|
`contract`, `provider`, `org`, `agents`, `pulse`, `repos`, `scopes`.
|
|
243
337
|
- A provider _written_ in `rness.json` that this version cannot talk to
|
|
244
338
|
(`gitlab`) is refused by `validate`, `create`, `login` and `pulse`:
|
|
245
|
-
`provider "gitlab" is not supported by @rness/cli 0.
|
|
339
|
+
`provider "gitlab" is not supported by @rness/cli 0.14.0 (supported:
|
|
246
340
|
github)`. `add`, `sync` and the local commands never refuse. `null` is not a
|
|
247
341
|
value: an absent key means none.
|
|
248
342
|
|
|
@@ -419,6 +513,69 @@ per repository, the files to commit there.
|
|
|
419
513
|
Exit codes: 0 success, 1 failure, 2 usage — or a refusal without a TTY.
|
|
420
514
|
`RNESS_DEBUG=1` adds stack traces; `RNESS_NO_DELEGATE=1` skips the delegation.
|
|
421
515
|
|
|
516
|
+
## 0.14.0 — the lifecycle skills; `/rness:status` names a second terminal
|
|
517
|
+
|
|
518
|
+
- The `rness` plugin of Claude Code gains `/rness:adr`, `/rness:spec`,
|
|
519
|
+
`/rness:plan` and `/rness:done`: the workspace's lifecycle as procedures
|
|
520
|
+
the developer or the agent starts, which write nothing without a yes. See
|
|
521
|
+
"Agent targets".
|
|
522
|
+
- `/rness:status` ends with two ways to the full-screen view: `Ctrl+Z` in
|
|
523
|
+
the same terminal, or another terminal from `.rness/` —
|
|
524
|
+
`pnpm rness status`, or the command of the workspace's package manager.
|
|
525
|
+
See "Status".
|
|
526
|
+
- `rness upgrade` syncs, so it writes the four skills and rewrites
|
|
527
|
+
`plugin.json` and the status skill; then commit `.claude/skills/rness/` in
|
|
528
|
+
each repository, as its next steps list. Until then `sync --check` and
|
|
529
|
+
`validate` report them.
|
|
530
|
+
- Blocks are unchanged.
|
|
531
|
+
|
|
532
|
+
## 0.13.0 — Agent Pulse: each document an issue of `.rness`, its content on the card
|
|
533
|
+
|
|
534
|
+
- Each item of Agent Pulse is an issue of `<org>/.rness`, labelled
|
|
535
|
+
`rness`, whose body is the document. A link to another document opens
|
|
536
|
+
its issue in the board's side panel. GitHub shows the items only to
|
|
537
|
+
people who can read `.rness`. See "Pulse".
|
|
538
|
+
- **Needs Issues on `.rness`**: without them `pulse create` and
|
|
539
|
+
`pulse sync` refuse, before writing anything.
|
|
540
|
+
- **Upgrading**: the first `pulse sync` with 0.13.0 — run by hand, or at
|
|
541
|
+
the end of a Claude Code session — does the migration. It converts every
|
|
542
|
+
draft that carries a `Path` into an issue of `.rness`: its id and fields
|
|
543
|
+
stay, so the boards do not change. It labels each issue, writes its
|
|
544
|
+
body, and links the project to `.rness`. GitHub notifies the people who
|
|
545
|
+
watch `.rness` of each new issue, once. Nothing is asked. Until every
|
|
546
|
+
developer's `.rness` is on 0.13.0, a session that ends on 0.12.0 syncs
|
|
547
|
+
as 0.12.0 did: it sees the issues as the team's and adds a draft per
|
|
548
|
+
document. The next 0.13.0 sync archives those drafts.
|
|
549
|
+
- The board is not made read-only, and its workflows are left alone. A
|
|
550
|
+
change made on the board is written back at the next sync. See "Pulse".
|
|
551
|
+
- When it did, `pulse sync` says `created 1 issue`,
|
|
552
|
+
`converted 52 drafts into issues of <org>/.rness` or `reopened 1 issue`.
|
|
553
|
+
It waits on GitHub's rate limits, 10 minutes at most in all.
|
|
554
|
+
- An edit of a document that has no item yet — a spec or a plan the agent
|
|
555
|
+
has just written — now gives it its issue, then marks it `working`.
|
|
556
|
+
Before, it was marked only once a sync had added it.
|
|
557
|
+
- A clone that has not pulled a teammate's new document — or the same
|
|
558
|
+
developer's, from another clone — leaves its item alone. 0.12.0 archived
|
|
559
|
+
it, and the next up-to-date sync made a second one. A document renamed
|
|
560
|
+
or deleted before any commit has its issue closed by the clone that
|
|
561
|
+
opened it, which records it in its git directory (`rness/opened`).
|
|
562
|
+
- The package's `Provider` interface changes:
|
|
563
|
+
- `checkIssues(org)` is new;
|
|
564
|
+
- `apply` returns the item and issue number of a create or a convert:
|
|
565
|
+
`Placed | null`;
|
|
566
|
+
- `BoardItem` gains a required `issue`: the item's issue of `.rness`
|
|
567
|
+
(number, state, label, body), or null;
|
|
568
|
+
- `Step` gains the kinds `convert`, `close` and `body`, and `update`
|
|
569
|
+
gains `reopen`;
|
|
570
|
+
- `items(board, { bodies: false })` lists the items without their
|
|
571
|
+
issues' bodies (`body: null`).
|
|
572
|
+
|
|
573
|
+
An implementation outside this package must adapt to each.
|
|
574
|
+
|
|
575
|
+
- Blocks are unchanged.
|
|
576
|
+
- Status colours: `Rejected` is red and `Superseded` yellow, in every
|
|
577
|
+
collection's field and in `Status`; a sync recolours them.
|
|
578
|
+
|
|
422
579
|
## 0.12.0 — `rness pulse`; the provider
|
|
423
580
|
|
|
424
581
|
- `rness pulse create` and `rness pulse sync`: the Agent Pulse board on the
|