# Owner-Private Agent Delivery

Date: 2026-03-29
Status: compatibility-reference / superseded-by-task-native-convergence
Scope: multi-human multi-agent collaboration; owner-only agent delivery; no first-party daemon runtime policy changes
Non-goals: safe/danger runtime switching; tool-level risk classification; workspace-wide public agents

This file is a compatibility reference for the pre-convergence owner-private quote-flow model. It must not be used as the current user-facing product model.

Current owner-private collaboration should be interpreted through the Task-native convergence specs:

- [`../task/agent-space-convergence.md`](../task/agent-space-convergence.md)
- [`../task/collaborator-policy.md`](../task/collaborator-policy.md)
- [`../task/embedded-view.md`](../task/embedded-view.md)
- [`../message/delivery-ledger-optimization.md`](../message/delivery-ledger-optimization.md)
- [`runtime-api-design.md`](runtime-api-design.md)

The pre-release private-context specs below remain branch-local implementation references for compatibility and migration work only:

- [`shared-spaces-and-agent-spaces.md`](shared-spaces-and-agent-spaces.md)
- [`space-core-design.md`](space-core-design.md)
- [`delivery-wake-design.md`](delivery-wake-design.md)
- [`share-publish-design.md`](share-publish-design.md)
- [`surface-projection-design.md`](surface-projection-design.md)

In the unshipped private-context implementation reference, owner-shared context was materialized as owner-authored private-context transcript rows with durable source refs. Shipped Task-native behavior should instead expose owner-gated owner_quote source refs / Task discussion / Task announcement surfaces, with hidden owner-private rows treated only as bounded compatibility substrate where still needed. The older hidden context-delivery API has been retired and must not be reintroduced; the visible parent quote-flow model described below may still inform legacy migration handling, but it must not override the Task-native convergence specs for new behavior.

## 1. Background

The stable trust boundary did not change:

- an owner-private agent is the machine owner's private execution endpoint
- non-owner humans may collaborate in shared channel scopes and thread scopes
- that agent must not see non-owner shared context unless the owner explicitly handles it

What changed is the representation of that explicit handling.

For this legacy quote-flow compatibility model, owner-private shared context converges on one real, visible, owner-authored quote message. That message carries:

- owner intent
- source refs
- delivery boundary
- wake boundary

The source shared message itself is not the delivery object.

## 2. Compatibility Goal

For shared channel/thread collaboration around owner-private agents:

1. non-owner shared messages remain shared-only by default
2. owner may process pending shared context in one editable draft
3. the final owner-authored quote message is the only agent-facing delivery object
4. the original shared messages retain only a lightweight `Used in owner context` trace

## 3. Core Decisions

### 3.1 Shared messages stay shared-only by default

Non-owner shared messages do not:

- enter owner-private agent current-event delivery or readable history directly
- wake owner-private agents directly
- gain per-agent delivery state on the source row

They are only candidate shared context for a later owner-authored handling flow.

### 3.2 The real delivery object is an owner-authored quote message

When the owner wants an owner-private agent to process shared context, the system creates a draft
from pending shared messages in the current surface. The owner may edit, trim, reorder, rewrite,
and add direct `@agent` instruction text before sending.

The final owner-authored quote message is:

- a normal visible timeline message
- the only durable delivery object
- the only wake object
- the only owner-private recipient fact target

### 3.3 The owner quote message must be visible, but folded by default

Because the shared source messages already appeared in the timeline, the owner quote message should
render collapsed by default.

Collapsed rendering should expose only a lightweight summary such as:

- owner context message
- number of quoted shared messages
- targeted agents

Expanding the message reveals the full quoted context and owner instruction.

### 3.4 Source messages do not carry per-agent delivery UI

The source shared message must not show:

- `Delivered by owner`
- `Owner delivery required`
- per-agent `Deliver to agent`
- `Deliver to my agents`
- `Request owner delivery`
- per-source `Delivery status` cards

Those affordances incorrectly imply that the source message itself is the delivery object.

