Quick App manifest
A Quick App's manifest is the applicationProperties object of its DIAL application. It describes the orchestrator, contexts, Toolsets, and features, and DIAL Core validates it against the Quick Apps JSON schema. This reference lists the top-level fields and the settings that apply to the whole app. It is for app developers who write manifests through the API or the DIAL Core configuration. It assumes you know the Quick Apps capabilities. It describes Quick Apps Backend 0.13.2.
Schema
- ID. Quick App applications set
applicationTypeSchemaIdtohttps://mydial.epam.com/custom_application_schemas/quickapps2, or to the backend'sAPP_SCHEMA_ID. - Source. The backend serves its schema at
/v1/configuration-support/application-schema, and DIAL Core fetches it from there. See Register the application type. - Editor. The Quick App editor in DIAL Chat writes this manifest, and its Edit JSON opens the agent's configuration as JSON. See Build a Quick App.
Top-level fields
| Field | Required | Description | Reference |
|---|---|---|---|
orchestrator | Yes | The orchestrator model, system prompt, iteration limit, attachment strategy, and tool discovery | Orchestrator |
contexts | Yes | Fixed text, files, and folders; pass [] when there are none | Contexts |
tool_sets | Yes | The Toolsets; pass [] when there are none | Tool sets |
features | No | Per-app features, listed below | Features |
skills | No | DIAL prompts and DIAL skill resources used as skills | Skills |
hooks | No | Tools called at the start or end of every turn | Hooks |
tool_defaults | No | Settings for every tool call; today, timeout_seconds | Timeouts |
conversation_starters | No | Suggested first messages | Conversation starters |
The smallest valid manifest:
{
"orchestrator": {
"deployment": { "deployment_id": "<MODEL_ID>" },
"system_prompt": { "type": "custom", "variables": {}, "content": "You are a helpful assistant." }
},
"contexts": [],
"tool_sets": []
}
More complete manifests are in Examples.
Features
features turns per-app capabilities on and narrows deployment-wide limits. Leaving it out, or setting {}, keeps the defaults; time awareness is then on. "features": null turns the defaults off.
| Field | Default | Capability |
|---|---|---|
timestamp | On | Time awareness |
file_loading | Backend limit | File size |
external_url_fetch | Backend policy | External URL fetch |
web_fetch | Off | Web fetch |
dial_files | On, all tools (from 0.14.0; off before) | DIAL files tools |
representation_tooling | Off | Files in the answer |
stage_display | info level | Stages |
tool_access_filter | Off | Tool access filter |
Conversation starters
conversation_starters shows buttons with suggested messages before the conversation starts.
{
"conversation_starters": {
"intro_text": "Pick a starting point",
"starters": [
{ "title": "Summarize", "text": "Summarize the attached document." },
{ "title": "Translate", "text": "Translate the last user message to English." }
]
}
}
| Field | Required | Default | Description |
|---|---|---|---|
starters | Yes | — | The buttons, each with a title and the text it sends |
intro_text | No | Select an action | Text above the buttons |
auto_submit | No | true | Sends the text at once. With false, it fills the input for the user to edit. |
chat_message_input_disabled | No | false | With true, users can start only from a button |
Predefined templates
The backend ships named templates for system prompts, Toolsets, and tools, such as the ChatHub prompts and the chathub Toolset. A manifest refers to them by name:
| Reference | Template |
|---|---|
"system_prompt": { "type": "predefined", "template": "<name>" } | A system prompt |
{ "type": "predefined", "template_name": "<name>" } in tool_sets | A Toolset |
{ "type": "predefined-tool", "template_name": "<name>" } in a Toolset's tools | A tool |
- Overrides. A predefined Toolset or tool takes an
override: a JSON Merge Patch applied to the template. It can't changetype. See Customize a variant. - Your own templates. The backend's
PREDEFINED_EXTRA_PATHSadds folders of templates over the built-in ones.
Localized names
A Toolset's name and description can be a locale map, such as {"en": "Search", "de": "Suche"}, in place of a string. On dial-mcp, only description can. The backend picks the request's Accept-Language, then en, then any entry. A proxy that rewrites Accept-Language can pass the locale in another header, named by the backend's PROXY_LANGUAGE_HEADER.
Deprecated fields
These fields are still accepted but will be removed.
| Deprecated | Use instead |
|---|---|
Top-level starters, a list of strings | conversation_starters |
deployment.name | deployment.deployment_id |
dial_id on dial-mcp | deployment_id |
Fallback strategy stop | hard_stop |
Fallback strategy retry | continue |
forward_tool_error_message | Nothing: tool errors always reach the model |
content_propagation.propagate_history | conversation_mode.resumable |
display.stage.show on a tool | Nothing named in the schema |