Defaults and Limits
Every default, limit, timer and storage key of Chat UI 0.4.0 in one place. Server-side limits (body size, quotas, retention, page size) belong to the server; the ones named here are what the UI does or expects.
Props that have a default
| Prop | Default | Where |
|---|---|---|
streaming | true | Chat, useChat |
showHistory | true | Chat |
defaultHistoryOpen | false | Chat |
theme | "dark" | Chat, EmbedChat |
showAvatars, showTimestamps | true, false | Chat |
autoScroll, autoFocusInput | true, false | Chat |
enableMessageSearch | false | Chat |
showAgentName | false | Chat, ChatHistory |
showStatus | true | Chat, ChatHistory |
enableCitations | true | Chat |
readOnly | false | Chat, useChat |
enableToolApprovals, enableQuestions | true | Chat, useChat (enableQuestions) |
allowArgumentEdit | false | Chat |
expiryWarningSeconds | 600 | Chat, the cards |
pendingActionComposerMode | "block" | Chat, useChat |
showBudgetMeter | true | Chat |
allowBudgetContinue, allowBudgetEdit | false | Chat |
autoSend | false | Chat |
Portal switches (messageActions, feedback, historyActions, exportMenu, notifications, disclosure.aiLabel) | off | Chat |
feedback.comments | true | Chat |
exportMenu.formats | ["md", "json", "pdf"] | Chat |
exportMenu.includeTools | false | Chat |
notifications.desktop | "off" | Chat |
Announcement.severity, Announcement.dismissible | "info", true | Chat |
ConversationStarter.autoSend | false | Chat |
Files
| Setting | Default |
|---|---|
enableFileUpload | true |
maxFileSize | 10 MB (10 * 1024 * 1024) |
maxFiles | 10 |
maxFilesScope | "message" (an agent's own maxFiles counts per conversation) |
fileTransport | "inline" |
allowedFileTypes | any |
| Empty files | Always refused |
| Thumbnails | PNG, JPEG, GIF and WebP only |
AgentServerClient rawUpload | true |
GET /conversations/:id/files page | 200 files |
Blob URLs cached by getFileUrl | 200, least recently used released first |
Timers and retries
| Setting | Default | Meaning |
|---|---|---|
actionExpiryRefreshMs | 1500 ms | How long after a card's deadline the conversation is fetched again |
followSettleRetryMs | 1500 ms | How long to wait before looking once more for the stored answer of a followed turn |
reconnect.retries | 6 | Consecutive failed attempts of the follow stream before giving up |
reconnect.delayMs | 500 ms | First wait before reconnecting; doubles each attempt |
reconnect.maxDelayMs | 8000 ms | Longest wait between attempts |
| Card countdown | 30 s, then every second in the last 2 minutes | How often the "Expires in ..." text updates |
| Announcement window check | 30 s | A notice starts and ends while the page is open |
| Copy confirmation | 2 s | "Copied!" |
Embed authTimeoutMs | 10000 ms | Wait for the host's first token before auth:required |
Embed readyIntervalMs | 500 ms | Repeats cp:ready until the host answers, at most 60 times |
| Embed token wait | 15 s | A request for a fresh token waits this long for cp:auth |
| Embed renewal lead | 1/5 of the session's life, between 5 and 60 s | When the chat asks for a new token before the session ends |
| Embed request guard | 5 s | A request never leaves with a token that has less than this left |
Client tool timeoutSeconds | 60 s default, 600 s at most | How long the host page has to answer a tool call |
Sizes and counts
| Limit | Value |
|---|---|
| Suggested starters shown | 6 |
| Announcements shown at once | 5 |
| Feedback comment | 1000 characters |
| Conversation title when renaming | 200 characters |
| Conversations per bulk delete request | 100 (more are sent in turns) |
History page (useChatHistory pageSize) | 20 |
| Messages in the newest page of a conversation | 100 on agent-server (limits.messagePageSize) |
| Composer height | grows to 200 px, then scrolls |
| Embed host token | 8192 characters |
Embed cp:prefill text | 8000 characters |
Embed cp:context | 8 KB of JSON |
| Embed host tool output | 64 KB of JSON |
Embed event text (eventContent="text") | 4000 characters |
The embed constants are exported (MAX_TOKEN_CHARS, MAX_CONTEXT_BYTES, MAX_TOOL_OUTPUT_BYTES), as are MAX_STARTERS, MAX_ANNOUNCEMENTS and MAX_FEEDBACK_COMMENT.
What the browser keeps
| Key | Where | Holds |
|---|---|---|
cp:announcement:dismissed:<id> | localStorage | "1" once the person closed that announcement |
cp:notify:prefs | localStorage | { sound, desktop } as the person chose them in the bell menu |
cognipeer-chat-threads (and :index) | localStorage | Threads, only with LocalStorageThreadStore (a different key can be given) |
?lang= | The page URL | The locale chosen with setLocale |
Nothing else is stored: an embedded chat keeps its session token in memory only, and every storage access is guarded, so a blocked localStorage just means choices last for the page view.
Which URLs are drawn or linked
| Where | Allowed |
|---|---|
| Images (messages, thumbnails) | https:, blob:, relative or same-origin, http: on a page served over http (or from the page's own origin), base64 PNG / JPEG / GIF / WebP |
| File download links | http:, https:, blob: and relative addresses (so a data: URL has no Download link) |
| Legal links | Plain web addresses, a path of the page, and mailto: for support only |
| Welcome and terms pictures | https: (optionally from welcomeImageHosts), a path of the page, or a base64 raster data URL |

