A manifest is the model-selection contract for a Fable UI surface. It explains when a tool should win, when it should lose to a neighboring tool, and the safety boundary around the resulting UI. It is product behavior, not a permission boundary.
Current catalog#
The registry currently ships these model-facing contracts:
| Tool | Registry item | Installed manifest or contract |
|---|---|---|
show_metric | metric-card | lib/fable-ui/manifests/show-metric.md |
show_next_actions | suggested-actions | lib/fable-ui/manifests/show-next-actions.md |
request_confirmation | confirmation-card | lib/fable-ui/manifests/request-confirmation.md |
collect_input | form-card | lib/fable-ui/manifests/collect-input.md |
show_chart | charts | lib/fable-ui/manifests/show-chart.md |
show_text_editor | text-editor-card | lib/fable-ui/manifests/show-text-editor.md |
show_email_composer | email-composer-card | lib/fable-ui/manifests/show-email-composer.md |
show_code_block | code-block-card | lib/fable-ui/manifests/show-code-block.md |
show_table | data-browser | lib/fable-ui/manifests/show-table.md |
show_data_browser | data-browser | lib/fable-ui/manifests/show-data-browser.md |
get_rendered_data | data-browser | lib/fable-ui/manifests/get-rendered-data.md |
get_rendered_data is installed with DataBrowser because the chat client must register it and provide its output. It reads only the current provider-owned rendered page and never fetches or refetches.
What a manifest should define#
A useful manifest includes:
- Tool and component names.
- When to use and avoid the tool.
- Neighboring tools to prefer in ambiguous cases.
- Representative trigger and anti-trigger prompts.
- Payload constraints and safety notes.
For example, show_metric is for one trusted primary number, not a list of records. show_table is for a bounded static snapshot, while show_data_browser is for a registered host-owned resource with browsing controls. request_confirmation precedes a host-owned side effect; it never authorizes one.
Keep contracts aligned#
Three layers must agree:
- The tool definition constrains valid input and output.
- The manifest guides model selection.
- The host integration validates data, renders the trusted component, and performs any callback or side effect.
When one layer changes, update the other two and test routing with the installed tool set. Do not place secrets, raw endpoints, private collection paths, handler code, or authorization logic in a manifest.
Read Tool Definitions for the runtime contract and AI SDK Integration for registration, rendering, callback, and rendered-data-loop recipes.