Getting started
Your first comment
This page follows one comment from the button on your page to the fix in your code. It assumes Passback is set up as in Install with Vite, your dev server is running, and your agent has a Passback session open: /passback in Claude Code or Cursor, $passback in Codex.
Choose what to comment on
- Open your site in the browser.
- Click the Passback button in the bottom right corner, or press Alt+Shift+R (Option+Shift+R on a Mac).
- The button hides and a hint reads "Click anything to comment · Esc to leave". As you move the pointer, an outline shows the element under it.
- Click the element you mean. While you choose, a click does not reach the page, so a link or a button on it does nothing.
Press Escape to stop choosing without leaving a comment.
Write and send
A pin shows the spot you clicked, and a comment box opens beside it.
- Write what should change, in your own words: what is wrong and what you expect instead.
- Press Enter, or click Send, to send it. Send stays off while the box is empty.
- Press Shift+Enter for a new line.
- Press Escape to close the box without sending. The pin goes with it.
As soon as the comment is sent, the Passback button is back and you can leave the next one.
What happens next
The box keeps you posted:
| The box says | What it means |
|---|---|
| Sent. Waiting for the agent. | The comment is saved in your project, in .passback/inbox. |
| The agent is working on it. | Your agent has picked it up. |
| Fixed. | The agent says it made the change. |
| Not sent. | The comment did not reach your project. Your text is kept: click Retry. |
If the agent cannot make the change, the box shows the agent's reason instead of "Fixed.". When the agent opens a pull request for it, the box also shows a Pull request link.
While your agent waits
Your agent is busy while it waits for comments. Each normal wait lasts up to 120 seconds, and an empty result starts another wait, so the session does not return to an idle prompt on its own.
To talk to your agent right away, interrupt the active session first: press Esc in Claude Code, or use the interrupt or stop control of your other client. Then send your message. Typing while a client is busy may queue the message or steer the running turn, depending on the client, so interrupting is the dependable way. See Claude Code interactive controls and the Codex interaction guidance.
When the conversation is over, restart the session yourself: /passback in Claude Code or Cursor, $passback in Codex. Passback does not resume waiting on its own.
Allow waiting without repeated prompts
This is optional. By default your client may ask for approval each time the agent calls passback_wait. The settings below allow only that tool of the passback server. Merge them into your existing files and keep unrelated settings.
They remove repeated prompts for the wait tool. They do not change the first-time trust of the server, your organization's restrictions or the permissions of any other tool.
Claude Code. Merge this into .claude/settings.json in your project. See Claude Code permissions.
{ "permissions": { "allow": ["mcp__passback__passback_wait"] } }Cursor. Merge this into .cursor/permissions.json in your project. An MCP allowlist defined in the file replaces the one set in the Cursor UI, so keep your existing entries in the list. See Cursor permissions.
{ "mcpAllowlist": ["passback:passback_wait"] }Codex. Add this table to your existing Codex configuration. Keep the server's command, arguments and tool_timeout_sec = 180 as they are, and do not repeat a table that is already there. See Codex MCP configuration.
[mcp_servers.passback.tools.passback_wait]
approval_mode = "approve"What your agent receives
Your agent waits for comments with the Passback tool passback_wait. Each comment arrives with:
- your text;
- the address of the page it was left on;
- a selector for the element you clicked;
- in React code (
.jsxand.tsxfiles), the file, line and column the element comes from; - the path of the comment's own file in
.passback/inbox.
The agent reports its progress with the tool passback_status. That is what moves the box from "Sent" to "Fixed.".