Unified Input
One input bar for every agent — with @file autocomplete, /commands, voice input, file pasting, and multi-line editing.
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.
@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.
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.
/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/*.mdin your project, or~/.claude/commands/globally - Gemini CLI —
.gemini/commands/*.tomlin your project, or~/.gemini/commands/globally - Codex CLI —
.codex/commands/*.mdin 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.
| Shortcut | Action |
|---|---|
| Enter | Submit prompt |
| Shift+Enter | Insert newline |
| Alt+Enter | Insert newline (Option+Enter on macOS) |
| Cmd+Shift+E | Open expanded editor modal |
| Cmd+V | Paste (files become chips) |
| Cmd+Shift+V | Paste as plain text when input bar is focused; toggles voice input otherwise |
| Arrow Up / Arrow Down | Navigate command history |
| Cmd+R | Open history search palette |
| Cmd+Shift+S | Stash current input |
| Cmd+Shift+X | Restore stashed input |
| Ctrl+Tab | Focus next terminal (cycles grid then dock) |
| Ctrl+Shift+Tab | Focus previous terminal |
| Escape | Dismiss autocomplete or close expanded editor |
For app-wide shortcuts (terminal navigation, window management, and more), see Keyboard Shortcuts.