diff --git a/.cspell.json b/.cspell.json index dc8420a..12f23be 100644 --- a/.cspell.json +++ b/.cspell.json @@ -56,6 +56,7 @@ "Premai", "Reauth", "Reauthorize", + "Recents", "Reconnect", "Roobert", "Salesforce", @@ -76,6 +77,7 @@ "reauth", "reauthorize", "Supabase", + "timecode", "uvx", "webhook" ] diff --git a/content/docs/features/chat.mdx b/content/docs/features/chat.mdx index 8abdc65..cf17c89 100644 --- a/content/docs/features/chat.mdx +++ b/content/docs/features/chat.mdx @@ -20,17 +20,17 @@ Describe the outcome. Get the outcome. Review. ## Model mode -Use the model mode dropdown in the chat composer to choose **High** or **Fast** for the current chat. +Use the mode button in the composer to set how much reasoning Fluso spends on the current chat: **Quick**, **Deep**, or **Max**. `⌘\` cycles through them. -High uses full reasoning for harder work. Fast turns reasoning off for quick, lighter requests where speed matters more than depth. It can respond sooner and use fewer tokens. +Quick answers straightforward questions and small edits. Deep takes longer on complex tasks, reviews, and planning. Max is for the hardest problems. [Composer](/interface/composer) has the full comparison. -The mode is chat-specific. You can change it between messages, and new chats start in High mode unless you switch them. +The mode is chat-specific. You can change it between messages, and new chats start in Deep unless you switch them. -This only affects the chat you are using in the app. Telegram has its own conversation mode: using `/fast` in Telegram does not change an app chat, and changing the app dropdown does not change Telegram. +This only affects the chat you are using in the app. Telegram has its own conversation mode: using `/fast` in Telegram does not change an app chat, and changing the app control does not change Telegram. ## Approval mode -Use the shield control beside the model mode to choose when Fluso asks before connector and MCP tool actions. The choice belongs to the current chat. Before a new chat exists, it remains pending until you send the first message. +Use the access control beside the mode button to choose when Fluso asks before connector and MCP tool actions. It shows a hand for **Ask me first**, a globe for **Allow web**, and an open lock for **Allow everything**; `⌘⇧\` steps through them. The choice belongs to the current chat. Before a new chat exists, it remains pending until you send the first message. See [Approvals and permissions](/features/approvals) for the modes, in-chat approval cards, saved tool rules, and organization policy behavior. diff --git a/content/docs/interface/composer.mdx b/content/docs/interface/composer.mdx new file mode 100644 index 0000000..66a18f0 --- /dev/null +++ b/content/docs/interface/composer.mdx @@ -0,0 +1,259 @@ +--- +title: Composer +sidebarTitle: Composer +description: The box you type in. Attachments, the @ menu, prompt history, reasoning modes and permissions. +--- + +The composer is the box you type in. Almost everything below is one keystroke, and most of it is invisible until you know it is there. + +If you only learn two, learn `@` and `↑`. + +## Getting files in + +Three ways, and you never have to aim: + +- **Drag** a file onto the chat. Anywhere on it, not a small target. +- **Click the `+`** to the left of the input and pick from disk. + +Each chip carries the icon of its own format, so a spreadsheet, a PDF and a screenshot are told apart without reading the names. + +When attachments outgrow the row they collapse into a **N more** pill. Hover it to peek at the full list, click to keep the list open, and the bin icon there clears every attachment at once. +- **Paste.** Images, screenshots, and documents go straight into the composer. + +In the desktop app, `⌘⇧2` (`Ctrl+Shift+2` on Windows) grabs a region of the screen straight into the composer, so you never touch a Downloads folder. + +### Letting Fluso capture the screen + +macOS guards screen capture, and the first `⌘⇧2` is spent asking rather than capturing. What happens, in order: + + + +macOS puts up its own dialog naming Fluso. This is the only moment it offers the permission by itself. + + +Either from that dialog, or by opening **System Settings → Privacy & Security → Screen Recording** and switching Fluso on. Fluso is in that list from the moment it first asked, so there is nothing to add by hand. + + +This step is not optional and it is the one people miss. macOS decides what an app may record when the app starts, so a permission granted to a running Fluso reaches it only after a restart. macOS offers to do it for you, in a dialog with a **Quit & Reopen** button; take it. Choosing **Later** leaves the permission granted and the shortcut still dead until you restart yourself. + + + +From then on `⌘⇧2` draws the crosshair straight away. + + + + + + + + + macOS 15 and later ask a **second** question the first time you capture, about bypassing the system window picker to reach the screen directly. Every capture tool gets it, and it returns about once a month. **Allow For One Month** is the answer that keeps the shortcut working. + + +If a press does nothing at all and no dialog appears, the shortcut is being taken by another app before Fluso sees it. Type `@` and use **Take screenshot** instead, or give the shortcut away in that other app. + +And a fourth, for files that are already here. Drag a file out of the conversation above, or out of the files panel, and drop it back on the composer to use it again in the next message. Nothing uploads a second time: the file is already on the server, so only its address travels, and the chip arrives ready. The composer's border traces itself while such a drag is in flight, which is how you know it is the target. + + + + + + + Paste more than about 6,000 characters and Fluso turns it into a `.txt` attachment instead of flooding the input. A log or a spec stays readable, and the token cost stops repeating on every turn. If you wanted the text inline after all, the toast has an **Undo**. + + +## The @ menu + +Type `@` and the composer offers what it can reach: files from this conversation, files in the project, and prompts you saved. Attaching a file this way reuses the copy already on the server, so nothing uploads twice. + + + + + +| Type | You get | +| --- | --- | +| `@` | everything in reach, by section | +| `@files` | every file in the current project | +| `@chat` | files already used in this conversation | +| `@prompts` | prompts you saved | + +Search works two ways. Type part of a name (`@quarterly`), or type a format (`@pdf`, `@xlsx`, `@png`) to filter by file type. + +Two actions live in the menu itself, so an empty project is not a dead end: **Upload from computer** opens the file picker, and **Save prompt** stores whatever is currently in the composer. + +The whole menu is keyboard-only if you want it: `↑` `↓` to move, `PgUp` `PgDn` to jump, `Enter` or `Tab` to accept, `→` to reach a row's delete control, `Esc` to close without losing your caret. + +### Saved prompts + +A prompt you write twice is a prompt worth keeping. `⌘⇧S` files the current draft straight into the library without opening anything; the same thing sits in the `@` menu as **Save prompt** when you would rather see it happen. Either way it joins the **Prompts** section, and selecting it inserts the text, so you can edit before sending. + +`⇧` is not decoration there. Plain `⌘S` is the save every other site trains you to press, so it stays out of the way. + + + + + + + Saved prompts live in the browser profile you saved them from. They do not follow you to another machine yet. + + +### Recent files + +The `@` menu carries a **Recent files** row that starts folded away. Press `⏎` on it and the files you have attached lately appear as a strip you can pick from, without knowing where any of them live. It stays open until you fold it back. + +## Bringing back what you already sent + +Press `↑` in an empty composer and your last message comes back. Keep pressing to walk further back. A counter above the input tells you where you are and when that message was sent. + +Attachments come back with the text. If a file has since been deleted, its chip says so instead of failing silently. + + + + + + +`↓` walks back towards the present, and the last step returns the draft you were half-way through writing. `Esc` leaves history where it is. + +History keeps the last 50 prompts per thread for three days, and goes away when the chat does. The first message of a chat you have only just started counts too, so `↑` works before there is any history to speak of. + +## While Fluso is working + +The composer stays live during a run. Press `Enter` and the message joins a queue above it rather than waiting on your patience. Rows can be edited in place (`Enter` saves, `Esc` cancels), sent immediately, or dropped. + +See [Chat](/features/chat) for how the queue behaves across reloads, stops, and failures. + +## How hard Fluso thinks + +The mode button on the composer toolbar sets reasoning effort for the current chat. `⌘\` (`Ctrl+\`) cycles it without leaving the keyboard. + +| Mode | Use it for | +| --- | --- | +| **Quick** | straightforward questions and small edits | +| **Deep** | complex tasks, reviews, planning | +| **Max** | the hardest problems, when you would rather wait | + +The choice belongs to the chat, not the app, so a quick lookup and a long refactor can sit side by side in your sidebar at different settings. In [confidential mode](/features/confidential) the reasoning level is fixed, so Max is not offered there. + +## What Fluso may do on its own + +Beside the mode button, one control sets how much Fluso does before checking with you. `⌘⇧\` steps through the three levels. + +| Level | Behaviour | +| --- | --- | +| **Ask me first** | asks before reaching the web and before any connected app | +| **Allow web** | searches the web on its own, still asks before connected apps | +| **Allow everything** | acts without asking | + +Your choice sticks as the default for new chats. [Approvals and permissions](/features/approvals) covers the approval cards, saved tool rules, and what an organization policy can override. + +## Dictating + +`⌘D` starts and stops dictation, mid-sentence if you like. Voice notes play back with a real waveform, a scrub bar, and a timecode, so you can check what was captured before sending. + +## Looking at what you attached + +Click a file chip and it opens in a preview panel on the right. Images, PDFs, Word documents, spreadsheets, audio, and video all open full screen, and `Esc` closes it. + +Spreadsheets open as a grid, not a screenshot of one: search across cells, switch sheets by tab, drag column edges to widen them. + + + + + +In the desktop app, a preview can reveal the original file in Finder or Explorer. + +## Finding the shortcuts + +An empty composer rotates through short hints. Every one of them maps to something that actually works. + +Hold `⌘` and each toolbar control labels itself with its own shortcut. Hold it, rather than tap it: there is a short dwell before the labels appear, so every ordinary `⌘`-something you press does not flash the whole interface at you. + +`⌘I` opens the full map: composer, `@` menu, queue, files, editor, sidebar, mouse gestures, and the single-key commands inside every menu. + + + + + +## Keyboard reference + +| Key | Does | +| --- | --- | +| `Enter` | send, or queue while a run is active | +| `⇧ Enter` | new line | +| `↑` / `↓` | walk prompt history, then back to your draft | +| `@` | open the context menu | +| `⌘\` | cycle Quick, Deep, Max | +| `⌘⇧\` | cycle what Fluso may do alone | +| `⌘D` | start or stop dictation | +| `⌘⇧2` | screenshot into the composer (desktop app) | +| `⌘S` | save the file you are editing | +| `Esc` | leave history, close the `@` menu, or jump to the sidebar | +| `⌘⇧S` | save the draft as a prompt | +| `⌘I` | every shortcut, in one dialog | + +## Next + +[Chat](/features/chat) is what the composer sends into: how a turn is assembled, how the follow-up queue behaves, and what happens while Fluso is working. diff --git a/content/docs/interface/meta.json b/content/docs/interface/meta.json new file mode 100644 index 0000000..b4fea0f --- /dev/null +++ b/content/docs/interface/meta.json @@ -0,0 +1,6 @@ +{ + "pages": [ + "sidebar", + "composer" + ] +} diff --git a/content/docs/interface/sidebar.mdx b/content/docs/interface/sidebar.mdx new file mode 100644 index 0000000..8a38497 --- /dev/null +++ b/content/docs/interface/sidebar.mdx @@ -0,0 +1,256 @@ +--- +title: Sidebar +sidebarTitle: Sidebar +description: Where your chats live. Projects, labels, pins, search that reads inside messages, and the drag-and-drop and keyboard shortcuts that move it all around. +--- + +The sidebar is the list of everything you have ever asked Fluso. After a few weeks that list is long, so it is built to be organised rather than scrolled. + +Three tools do most of the work: projects for what belongs together, labels for what cuts across, pins for what you need today. + +## Projects + +A project is a folder with a memory. Chats inside it share files and context, and each project keeps its own notes about how you work there, separate from every other project. See [Memory](/features/memory) for what it remembers. + +Give one an icon and a colour and it stops being another grey row. There are 20 icons and 9 colours. + + + + + +## Labels + +Labels are the cross-cutting layer. A chat lives in exactly one project, but it can carry as many labels as you like. + +Make one from any chat's `⋯` menu: **Add to label → New label**, give it a name and a colour, and it exists from then on. It shows as a coloured badge beside the chat name, and the same submenu ticks it on and off afterwards. + +**Projects take labels too.** Label a folder and the whole folder turns up under that label, its chats with it, which is how a label ends up meaning "everything to do with this" rather than a list of chats you remembered to tag. + +Switch the sidebar to **By Label** and the list regroups entirely: one section per label, with a chat appearing under each label it carries. + +Deleting a label deletes the label. The chats and projects that carried it stay exactly where they were, minus one badge. + + + + + +## Pins + +Pin what you are on this week and it moves to a **Pinned** section at the top. It is in the `⋯` menu, or `P` while that menu is open. Projects pin the same way, and a pinned folder keeps its chats under it. + +Unpinning has three routes, which is one more than most people find: the same `⋯` menu now reads **Unpin**, a crossed-star button appears on the pinned row itself when you hover it, and dragging the row out of the section drops the pin where it lands. + +Drag pinned rows against each other to set their order. + + + + + +## Drag and drop + +Project folders drag too. Pull one above or below another to set the order of the tree, or drag it up into **Pinned** and drop it there to pin the whole folder. + +**Archived** is a drop target the same way. Drag a chat or a folder down onto it to file the thing away, and drag it back out to bring it in again. + + + + + +In the **By Label** view the label sections are drop targets as well: a chat dropped on a label picks it up, and one dragged out of a label section loses it. The Projects tree shows no label sections, so reach for the `⋯` menu there instead. + + + A chat cannot be dragged from one project into another. Projects keep separate memory, and a chat contributes notes to the project it was started in; moving it would leave those notes behind and mix them into somewhere they do not belong. Start the chat where it belongs, and use labels for anything that cuts across. + + +## Making things from the sidebar + +The **Projects** header carries a `+` for a new project, and every folder row has one for a new chat inside it. Right-click any empty space in the list for the same two, whichever is nearer your pointer. + +## Grouping, filtering, sorting + +The filter button above the list controls how the whole sidebar is arranged. + +| Control | Options | +| --- | --- | +| Group by | Projects, Recents, Date, By Label | +| Status | All, Active, Error | +| Active within | 24h, 3d, 7d, 30d | +| Sort | last activity newest or oldest, A to Z, Z to A | + +**Projects** is the tree you know. **Recents** drops the folders and gives you a flat list of what you touched last. **Date** buckets by day. **By Label** is the reference view described above. + +## Search that reads the messages + +The search box looks inside the conversations, not only at their titles. Search for a phrase you remember saying and you get the chats that contain it, each with the matching line underneath and the words picked out in it. Results stay grouped by project, so you can see which piece of work a hit belongs to before opening anything. + + + + + +It searches the archive as well, so something you filed away months ago still answers. + +`⌘K` puts the cursor there from anywhere. `Enter` opens the first result, `Esc` clears the box. + +## Reading a chat without opening it + +Rest the pointer on a row for a moment and a card appears with the project it belongs to, how long ago it was touched, the date, and the last of the conversation. Useful when three chats have similar names and you would rather not open all three. Project folders peek the same way, showing what is inside. + + + + + +## Working on several chats at once + +Press and hold a row, or `⌘`-click and `⇧`-click, to start a selection. Every row grows a checkbox and a bar appears at the foot of the sidebar, counting what you have picked and offering the actions that apply to all of it: move, pin, archive, label, delete. + +A selection is not confined to one folder. Tick chats in three different projects and the bar treats them as one set, which is the fastest way to clear out a week's worth of scattered one-off chats. + + + + + +## Renaming, archiving, deleting + +Double-click a chat name to rename it in place. Right-click, or click the `⋯`, for everything else. + +With that menu open, one key does the job: + +| Menu | Keys | +| --- | --- | +| Chat | `P` pin, `R` rename, `S` select, `A` archive, `D` delete | +| Project | `P` pin, `A` archive or restore, `D` delete | +| Label | `R` edit, `D` delete | + +Clicking **Delete** opens a confirmation. Holding **Delete** skips it, which is the difference between clearing one chat and clearing twelve. + +Archived chats move to their own section at the bottom and stay searchable. + +**Share** is in the same `⋯` menu, and beside the chat title at the top of the conversation. Either one gives you a link to hand to someone, and the icon in the header tells you at a glance whether a chat is already shared. + +## Getting back to a project + +The breadcrumb above a conversation names the project it belongs to. Click that name and the sidebar goes and finds it: it opens if you had it collapsed, expands that folder and closes the others, scrolls it into view, and flashes it once so your eye lands on the right row. + +Clicking the chat title beside it renames the chat in place. + +## Status at a glance + +A mark at the end of a row tells you where that chat stands without opening it: a turning ring while Fluso is still working, a red dot where a run stopped on an error, and a blue one where an answer finished while you were looking somewhere else. + +The marks survive a reload, and clear when you open the chat. + + + + + +## Keyboard + +The sidebar takes focus without the mouse. `Esc` from the composer lands you here. + +| Key | Does | +| --- | --- | +| `⌘1` to `⌘9` | jump straight to one of your first nine chats | +| `↑` / `↓` | move between rows | +| `←` / `→` | cycle the controls inside the focused row | +| `←` | collapse the folder you are inside, and land on its header | +| `Enter` | open the focused chat | +| `Tab` | step onto the list from outside it | +| `⌘K` | search chats | +| `⌘N` | new chat | +| `⌘B` | hide or show the sidebar | +| `Esc` | back to the sidebar from the composer | + +`⌘1` to `⌘9` work while you are typing, so you can leave a half-written message and come back to it. + +The arrows only answer while the sidebar actually holds focus, so they never take over the page you are reading. From the search box, `↓` steps down into the first row, which makes `⌘K` a complete route into the list without touching the mouse. + +### Width + +Tab to the sidebar's inner edge and it becomes a keyboard control. + +| Key | Does | +| --- | --- | +| `←` / `→` | narrower or wider | +| `⇧ ←` / `⇧ →` | in bigger steps | +| `Home` / `End` | narrowest or widest | +| `Enter` | back to the default width | + +Hidden with `⌘B`, the sidebar leaves a narrow rail behind rather than nothing at all: **New chat**, **Tasks**, **Plugins** and **Projects** stay one click away, and a dot on the rail keeps showing you that something is running or waiting unread. + +The full list still answers a hover at the edge: it slides out, you click what you need, and it goes away again. The width you drag it to is remembered, and so is whether you left it open. + +## Next + +[Composer](/interface/composer) covers the other half of the window: attachments, the `@` menu, prompt history, and reasoning modes. diff --git a/content/docs/meta.json b/content/docs/meta.json index b03e88c..6a79112 100644 --- a/content/docs/meta.json +++ b/content/docs/meta.json @@ -5,6 +5,8 @@ "introduction", "quickstart", "going-deeper", + "---Interface---", + "...interface", "---Features---", "...features", "---Remote access---", diff --git a/public/images/interface/composer/at-menu.mp4 b/public/images/interface/composer/at-menu.mp4 new file mode 100644 index 0000000..33b1ff3 Binary files /dev/null and b/public/images/interface/composer/at-menu.mp4 differ diff --git a/public/images/interface/composer/attaching-files.mp4 b/public/images/interface/composer/attaching-files.mp4 new file mode 100644 index 0000000..dcebaf9 Binary files /dev/null and b/public/images/interface/composer/attaching-files.mp4 differ diff --git a/public/images/interface/composer/file-preview.mp4 b/public/images/interface/composer/file-preview.mp4 new file mode 100644 index 0000000..8530b3c Binary files /dev/null and b/public/images/interface/composer/file-preview.mp4 differ diff --git a/public/images/interface/composer/hints-and-shortcuts.mp4 b/public/images/interface/composer/hints-and-shortcuts.mp4 new file mode 100644 index 0000000..2e868ac Binary files /dev/null and b/public/images/interface/composer/hints-and-shortcuts.mp4 differ diff --git a/public/images/interface/composer/prompt-history.mp4 b/public/images/interface/composer/prompt-history.mp4 new file mode 100644 index 0000000..d108ad4 Binary files /dev/null and b/public/images/interface/composer/prompt-history.mp4 differ diff --git a/public/images/interface/composer/saved-prompts.mp4 b/public/images/interface/composer/saved-prompts.mp4 new file mode 100644 index 0000000..05714c5 Binary files /dev/null and b/public/images/interface/composer/saved-prompts.mp4 differ diff --git a/public/images/interface/composer/screen-permission.mp4 b/public/images/interface/composer/screen-permission.mp4 new file mode 100644 index 0000000..c33cb1b Binary files /dev/null and b/public/images/interface/composer/screen-permission.mp4 differ diff --git a/public/images/interface/sidebar/drag-and-drop.mp4 b/public/images/interface/sidebar/drag-and-drop.mp4 new file mode 100644 index 0000000..3e79d75 Binary files /dev/null and b/public/images/interface/sidebar/drag-and-drop.mp4 differ diff --git a/public/images/interface/sidebar/hover-preview.mp4 b/public/images/interface/sidebar/hover-preview.mp4 new file mode 100644 index 0000000..65fff95 Binary files /dev/null and b/public/images/interface/sidebar/hover-preview.mp4 differ diff --git a/public/images/interface/sidebar/labels.mp4 b/public/images/interface/sidebar/labels.mp4 new file mode 100644 index 0000000..23790f9 Binary files /dev/null and b/public/images/interface/sidebar/labels.mp4 differ diff --git a/public/images/interface/sidebar/multi-select.mp4 b/public/images/interface/sidebar/multi-select.mp4 new file mode 100644 index 0000000..05d5e85 Binary files /dev/null and b/public/images/interface/sidebar/multi-select.mp4 differ diff --git a/public/images/interface/sidebar/pins.mp4 b/public/images/interface/sidebar/pins.mp4 new file mode 100644 index 0000000..30b3b5f Binary files /dev/null and b/public/images/interface/sidebar/pins.mp4 differ diff --git a/public/images/interface/sidebar/projects.mp4 b/public/images/interface/sidebar/projects.mp4 new file mode 100644 index 0000000..39b64ba Binary files /dev/null and b/public/images/interface/sidebar/projects.mp4 differ diff --git a/public/images/interface/sidebar/search.mp4 b/public/images/interface/sidebar/search.mp4 new file mode 100644 index 0000000..6738c00 Binary files /dev/null and b/public/images/interface/sidebar/search.mp4 differ diff --git a/public/images/interface/sidebar/status.mp4 b/public/images/interface/sidebar/status.mp4 new file mode 100644 index 0000000..1299c0f Binary files /dev/null and b/public/images/interface/sidebar/status.mp4 differ