Configured tool · write
set_brand_notes
Rewrite the Voice section and/or the Never do section of the workspace brief in the person's words, leaving every other section as it is.
Human and agent roles
Configured boundary
Configured workspace
Postdom Chat only, with the signed-in owner's or admin's authority. Only the edited sections change: the brief is parsed, the one or two sections are replaced, and the same serializer the Rules page uses writes it back as a new version against the current one. Propose, then confirm: the API refuses any call the assistant's own previous answer did not propose and the person's current message does not agree to. The proposal is read from the end of that answer only: the last sentence ending in a question mark, plus the one sentence before it. Those sentences carry the new value and where it lands - the asking level as its own sentence, posts per day as a digit, quiet hours as HH:MM to HH:MM or the words no quiet hours, a pause as pause or resume, brand notes as the section text in double quotes - with @handle for one account or the word everywhere for the workspace. One change per question: a question that offers two changes, joins alternatives with or, or names two accounts (or an account and the workspace) is refused, because a yes does not say which. Anything else is refused with rules_change_not_asked before the call. Each line of a section has to appear in the answer the person agreed to, which is how a section of any length is normally settled: read it back, then save it on their yes.
This reference describes a connection made with @postdom/mcp@0.4.0 and a workspace-scoped agent key created in Accounts.
Callable schema
Input fields
Field names match the configured tool schema. Runtime-only constraints are labeled separately from schema validation.
voiceOptionalstringHow the brand should sound. A line beginning with # is refused: the brief is one document split on its headings, and a heading inside a section would take the sections after it. A carriage return with no newline after it is refused too - it ends a line for the parser and for a browser, so the same text would mean two different things.
never_doOptionalstringTopics, claims, phrases or treatments the agent must avoid. Refused on a heading line or a bare carriage return, for the same reason.
Synthetic values
Example call
Identifiers and values are examples. They do not represent a connected workspace or accepted media source.
set_brand_notes({
voice: "Calm and specific, first person plural. No hype.",
never_do: "Never name competitors. Never promise availability dates."
})Observed API record
Return shape
Returns a rules_change card with subject brand_notes: the two sections before and after, which of them changed, and the brief version they were saved in.
kind · subjectrules_change · brand_notes- The same card shape, over the brief's two sections.
applied · versionboolean · integer | null- Whether a new version was saved, and which.
before · after · changed{ voice, never_do } · field[]- The section text before and after, and which sections moved.
blockedobject | null- brief_version_conflict when someone else saved the brief first, twice; the card then carries the latest sections.
shortenedboolean- True when the section text quoted on the card was cut to keep the card inside the chat's result bound. It says nothing about what was saved: the brief holds the whole text.
Stop conditions
Agent handoff
appliedSay the change
Report which sections changed and the new text, from the card.
brief_version_conflictShow the latest
Nothing was written; say so and show the sections as they are now.
rules_change_not_askedPropose, do not retry
The section text has to be in the answer they agreed to. Show them the wording, ask, and save it on their yes.
admin_role_requiredRefuse truthfully
A workspace owner or admin can change rules.