propose_brand_kit
Create or update a client project's Brand Kit as a reviewable draft, citing Knowledge Base documents or user quotes; changes stay unpublished until a consultant approves.
Instructions
Save Brand Kit values for a client project as the Brand Kit's draft, with the sources they come from: brand facts (about, ideal customer profile, point of view, author persona), tone of voice, the call to action, writing rules, content types, writing samples and custom variables. The draft waits on the project's Brand Kit page, where the consultant publishes or discards it; the published Brand Kit, and what get_project_context returns, stay unchanged until then. This tool doesn't publish, discard or delete.
Use when the user asks to add to or update a client's Brand Kit, for example from their brand guidelines.
The changes apply to the published Brand Kit: a field given replaces that field whole; in each list, `remove`
takes items out by id, then `set` adds new items (no id) or replaces an existing item whole (its id). A Brand Kit
that already has a draft waiting for review takes no new proposal, except one that adds to this connection's own
pending proposal (draft_proposal_id). Every proposal cites at least one source: Knowledge Base documents
(`kb_sources`, each with the content_hash kb_get_document returned, which is refused once the document has
changed) and/or the user's own words (`user_statements`, recorded as quotes reported by the AI, not verified).
Args:
project_id: The project (from list_projects()).
based_on_version: brand_kit.published_version as get_project_context returned it (0 when there is no
published Brand Kit). A Brand Kit published again since is refused.
fields: Fields to replace: about, ideal_customer_profile, point_of_view, author_persona, tone_of_voice (text),
cta ({text, destination}) and header_case.
writing_rules: {set, remove}. A rule is {id?, text, content_type_ids}; content_type_ids [] applies it to every
content type. get_project_context lists the global rules, and a content type's own rules when called
with that content_type, each with its id and content_type_ids.
content_types: {set, remove}. A content type is {id?, name, description, cta}; cta is an object, "inherit"
(the Brand Kit's CTA; the default for a new one) or "none". One named by id states its cta, as
get_project_context's available_content_types shows it.
writing_samples: {set, remove}. A sample is {id?, title, url, body, outline}; its current body comes from
get_project_context with include_samples.
custom_variables: {set, remove}. A variable is {id?, key, value}; brand_kit.custom_variable_ids gives each
key's id.
kb_sources: Knowledge Base documents the values come from: [{document_id, content_hash}].
user_statements: The user's own words the values come from, quoted exactly.
draft_proposal_id: The proposal_id (kbp_…) an earlier call returned, to add these changes to that pending
proposal; a field named here replaces the value that proposal set.
mutation_id: Optional UUID for this proposal. A repeat with the same mutation_id and arguments returns the
saved proposal instead of saving another; an OUTCOME_UNKNOWN error names the one it used.
[Provider: Unilytics]
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| kb_sources | No | ||
| project_id | Yes | ||
| mutation_id | No | ||
| content_types | No | ||
| writing_rules | No | ||
| user_statements | No | ||
| writing_samples | No | ||
| based_on_version | Yes | ||
| custom_variables | No | ||
| draft_proposal_id | No |