From f4e808d333d2149ca0e6d07cc04abf1028a33ab1 Mon Sep 17 00:00:00 2001 From: Sree Raman <1271305+sreejithraman@users.noreply.github.com> Date: Mon, 9 Nov 2026 11:19:33 -0500 Subject: [PATCH 1/2] Start chief-of-staff owners as top-level sessions Running a chief of staff now counts as a request for sessions: each owner starts as its own top-level session bound to a host worktree, watches its own PR, and reports with t3_thread_send. Owners still run their helpers as subagents. Hosts that cannot launch sessions fall back to a delegated owner. Co-Authored-By: Claude Opus 5.5 --- SOURCES.md | 11 +++--- skills/chief-of-staff/SKILL.md | 35 ++++++++++++------- skills/chief-of-staff/assets/owner-kickoff.md | 4 +-- .../chief-of-staff/references/chief-move.md | 2 +- .../references/program-state.md | 4 +-- skills/implement/SKILL.md | 7 ++-- 6 files changed, 37 insertions(+), 26 deletions(-) diff --git a/SOURCES.md b/SOURCES.md index 0f8eaa6..b03d6b2 100644 --- a/SOURCES.md +++ b/SOURCES.md @@ -423,10 +423,13 @@ through one Implement owner that delivers one PR or its own planned stack. Input is any set of work, and a spec is optional. To Tasks splits a body of work and owns readiness, including its provisional start for a decision with a reversible recommended option. Owners start from `assets/owner-kickoff.md` with an explicit -return route and report file; a running Implement session is adopted, never -duplicated. The chief reads Implement's owner report fields, accepts outcomes -under Orchestration, watches delegated owners' pending PRs, and routes -discoveries through an explicit disposition table. +return route and report file. Running a chief counts as a request for +sessions: each owner starts as its own top-level session bound to a host +worktree, watches its own PR, and reports with `t3_thread_send`; where the host +cannot launch sessions, a delegated owner runs in its own worktree and the chief +watches its PR. A running Implement session is adopted, never duplicated. The +chief reads Implement's owner report fields, accepts outcomes under +Orchestration, and routes discoveries through an explicit disposition table. Each outcome takes Implement's Land, Try, or PR finish line. Land picked under that policy authorizes merging within the agreed program scope, with Merge's diff --git a/skills/chief-of-staff/SKILL.md b/skills/chief-of-staff/SKILL.md index 0f75f90..296ffbb 100644 --- a/skills/chief-of-staff/SKILL.md +++ b/skills/chief-of-staff/SKILL.md @@ -54,7 +54,9 @@ evidence, holds, watchers, and helpers. Record any landing it already armed as its target's pending landing. Never start a second writer beside it; replace an owner only under Orchestration's [replace an owner](../orchestration/references/reuse-and-recovery.md#replace-an-owner), -after reconciling. +after reconciling. When the stopped owner's worktree still holds its branch, +reuse that worktree through the host (in T3, `existing_worktree`) once it is +clean and holds no unique commits, or start the replacement on a new branch. Pick each outcome's finish line from Implement's [table](../implement/SKILL.md#2-state-the-finish-line-and-prepare) and state the @@ -88,15 +90,19 @@ holds up unrelated ones. For each ready outcome, fill the [owner kickoff](assets/owner-kickoff.md) and start an owner with it, writing `$implement` in place of `/implement` for a -Codex owner. Implement picks the method. Use -[Orchestration](../orchestration/SKILL.md) for model choice, delegation, -isolation, and concurrency. Independent branches get separate host-managed -worktrees; in T3, worktree-isolated delegation runs an owner in a child thread. -Start top-level threads only when the user asks for new sessions, and bind their -workspace through the host. Give each branch one writer, and serialize stack -operations and shared resources. Record each owner, its route, and its report -path. Owners get bounded helpers through the kickoff; only you start program -owners. +Codex owner. Implement picks the method and runs its helpers as its own +subagents. + +Running a chief of staff is a request for sessions: start each owner as its own +top-level session, so the user can open and steer it. Bind its workspace through +the host, never in the shell: in T3, `t3_thread_launch` with a `worktree` +`workspaceStrategy` for the owner's branch. When the host cannot launch +top-level sessions, as in a plain Claude Code or Codex session, start a +delegated owner in its own host-managed worktree instead. Use +[Orchestration](../orchestration/SKILL.md) for model choice and concurrency. +Give each branch one writer, and serialize stack operations and shared +resources. Record each owner with its start mode, route, and report path. Only +you start program owners. Each owner checks its access and proof before work runs unattended, under Implement's [prepare](../implement/SKILL.md#2-state-the-finish-line-and-prepare). @@ -159,9 +165,12 @@ when a base changes, under [integration](references/dependencies.md#integration) Recompute ready work after each accepted result, landing, answer, or dependency change, and start what became ready. -For delegated owners, this thread is the watching parent under PR's -[wait](../pr/references/watch.md#wait); a top-level owner watches its own PR. -Keep watching pending PRs while you ask the user something. +A top-level owner watches its own PR and sends its reports, decision requests, +and blockers to this thread with `t3_thread_send`. It gives you no completion +wake-up, so whenever you reconcile, read the thread of any idle owner that has +not reported. For a delegated owner, this thread is the watching parent under +PR's [wait](../pr/references/watch.md#wait). Keep watching pending PRs while +you ask the user something. Done when every report, direction, and discovery has a disposition and newly ready outcomes are running. diff --git a/skills/chief-of-staff/assets/owner-kickoff.md b/skills/chief-of-staff/assets/owner-kickoff.md index 6d9a4fc..fdbb5df 100644 --- a/skills/chief-of-staff/assets/owner-kickoff.md +++ b/skills/chief-of-staff/assets/owner-kickoff.md @@ -16,8 +16,8 @@ Finish line: , picked because . Landing authority: . Land within that scope is the merge request Merge needs, and it takes effect only on the current chief's recorded landing release for your PR or stack. Landing: report readiness and end your turn. Land through Merge only on that release. Immediately before submitting, re-read the record: confirm the current chief, your active release, you as its one named lander, and no affecting hold or decision; match the forge's head/base for every PR in the set to the release. Report a mismatch instead of landing. Sets that span several owners are landed by the chief. Holds and user gates: . -Delegation allowance: you may start the bounded helpers your workflow needs: implementation, verification, and review helpers, and Swarm workers that fit. . Start no new program owners; send work that needs one to the chief. +Delegation allowance: you may start the bounded helpers your workflow needs as your own subagents: implementation, verification, and review helpers, and Swarm workers that fit. . Start no new program owners; send work that needs one to the chief. Owner report: write it to /reports/.md. Send a partial report as soon as you hit a missing prerequisite, a human decision, or a pending PR, naming what continues and the event that resumes the rest. -Route: with t3_thread_send; you watch your PR>. +Route: with t3_thread_send; you watch your PR | delegated: end your turn with it; the chief thread watches your PR>. Decision requests and shared blockers use the same route as they arise. In each decision request, say what reversing each option would take and cite any recorded source that settles it. diff --git a/skills/chief-of-staff/references/chief-move.md b/skills/chief-of-staff/references/chief-move.md index 9afce9b..464282e 100644 --- a/skills/chief-of-staff/references/chief-move.md +++ b/skills/chief-of-staff/references/chief-move.md @@ -32,4 +32,4 @@ is incomplete. ## After either The new chief reconciles state as on resume, sends owners their route, watches -delegated owners' pending PRs, and asks any remaining old thread to unwatch. +any delegated owner's pending PRs, and asks any remaining old thread to unwatch. diff --git a/skills/chief-of-staff/references/program-state.md b/skills/chief-of-staff/references/program-state.md index 09d82d2..d9c15c0 100644 --- a/skills/chief-of-staff/references/program-state.md +++ b/skills/chief-of-staff/references/program-state.md @@ -36,8 +36,8 @@ Keep, for each outcome under its stable ID: other outcomes. - **Finish line:** the picked line (Land, Try, review-ready PR, or draft PR) and why, and the effective line while it is provisional. -- **Owner:** identity, thread or task IDs and links, start mode (delegated, - top-level, or adopted), return route, report path, model, and workspace. An +- **Owner:** identity, thread or task IDs and links, start mode (top-level, + delegated, or adopted), return route, report path, model, and workspace. An outcome can be planned without one. - **Inputs:** logical dependencies, branch-order constraints, and any blocks with what is missing, who can supply it, and what it blocks. diff --git a/skills/implement/SKILL.md b/skills/implement/SKILL.md index 5459e31..dc5d46c 100644 --- a/skills/implement/SKILL.md +++ b/skills/implement/SKILL.md @@ -7,10 +7,9 @@ description: Use when asked to implement a spec, ticket, task, or feature, to de Carry one outcome to its finish line. Start from a brief, spec, task, ticket, or clear request. Leave merged work for **Land**, something to try for **Try**, and -an owner report for your caller: the session that started you, or the user in a -top-level thread. You -are done when the finish line's gates pass, the user can open what you showed, -and the report is delivered. +an owner report for your caller: the session that started you, or the user when +they started you. You are done when the finish line's gates pass, the user can +open what you showed, and the report is delivered. You own the outcome, the finish line, the order of handoffs, integration, scope, and the report. Each linked skill owns its own procedure. Helpers return to you. From d435c216b47ac20dec46bb0533fe2fbfc3ad4a2d Mon Sep 17 00:00:00 2001 From: Sree Raman <1271305+sreejithraman@users.noreply.github.com> Date: Mon, 9 Nov 2026 11:32:07 -0500 Subject: [PATCH 2/2] Wait on top-level chief owners' runs instead of reconciling ad hoc Co-Authored-By: Claude Opus 5.5 --- SOURCES.md | 7 ++++--- skills/chief-of-staff/SKILL.md | 14 ++++++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/SOURCES.md b/SOURCES.md index b03d6b2..c61f2f1 100644 --- a/SOURCES.md +++ b/SOURCES.md @@ -425,9 +425,10 @@ owns readiness, including its provisional start for a decision with a reversible recommended option. Owners start from `assets/owner-kickoff.md` with an explicit return route and report file. Running a chief counts as a request for sessions: each owner starts as its own top-level session bound to a host -worktree, watches its own PR, and reports with `t3_thread_send`; where the host -cannot launch sessions, a delegated owner runs in its own worktree and the chief -watches its PR. A running Implement session is adopted, never duplicated. The +worktree, watches its own PR, and reports with `t3_thread_send`, while the chief +waits on each owner's run through the host and reconciles one that ends +without a report; where the host cannot launch sessions, a delegated owner runs +in its own worktree and the chief watches its PR. A running Implement session is adopted, never duplicated. The chief reads Implement's owner report fields, accepts outcomes under Orchestration, and routes discoveries through an explicit disposition table. diff --git a/skills/chief-of-staff/SKILL.md b/skills/chief-of-staff/SKILL.md index 296ffbb..48e035b 100644 --- a/skills/chief-of-staff/SKILL.md +++ b/skills/chief-of-staff/SKILL.md @@ -167,10 +167,16 @@ change, and start what became ready. A top-level owner watches its own PR and sends its reports, decision requests, and blockers to this thread with `t3_thread_send`. It gives you no completion -wake-up, so whenever you reconcile, read the thread of any idle owner that has -not reported. For a delegated owner, this thread is the watching parent under -PR's [wait](../pr/references/watch.md#wait). Keep watching pending PRs while -you ask the user something. +wake-up, so after you start or message one, and before you end a turn with +owners outstanding, wait on each outstanding owner's run through the host (in +T3, `t3_thread_wait`, following its `next`). When a run ends, read the owner's +thread. Handle a sent report or request as usual. Reconcile a run that failed, +was interrupted, or went idle without a report or pending-PR partial: recover +it under Orchestration's +[recover work](../orchestration/references/reuse-and-recovery.md#recover-work), +or record the outcome blocked with what is missing. For a delegated owner, this +thread is the watching parent under PR's [wait](../pr/references/watch.md#wait). +Keep watching pending PRs while you ask the user something. Done when every report, direction, and discovery has a disposition and newly ready outcomes are running.