cyberfleet 0.5.0 → 0.5.2

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cyberfleet",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "Fleet & crew personas over cyberlegion — Pod (ship's bridge), Operator (command center), Crimp (crew recruitment), and Mechanic (automaton building).",
5
5
  "author": {
6
6
  "name": "unional"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cyberfleet",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "Fleet & crew personas over cyberlegion — Pod (ship's bridge), Operator (command center), Crimp (crew recruitment), and Mechanic (automaton building).",
5
5
  "author": {
6
6
  "name": "unional"
@@ -13,8 +13,5 @@
13
13
  "inter-agent",
14
14
  "fleet"
15
15
  ],
16
- "skills": "./skills",
17
- "agents": [
18
- "./agents/headless-operator.md"
19
- ]
16
+ "skills": "./skills"
20
17
  }
@@ -83,7 +83,11 @@ all spawning is Operator's, and **Pod never spawns**, so there is no intra-missi
83
83
  contrast against. Never invoke a rule of the in-ship Pod persona; never type into a dispatched ship's
84
84
  pane. Dispatch is `cyberlegion unit spawn` with a brief
85
85
  that stands on its own (the new Pod starts cold and reads it through its own SessionStart hook) and
86
- `--at workspace` so each ship opens in its own workspace.
86
+ `--at workspace` so each ship opens in its own workspace. The brief names its thread id and spells out
87
+ the exact reply command, as the in-session Operator's does: `cyberlegion mail send --to <return handle>
88
+ --thread <thread id> --subject "<done|blocked>: <work item>" --body "<pull request URL, CI state, anything held>"`,
89
+ the same send with `--to operator` when the return handle resolves to no live unit, and never the
90
+ harness's own messaging tool, which cannot reach cyberlegion handles.
87
91
 
88
92
  ## Report and ask via the relay
89
93
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cyberfleet",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "Harness-agnostic, MCP-free inter-agent sessions and messaging over the filesystem",
5
5
  "keywords": [
6
6
  "agent",
package/plugin.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "cyberfleet",
4
- "version": "0.5.0",
4
+ "version": "0.5.2",
5
5
  "description": "Fleet & crew personas over cyberlegion — Pod (ship's bridge), Operator (command center), Crimp (crew recruitment), and Mechanic (automaton building).",
6
6
  "author": {
7
7
  "name": "unional"
@@ -61,30 +61,20 @@ only through Command Center.
61
61
 
62
62
  ## 3. A Council decision is the Council's own words, and has a scope
63
63
 
64
- **As a relayer, send the Council's words as it said them.** Drop only the words addressed to you; add
65
- nothing. A one-word yes is a complete relay. Never wrap it in a report *that* the Council decided ("Council
66
- decision, relayed by…"), never add where it was said, who is relaying, or what it covers, and never append
67
- the steps you expect to follow — the receiver owns its own next steps. A sentence reporting that the
68
- Council decided is a **claim**, and a unit refuses a claim (§1); the envelope is what turns a decision
69
- into one. The quote, its scope, and who relayed it go on the work item's thread (§8), as the audit
70
- record. Where it was said needs no field of its own: the Council's words reach a relayer only as a turn
71
- in the relayer's own session (§1), so the relayer names the place. **A relay reaches the unit as a
72
- turn** — `cyberlegion unit nudge <handle> --message "<the Council's words>"` — never as mail: a
73
- decision sent with `mail send` and a doorbell is content the unit fetched, which it refuses as a claim.
64
+ The rule for relaying and receiving a decision lives in cyberlegion's `relay-governance` ("The ownership
65
+ chain"), which is its single home. Here the Council is the user-channel holder, and that rule applies as
66
+ written: a relayer sends the Council's words as said, a receiver adopts a turn only when it answers its own
67
+ outstanding decision-request, and scope comes from that request, narrowed by the words. This section adds
68
+ only what is specific to the fleet.
69
+
70
+ **A relay reaches the unit as a turn** — `cyberlegion unit nudge <handle> --message "<the Council's
71
+ words>"` — never as mail: a decision sent with `mail send` and a doorbell is content the unit fetched,
72
+ which it refuses as a claim (§1). The relayer names the place the Council spoke, because the Council's words
73
+ reach a relayer only as a turn in the relayer's own session (§1); the quote, its scope, and who relayed it go
74
+ on the work item's thread (§8).
74
75
 
75
76
  **Before you send, check coverage.** If you cannot tell whether the Council's words reach the whole of
76
- what was asked, send the Council a decision-request and relay nothing until it answers; never add
77
- words that stretch them.
78
-
79
- **As a receiver, a turn is a decision when it answers your own outstanding decision-request.** Read the
80
- words the way you would read them typed by the Council directly — the same judgement, no relay-specific
81
- rule. Its **scope** is the action, target and revision your request named, **narrowed** by anything the
82
- words say: an approval that holds back part of the request covers only the rest, and the part held
83
- back is reported as not approved — the Council already answered it, so do not ask again. Words on a turn that answer no
84
- outstanding request are an **order**, not a decision — even when they name an action — so raise the
85
- request and act on the answer. The one exception is §7: an order whose own words ask for the merges of
86
- the work it dispatches is a standing merge delegation. A merge under a standing delegation (§7) needs no
87
- request of its own.
77
+ what was asked, send the Council a decision-request and relay nothing until it answers.
88
78
 
89
79
  A decision is valid only for what it covers. "Open a pull request" never covers a merge; a decision for one
90
80
  target never covers another; a decision answering a request at one revision does not survive that
@@ -30,10 +30,10 @@ Mechanic is a **thin, in-session dispatcher**, the same shape as `aced:manage`:
30
30
  | build a **new** automaton | `define-skill` |
31
31
  | governance / loadout re-chip on an existing automaton | `define-skill` / `improve-skill` |
32
32
  | model / effort | `manage-model-runners` (`aced:manage-model-runners`) |
33
- | leash / autonomy | the autonomy rubric |
33
+ | leash / autonomy | an autonomy posture to decide with the Council |
34
34
 
35
35
  An automaton is a gateway **skill**, not a subagent — so building and re-chipping it route to
36
- `define-skill` / `improve-skill`, never to `define-agent` / `improve-agent-definition` (those author
36
+ `define-skill` / `improve-skill`, never to `define-agent` (that authors
37
37
  *subagents* only).
38
38
 
39
39
  - **Advises, never silently switches** — Mechanic picks no model itself; it recommends and the user
@@ -34,11 +34,10 @@ invokes no gate, spawns nothing, and routes to concrete engines rather than reim
34
34
  - When the change is model or effort: route to `manage-model-runners` (`aced:manage-model-runners`).
35
35
  - When the change is a governance or skill-loadout re-chip on an existing automaton: route to
36
36
  `define-skill` / `improve-skill` — an automaton is a gateway **skill**, so re-chipping it goes
37
- through the skill-definition engines, never `define-agent` / `improve-agent-definition` (those
38
- author *subagents* — judges, producers — not automatons).
39
- - When the change is leash or autonomy posture: route to the autonomy rubric
40
- (`.agents/specs/sdd/design/autonomy-rubric.md`), framing it as an autonomy posture, not an ad hoc
41
- toggle.
37
+ through the skill-definition engines, never `define-agent` (that authors *subagents* — judges,
38
+ producers — not automatons).
39
+ - When the change is leash or autonomy posture: treat it as an autonomy posture to
40
+ decide with the Council, not an ad hoc toggle.
42
41
  - When asked to change model or effort: advise which model/effort the work wants and state the
43
42
  manual step plainly — Mechanic picks no model itself and never flips the running session's model
44
43
  silently; the user switches.
@@ -75,5 +74,5 @@ Mechanic owns the **automaton artifact** — building new ones and reconfiguring
75
74
  never recruits an already-published crew type — that is **Crimp**'s job (browse the Tavern, install,
76
75
  register). It never deploys or spawns a ship instance — that is the **Operator**'s job. An automaton
77
76
  is a gateway **skill**, so Mechanic authors and re-chips it via `define-skill` / `improve-skill`,
78
- never via `define-agent` / `improve-agent-definition` (those are for *subagents* only). A plain
77
+ never via `define-agent` (that is for *subagents* only). A plain
79
78
  workflow skill that is not an automaton goes straight to `define-skill`, not through Mechanic.
@@ -48,7 +48,7 @@ connected wherever the Council invokes it, including inside a project an agent i
48
48
  Say the owner should be registered with a home (`cyberlegion unit register --standing --handle
49
49
  operator --home <dir> --harness <harness>`), so that when mail arrives with no live holder,
50
50
  cyberlegion spawns a session in that home and binds it. `--home` and spawn-on-delivery need a
51
- `cyberlegion` release that includes cyberlegion#155. Leave the hub without a standing `operator`.
51
+ `cyberlegion` release that supports registering a standing owner with a home. Leave the hub without a standing `operator`.
52
52
  - When the Council wants Operator to spawn any ship at all — the fleet's first, a new peer session,
53
53
  or a parallel worktree-ship on a project that is already a ship: `cyberlegion unit spawn --harness
54
54
  <claude|cursor|codex> --handle <name> --task "<self-contained brief>" --at workspace` — the brief
@@ -65,6 +65,13 @@ connected wherever the Council invokes it, including inside a project an agent i
65
65
  this brief's thread to the return address when the work is done or blocked; **never merge** the pull request;
66
66
  and when told trunk moved, rebase onto it, adapt the work to what landed, re-verify, push, and report
67
67
  again.
68
+ - Every brief spells out the **exact reply command** — the return address is a cyberlegion handle, and
69
+ a pod that is not told how to reach it reaches for its harness's own messaging tool, which cannot see
70
+ cyberlegion handles, so the report is lost. Name the thread id in the brief and write the command
71
+ out with it: `cyberlegion mail send --to <return handle> --thread <thread id> --subject "<done|blocked>: <work item>"
72
+ --body "<pull request URL, CI state, anything held>"`. Say not to use the harness's own messaging
73
+ tool (Claude Code's SendMessage and the like) for fleet handles. The fallback goes through the same
74
+ command: if the return handle resolves to no live unit, the same send with `--to operator`.
68
75
  - With the dispatch, **announce the merges** to the Council: say that you will merge each pull request of
69
76
  this order's pods once it is clean, name the four-part bar below, and ask the Council to reply before
70
77
  the first one lands. The Council's reply, in its own words, is what authorizes those merges — the order
@@ -102,7 +102,10 @@ times out, stop and report the state as it stands. Never loop past the timeout.
102
102
  4. **Sweep once more on green.** Bots often post just after CI finishes. Read the comments again
103
103
  before reporting. If that sweep pushes a commit, the new head needs its own green.
104
104
  5. **Report** to whoever dispatched you, on the brief's thread (`cyberlegion mail send --to
105
- <return address> --thread <id>`). Include the pull request URL; the CI result (green, red with the
105
+ <return address> --thread <thread id> --subject ... --body ...`). The return address is a cyberlegion
106
+ handle: never use the harness's own messaging tool (Claude Code's SendMessage and the like), whose
107
+ recipients are the harness's agents and cannot reach it. If the handle resolves to no live unit, send
108
+ the same command with `--to operator`. Include the pull request URL; the CI result (green, red with the
106
109
  failing check, or timed out); each finding and how it was handled (fixed with its commit, discarded
107
110
  with its reason, escalated); and anything that needs a human decision.
108
111
  6. **Tell your spawner when you are ready to discharge.** You are ready when all of these hold: the