Skill: inform the agent of its own classifier #908

Open
opened 2026-08-17 17:12:58 +00:00 by coilyco-ops-gaming · 1 comment

The agent cannot currently describe the classifier or routing layer that governs its inputs and actions. It sees only the fixed policy layer (trust split, guardfile tool grants, house style) and has no inspectable source for the decisions behind what it receives, what it may act on, and whether it replies, reacts, or stays silent.

Gap: no skill or harness-provided explanation informs the agent of its classifier's decision basis, including admitted speaker class, directness, scope and authorization checks, and the reply/react/silent decision with reason codes.

Desired outcome: a skill the agent can load that describes its own classifier accurately. Policy logic stays in the harness; the agent receives an inspectable, non-bypassable explanation rather than guessing from the context it was handed.

The agent cannot currently describe the classifier or routing layer that governs its inputs and actions. It sees only the fixed policy layer (trust split, guardfile tool grants, house style) and has no inspectable source for the decisions behind what it receives, what it may act on, and whether it replies, reacts, or stays silent. Gap: no skill or harness-provided explanation informs the agent of its classifier's decision basis, including admitted speaker class, directness, scope and authorization checks, and the reply/react/silent decision with reason codes. Desired outcome: a skill the agent can load that describes its own classifier accurately. Policy logic stays in the harness; the agent receives an inspectable, non-bypassable explanation rather than guessing from the context it was handed.
Member

Landed in 61a8d0d as coilyco-general/references/harness-gates.md.

Written from the code rather than from this issue's description of it. The content-gate half comes from agent/content-classes.yaml's own header, the summoning half from agent.go.

What it gives the agent an inspectable source for:

  • The gate is allow-by-default, with denied classes as the exception, and the allowed classes enumerated so an ordinary request has somewhere to go rather than being forced into a refusal bucket.
  • A sensitive class changes the shape of a refusal, not the verdict — a generic redirect naming no category, because naming the rule that fired tells a member what to avoid saying next time.
  • Sensitive wins ties.
  • Every block is visible, since silent no-reply was rejected, so a refusal is never mistakable for an outage.
  • Summoning: mention, reply to its own message, or a message in a thread it opened. Another bot is refused unless allowlisted, and its own messages are dropped first.

The useful part is the shape rather than the class list. A refusal that names no reason is the sensitive branch working as designed, not evasion and not a fault, and a seat that knows this can explain a refusal it did not itself make instead of guessing at it or apologising for it.

Where I did not follow the issue

This asks for reason codes among the decision basis. I did not find any and did not invent them, so they are absent from the file rather than described. If they exist somewhere I did not read, that is a gap in the file worth filling.

Fetchable, not inline

Deliberate, and it costs zero prompt bytes. This is explanatory knowledge that matters when the subject comes up, which is exactly the progressive-disclosure case measured on #968: the Dowel root is 6 of 7 inline at 24KB a turn because every author believed their file was the one that must not be missed. Adding a ninth inline file to fix a self-description gap would have been that same move.

Reach, and it is a real limitation

coilyco-general is loaded by Deep, Dowel, and the HTTP profile. Echo does not load it, and Echo is the lane whose content gate fires most. Fixing that needs either a shared root or duplication, neither of which is freeze work. Flagged rather than worked around.

#906 stays open on the runtime half, which this does not supply and says so.

Refs #906, #968, #227, #1011

**Landed in `61a8d0d`** as `coilyco-general/references/harness-gates.md`. Written from the code rather than from this issue's description of it. The content-gate half comes from `agent/content-classes.yaml`'s own header, the summoning half from `agent.go`. What it gives the agent an inspectable source for: * **The gate is allow-by-default**, with denied classes as the exception, and the allowed classes enumerated so an ordinary request has somewhere to go rather than being forced into a refusal bucket. * **A `sensitive` class changes the shape of a refusal, not the verdict** — a generic redirect naming no category, because naming the rule that fired tells a member what to avoid saying next time. * **Sensitive wins ties.** * **Every block is visible**, since silent no-reply was rejected, so a refusal is never mistakable for an outage. * **Summoning**: mention, reply to its own message, or a message in a thread it opened. Another bot is refused unless allowlisted, and its own messages are dropped first. The useful part is the shape rather than the class list. A refusal that names no reason is **the sensitive branch working as designed**, not evasion and not a fault, and a seat that knows this can explain a refusal it did not itself make instead of guessing at it or apologising for it. ## Where I did not follow the issue This asks for reason codes among the decision basis. **I did not find any and did not invent them**, so they are absent from the file rather than described. If they exist somewhere I did not read, that is a gap in the file worth filling. ## Fetchable, not inline Deliberate, and it costs zero prompt bytes. This is explanatory knowledge that matters when the subject comes up, which is exactly the progressive-disclosure case measured on #968: the Dowel root is 6 of 7 inline at 24KB a turn because every author believed their file was the one that must not be missed. Adding a ninth inline file to fix a self-description gap would have been that same move. ## Reach, and it is a real limitation `coilyco-general` is loaded by Deep, Dowel, and the HTTP profile. **Echo does not load it**, and Echo is the lane whose content gate fires most. Fixing that needs either a shared root or duplication, neither of which is freeze work. Flagged rather than worked around. #906 stays open on the runtime half, which this does not supply and says so. Refs #906, #968, #227, #1011
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-gaming/sirens-echo#908
No description provided.