--- title: Blueprint Hints intro: Explain fields to agents, or hide them --- Before an agent changes a page, it reads the blueprint of the page. Kirby Agents turns the blueprint into a short list of fields, with the type, the rules and the options of each field. This is what an agent sees for a blog post: ``` blueprint post subtitle text, max 120 characters intro inline html without

, tags: text blocks date date "YYYY-MM-DD", required category one of "news" | "guide" source url, only if category = "news" cover files, list of UUIDs, max 1, from page.files ``` All of this comes from the blueprint. But a blueprint only says what Kirby accepts, not what you want. The agent doesn't know that the subtitle should be one short sentence, or that only your team may give a rating. Custom fields are harder. Some plugins tell Kirby Agents the value format of their fields with a [field class](1_customization/1_field-types), and agents then see these fields like core fields. For all other custom fields, Kirby Agents doesn't know the value format, so it shows what it can find in the props: ``` blueprint product rating custom field "rating", max 5, value int internalnotes textarea, KirbyText with Markdown, label "Internal notes" ``` ## Adding hints Add an `agents` option to a field in your blueprint: ```yaml # site/blueprints/pages/product.yml fields: rating: type: rating max: 5 agents: description: Our own test score. Only set it for products we tested ourselves example: 4 as: number internalNotes: type: textarea agents: ignore: true ``` The agent now sees this: ``` blueprint product rating number, max 5, note: Our own test score. Only set it for products we tested ourselves, example 4 ``` The rating is a number with a note and an example, and the internal notes are gone. The Panel doesn't show the `agents` option, so editors see no difference. ## description A note for the agent, up to 500 characters. It shows up as `note:` in the list of fields. Write it like you would explain the field to a new editor: what the field is for, and what a good value looks like. The field already has a label and maybe a help text, so don't repeat them. ## example An example value, shown as `example`. Agents follow the format of examples closely, so this helps most for fields with a special format, like a template with placeholders. ## as Makes the field work like a field of another type. In the example above, `as: number` turns the custom `rating` field into a number field for agents. Kirby still stores the value with the `rating` field, like in the Panel. Use a core field type of Kirby, or a type that has a [field class](1_customization/1_field-types). If a custom field type is used in many blueprints, a field class is less work than a hint on each field. ## ignore Hides the field from agents. They don't see it when they read a page or its blueprint, and they can't change it. When an agent changes other fields of the page, Kirby keeps the value of the hidden field. Don't hide required fields. Kirby checks all required fields when the changes are published, so publishing would fail with an error for a field that the agent doesn't know. ## Nested fields Hints also work for fields in blocks, layouts, structures and objects. Here, the label of each link gets a note: ```yaml links: type: structure fields: label: type: text required: true agents: description: Link text ``` There are two limits. When an agent replaces a whole blocks or structure field, the values of hidden fields in its blocks and rows are lost. Changes to single blocks and rows keep them. And Kirby removes the `agents` option from a blocks, layout or entries field inside another field, so hints on such a field have no effect.