@lifeaitools/rdc-skills 0.27.0 → 0.28.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/.claude-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/skills/collab/COLLABORATOR.md +30 -11
- package/skills/collab/SKILL.md +92 -27
package/package.json
CHANGED
|
@@ -44,6 +44,25 @@ not an evasion.
|
|
|
44
44
|
|
|
45
45
|
---
|
|
46
46
|
|
|
47
|
+
## The boundary — you are in a CONVERSATION, not a build
|
|
48
|
+
|
|
49
|
+
**Do not write to the repository during a collab. Not one file.**
|
|
50
|
+
|
|
51
|
+
This is not a restriction on you; it is what a collab *is*. Your deliverable is
|
|
52
|
+
the **reply**. If settling the point requires code, config, or a document change,
|
|
53
|
+
say what should change — the change itself happens afterward, in a session built
|
|
54
|
+
for it (`rdc:build`, an isolated worktree agent, or you working your own lane
|
|
55
|
+
against a work item).
|
|
56
|
+
|
|
57
|
+
**Why it matters to you specifically:** a peer that tries to write mid-conversation
|
|
58
|
+
can end up holding finished, correct work it cannot deliver — refused by a write
|
|
59
|
+
guard, then refused permission to stop by a gate demanding the delivery evidence
|
|
60
|
+
that guard just made impossible. That happened on 2026-08-14 and cost a complete
|
|
61
|
+
negotiation result. **Your reasoning in the reply is always deliverable. A file
|
|
62
|
+
write may not be.**
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
47
66
|
## What you owe BACK — your responsibilities
|
|
48
67
|
|
|
49
68
|
### 1. Answer in the required format. Nothing outside it.
|
|
@@ -51,27 +70,26 @@ not an evasion.
|
|
|
51
70
|
If the dispatch gives you a contract, use it verbatim. Prose around the blocks
|
|
52
71
|
is not helpful — it is what the format exists to remove.
|
|
53
72
|
|
|
54
|
-
**
|
|
73
|
+
**One block per point:**
|
|
55
74
|
|
|
56
75
|
```
|
|
57
76
|
POINT <n>: AGREE | AGREE-WITH-AMENDMENT | DISAGREE
|
|
58
|
-
EDIT: <the exact section and change
|
|
77
|
+
EDIT: <the exact section and change that SHOULD be made, or NONE — describe it, do not make it>
|
|
59
78
|
REASON: <one sentence — only if AMENDMENT or DISAGREE>
|
|
60
79
|
```
|
|
61
80
|
|
|
62
|
-
**
|
|
81
|
+
**For a factual question rather than a proposal:**
|
|
63
82
|
|
|
64
83
|
```
|
|
65
|
-
|
|
66
|
-
CHANGED: <file paths, or NONE>
|
|
84
|
+
FINDING <n>: <the answer, one sentence>
|
|
67
85
|
EVIDENCE: <command run + literal result — exit code, row count, probe status>
|
|
68
|
-
|
|
86
|
+
CONFIDENCE: VERIFIED | INFERRED | UNKNOWN
|
|
69
87
|
```
|
|
70
88
|
|
|
71
89
|
**Always close with:**
|
|
72
90
|
|
|
73
91
|
```
|
|
74
|
-
OWNER: <who
|
|
92
|
+
OWNER: <who lands the resulting Decision or work item — exactly one agent>
|
|
75
93
|
BLOCKED: <what you cannot do from where you are, or NONE>
|
|
76
94
|
```
|
|
77
95
|
|
|
@@ -87,11 +105,11 @@ answer in the reply body. Do not let it die inside a failed tool call.
|
|
|
87
105
|
|
|
88
106
|
### 3. Do not write outside your own lane or scope.
|
|
89
107
|
|
|
90
|
-
- **Codex:** you
|
|
91
|
-
|
|
108
|
+
- **Codex:** if you were started by `codex exec` (headless), you CANNOT write in any lane — your managed identity was never minted and `-C` does not create it. Report `BLOCKED: headless codex exec has no lane claim` and put your answer in the reply. If you were started by the launcher in a Codex-owned lane (`x-codex-N`, `x-codex-sv`), you can write, but not during a collab.
|
|
109
|
+
A session created in the wrong cwd is poisoned for its whole life — `resume` replays the recorded identity. Writes are refused with
|
|
92
110
|
`CODEX MANAGED LANE: App Local must use an owned managed Codex lane`. That is a
|
|
93
|
-
**dispatch defect, not your failure** — report it as `BLOCKED:
|
|
94
|
-
|
|
111
|
+
**dispatch defect, not your failure** — report it as `BLOCKED: poisoned session identity, start a NEW session in
|
|
112
|
+
my lane` — `-C` will NOT repair it. Do not attempt a workaround.
|
|
95
113
|
- **Claude agents:** if you will commit, you must have been given
|
|
96
114
|
`isolation: "worktree"` as a real tool parameter. A sentence in your prompt
|
|
97
115
|
claiming isolation is inert.
|
|
@@ -155,6 +173,7 @@ cannot act on a guess it has to verify.
|
|
|
155
173
|
| Filing a settled agreement as a lesson | Buries a queryable Decision |
|
|
156
174
|
| Going silent when blocked | Indistinguishable from being dead |
|
|
157
175
|
| Editing a document you do not own | Lost work, no error, no trace |
|
|
176
|
+
| Writing ANY file during a collab | Not your job here — the reply is the deliverable |
|
|
158
177
|
| Committing to whatever branch you happen to be on | The change strands where nobody looks for it |
|
|
159
178
|
| Answering an easier adjacent question | The real point stays open and looks settled |
|
|
160
179
|
| Attempting a workaround for a guard block | The guard is usually right; the dispatch is usually wrong |
|
package/skills/collab/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rdc:collab
|
|
3
|
-
description: "Usage `rdc:collab <collaborator> [
|
|
3
|
+
description: "Usage `rdc:collab <collaborator> [inbound] <topic>` — Structured agent-to-agent CONVERSATION with Codex, a local LLM, a Claude agent, or a claude.ai session. Converges on a decision and never writes to the repo — work that needs writing becomes a work item for rdc:build. Every dispatch carries a response contract."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
|
|
@@ -11,9 +11,50 @@ description: "Usage `rdc:collab <collaborator> [mode] <topic>` — Structured co
|
|
|
11
11
|
|
|
12
12
|
# /rdc:collab — Structured Agent-to-Agent Collaboration
|
|
13
13
|
|
|
14
|
-
> `rdc:collab <collaborator> [
|
|
14
|
+
> `rdc:collab <collaborator> [inbound] <topic>`
|
|
15
15
|
> Collaborators: `codex` · `local-llm` · `claude-agent` · `claude-ai`
|
|
16
|
-
>
|
|
16
|
+
> Direction: outbound (default, you dispatch) · `inbound` (claude.ai relay, peer initiates)
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Collab is CONVERSATION. It never writes to the repo.
|
|
21
|
+
|
|
22
|
+
**There is one mode, because there was only ever one.** v0.27.0 shipped a
|
|
23
|
+
`delegate` mode whose contract asked the peer for `CHANGED: <file paths>` — an
|
|
24
|
+
instruction to go mutate the repo and report back. Handing work off is a real
|
|
25
|
+
need; routing it through a *conversation channel* is a category error. Work goes
|
|
26
|
+
to `rdc:build`, to an `Agent` with `isolation: "worktree"` as a real parameter, or
|
|
27
|
+
to a launcher-started session working its own lane against a work item. Those have
|
|
28
|
+
isolation, a work item, review, and landing. A chat channel has none of them.
|
|
29
|
+
|
|
30
|
+
**This is a design boundary, not a workaround for a broken door.** A separate,
|
|
31
|
+
real constraint exists — a headless `codex exec` peer currently cannot write at
|
|
32
|
+
all (see the note under Step 1) — but that constraint is a **bug being fixed**,
|
|
33
|
+
not the reason for this rule. Even once headless Codex can write, work handoff
|
|
34
|
+
still goes through the build path. Do not read the boundary as "collab can't
|
|
35
|
+
write"; read it as "collab isn't where writing belongs."
|
|
36
|
+
|
|
37
|
+
**The boundary:**
|
|
38
|
+
|
|
39
|
+
| Collab does | Collab never does |
|
|
40
|
+
|---|---|
|
|
41
|
+
| Ask, answer, converge, disagree | Edit a file |
|
|
42
|
+
| Produce a **Decision** for the governing document | Commit or push |
|
|
43
|
+
| Produce a **work item** when writing is required | Build, deploy, or land |
|
|
44
|
+
| Return findings, verdicts, evidence *as text* | Claim to have changed anything |
|
|
45
|
+
|
|
46
|
+
**When code must be written, collab is over.** Its output is a work item, and the
|
|
47
|
+
writing happens where writing belongs — `rdc:build`, an `Agent` with
|
|
48
|
+
`isolation: "worktree"` as a real parameter, or the peer working its own lane
|
|
49
|
+
against that item. A conversation channel is not a build channel.
|
|
50
|
+
|
|
51
|
+
**Why this is structural, not a style rule.** Because collab never mutates, a
|
|
52
|
+
collab session is non-mutating *by definition* — there is no mode to select
|
|
53
|
+
wrongly and no flag to leave on. Delivery gates (truth-gate, completion gate,
|
|
54
|
+
CodeFlow preflight) have nothing to gate, and safety guards (credential exposure,
|
|
55
|
+
cross-tree write, push-main, lane identity) remain fully live because nothing
|
|
56
|
+
here goes near them. The peer that tries to write is not blocked by policy; it is
|
|
57
|
+
simply doing something this skill never asks for.
|
|
17
58
|
|
|
18
59
|
---
|
|
19
60
|
|
|
@@ -98,8 +139,10 @@ rdc:collab --session <id> ← legacy form, implies `claude-ai listen`
|
|
|
98
139
|
```
|
|
99
140
|
|
|
100
141
|
- No collaborator → list active chitchat sessions and available engines, then stop.
|
|
101
|
-
-
|
|
102
|
-
|
|
142
|
+
- `inbound` (or the legacy `--session <id>` form) → the peer initiates; see the
|
|
143
|
+
claude.ai relay section. Same conversation, opposite direction.
|
|
144
|
+
- **If the topic names work to be performed rather than a question to settle, this
|
|
145
|
+
is the wrong skill.** Create the work item and use `rdc:build` / `rdc:fixit`.
|
|
103
146
|
|
|
104
147
|
---
|
|
105
148
|
|
|
@@ -110,7 +153,28 @@ most common failure and it fails at the guard layer, not the prompt layer.
|
|
|
110
153
|
|
|
111
154
|
| Collaborator | Invocation | Isolation requirement | Known failure mode |
|
|
112
155
|
|---|---|---|---|
|
|
113
|
-
| **`codex`** | `codex exec -C <
|
|
156
|
+
| **`codex`** | `codex exec [-C <dir>] "<msg>"` · resume: `codex exec resume <session-id> "<msg>"` | **A headless `codex exec` peer is READ-ONLY. It cannot write to any lane — see below.** Never dispatch it from your own lane. | Its managed identity is fixed at session creation and `-C` does **not** change it. Dispatch from your lane and every write is refused with `CODEX MANAGED LANE: App Local must use an owned managed Codex lane` — permanently, for that session's whole life. |
|
|
157
|
+
|
|
158
|
+
> **`-C` does not establish lane identity — verified 2026-08-14, and an earlier
|
|
159
|
+
> version of this table said the opposite.** Managed identity is an 8-field record
|
|
160
|
+
> (`lane, role, repoIdentity, ownerPid, ownerStartFingerprint, sessionId,
|
|
161
|
+
> leaseEpoch, ownerToken`) built by `buildStartupIdentity()` in
|
|
162
|
+
> [`pool/codex-topology.mjs`](file:///C:/Dev/lifeai-env/pool/codex-topology.mjs)
|
|
163
|
+
> and minted **only by the interactive launcher**, which also claims the lease.
|
|
164
|
+
> `codex exec` has no lane-claim path, so it cannot produce that record — which
|
|
165
|
+
> means **a headless Codex peer cannot write in any lane, including its own**.
|
|
166
|
+
>
|
|
167
|
+
> Two consequences: (1) `resume` replays the session's *recorded* identity, so a
|
|
168
|
+
> session created in the wrong cwd is poisoned for life and `-C` will not repair
|
|
169
|
+
> it — start a new session instead; (2) treat a `codex exec` peer as a
|
|
170
|
+
> conversational participant only. Writing work belongs to a launcher-started
|
|
171
|
+
> Codex session, `rdc:build`, or an isolated-worktree agent.
|
|
172
|
+
>
|
|
173
|
+
> Beware the error text: `App Local denied: <lane> has a foreign live lease` also
|
|
174
|
+
> fires when there is **no lease at all** (`ownerMatchesLease` returns false for a
|
|
175
|
+
> null lease), so it will send you hunting a conflicting owner that does not exist.
|
|
176
|
+
|
|
177
|
+
file:///C:/Dev/lifeai-env/pool/codex-topology.mjs
|
|
114
178
|
| **`local-llm`** | local endpoint per `.claude/context/clauth.md`; credential via `curl -s http://127.0.0.1:52437/v/<service>` | none (no repo attachment) | Small context windows: send the contract and the open points, never the whole document. Link paths instead of pasting files. |
|
|
115
179
|
| **`claude-agent`** | `Agent` tool, or `claude -p --bare` / `claude --bg` | **`isolation: "worktree"` as an actual tool parameter** if it will commit — a prose claim of isolation is inert | Parallel agents on a shared checkout race on `git stash` and `.git/index`. See `.claude/rules/subagent-credentials.md`. |
|
|
116
180
|
| **`claude-ai`** | chitchat MCP (`chitchat_send` / `chitchat_poll` / `chitchat_reply`) + SSE | session-scoped | Messages evaporate when the session stops — export durable decisions to TinTin. |
|
|
@@ -122,31 +186,28 @@ behind a `timeout` guess. A truncated call looks like a failure and is not one.
|
|
|
122
186
|
|
|
123
187
|
## Step 2 — Compose the response contract (mandatory)
|
|
124
188
|
|
|
125
|
-
Every dispatch
|
|
126
|
-
|
|
189
|
+
Every dispatch carries an explicit answer format. The contract is not politeness —
|
|
190
|
+
it is what makes the reply *checkable*.
|
|
191
|
+
|
|
192
|
+
**Every field returns information. No field asks the peer what it changed** — if a
|
|
193
|
+
contract invites `CHANGED: <file paths>`, it has invited the peer to mutate the
|
|
194
|
+
repo mid-conversation, which is the v0.27.0 defect this version removes.
|
|
127
195
|
|
|
128
|
-
**
|
|
196
|
+
**The contract — one block per open point:**
|
|
129
197
|
|
|
130
198
|
```
|
|
131
199
|
POINT <n>: AGREE | AGREE-WITH-AMENDMENT | DISAGREE
|
|
132
|
-
EDIT: <the exact section and change
|
|
200
|
+
EDIT: <the exact section and change that SHOULD be made, or NONE — describe it, do not make it>
|
|
133
201
|
REASON: <one sentence — only if AMENDMENT or DISAGREE>
|
|
134
202
|
```
|
|
135
203
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
```
|
|
139
|
-
OWNER: <who writes the change — exactly one agent>
|
|
140
|
-
BLOCKED: <what you cannot do from where you are, or NONE>
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
**Delegate contract:**
|
|
204
|
+
**When the point is a factual question rather than a proposal**, the peer answers
|
|
205
|
+
with findings — still text, still no repo mutation:
|
|
144
206
|
|
|
145
207
|
```
|
|
146
|
-
|
|
147
|
-
CHANGED: <file paths, or NONE>
|
|
208
|
+
FINDING <n>: <the answer, one sentence>
|
|
148
209
|
EVIDENCE: <command run + literal result — exit code, row count, probe status>
|
|
149
|
-
|
|
210
|
+
CONFIDENCE: VERIFIED | INFERRED | UNKNOWN
|
|
150
211
|
```
|
|
151
212
|
|
|
152
213
|
Rules that make the contract hold:
|
|
@@ -161,7 +222,7 @@ Rules that make the contract hold:
|
|
|
161
222
|
|
|
162
223
|
---
|
|
163
224
|
|
|
164
|
-
## Step 3 — Converge
|
|
225
|
+
## Step 3 — Converge
|
|
165
226
|
|
|
166
227
|
```
|
|
167
228
|
open_points = [all points]
|
|
@@ -189,18 +250,20 @@ negotiation becomes a loop that never terminates.
|
|
|
189
250
|
|
|
190
251
|
---
|
|
191
252
|
|
|
192
|
-
## Step 4 — Single-writer rule
|
|
253
|
+
## Step 4 — Single-writer rule (for the OUTCOME, not the conversation)
|
|
193
254
|
|
|
194
|
-
|
|
195
|
-
|
|
255
|
+
Nobody writes during a collab. The single-writer rule governs **who lands the
|
|
256
|
+
settled Decision afterward** — name that agent before round 1 and say so in the
|
|
257
|
+
dispatch.
|
|
196
258
|
|
|
197
259
|
> Two active writers on one surface is forbidden — the same rule the fleet plans
|
|
198
260
|
> state as *"never run two active writers for one effect."*
|
|
199
261
|
|
|
200
262
|
If the named writer turns out to be **structurally blocked** (wrong lane, no
|
|
201
263
|
credentials, read-only mount), ownership transfers to the other agent *for that
|
|
202
|
-
artifact only*,
|
|
203
|
-
|
|
264
|
+
artifact only*, recorded in the change itself with attribution. A blocked writer
|
|
265
|
+
never means the agreed work is abandoned — the reasoning already exists in the
|
|
266
|
+
reply, which is exactly why the reply, not a file, is the deliverable.
|
|
204
267
|
|
|
205
268
|
---
|
|
206
269
|
|
|
@@ -283,6 +346,8 @@ and avoids acting on a misread premise (lesson
|
|
|
283
346
|
| Wrapping dispatch in a `timeout` guess | A still-running call reads as a failure |
|
|
284
347
|
| Escalating a transcript | The human has to find the question themselves |
|
|
285
348
|
| Two agents editing one document | Lost work, no error |
|
|
349
|
+
| Writing to the repo during a collab | Your answer may be guard-blocked and stranded; the reply is always deliverable, a write may not be |
|
|
350
|
+
| Using collab to hand off WORK | Wrong skill. Create a work item and use rdc:build or an isolated-worktree agent |
|
|
286
351
|
|
|
287
352
|
---
|
|
288
353
|
|