### 3.5 Source messages keep only a lightweight post-use trace

Once a source shared message is referenced by a real owner-authored quote message, the source row
should show only a lightweight trace such as:

- `Used in owner context`

This trace:

- is required
- must remain lightweight
- must not expand into a per-agent delivery card
- must not imply the source message itself was directly delivered

## 4. Pending Shared Context Model

### 4.1 Surface-level entry, not message-level entry

The primary owner action is a surface-level action on the current channel mainline or reply thread,
for example:

- `Process pending shared context`

The flow should not require the owner to open separate delivery controls under each source message.

### 4.2 Pending set is collected with option A

When the owner starts the flow, the draft is prefilled with all shared messages in the current
surface that:

- were authored by a non-owner human
- are still plain shared messages
- have not yet been used in an owner-authored quote flow

Owner-authored plain messages are never pending shared context candidates. They already express
owner intent directly and must not be re-decided through the quote flow.

Whether a message was "used" is determined by real sent owner quote messages and their source refs,
not by a separate approval or delivery state machine.

### 4.3 Owner keeps full editorial control

Before sending, the owner may:

- remove source messages
- reorder them
- rewrite or shorten context
- add clarification
- direct mention one or more owner-owned agents

Only the source refs present in the final sent owner quote message count as "used".

## 5. Data Model

### 5.1 Minimal model

The minimal model remains:

1. shared/source messages in `scope_messages` (and archive)
2. owner-authored quote messages in `scope_messages` (and archive)
3. owner-private sparse targeted events in `scope_fanout_outbox`, attached to the owner quote message

No per-source approval table, no per-source wake table, no hidden delivery shadow object.

### 5.2 Source refs remain the durable link

The owner quote message must retain structured source refs for the shared messages it quotes.

Those refs drive:

- folded UI summary
- source-message `Used in owner context` trace
- later explainability/audit

## 6. Delivery And History Rules

### 6.1 Source messages are not directly delivered

Owner-private recipient facts must not be written onto the original shared source message.

The source message remains a shared message.

### 6.2 Owner quote message drives delivery and wake

When the owner sends the quote message:

- durable agent recipient facts are written for that owner quote message
- wake fan-out is computed from that owner quote message
- the owner quote message is what the daemon delivers to the agent

### 6.3 Owner-private history follows owner visibility

For shared channel scopes and thread scopes, owner-private agents may see only:

- owner-authored human messages in that shared surface
- messages from agents owned by that same owner, including themselves

They do not automatically gain visibility into non-owner human backlog. Whether a specific message
was `@mentioned` / directly delivered controls immediate delivery and wake, not `read_history`
visibility.

## 7. Explainability / UX

### 7.1 Source-message explainability is lightweight

For source shared messages:

- allow a lightweight `Used in owner context` indication
- do not show per-agent delivery state

### 7.2 Owner quote explainability is normal message explainability

For the owner quote message itself:

- it is a normal visible message row
- it may still use regular delivery diagnostics and regular targeted-agent explainability
- it should render folded by default because it quotes already-visible source material

## 8. Realtime

Because the owner quote is now a real new message, the main UI refresh path should again be the
normal `message:new` contract.

The source-message lightweight trace may be derived client-side from quote source refs or refreshed
through normal message invalidation. It does not require source-message-level delivery events as the
primary product contract.

## 9. Compatibility / Migration

- Historical inline-source delivery facts may still exist in old data and may require compatibility
  handling during migration.
- Historical `owner_quote` naming may remain internally for a while.
- New product behavior must follow the owner-authored quote model defined here.

## 10. Acceptance Criteria

The implementation satisfies this spec only if all of the following are true:

- owner processes pending shared context through one editable draft for the current surface
- sending that draft produces one real visible owner-authored quote message
- that owner quote message is the only owner-private delivery and wake boundary
- source shared messages do not show per-agent delivery cards or owner-delivery CTA
- source shared messages referenced by a sent owner quote show only a lightweight `Used in owner context` trace
- owner quote messages render folded by default
