Depends on #223.
Why
The Coder wrote preference:response_style into Memory, and it is still there. Once #223 lands there
are two places holding the same idea, and the older one is the one the agent already knows how to
reach.
Scope
- Prompt — the memory section states plainly that Memory is for subject-matter knowledge and
that character/tone/verbosity live in behaviour, with set_behaviour named as the way to change
them. Without this the model keeps using the tool it already knows.
- Migrate existing
preference:* memory entries into config.behaviour where they map cleanly;
leave the rest and let the user see them.
responseStyle free-text → structured. Guardrails.responseStyle is a free string
("professional" | "casual" | "concise" | …) read in exactly two places. "technical" maps to a
technicality band; the rest map to tone. Keep reading the old field for instances that have it.
Separate bug found in the same log
write_memory fired four times with the same key in a single turn. The cross-round dedup of
identical (name, args) calls should have collapsed that. Harmless here (last write wins) but it
means the dedup is not catching what it claims to — worth its own look while in this code.
Depends on #223.
Why
The Coder wrote
preference:response_styleinto Memory, and it is still there. Once #223 lands thereare two places holding the same idea, and the older one is the one the agent already knows how to
reach.
Scope
that character/tone/verbosity live in behaviour, with
set_behaviournamed as the way to changethem. Without this the model keeps using the tool it already knows.
preference:*memory entries intoconfig.behaviourwhere they map cleanly;leave the rest and let the user see them.
responseStylefree-text → structured.Guardrails.responseStyleis a free string(
"professional" | "casual" | "concise" | …) read in exactly two places."technical"maps to atechnicality band; the rest map to tone. Keep reading the old field for instances that have it.
Separate bug found in the same log
write_memoryfired four times with the same key in a single turn. The cross-round dedup ofidentical
(name, args)calls should have collapsed that. Harmless here (last write wins) but itmeans the dedup is not catching what it claims to — worth its own look while in this code.