Your agent has generated five options. All five are the same idea with a different haircut.
I wrote recently about the interchangeable glowing-globe dashboards I kept seeing at UAE exhibitions. Here is the implementation question behind that complaint: how do we give an agent useful preferences without pretending a style score is objective truth?
I keep my own taste profile as a skill. The small pattern below is a proposed implementation, not a benchmark result or a description of a production system.
Separate constraints from preferences
A taste record needs three kinds of information:
- Context: the audience, task and decision the output should support.
- Constraints: checks that must pass before anyone considers style.
- Preferences: annotated examples and reasons for choosing between acceptable alternatives.
For a customer-facing release note, “include the migration guide” is a constraint. “Lead with the customer's next action” is a preference that may have exceptions. Do not blend them into one weighted score. Otherwise, excellent typography can compensate mathematically for a missing instruction. An elegant way to send everyone to support.
Here is a minimal record:
{
"version": "0.1",
"audience": "existing API customers",
"task": "explain a breaking configuration change",
"required_urls": ["https://example.com/migrate"],
"banned_phrases": ["seamless transition"],
"preferences": [
"Name the affected workflow before the implementation detail",
"State a limitation beside the claim it qualifies"
],
"examples": [
{
"text": "Update the endpoint before Friday to keep exports running.",
"decision": "prefer",
"reason": "Names the action, deadline and consequence"
}
]
}
The URL and deadline are illustrative. Replace them with verified facts for the actual release.
Keep the mechanical gate small and honest
This Python example checks exact URL presence and normalised phrase matches. It does not verify that a URL works, that the claim is true, or that the document is good.
import unicodedata
def normalise(text):
return " ".join(unicodedata.normalize("NFKC", text).casefold().split())
def violations(text, record):
errors = []
normalised = normalise(text)
for phrase in record["banned_phrases"]:
if normalise(phrase) in normalised:
errors.append(f"banned phrase: {phrase}")
for url in record["required_urls"]:
if url not in text:
errors.append(f"missing URL: {url}")
return errors
record = {
"banned_phrases": ["seamless transition"],
"required_urls": ["https://example.com/migrate"]
}
assert violations("A SEAMLESS transition", record) == [
"banned phrase: seamless transition",
"missing URL: https://example.com/migrate"
]
assert violations("Read https://example.com/migrate", record) == []
A substring matcher has obvious limits. It can flag a phrase quoted for criticism and miss a paraphrase. Keep an explicit exception path with a recorded reason. Do not present this as a security boundary or an AI detector.
Generate alternatives before asking for a winner
Ask for materially different structures, then compare them against the same brief. For example: action-first, before-and-after, and trade-off-first. Require each candidate to explain what it sacrifices.
The Artificial Hivemind study gives a research basis for worrying about convergence. Verbalized Sampling explores eliciting multiple responses with probabilities. Treat those stated probabilities as model output, not calibrated confidence.
Give a critic the candidates, the taste record and the task. Ask for quoted evidence against each preference, plus any disagreement between criteria. Keep candidate text clearly separated from instructions. A second agent can share the first agent's blind spots, and untrusted candidate content can try to influence the review. Human inspection remains necessary.
Store the decision, not just the winner
Record the chosen candidate, rejected alternatives, human rationale, record version and observed outcome. Keep a few examples out of the prompt to check whether a revised taste record generalises beyond the examples it was shown.
If the output passes the checks but readers still misunderstand it, change the record. The objective is a better decision process, not a permanently green dashboard.
Watch my original LinkedIn video, or read the companion article and watch the video on my website.

Top comments (0)