Composing prompts
The composer is a rich editor with inline pills and three input accelerators. The empty-state placeholder advertises all three: “Ask anything · drop files · @mention files · !! target a model”. This article walks each one.
@ — attach a project file
Type @ at the start of a word and a popover opens to attach a file from
your active project. It shows two sections — Recent (files you’ve attached
in this project before, most-recent first) and Files (a live search of the
project tree) — and narrows as you keep typing. Pick one and Polycode inserts an
inline file pill in your draft.
A few specifics:
@only triggers at a word boundary, so an email-likename@hostmid-word won’t open it. Typing a space after@dismisses the popover.- File mentions need an active project — the hint row shows Scoped to <project> (or no project). With no project added, the popover has no file results.
- The first
@in a project builds a file index (“Indexing project files…”); results fill in once it finishes.
A mentioned file is a scoped-file attachment — Polycode stores a handle to the path, not the bytes, and re-reads it fresh from disk on every send. See data lifecycle § Attachments for the byte and transmission semantics.
!! — target a model for one send
Type !! and a popover (“Target a model”) lets you restrict the next
send to a subset of the models already in your fan-out. Pick one or more; each
becomes an accent-colored routing pill in the draft. On send, only those
providers fan out, and if your current primary isn’t among them the first target
becomes the synthesizing primary.
!! is deliberately narrow:
- Subtractive only. It can only narrow to models already participating — it can never summon a model that isn’t in your current panel/mode.
- One-shot. It applies to exactly the next send, then clears. Your persistent panel, primary, and modes are untouched.
- Not message content. A routing pill contributes no text and no tokens to the prompt; deleting the pill (backspace) drops that target. The composer’s token estimate reflects the subset you’ve chosen.
- If every target becomes stale before you send (you un-pinned a model or switched modes), the send falls back to your normal consensus, not to a single model.
For a saved single-model recipe rather than a one-off, build a mode whose panel is just its primary.
Attachments — drag-drop, paperclip, and the sidebar
Beyond @, you can attach any file three ways: drag-drop onto the composer
(a “Drop files to attach” overlay appears), the paperclip button (an
Attach file open panel), or tapping a file in a project in the sidebar. All
three land an inline pill at your caret.
- A file inside an added project attaches as a scoped-file handle (re-read from disk each send). A file from anywhere else attaches as inline-content — its bytes are captured and stored with the conversation, capped at ~10 MB. Oversize files are rejected, and folders can’t be attached (“…is a folder — attach individual files instead”).
- On send, each attached file’s bytes go to every enabled fan-out provider plus the synthesis call. The full per-provider handling (native document blocks vs. text fallback) is in data lifecycle § Attachments.
Project context rides along automatically
When your session is bound to a project, Polycode prepends a project-context
block — the project’s layout plus recognized convention files
(AGENTS.md, CLAUDE.md, GEMINI.md, .cursorrules, and others) — as the
system prompt on every send, so you don’t have to paste them. Toggle it off
per-project under Settings → Projects. The mechanics are documented in
data lifecycle § Project context.
Sending, focusing, cancelling
- Send with ⌘⏎. While a response streams, the button becomes Cancel and Esc cancels the in-flight query.
- ⌘K focuses the composer from anywhere; ⌘. cancels an in-flight query.
- The hint row under the editor shows these as chips (
⌘Kfocus,⌘.cancel,@files,!!target). The full shortcut catalog is in keyboard shortcuts.
What’s next
- Modes — save a primary + panel + system-prompt recipe and the
single-model fast path that
!!mirrors for one send. - Data lifecycle — how attachments are stored and what leaves your Mac on send.
- Keyboard shortcuts — every binding, including the composer’s.