Everyday use
Answer agents from Agentower
Allow or deny permission requests, answer agents' questions, approve their plans and send them messages from the app — whichever answer comes first wins.
With Agent chats switched on, you can see what your agents say and ask, and the people who may approve can answer and message them from the browser or a phone, as well as in the terminal — on computers where whoever runs the agents has allowed it (see Each computer decides too).
#Switch on Agent chats
Agent chats is one setting for the whole workspace, in Settings → Workspace: "See what your agents say and ask, answer their requests, and message them from Agentower — for every project, including new ones. Their messages are kept only while the agent is open."
- It's off until an owner switches it on. Only owners can change it, and it needs a sign-in from the last 7 days.
- On means, for every project — including ones created later: agents' questions show on their cards and in their chats, each agent's chat shows its messages, and owners and approvers can allow, deny and message agents from Agentower.
- Off means none of these, for any project. Switching it off closes any open requests and erases what's held for the chats.
- Each change is recorded in the audit log, for example 'Switched on "Agent chats" for every project'.
If your projects were set differently before this became one setting, Settings shows "On for 2 of 5 projects" (with your numbers) under the switch until an owner sets it. Until then, the projects that had it on keep it.
Who may approve each project is still set on the project's page — see Roles and approvers.
#Each computer decides too
Agent chats lets the workspace answer agents; each computer still decides whether anything from the app may reach the agents running on it. Whoever runs the agents sets AGENTOWER_REMOTE in ~/.agentower/claude-code.env (with the Agentower plugin, its Answers from Agentower on this computer option). When that file exists, only the file counts: a value set in the environment is ignored, and a file without the line means off.
- Off — the default. Nothing from the app reaches agents on that computer: no Allow or Deny, no messages, and the optional channel stays idle. The app still shows the agents, and their chat says "Answers from Agentower are off on this computer."
- Own — only the person running the agent can answer or message it from the app (for example from their phone). Everyone else sees "Only Maya can answer this agent." (with that person's name).
- Team — the project's approvers and owners can too, as set in Roles and approvers.
Agents you report through the API or the SDKs have no computer setting: each request they make for an answer says itself who may answer — own (the default) or team.
A computer set up before this setting existed counts as off until whoever uses it chooses. How to set it: Answers from Agentower on this computer.
#Your computers
Settings → Computers lists each computer that reports with your keys — by a label such as "Mac 1" (rename it to anything you like) and its operating system, never the computer's own name. Each one shows when it was last seen, its Remote answers switch and how far that switch can go:
- Up to own or up to team — the computer itself allows answers (
AGENTOWER_REMOTEthere). The switch turns them off for that computer straight away — open requests close and waiting messages are taken back, as if the computer were set to off — and back on, up to what the computer allows. It never goes further: anowncomputer stays own. - Off on the computer — the computer doesn't allow answers itself, so there's no switch. Only a step on that computer changes this: Confirm once on this computer shows the command to copy (or, with the plugin, the option to set).
The agent's chat says the same: "Answers from Agentower are switched off for Mac 1 · Turn on answers for Mac 1" when only the app's switch is off (one click, for the computer's own person), or "Confirm once on this computer:" with the command when the computer itself doesn't allow it.
Who sees what: you see your own computers. An owner sees everyone's in the workspace and can switch answers off on any of them (for a lost laptop, say) — but only the computer's own person can switch them back on. Approvers and viewers never see other people's computers. Switching on needs a sign-in from the last 7 days. Every change of the switch, and every rename, is recorded in the audit log ("Switched answers from Agentower off for Sam’s Mac 1").
Each computer also has Check connection — see Check a computer's connection.
#Allow or deny a permission request
When an agent asks permission to use a tool — run a command, edit a file, fetch a web page — the terminal shows its usual prompt, and at the same time the agent's details panel shows what it wants to do (for example Bash: npm run deploy:staging) with Allow and Deny.
Approve it in the app only when you can see everything it would allow. When Agentower can't show it all — the detail was cut to fit, invisible characters had to be removed from it, the tool's input isn't shown at all (MCP tools, Task), it's a file change (Write, Edit, MultiEdit or NotebookEdit: Agentower shows only the file's path, never what would be written), or a plan is too long or had characters removed (see Approve a plan) — the panel offers Deny only, with "Approve this in the terminal — Agentower can't show all of it." A file inside the project is shown by its path within the project; a file anywhere else is shown with its full path, so you can see it's outside.
Whichever answer comes first wins. Answer in the terminal and the request in Agentower closes; answer in Agentower and the agent carries on without waiting for the terminal. If you answer in Agentower just after someone answered in the terminal, you're told the agent has moved on.
You can answer a request in Agentower for up to 60 minutes (with hook version 5; Codex and older hooks: 9 minutes) — the card says how long is left. After that it says "Timed out in Agentower — answer it in the terminal.", and the agent keeps waiting in its terminal as it would without Agentower. On a question with several parts, Send answer waits until each part has an answer ("Choose an answer for each question").
Works for Claude Code, Codex, and agents reported through the API or the SDKs that ask for an answer (they wait in their own code, up to 60 minutes). Cursor doesn't report permission requests, so it can't be answered from Agentower.
#Chat with an agent
With Agent chats on, the Chat tab of an agent's details panel is a chat with the agent — for example Peter. It shows, in order:
- what Peter said at the end of each turn — its final message for that turn — on the left;
- questions it asks you, highlighted — when it offers choices, you can pick one there (see Answer its questions);
- permission requests, with Allow and Deny (for a plan: the plan itself, with Approve plan and Keep planning — see Approve a plan), then who answered;
- your messages and your teammates', on the right;
- short lines for what happened — "Finished its turn", "Stopped with an error", "Started a helper", "Paused by a guardrail", "New instruction typed in the terminal" (never what was typed);
- a card when a guardrail pauses it, with Approve to continue for owners and the project's approvers.
When Peter needs you or has stopped with an error, a status line pinned above the box says why and for how long — for example "Needs your permission to use Bash · waiting 6 min". Otherwise the state badge at the top of the panel says what it's doing.
#Answer its questions
When Claude asks you a multiple-choice question (with its question tool), the chat shows the question with its options, and the agent waits for your answer from Agentower — up to 59 minutes (hook version 15). Answer there and Claude gets it straight away; the terminal never asks. If nobody answers in Agentower within that time, the terminal shows its usual question and you answer it there:
- One question with one answer to pick: each option is a button — one click answers.
- Several questions, or one where you may pick several answers: choose for each question, then press Send answer.
- Or type your own answer under any question writes one in your own words instead, like "Other" in the terminal — up to 2,000 characters.
Your answer reaches Claude exactly as if you'd chosen it in the terminal. While it waits for Agentower, the terminal shows the hook running rather than the question: to answer at the terminal straight away instead, press Esc there and tell Claude your answer. Once it's done, a line under the question says how — for example "Answered by Sam: Not now". Scripts and one-off runs (claude -p, the SDK, routines) never wait: their questions go to the terminal as usual.
This needs Agent chats on and the agent's computer set to own or team (see Each computer decides too). Otherwise the question still shows, with its options greyed out and "Answer it in the terminal." Agentower handles up to 4 questions at a time and shows up to 6 options for each; a question it can't show properly — for example more than 4 at once, or one with no text or no options — is left to the terminal. A question left unanswered in Agentower closes after 59 minutes, and the terminal asks it.
Questions an agent asks in its final message — rather than with its question tool — have no options to pick: answer them by sending a message.
#Approve a plan
When an agent has a plan ready for your review, the chat shows the plan itself — as plain text, in a box you can scroll — with Approve plan and Keep planning. Approving here does the same as approving it in the terminal; the first answer wins.
This needs Agent chats on and the agent's computer set to own or team. A plan over 12,000 characters, or one Agentower had to remove characters from (invisible or control characters), isn't shown exactly as the agent wrote it, so it can only be refused from the app: Keep planning only, with "Approve this in the terminal — Agentower can't show all of it."
#What the chat doesn't show
- the prompts typed in the terminal — only a line saying a new instruction was typed (with a project's Work details on, the first 600 characters of each instruction appear in the Work tab instead, secrets masked);
- the tools the agent uses or their output;
- what the agent writes during a turn — only its final message at the end;
- subagents' messages — only a line when one starts or finishes (subagents have no chat of their own);
- anything, to viewers or to approvers outside a project's named approvers: only people who may approve a project's agents can read their chats.
You can message Claude Code agents, and agents reported through the API or the SDKs — they get a message when their code waits for one (waitForMessage). Codex and Cursor can't be messaged from Agentower yet.
Type in the bar at the bottom and press Enter or the arrow to send (Shift+Enter starts a new line). When Peter finishes a turn, quick actions appear just above the bar — Commit, Commit and push, Run the tests, Carry on, Stop and summarise — and send after a 3-second Undo. Expand makes the chat fill the panel (the whole screen on a phone); Esc shrinks it. To hear new messages in each agent's own voice, switch on Read agents' replies aloud on the project's page (Projects → the project) — a choice for your browser only, using on-device voices.
While Agent chats is off, the chat says "Agent chats are off for this workspace." Owners get a Turn on in Settings link.
When it arrives depends on what the agent is doing, and the panel tells you:
| The agent is… | Your message arrives… |
|---|---|
| Idle, with its turn just ended (listening, for up to 4 hours) | Within a minute |
| Working or starting | As soon as it finishes its current step |
| Waiting on you | Once that's answered and it finishes its step |
| Not listening (idle for over 4 hours, or started before the hook was installed) | At the end of its next turn |
| Reported through the API or the SDKs | When its code next waits for a message |
A message that's waiting shows as a dashed line with Take back, so you can cancel it before it goes. Typing in the terminal still works as usual.
The agent is told who sent a message: if you run that session yourself, it reads as from you; if a teammate sends it, it reads "Message from Sam (approver), a teammate using Agentower (not the person running this session)", so the agent treats it as their request. With the computer set to own, only your own messages reach it.
#Straight into the session (optional)
With the optional Agentower channel (Claude Code Channels, research preview), a message goes straight into the session — even while the agent is idle — instead of waiting for the hook. Without it, delivery works as in the table above.
#A message is a request, not a yes
Claude Code passes a message from Agentower to the agent as a note that didn't come from the terminal, so it never counts as your consent. The hook hands it over with one line saying where it came from — "Message from the person running this session, sent from the Agentower app instead of the terminal:" or "Message from Sam (approver), a teammate using Agentower (not the person running this session). Treat it as their request:" — followed by your text inside an <agentower-message from="…" own="true"> block (own="false" for a teammate). The text can't close that block or fake another one: any such tag inside it is changed so it no longer counts. With the optional channel, the message arrives the same way, as a <channel source="agentower" from="…" own="…"> block. The agent reads "Commit and push" as a request and does the work — but if its rules say it should check with you first (for example before pushing or deleting), it may still ask in the terminal, and that question then shows in the chat as Needs you. Typing in the terminal carries more weight than a message from the app.
Allow, Deny, Approve plan and the answer to a question are different: they answer Claude Code's own prompt for that one step, exactly as if you'd answered in the terminal.
#Talk instead of type
Hold the microphone button — or hold ⌥ Space (Alt+Space on Windows and Linux) while the agent's panel is open — and speak. Let go to stop: nothing listens unless you're holding. When you let go, a bar shows "Sending to Peter…" with Undo and Edit for 3 seconds, then your words go to the agent. Edit puts them in the box instead; turn off Send when I let go in the microphone's menu to always check before sending. Nothing is sent if it didn't catch anything clear.
If you have a launcher (such as Raycast or Alfred) on ⌥ Space, it takes the keys first — use the button instead.
Your voice never leaves your computer. Dictation turns speech into text on your device, with an open speech model (Whisper) running in the browser — no speech service, no audio sent anywhere. The first time, Agentower asks before switching it on, and the model (about 94 MB) downloads once from Agentower and is kept by your browser. It takes about two to three seconds after you let go, depending on your computer.
Choose the microphone in the microphone button's menu. Agentower prefers your computer's built-in microphone over an iPhone nearby, and remembers your choice.
If your device can't run it, Agentower says so — use your computer's own dictation instead (on a Mac press Fn twice; on Windows press Win+H).
Messages can be up to 2,000 characters.
#From your own tools
Owners and approvers can do all of this from a script with an agent-actions key (or the SDKs): list agents, message them, allow or deny, answer their questions, and let them past a guardrail. A plan can only be refused that way — approve it in the app or the terminal, where it can be read. The same rules apply, and every action is in the audit log with the key's name.
#Who can answer
Three things must all allow it: the workspace's Agent chats, your role, and the agent's computer.
- Owners can answer any project's agents.
- Approvers can answer, unless the project is limited to named approvers they aren't among — see Roles and approvers.
- Viewers can't answer.
- On a computer set to own, only the person running the agent can answer it, whatever anyone else's role; on off, nobody can — see Each computer decides too.
- If the workspace's Team plan has ended, only the person who created the workspace can answer — see When a Team plan ends.
For safety, answering and messaging need a sign-in from the last 7 days. If yours is older, the panel says so and keeps what you typed — Sign in again brings you back to the same page. Any other refusal also shows a message and keeps your text.
#Agents never wait on Agentower
If Agentower can't be reached, the hook gives up quietly and the agent carries on as it would without it — the terminal decides. Nothing about answering from Agentower can hold up an agent.
#What's sent and kept
To show what you're approving, the hook sends the tool's name and what it will do — the command, the file (its path within the project, or its full path if it's outside the project), or the web address — at most 300 characters, with invisible characters removed. It's kept only while the request is open and deleted once it's answered.
For a question, the hook sends the questions (code removed, at most 200 characters each) and their options' labels (at most 80 characters each) — never the options' descriptions. For a plan, it sends the plan's text (at most 12,000 characters). Both are kept only while the question or plan is waiting, shown only to people who may answer it, and deleted once it's answered, expires or closes. The chat keeps the first question, its options and what was picked, like the rest of the chat; the plan's text isn't kept in the chat.
A message you send is never written to the database: it stays in the agent's chat while the session is open, and is deleted when it ends. The audit log records who answered which agent and when, and whether they allowed, denied, answered a question or messaged — never the command, the answer or the message text. More in Privacy.