Skip to content

Reintroduce sink interceptor type#28

Open
PederHP wants to merge 1 commit into
mainfrom
feat/reintroduce-sink-type
Open

Reintroduce sink interceptor type#28
PederHP wants to merge 1 commit into
mainfrom
feat/reintroduce-sink-type

Conversation

@PederHP

@PederHP PederHP commented Jun 18, 2026

Copy link
Copy Markdown
Member

Adds a third interceptor type — sink — to the working copy of the SEP (docs/sep.md).

What

A sink is a non-blocking, non-mutating interceptor that reacts to a context operation without affecting the interaction. It MUST NOT block execution and MUST NOT modify the payload — it exists to drive concurrent UX, workflow state, or downstream pipelines based on what the agent is doing.

Use cases: avatar/character animation from conversation mood, voice-mode / TTS switching, real-time UI affordances, background context indexing, secondary-agent triggers. The C# reference impl already demonstrates the avatar case end-to-end in AvatarMoodInterceptorSample.

Changes to docs/sep.md:

  • Type union extended to "validation" | "mutation" | "sink" (all sites incl. ChainEntry / ChainExecutionResult)
  • New Sink section parallel to Validator / Mutator, with SinkResult
  • Execution model: sink as a third stage (parallel, fire-and-forget) on each phase; Type Behaviors table updated
  • audit-logger example reframed as a sink; new avatar-mood sink example added
  • Rationale restructured: separation of the three types, why sink vs mode: "audit", and why "sink" and not "observability" (avoids implying OpenTelemetry overlap)

Sinks are additive to the validator/mutator split and mode: "audit": audit mode disables enforcement while preserving a validator/mutator's interface; sinks are structurally non-enforcing and cannot be promoted to affect the interaction. Implementations MUST reject sinks declared with mode: "audit".

Why here

This re-homes the proposal from Degiorgio/modelcontextprotocol#1 — which targeted the SEP author's personal fork — onto this repo's working copy of the SEP. #21 established docs/sep.md as where the WG maintains and reviews the SEP, so the sink proposal belongs here. Once the WG agrees, it folds upstream into SEP-2624 along with the rest of docs/sep.md.

🤖 Generated with Claude Code

Adds a third interceptor type, `sink`, for non-blocking, non-mutating
interceptors that react to context to drive concurrent UX, workflow
state, or downstream pipelines (avatar animation, voice-mode triggers,
real-time UI affordances, background indexing) without affecting the
request/response interaction.

Additive to the validator/mutator split and `mode: "audit"`. Audit mode
disables enforcement while preserving the validator/mutator interface;
sinks are structurally non-enforcing and cannot be promoted to affect
the interaction. Renamed from the original draft's `observability` to
`sink` to avoid implying overlap with OpenTelemetry / general logging.

Re-homed from Degiorgio/modelcontextprotocol#1 (a PR against the SEP
author's personal fork) onto this repo's working copy of the SEP, which
PR #21 established as where the WG maintains and reviews the SEP.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant