Using the workspace

Chat with Dus

Use the Duscode chat. Send at any time (Dus replies at once while it works), attach screenshots and files, answer approvals and questions, and read plans, results and costs.

The chat is the centre of the workspace. Each session has its own chat.

The workspace at a glance

  • Sidebar (left). New session, Search, Files, Team, Memory & skills and Scheduled, then the sessions of the project chosen in the top bar (Pinned ones, Main, and the rest grouped by Today, Yesterday and Earlier). Click a session to open its chat. The project's name and New project are at the left of the top bar. Your profile is at the bottom. Drag the sidebar wider or collapse it with Ctrl/⌘+B. See The sidebar.
  • Top bar. It has three parts. On the left, where you are: Switch project (the folder, the project's name and ▾) and New project. In the centre, what Dus is doing now, in one pill: the session title (click it for the session menu), a status word (Ready, Working, Needs you, Offline) and the task's budget, or while a task runs its cost so far against that budget (Working · £1.30 of £5; click it to change the task's budget); your app's address shows beside it when its preview is running. On the right, in groups: the model picker and the spend chip together (click the chip for today, yesterday, this week and this month, today by project, and Open Usage); the work panels (Git, the Terminal, the Browser); and you: the bell and your profile. Learn is the sidebar's Help (and F1); Saved items are in Search. When the top bar is narrow, the status word gives way to the dot beside the title (the cost stays), and the work panels and a quiet spend chip fold into ⋯.
  • Chat (centre). The conversation and the composer. The composer has + and the mode (Ask, Auto, Plan or Debug).
  • Work pane (right, when something is open). Files, diffs, the Preview, the Terminal and Tests open here beside the chat. Project facts are in Project details, from the project's name in the top bar. See Work pane and Project details.

Below 1000 px wide, the sidebar becomes a drawer (the menu button in the top bar opens it; your profile is at its bottom), and the work pane covers the chat with ← Back. Projects, Project details, Files, Search, Git, Settings and Platform open as dialogs over the workspace, never as separate pages, and the browser's Back button closes them.

Sending a task

Type in the composer and press Enter. Shift+Enter adds a new line. On an empty session, three suggestions help you start.

Sending while Dus works, and the queue

You can send at any time, with the same Send button and Enter. While a task runs, the composer border turns amber and Dus replies at once, within a few seconds, while the work goes on (see Talking to Dus while it works). Then it acts on what you meant:

  • A question ("are you stuck?", "how long will this take?"): the reply is the answer. Nothing about the work changes.
  • A change to the current work ("use the existing Money type instead", "not that file"): the reply says what Dus will do and when, and it applies it at its next step. These messages show a Sent while Dus was working tag.
  • Something urgent ("stop", "wrong file", "don't push"): the command running now is cut short, when that is safe, and Dus deals with your message straight away. A commit, push, deploy or migration is never cut half-way; Dus acts the moment it ends.
  • A separate request ("also fix the typo in the README"): when it doesn't depend on the current task, Dus hands it to a helper that works in its own copy of the project, says I've handed that to a helper; I'll review its work when it finishes, and reviews the helper's changes before proposing to merge them. When no helper can take it, it waits in the queue: a line in the chat says Queued for after this task, and the request appears as a card just above the composer.

If Dus isn't sure which you meant, it asks. A skill picked in the + menu while Dus works is always a new request, so it goes straight into the queue. Files go only with a request that starts now.

The queue. Cards are listed in the order they will run. Click a card's text to edit it. Its ⋯ menu can Move up, Move down, Run now in a new session (the task moves to a new session with its own worktree and starts at once, or as soon as a slot is free) and Remove from queue. On a wide screen, up and down arrows also appear when you point at a card.

When a task finishes, whether its checks passed or not, Dus starts the next queued task by itself, in the same session, with the whole conversation. It also gets a one-line recap of how the task before went, so related requests build on each other without you repeating yourself. A request that ran from the queue shows a Queued tag.

The queue waits, and the line above the cards says why, when:

  • the task ended with something waiting for you (an approval, a question or a form): it moves on once you answer;
  • the task stopped at its budget, because it was going round in circles, or with an error: press Resume queue when you're ready;
  • you pressed Stop: the queue is paused, not thrown away. Resume queue carries on. A new message you send meanwhile runs straight away, ahead of the paused queue.

The queue is saved with the session. After Duscode restarts it is paused and never runs by itself until you press Resume queue.

Tasks at once. Sessions in their own worktrees run side by side. At most 3 tasks run at the same time across all your sessions and projects (change it in Settings → General → Tasks at once). A task past the limit waits in its session's queue with Waiting for a free slot and starts when another task ends. The sidebar shows how many tasks wait in each session ("2 queued"). Budgets still apply to every task and to the day across all of them.

Stop ends the task, stops any workers, turns down any pending approvals or questions, and pauses the queue.

The + menu

+ at the bottom left of the composer opens a menu (a sheet from the bottom on a phone). While it's open, + turns into ×.

Item What it does
Use a skill Pick a ready-made workflow, such as Security review or Fix failing tests. See Skills.
Attach files Choose images, PDFs or text files. See Attachments.
Start in a project Start a new session in another project, taking your message with you.
Create scheduled job Turn the message into a recurring task. See Scheduled jobs.

Use the arrow keys to move, Enter to choose and Esc to go back or close.

Skills and slash commands

Type / at the start of the message box to pick a skill without the mouse. The list filters as you type (/sec finds Security review); ↑ ↓ move and Enter picks. The skill appears as a chip (Skill: Security review) above your message. Add your own words if you like ("focus on the login form"), or send the skill on its own. Click × on the chip to remove it. Your message shows the skill it ran with.

Speak instead of typing

Press the microphone in the message box, or Alt+V. Tap it to start and tap again to stop, or hold it while you talk and let go. Your words appear in the message box as you speak, with punctuation; say "comma", "full stop", "question mark" or "new line" for those marks. Esc stops and puts your message back as it was. Nothing is sent until you press Send, so you can correct it first.

The microphone is only used while it is on, and only after you press it. Your browser does the listening where it can (Chrome, Edge and Safari, on a phone too). Where it can't, the recording goes, once you stop, to a provider you have a key for that can transcribe (OpenAI or Groq) and nothing is kept. Privacy mode applies: with anything but Any provider, the browser's online recognition isn't used; Chrome's on-device recognition is, or a provider privacy mode allows.

In I describe what I want, the empty chat and the idea screen offer Speak instead.

Review with several models

Type /review and press Enter to have two or three different models review your work side by side. Add what to review after the chip, or leave it empty:

  • nothing: this session's changes (or your uncommitted changes in the project folder);
  • branch feature/login: a branch, against the main branch;
  • pr 12 (or the pull request's link): a pull request on GitHub, GitLab or Bitbucket.

A card shows the models and what the review will cost before anything is spent. Press Start review (or Not now). Each model reads only the diff, in a fresh context, and changes nothing. The card then lists one ranked set of findings: how serious each is, where it is, the suggested fix and which models found it. A problem found by more than one model ranks higher. Tick the findings you want and press Fix these: Dus checks each against the code, fixes the real ones and adds tests. The review counts against your budgets; if the budget can't cover every model, fewer run and the card says so.

Permission mode

  1. Click the mode button beside + in the message box.
  2. Choose Ask, Auto, Plan, Debug or Full Auto.

The button shows the current mode, and each choice is explained in one line in the menu. The mode sets how much Dus may do without asking, and it's saved with the session. Full Auto can be chosen only while the command sandbox works. See Permission modes and approvals.

Undo and rewind

A task's change card has Undo last change (older ones: Restore to before this), and each of your messages has a Rewind arrow. Both show what will change first. See Undo and rewind.

Attachments

Show Dus what you see: a screenshot of a bug, a design to match, a PDF spec or a log file.

  • Paste a screenshot into the composer.
  • Drop files on the conversation or the composer.
  • Click +, then Attach files, to choose files.
Limit
Files per message 5
Size 10 MB each, 20 MB in total
Images PNG, JPEG, GIF, WebP
Documents PDF
Text Source code, logs, Markdown, JSON, CSV and other text files (cut at 100,000 characters)

Attachments go with a new request, so you can't add them while a task is running. When a request includes images or PDFs, Duscode routes it to a model that can read them. For a design to match, Dus describes it first, plans, and asks before a large restyle.

Talking to Dus while it works

Dus never goes quiet while it works. When you write mid-task, a fast model answers as Dus straight away from what is happening right now: the request, the plan and the step in progress, the command running with how long it has run and its latest output, background jobs, recent steps, the cost so far and your last messages. It answers only from those facts and never invents progress. The answer appears in the chat with a Replied while working tag, and the main work reads both your message and the reply at its next step, so it never contradicts what was said. These quick replies are cheap and show in the task's cost receipt as Replies while working.

Long jobs run in the background. A full test suite, a build or an install runs as a background job: Dus starts it, carries on or checks in every minute at most, and is told the moment it ends. It tells you how it is going at milestones. A running job shows as a quiet row under the conversation (Job 2 · full test suite · 3m 12s and its latest output line), and its end as one line (Job 2 (full test suite) failed (exit 1) after 3m 10s). Stop ends every job, whole, and so does deleting the session or quitting Duscode. Dus never sleeps to wait: a command that would only sleep is refused and Dus waits in short looks instead.

The Working line. Under the conversation, the line says what Dus is doing in plain words (Running tests…, Typechecking…, Reading files…, Installing packages…), the command, how long it has run and how long it usually takes in this project (1m 20s · usually about 2m), and its latest output line. When something slows it down, the line says why: Waiting for your approval, The model provider is busy; retrying in 12 s, or Your computer is very busy (load 75 on 24 cores).

When a step may be stuck. If a command prints nothing and uses no CPU for 3 minutes, the line says This step may be stuck and offers Keep waiting or Stop this step (which ends only that command; the task goes on and Dus is told why). Nothing is ever stopped without you.

What you see while Dus works

  • The route. The model, its tier, and why it was chosen. For example: claude-haiku fast tier · cheapest first; a failed check moves up a tier. You see chosen by you when you've pinned a model.
  • Explored. Reads and searches are grouped into one line, such as Explored: read 6 files, 3 searches. Click it to expand.
  • Plan. For multi-step tasks, a Plan checklist (for example Plan 2/5) shows each step as To do, In progress or Done. It updates in place.
  • Commands. Each command shows its exit code. Click Output to read what it printed.
  • Change cards. Each edit shows the file path, new for new files, the lines added and removed, and the changed lines as Original | Updated. See Changes and the editor.
  • What Dus is doing. Under the conversation, three pulsing dots and a few words say what is happening now: Reading src/app.ts, Editing src/app.ts, Searching the code, Typechecking, Running tests, Linting, Building, Installing dependencies, Verifying the changes, or Thinking between steps. It follows the command that is running, including the checks of the verification gate.
  • Notices. You see lines when Dus switches to a stronger model, falls back to another provider, compacts a long conversation, or nears a budget.
  • The whole session. Scroll up to read back to the session's first message; older messages load as you go (Earlier in this session). The arrow at the bottom jumps back to the latest. See A session never forgets.

Copy, save or quote a message

Under each of Dus's answers, and under each message you sent, three small buttons appear when you hover the message or tab to it (on a touch screen they are always shown):

  • Copy puts the message on the clipboard as Markdown, so code blocks and lists keep their formatting. The button says Copied for a moment.
  • Save downloads it as a .md file named after its first line, such as dus-reply-fix-the-login-bug.md.
  • Quote adds the message to your message box as a Markdown quote (each line starts with >), with the cursor below it, so you can answer or refine it. Anything already in the box stays above the quote.

While Dus is still working on a task, its latest answer has no buttons yet. An answer is the last piece of text Dus wrote in a task. Earlier messages from between its steps are not offered on their own.

Approvals and questions

When Dus needs you, the status changes to Needs you and a card appears:

  • Approval card. Allow: Edit src/utils.ts?, the reason (Why: …), and the diff or command. Choose Approve, Reject, or Always allow (saves a rule for this project). If it asks even in Auto, the card says why.
  • Question card. Dus offers options, one marked Recommended. Click one, or write your own answer in Or type your own answer and click Send.
  • Form card. Dus asks for details only you know, such as a server address or a token. Secrets you enter go straight into the vault. Click Save and continue (or Send), or Not now.
  • Owner decision. A red tag (such as Production or Costs money) marks a deploy step that is always yours to decide. See Owner decisions.

Approvals wait for the first open browser tab that answers, so you can switch tabs or devices.

The end of a task

  • Dus's summary, usually with suggested next steps.
  • The Proof of Work card: Verified, Partially verified, Failed, Blocked or Not checked, why, and one line of facts (requirements, files changed, checks, browser, secrets, cost). Click a fact to open it; every claim opens its evidence. The changed files, with Review, Open in editor and Undo last change, are under the files fact. See Proof of Work.
  • On the newest task: Is this what you wanted? with Looks good and Change something.
  • A task that only answered a question shows its cost instead.

Older tasks fold away

To keep long chats readable, the two most recent finished tasks stay fully open. Older ones fold to their outcome: Dus's last answer, the files changed, any errors and the verification result. Click N steps on a folded task to see everything it did, and Hide steps to fold it again. Folding only changes the view; Dus's own memory of the conversation is handled separately (see Long conversations).

Choosing the model

The model picker in the top bar (Model · Auto) starts on Auto, the cheapest model that can do the task. Pick a model to pin it for this session, or press Alt+M. Each model shows its tags, a $ to $$$ cost hint and, where it has one, an effort setting. See The model picker.

Something missing or wrong? Email support@duscode.com.