feat(phrases): tell the model which keys exist, once a registry is configured #595

Merged
coilyco-ops merged 1 commit from coilyco-ops/tell-the-model-which-phrases-exist into main 2026-08-13 16:48:31 +00:00 AGit
Member

the prompt half of #176, safe to write now that render landed first. Off until a deployment names a path, and the prompt snapshot does not move.

the prompt half of #176, safe to write now that render landed first. Off until a deployment names a path, and the prompt snapshot does not move.
feat(phrases): tell the model which keys exist, once a registry is configured
All checks were successful
ci / image-build (pull_request) Successful in 21s
ci / test (pull_request) Successful in 34s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
3eb133bc92
The render half landed first deliberately, so the marker can no longer reach a
member as literal text. This is the half that turns the feature on, and it is
now safe to write in either order.

When a registry is configured the system prompt lists the keys and states the
terminal rule. A model that does not know an invocation must be the whole reply
writes one as a prefix and gets refused for a reason it cannot see, so the rule
belongs in the prompt beside the keys rather than only in the validator.

It names keys and never texts. A model handed the text composes with it, which
is the behaviour a registry exists to replace, and it would put member-facing
wording back inside something a model can paraphrase. Pinned by a test.

Appended to the built prompt rather than written into BuildSystemPrompt. That
keeps every existing caller unchanged, and it means the snapshot generator and
the policy check, which hold no registry, render exactly what they rendered
before. So the tracked prompt snapshots do not move and the evaluation packs
see no change.

The feature is still off. Nothing sets SIRENS_ECHO_PHRASES, so the registry is
empty, the prompt is byte-identical to today, and no reply can invoke anything.
Turning it on is a deployment variable, which is the same shape the content
gate and the scratchpad shipped in.

Worth naming for whoever turns it on: this changes every turn's system block on
the profile that enables it, so it wants the evaluation cadence run against it
rather than being switched on quietly.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
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!595
No description provided.