briefs: M1 chief-of-staff role file, contract and tests (decision 104, Vikunja 154)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
# M1: a role for Jason's main agent (2026-10-12)
|
||||
|
||||
Status: written by Sage, lead. It follows `docs/plans/BRIEF-TEMPLATE.md`.
|
||||
Jason approved the role as drafted in Q101, recorded as lead decision 104.
|
||||
The draft was `agents/sage/work/next-target/M1-draft.md` (blob 3b32148f,
|
||||
commit a3d17005). M1 is the first item of decision 96's M track and
|
||||
follows S7 in Q97's order; under decision 111 it starts as soon as an
|
||||
owner is free. Vikunja #154.
|
||||
|
||||
## M1 chief-of-staff role file, contract and tests
|
||||
|
||||
### Problem
|
||||
|
||||
Q94: "my main agentic session (you) capable of running within the Mosaic
|
||||
Stack deployment." Today Mos is a T3 Claude Code thread with full access.
|
||||
The stack declares five roles in `roles/` (pm, cto, coder, reviewer,
|
||||
researcher), and none fits a main agent that talks with Jason, relays his
|
||||
rulings and asks the PM for work. A managed session can hold only a role
|
||||
that a role file declares (`packages/business/src/role.mjs`) and the
|
||||
business file assigns to an instance (`packages/business/README.md:76-81`).
|
||||
|
||||
### Owner and reviewer
|
||||
|
||||
Owner: Rocko. Reviewers: Darkwing and Filbert. Rocko has no Gitea token;
|
||||
Sage runs the review request as jarvis. The role file is policy: Jason
|
||||
approved its content in decision 104, and a file that differs from that
|
||||
approval goes back to him before it lands.
|
||||
|
||||
### Files owned
|
||||
|
||||
- `roles/chief-of-staff.json`
|
||||
- `roles/chief-of-staff.md`
|
||||
- `packages/business/tests/role.test.mjs`, or a new
|
||||
`packages/business/tests/chief-of-staff.test.mjs`, and fixtures under
|
||||
`packages/business/tests/`
|
||||
- `packages/business/README.md`, a short section with the instance entry
|
||||
- `agents/rocko/work/queue-<row>/`
|
||||
|
||||
### What ships
|
||||
|
||||
`roles/chief-of-staff.json`, roleVersion 2, exactly:
|
||||
|
||||
- name `chief-of-staff`, a title, contract `chief-of-staff.md`;
|
||||
- tools `read`, `grep`, `find`, `ls`, and nothing else;
|
||||
- network `api-only`;
|
||||
- authority.withinRole `message.send` only;
|
||||
- authority.crossRole empty;
|
||||
- credentials empty.
|
||||
|
||||
Every other action in `packages/business/src/vocabulary.mjs` stays gated,
|
||||
task.create and role.launch included.
|
||||
|
||||
`roles/chief-of-staff.md`, the contract, in the style of `roles/pm.md`. It
|
||||
says the holder:
|
||||
|
||||
- sends Jason's requests to the PM as messages and asks the PM for work;
|
||||
- relays Jason's rulings verbatim;
|
||||
- never resolves a decision for Jason;
|
||||
- never holds or imitates human authority, and never routes around a
|
||||
refusal.
|
||||
|
||||
The persona is Mos (decision 104). The contract names the role, not the
|
||||
persona.
|
||||
|
||||
Tests, against a fixture business in a temp directory:
|
||||
|
||||
- the role file loads and resolves through `loadBusiness`;
|
||||
- the resolved record's tools, network, authority and credentials equal
|
||||
the list above, so a widened file fails the suite;
|
||||
- a business that grants the instance a gated action through its limits
|
||||
is refused;
|
||||
- `classify` returns gated for task.create and role.launch, and within
|
||||
for message.send;
|
||||
- an instance with a `launch` block whose `by` is this instance is
|
||||
refused, since the role has no role.launch.
|
||||
|
||||
The README section shows the exact instance entry for Jason's business
|
||||
file: definition `chief-of-staff`, holder `mos`, no launch block, no
|
||||
credential references. The instance id is Jason's to choose (Vikunja
|
||||
#150), so the entry shows it as a placeholder and the tests use a fixture
|
||||
name.
|
||||
|
||||
The business node suite passes, and so does every `scripts/test-*.sh`.
|
||||
|
||||
### Out of scope
|
||||
|
||||
Writing Jason's business file, or any file under the config directory;
|
||||
adding the instance there is Jason's step, or one he names (decision
|
||||
104). Launching a session in the role. Any write tool, credential or
|
||||
crossRole action, all of which wait for I4 or another approval from
|
||||
Jason. M2's thread view. Isolation, which stays as today until I1 is
|
||||
built. Retiring T3 Mos, which is M3.
|
||||
|
||||
### Gate
|
||||
|
||||
Darkwing and Filbert approve on the row's issue, each naming the
|
||||
candidate manifest and each confirming that the landed role file matches
|
||||
decision 104's list. The business node suite and every
|
||||
`scripts/test-*.sh` pass on Sage's gate rerun.
|
||||
Reference in New Issue
Block a user