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.

Recent
auth.swiftSources/Auth/
Files
AuthService.swiftSources/Auth/
AuthViewModel.swiftSources/Auth/
Explain auth.swift and @Auth
⌘K focus⌘. cancel@ files!! targetScoped to polycode-apple
Typing @ opens the file-mention popover (Recent + Files)

A few specifics:

  • @ only triggers at a word boundary, so an email-like name@host mid-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.

Target a model
A
claude-sonnet-4-6
Claude
O
gpt-5
GPT-5
G
gemini-2.5-pro
Gemini
Double-check this !!Claude for races
⌘K focus⌘. cancel@ files!! targetScoped to polycode-apple
Typing !! restricts the next send to chosen participants

!! 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 (⌘K focus, ⌘. 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.