> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wednesdayai.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Using the web client

> Chat with your WednesdayAI assistant, manage conversations, and choose what the web client displays.

# Using the web client

The web client is a page you open in your browser to chat with your WednesdayAI assistant. You
can send messages, find and organize past conversations, choose how replies are displayed, and
check on things your assistant is currently working on.

The person who manages WednesdayAI decides whether this page exists and sends you its address. If
you do not have a link, ask them for one.

## Before you begin

* The web address for the web client, from the person who manages WednesdayAI.
* A **setup code**: a block of text that lets this browser start talking to your assistant. The
  person who manages WednesdayAI creates one for you. Setup codes expire, so use it soon after you
  get it.

## Pair this browser

The first time you open the web client on a browser or device, it asks you to pair - a one-time
step that links this browser to your assistant so it can be recognized on later visits.

<Steps>
  <Step title="Open the web client">
    Open the web address you were given.

    You should see **Pair this browser with \[your assistant's name]**.
  </Step>

  <Step title="Enter your setup code">
    Paste the setup code into the **Setup code** box. The box should contain your code.
  </Step>

  <Step title="Pair this browser">
    Select **Pair this browser**.

    The button reads **Pairing...** briefly, then you land in the chat screen. If you see an error
    instead, the setup code may have expired or already been used - ask for a new one.
  </Step>
</Steps>

You only need to pair once per browser. Pairing this browser does not affect any other browser or
device already paired with your assistant.

## Send a message

Type in the message box and press Enter (or select the send arrow). Press Shift+Enter to add a
new line without sending. Your message appears on the right, and the reply streams in beneath it
as your assistant writes it.

While a reply is being written, the message box stays open so you can keep typing. The send arrow
becomes **Queue message** and a separate **Stop** button appears beside it. Select **Stop** to end
the reply early. If the stop request fails, the thread shows **Could not stop the reply:** followed
by the reason, and the reply keeps running. See
[Keep chatting while a reply is streaming](#keep-chatting-while-a-reply-is-streaming) for what
Enter does in the meantime.

If you have not opened a chat yet (for example, the first time you use a new browser), you see a
greeting (**Good morning**, **Good afternoon** or **Good evening**), a line that reads **What can
\[your assistant's name] help with?**, and three suggestion buttons: **Plan my day**, **Help me
think** and **Summarise what I missed**. Selecting a suggestion copies its words into the message
box so you can edit them - it does not send anything until you press Enter. Your first message
creates a chat for you automatically.

Hover over a reply to reveal its buttons. **Copy** copies the reply to your clipboard, and
**Reply** quotes it (see [Reply to a message](#reply-to-a-message)). Hover over a message of your
own to reveal **Reply** too. The other buttons beside **Copy** are described in
[Controls that are not available yet](#controls-that-are-not-available-yet).

The strip under the message box shows the connection state (**Connected**, **Reconnecting...** or
**Offline**) and a reminder that your assistant can make mistakes.

### Reply to a message

Hover over a message (yours or your assistant's) and select **Reply** to quote it. A chip above
the message box shows who wrote it (**You**, or your assistant's name) and the first part of the
message, about 140 characters. Select the chip's **x** (**Dismiss reply**) to remove the quote
before sending. Your next message carries the quote, and your message shows the same quote above
it from then on, including when you reopen the chat later.

* **Reply** only appears on messages that have been saved to the chat. A message you have just
  sent, or a reply that has just finished, may not offer it until you reopen the chat: switch to
  another chat and back, or reload the page.
* A quote belongs to one chat. Switching to another chat discards it, and sending a message uses
  it up, even if that send fails.
* You cannot quote a message while a reply is still being written. If you try to queue or send now
  with a quote in place, the message box shows **Replying isn't supported yet while a reply is
  streaming. Wait for it to finish, or remove your reply and send a plain message.** Nothing is
  sent, and your quote and text stay where they are.

### Choose a model and Think

The button at the top of the screen, beside the menu button, shows your assistant's name and the
model this chat is using, for example **Assistant name · Model name**. Select it to open a menu
with **Assistant default** and every model your assistant is set up to use. A tick marks the
current choice. Picking a model applies to this chat only and takes effect on your next message;
other chats are not affected. If the change is refused, the reason appears under the button and
the tick stays where it was. Picking a model with no chat open shows **No chat is open**.

The **Think** button in the message box opens a level menu (**Off**, **Low**, **Medium**, **High**)
plus a **Send reasoning** switch. These apply to this chat only, like the model. A tick marks the
current level. **Send reasoning** controls whether reasoning is delivered with replies; it does
not control what this browser displays.

**Think** is dimmed when the chat's current model does not support extended thinking. Hover over it
to see **Think — \[model name] does not support extended thinking**. Switch to another model, or
pick one that does, to use it. A refused change shows its reason under the button.

### Choose what the conversation displays

<Steps>
  <Step title="Open Display">
    Open **Display** in the top bar.

    You should see **Show reasoning** and the **Hide**, **Minimal** and **Full** choices under
    **Tools**.
  </Step>

  <Step title="Choose reasoning visibility">
    Turn **Show reasoning** on if you want to see reasoning included with replies.

    Replies that contain reasoning show a collapsed **Reasoning** section that you can expand.
  </Step>

  <Step title="Choose tool details">
    Choose how tool activity appears.

    The conversation updates immediately: **Minimal** shows compact expandable rows, **Full**
    shows calls and results separately, and **Hide** removes normal tool details while leaving
    errors and failures visible.
  </Step>
</Steps>

The display choices work as follows:

* **Show reasoning** is off by default. Turn it on to reveal collapsed **Reasoning** sections
  when a reply includes reasoning, then expand a section to read it.
* **Tools → Minimal** is the default: each tool invocation appears as a compact expandable row,
  with its result paired when available. Expand it to inspect arguments and the result.
* **Tools → Full** shows calls and results separately, including their structured details.
* **Tools → Hide** removes normal tool call and result details, but keeps tool errors and failures
  visible so you still know when something went wrong.

These choices are remembered in this browser for this WednesdayAI connection. They do not change
the model's Think level or **Send reasoning**. **Show reasoning** only changes whether reasoning
already included with a reply is displayed; it cannot generate reasoning or add it to a saved
reply. Completed replies load their saved tool details without requiring a page reload.

### Keep chatting while a reply is streaming

You do not have to wait for a reply to finish before sending your next message:

* Press **Enter**, or select the send arrow (**Queue message**), to **queue** your message. It
  appears in the thread straight away marked **Queued**, and is sent as soon as the current reply
  finishes. The label goes away when your assistant starts on it. Until then, Enter keeps queuing
  new messages rather than sending them normally. A queued message that is still waiting when you
  reload the page in the same browser tab comes back marked **Queued**.
* Press **Ctrl+Enter** (**Cmd+Enter** on a Mac), or select the small arrow beside the send arrow
  (**Send options**) and choose **Send now**, to steer your assistant right away: the message is
  added to the reply in progress instead of waiting. If your assistant cannot take it in the middle
  of a reply, it is queued instead and marked **Queued**.
* **Stop** ends the current reply early at any time.

**Send now** needs some text, and is unavailable while a file is attached. Attachments go with a
queued message, but the **+** button is dimmed while a reply is being written, so attach files
before you start or wait for the reply to finish.

If your assistant refuses the message, the thread shows **Could not queue that message:** or
**Could not send now:** followed by the reason (for example `dropped_by_queue_policy`, when the
assistant's queue settings discard the message). The text you typed returns to the message box so
you can send it again; any attachments do not come back. If the reason is unclear, ask
the person who manages WednesdayAI.

### Attach a photo or audio clip

Select the **+** button (**Attach files**) in the message box, or drag files onto it. You can
attach several at once. The web client accepts image files (except SVG) and WAV audio clips, up to
5 MB each. Each attachment appears as a small card above the message box; select its **x** to
remove it before sending. A file that is too large, empty, or in another format is rejected before
anything is sent, with a message under the message box explaining why. The **+** button is dimmed
while a file is uploading or a reply is being written.

### See older messages

Scroll to the top of a conversation and select **Load older messages** to fetch earlier history.
The button reads **Loading...** while it works. Your place in the conversation stays put while
older messages load. The button disappears once there is nothing older to load. If loading fails,
the thread shows **Could not load older messages:** followed by the reason; select the button to
try again.

The conversation follows the newest message on its own, but only while you are near the bottom. If
you scroll up to read something earlier, new text does not pull you back down.

## Switch between chats

Each separate conversation is a **chat**. Your chats are listed in the sidebar under **Chats**,
with the most recently updated first. Each row shows the chat's title and its **session key**,
the full identifier of that conversation, such as `agent:main:telegram:direct:example-user`.
Long keys are shortened visually; hover over a row to read its full key. A colour dot identifies
the assistant, and a small tag identifies chats from another app, such as Telegram or Discord.
With no chats yet, the list reads **No chats yet**.

Scheduled jobs, isolated heartbeat checks, subagents and other internal conversations are hidden
by default. Turn on **Show internal** beside **Chats** to include them. A normal conversation that
also contains heartbeat activity is not hidden.

Use the **Sort chats** control to choose **Newest**, **Oldest**, **Title A-Z**, **Title Z-A**,
**Key A-Z** or **Key Z-A**. Sorting, assistant filtering, search and **Show internal** apply to your
entire conversation history before a page of results is shown, not only to chats already loaded in
the sidebar. Time-based sorts group chats into **Today**, **Yesterday** and **Earlier**;
alphabetical sorts show one ungrouped list.

* Select a chat to switch to it. If the chat cannot be loaded, the thread shows **Could not load
  this chat:** followed by the reason.
* Select **New chat** at the top of the sidebar to start a fresh conversation in one step. It uses
  the assistant you are filtering the list by (see below) if there is one, otherwise the assistant
  of the chat you have open. The new chat is named **New chat**, then **New chat 2** and so on. If
  it cannot be created, the thread shows **Could not start a new chat:** followed by the reason.
* Select the small arrow beside **New chat** (**New chat with...**), or **Browse assistants**
  further down the sidebar, to open the **New chat with...** window: a list of every assistant you
  can talk to, each with its own colour, and a **Model** menu that starts on **Assistant default**.
  Pick a model if you want one, then select an assistant to start a fresh chat with it right away
  (the row shows **Creating…** while it works). If models cannot be loaded the window says
  **Could not load models — the assistant default will be used.** and you can still pick an
  assistant. A failed create shows the reason in the window so you can try again. Close it with
  **Close**, **Escape**, or by clicking outside it.
* Type in the **Search chats** box at the top of the sidebar to filter the list. The list updates
  shortly after you stop typing; select the **x** in the box (**Clear search**) to see every chat
  again.
* Once you have more chats than fit on one page, a **Load more** button appears at the bottom of
  the list.

Switching chats while a reply is still being written is fine: the new chat's message box works
straight away.

On a wide screen, the button in the sidebar header collapses the sidebar to a thin strip; select
the strip's button to bring it back. On a phone or a narrow window the sidebar is hidden. Open it
with the menu button at the left of the top bar, and close it with the **x** at the top of the
sidebar or by tapping outside it.

The **Assistants** section lists assistants with an eligible chat updated within the last
**4 hours**, by default. Choose **1h**, **2h**, **4h**, **8h**, **16h**, **24h** or **All** with the
activity-window control. **All** includes assistants with no chats. The assistant you have selected
stays pinned and visible even when its chats are older than the window. The assistant for the chat
you currently have open also stays visible when you have not selected a filter.

Use **Sort assistants** to choose **Newest**, **Oldest**, **Name A-Z** or **Name Z-A**. Newest and
oldest use each assistant's most recently updated eligible chat, not its oldest chat. Internal
conversations contribute only when **Show internal** is on. The activity window narrows the
assistant list, not the age of chats shown after you select an assistant.

Select an assistant to highlight it, show its chats and reopen the last chat you selected with
that assistant. If that chat was deleted or is excluded by **Show internal**, the newest
user-facing chat opens instead. An assistant with no eligible chat opens an empty conversation
view without creating a chat. Sending the first message creates a chat for that assistant;
you can also select **New chat** to create one explicitly.

Selecting the same assistant again keeps it selected; it does not clear the selection. Select
**All assistants** when you want to clear the assistant filter and show chats from everyone. Your
currently open chat stays open. Sorts, filters, the selected assistant and remembered chats persist
across reloads in this browser. Each assistant's colour also marks its chats and appears beside its
name in the top bar.

### Rename a chat

Select the chat's title at the top of the screen (it reads `/` followed by the title) to edit it in
a box labelled **Chat title**. A title can be up to 60 characters.

* Press **Enter** to save. Clicking elsewhere also saves. Press **Escape** to cancel.
* An empty or unchanged title closes the box without saving anything.
* If the change is refused, the reason appears beside the box and the box stays open. For example,
  `label already in use: [title]` means another chat already has that title.

The sparkle button beside the box (**Suggest a title**) writes a title for you from the first
message shown in the thread and puts it in the box. It does not save: press **Enter** to keep it,
edit it first, or press **Escape** to discard it. Until the chat has a message, the button does
nothing and its tooltip reads **No message to summarise yet**.

Suggesting titles is limited to 3 per minute. Past that, the box shows **rate limit exceeded for
sessions.title.prepare; retry after 60s** (the number of seconds varies). Wait that long and select
the button again, or type a title yourself. If no title could be produced, the box shows **Could
not suggest a title**.

### This chat changed elsewhere

If you send a message in a chat that has moved on since you last saw it - because you or your
assistant added to it from another browser, another device or another app - the message is not
sent. The thread refreshes to the latest messages and a banner reads **This chat changed elsewhere.
The latest messages are shown below.** The text you typed is put back in the message box (an
attached file or a quote is not), so read what is new and press Enter again if you still want to
send it. Select **Dismiss** to hide the banner; it also clears on your next send or when you switch
chats. Queued and **Send now** messages are not checked this way.

## Check on Runs

**Runs** are things your assistant is doing or has done - answering you, working through a task,
and so on. The **Runs** row under **Extensions** in the sidebar shows a number badge whenever
something is running, even while the panel is closed.

Select **Runs** to open a panel with four groups:

| Group | Meaning |
| - | - |
| **Queued** | Waiting to start. |
| **Running** | In progress right now. |
| **Needs attention** | Stopped in a state that needs a person to look at it. |
| **Finished** | Completed, failed, or cancelled. |

Select any entry to see more detail about it, and select it again to hide the detail. The panel
updates live as things change. Use **Refresh** to check now, **Load more** where it appears to see
older entries, and **Close** (or select **Runs** again) to close the panel. On a phone the panel
fills the screen.

The Runs panel only shows live data when the person who manages WednesdayAI has set up SQLite or
Postgres storage for it. Without that, every group reads "Nothing here.", a message under the
groups explains the storage requirement, and the badge stays hidden. Ask them if you need it.

## Choose a theme

Select your name at the bottom of the sidebar to open the account menu, then pick a **Theme**:

| Theme | What you get |
| - | - |
| **Auto** | Follows your device: dark or light, or high contrast if you have asked your device for more contrast. |
| **Dark** | Always dark. |
| **Light** | Always light. |
| **High contrast** | Brighter text and stronger outlines, for low vision or bright rooms. |

The change applies immediately and is remembered on this browser. If you previously chose the older
**Black** or **White** theme, WednesdayAI carries that over to **Dark** or **Light**. The theme also
sets the colour of your browser's own scroll bars and form controls, so they match the rest of the
page. Animations are skipped if your device is set to reduce motion.

## Controls that are not available yet

Some controls are visible but switched off because the feature behind them is not ready. They look
dimmed. Hover over one (or focus it with the keyboard) to see a tooltip such as "Canvas — coming in
phase P4". Selecting one does nothing and sends nothing to your assistant. (**Think** can also be
dimmed, but for a different reason: see [Choose a model and Think](#choose-a-model-and-think).)

| Where | Controls |
| - | - |
| Top bar | **Canvas** |
| Sidebar | **Calendar**, **Memory**, **Add extension** |
| Account menu | **Settings**, **Keyboard shortcuts** |
| Message box | **Search**, **Dictate**, **Voice mode** |
| Under each reply | **Read aloud**, **Feedback**, **Regenerate** |

The tooltips for **Canvas**, **Dictate**, **Voice mode** and **Read aloud** name a numbered phase.
The tooltips for **Calendar**, **Memory**, **Add extension**, **Settings**,
**Keyboard shortcuts**, **Search** in the message box, **Feedback** and **Regenerate** instead read
"coming with the extension panel SDK" followed by a tracked issue number. Voice and dictation are
switched off for everyone in this release, whatever the person managing WednesdayAI has
configured. The **⌘N** label beside **New chat** is only a hint for now: no keyboard shortcut is
wired up to it.

## Sign out

Select your name at the bottom of the sidebar to open the account menu, then select **Log out**.
This clears this browser's access - you (or whoever uses this browser next) will need a new setup
code to sign back in here. It does not affect any other browser or device paired with your
assistant.

## Troubleshooting

### The bottom of the screen says "Offline" or "Reconnecting..."

The web client lost its connection and is trying to reconnect automatically - this is normal on a
flaky network or when your computer wakes from sleep. Wait a few seconds. If it does not recover,
reload the page.

### You are suddenly asked to pair again

Your browser's access was likely removed or expired. Ask the person who manages WednesdayAI for a
new setup code.

### A file will not attach

Check that it is an image (not SVG) or a WAV audio file and under 5 MB. Other file types and larger
files are not supported yet.

### The message box will not send, or shows an error

While a reply is being written, Enter queues your message instead of sending it straight away; see
[Keep chatting while a reply is streaming](#keep-chatting-while-a-reply-is-streaming). If the
thread shows **Could not queue that message:** or **Could not send now:**, your text is back in the
message box. If the box says **Replying isn't supported yet while a reply is streaming...**, remove
the quote with its **x** or wait for the reply to finish. If the bottom of the screen says
**Offline** or **Reconnecting...**, see the first item in this list.

### A message was not sent and the chat reloaded

The chat changed elsewhere while you had it open; see
[This chat changed elsewhere](#this-chat-changed-elsewhere). Your text is back in the message box.

### Suggest a title says "rate limit exceeded"

Suggesting titles is limited to 3 per minute. Wait for the number of seconds shown and try again,
or type a title yourself.

### A control does nothing when I select it

It is probably one of the [controls that are not available yet](#controls-that-are-not-available-yet).
Hover over it to see when it is planned. If it is **Think**, see
[Choose a model and Think](#choose-a-model-and-think).

### Reasoning does not appear after I turn on Show reasoning

**Show reasoning** can display only reasoning available in the reply; it cannot add reasoning to
an existing reply. **Send reasoning** controls delivery for new replies, separately from this
browser's display choice. Check that setting in **Think** before sending a new message. Some
models or replies may not produce reasoning even when that switch is on.

### Display, sorting, or assistant choices reset after a reload

The web client saves these choices in this browser. If it cannot read saved choices, it starts
with the defaults: reasoning hidden, tools shown in **Minimal** form, assistants from the last
**4 hours**, assistants sorted by **Newest**, chats sorted by **Newest**, internal chats hidden,
and no assistant filter. If it cannot save a change, your choice still works while the page is
open, but a reload may restore an older saved choice or a default. You can still navigate and
chat. Check your browser's privacy or storage settings if you want your choices remembered.

### The page shows a connection error and never loads chat

The address that hosts the web client may not be allowed to talk to your assistant yet, or the
address itself may be wrong. Contact the person who manages WednesdayAI and share the exact web
address you tried.

## Related

* [Web client hosting](/web/user-client) - for the person setting this up
* [Pairing QR and setup codes](/cli/qr) - for the person who creates your setup code


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.