Skip to main content

Unified Input

One input bar for every agent — with @file autocomplete, /commands, voice input, file pasting, and multi-line editing.

Updated
Reviewed

Overview

Every agent terminal in Canopy shares the same input bar: a rich text editor with @file autocomplete, /command discovery, file pasting, voice input, multi-line editing, command history, and draft persistence. You type the same way no matter which agent you're talking to. Canopy handles the per-agent differences behind the scenes.

@file References

Type @ followed by a filename to get autocomplete across your project. The search indexes Git-tracked files and ranks results by how closely they match your query.

Supported Syntax

  • @src/index.ts — reference a file by path
  • @"path with spaces/file.ts" — quote paths that contain spaces
  • @'single-quoted.ts' — single quotes also work

File references appear as highlighted chips in the input bar so you can see at a glance what files you're referencing.

Note
The @file text is sent directly to the agent CLI as-is. Agents that natively support file references (like Claude Code) will resolve them automatically. For other agents, the path serves as a clear pointer the agent can use to find the file.

Pasting Files from the Clipboard

Copy one or more files in Finder or Explorer and paste into the input bar (Cmd+V). Each file appears as an inline @path chip with a file icon and filename label. Hover the chip to see the full absolute path, or click the × button to remove it.

Pasting multiple files at once works. Each file gets its own chip, inserted consecutively at the cursor. Images are handled separately and appear as image chips with a small thumbnail preview.

You can also drag files from Finder or Explorer directly onto the input bar. The bar highlights during drag-over, and dropping creates the same file chips.

Tip
Cmd+Shift+V pastes clipboard content as plain text, bypassing chip rendering. This shortcut applies when the input bar has focus. The same key combination toggles voice recording when focus is elsewhere and voice input is configured.

Multi-line Input

Press Shift+Enter or Alt+Enter (Option+Enter on macOS) to insert a newline without submitting. Enter alone submits the prompt.

The input bar auto-sizes as you type, growing line by line up to roughly 8 lines. After that it scrolls vertically. For longer prompts, press Cmd+Shift+E to open the expanded editor modal, which gives you a full-height editing area with no size cap.

Voice Input

When voice input is configured, a microphone icon appears in the input bar. Click it to start recording, or press Cmd+Shift+V when the input bar is not focused. Click again to stop. Transcribed text is inserted directly into the input bar.

During recording, an animated orbit ring plays around the microphone button and the input bar border turns accent-tinted. Live interim text appears in the editor with reduced opacity, then solidifies once confirmed. Text under AI correction shows a dotted underline while being processed.

Note
The voice button only appears once you've configured a voice provider in Settings. See Voice Input for setup instructions.

/Slash Commands

Type / at the start of your input to see available commands. Canopy shows the right command list for the active agent.

Agent Commands

Each agent CLI has its own set of built-in slash commands. Common examples include /help, /clear, /compact, /model, and /diff — though the exact set varies by agent. The autocomplete menu shows exactly what's available for the focused agent.

Custom Commands

Canopy discovers custom commands from the filesystem, following each agent's conventions:

  • Claude Code.claude/commands/*.md in your project, or ~/.claude/commands/ globally
  • Gemini CLI.gemini/commands/*.toml in your project, or ~/.gemini/commands/ globally
  • Codex CLI.codex/commands/*.md in your project, or ~/.codex/commands/ globally

The canopyide/commands repo provides a curated set of commands you can clone and copy into your global commands directory. They appear alongside your own custom commands. Currently Claude Code only, with Gemini and Codex support planned.

Custom commands appear in the autocomplete alongside built-in commands, scoped by priority: project commands override user commands, which override global commands.

Input Adaptation

Behind the scenes, Canopy adapts how input gets delivered to each agent CLI. You can type naturally and Canopy deals with the terminal protocol differences:

  • Multi-line pasting — uses bracketed paste mode for agents that support it (Claude Code, Codex CLI), and soft newline sequences for those that don't (Gemini CLI)
  • Line endings — normalized automatically for each agent
  • Timing — appropriate delays between input and submission are handled per agent

You don't need to think about any of this. Just type and press Enter.

Command History

Each terminal keeps its own prompt history (up to 100 entries per project, separate from the bulk-operations command palette). Navigate with Arrow Up and Arrow Down. History is deduplicated, so repeating a command doesn't create duplicate entries.

Press Cmd+R to open the history search palette: a searchable overlay that lets you filter and select from past commands.

History is scoped per project, so different projects maintain separate command histories even when sharing the same terminal layout.

Draft Persistence

If you start typing in one terminal and switch to another, your draft input is preserved. When you switch back, your in-progress text is restored exactly as you left it.

Drafts are scoped by both project and terminal. Switching to a different project and returning restores the draft you were working on, so nothing is lost when moving between projects.

Input Stash

Press Cmd+Shift+S to stash the current input bar content. An archive icon appears in the input bar whenever a stash exists. Press Cmd+Shift+X to restore the stash back into the input.

Stashing is handy when you want to quickly set aside a half-written prompt, send something else, then come back to it. Stashes are also scoped per project.

Keyboard Shortcuts

All shortcuts below use Cmd on macOS and Ctrl on Windows/Linux.

ShortcutAction
EnterSubmit prompt
Shift+EnterInsert newline
Alt+EnterInsert newline (Option+Enter on macOS)
Cmd+Shift+EOpen expanded editor modal
Cmd+VPaste (files become chips)
Cmd+Shift+VPaste as plain text when input bar is focused; toggles voice input otherwise
Arrow Up / Arrow DownNavigate command history
Cmd+ROpen history search palette
Cmd+Shift+SStash current input
Cmd+Shift+XRestore stashed input
Ctrl+TabFocus next terminal (cycles grid then dock)
Ctrl+Shift+TabFocus previous terminal
EscapeDismiss autocomplete or close expanded editor

For app-wide shortcuts (terminal navigation, window management, and more), see Keyboard Shortcuts.