41 lines
2.4 KiB
Markdown
41 lines
2.4 KiB
Markdown
---
|
|
id: affordances/an-affordance-a-scoped-agent-warns-on-the
|
|
title: 'An affordance: a scoped agent warns when a request lands outside its scope'
|
|
theme: affordances
|
|
status: open
|
|
priority: urgent
|
|
created: 2026-08-25
|
|
date_source: stated
|
|
order: 2
|
|
---
|
|
|
|
**An affordance: a scoped agent warns when a request lands outside its scope.** Wanted 2026-08-25,
|
|
urgent. Born from a real miss the same day: a commander-coordination thread landed in the standing todo
|
|
chat, and the agent acted on it instead of noticing it was not its job. The owner keeps many sessions
|
|
open with different roles, and a message in the wrong one currently gets executed by whoever receives
|
|
it.
|
|
|
|
One affordance, two triggers, both ending in the same move — **one line, "this may be meant for another
|
|
chat?", then wait for the confirm; on a confirm, do it without further protest**:
|
|
|
|
1. **Named scope.** The session has been named or tasked with a specific thing — a commander's task, a
|
|
chat the owner titled, a role stated in conversation ("you are my todo guy"). A request outside that
|
|
scope gets the warning first. Filing or noting something ABOUT another subject stays in scope;
|
|
DOING the other subject does not.
|
|
|
|
2. **No name, but the request assumes a context this conversation does not hold.** Mid-work, a message
|
|
arrives about something the agent has never heard of — and the phrasing assumes it knows exactly
|
|
what is meant ("as I explained", "the change we agreed", a "he" with no referent here). That
|
|
assumption is the signal: the context exists in SOME chat, and it is not this one. Warn the same
|
|
way.
|
|
|
|
The second trigger is the one that earns the affordance: it needs no configuration at all, only the
|
|
observation that the owner is speaking to a shared history the transcript does not contain.
|
|
|
|
Notes for whoever writes it: affordances live in `capabilities/affordances/` and reach every Claude
|
|
session per turn via `affordanceBlock` — hot, no restart. "What am I named or tasked with" already has
|
|
partial answers — a commander gets its identity in the `commanderBlock` preamble, and a chat's title
|
|
lives in the transcript's own `summary` entries — but trigger 2 deliberately works without either.
|
|
Keep the warning cheap and single-shot: a wrongly-suspicious agent costs one line; a wrongly-obedient
|
|
one costs what the todo chat paid on 2026-08-25 — work done in the wrong place by the wrong agent.
|