Feed the agent input inline with ! and @
Watch yourself work for an hour and you’ll notice how much of the friction is in getting things in front of the agent. You describe a failing test instead of showing it. You type a path from memory and fumble the casing. You try to explain what a broken layout looks like in words. Every one of those is a place where you could be handing Claude Code the exact thing instead of an approximation - and the inline input moves are how you do it without breaking stride.
! - your shell, not the agent’s
Section titled “! - your shell, not the agent’s”You already met the ! prefix back in permissions, where it earned its place as the move that needs no permission prompt: a line that starts with ! runs in your shell, immediately, and drops its output into the conversation. That’s you running the command, not the agent asking to - so there’s nothing to approve.
What that lesson left for here is how much leverage it gives you day to day. The payments tests are flaking; rather than ask the agent to run them and wait, you look yourself and hand it the result:
> !npm test 2>&1 | tail -20
⎿ FAIL test/idempotency.test.js - expected one charge, got two (output added to context)
> a retried request is still double-charging. the dedupe check is racing. fix it.Two small things the interactive-mode docs add that are worth banking. First, ! commands have their own history-based autocomplete - type a partial command and press Tab to complete it from previous ! commands in this project, so the gnarly npm test … | tail only gets typed once. Second, you can paste a chunk of text that starts with ! into an empty prompt and it drops into shell mode automatically, the same as if you’d typed the !. To leave shell mode without running anything, press Escape or Backspace on the empty ! prompt.
The instinct to build: when you find yourself narrating a fact to the agent - “the test fails with a 500”, “git status is dirty” - stop and ! it instead. A described fact is lossy; a pasted one is ground truth.
@ - point at exact files and folders
Section titled “@ - point at exact files and folders”The companion to ! is @. Type @ anywhere in your prompt and Claude Code opens file-path autocomplete, per the same docs - start typing a name and it completes against your project tree, so you reference the real path instead of one you half-remember:
> the race is in @src/payments/charge.ts - compare it to how @src/payments/refund.ts guards against duplicates and apply the same pattern
⎿ Read charge.ts, refund.tsTwo reasons this beats typing a path inline. It’s exact - no guessing whether the file is charge.ts or charges.ts, no wrong directory. And it’s a deliberate signal: @-mentioning a file tells the agent this is in scope, read it without you having to write “go look at” around it. You can mention a directory the same way to point it at a whole area. It pairs naturally with !: ! shows the agent the dynamic state of the world, @ anchors it to the static files that state came from.
Those two moves cover getting text in - live output and exact files. But plenty of problems don’t live in text at all, and plenty of prompts need more than one line. That’s the next lesson: pasting images straight in and writing structured, multi-line prompts.