You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Channel approval prompts show non-shell tools as code instead of describing them like the app #440
When a bot asks to use a tool that is not a shell command, the approval prompt in Slack, Discord, and Telegram shows the tool's details as if they were a command, for example a code-formatted line for a file write or an MCP call. The app's own approval card already describes these tools by name and inputs, so the same request reads differently in chat and in a channel.
This prompt code is on the orchestration integration branch (cos/orchestration-proactive and the branches built on it), not on main yet.
Goal
Channel approval prompts describe non-shell tools the way the app does: what the tool does in plain words, then a short summary of its inputs, with secrets redacted. Shell commands keep showing the command.
Acceptance criteria
A non-shell tool approval in Slack and Telegram reads like the app card, not as a code-formatted command. For example, "Nova wants to copy a file to your computer" followed by a "Source path: notes.txt" line, and "Nova wants to use Linear: Create issue" for an MCP tool.
Shell approvals are unchanged, for example "Nova wants to run ls"
The channel prompt and the app use the same shared code, so they cannot drift. The fix moved toolApprovalPresentation into @akeru/shared/toolApproval, which the client-runtime toolApprovalPresentation wraps, and uses approvalArgumentSummary from @akeru/shared for the input lines. A web test pins the app's translated tool names to the same English phrases.
Credentials stay redacted in channel text
Values stay literal through Slack, Telegram, and iMessage formatting, and multi-line values keep every line
A live approval from a non-shell tool in Slack shows the new text
The fix is merged into the integration branch cos/orchestration-proactive
The fix lands on main
How to verify
Run the channel prompt tests in apps/server/src/channels/ChannelWorkCardPresentation.test.ts for a shell command, a file tool, and an MCP tool, plus the channels suite and apps/web/src/components/chat/ToolApprovalProposal.test.ts. For the live check, connect a test Slack workspace, set the bot's approval mode so Auto review does not approve the request on its own, and ask the bot to copy a file to your computer. The Slack prompt should match the app card.
Out of scope
Backticks inside a value. They show as apostrophes, the same as in commands, because Slack inline code cannot contain a backtick.
Changing how the app's own approval card looks
Context
Branch:leoplayz317/akr-141-channel-approval-prompts-describe-non-shell-tools-like-the, based on cos/orchestration-proactive. Commits 79a82dfa9 (fix(channels): approval prompts describe non-shell tools like the app) and c47c34d34 (fix(channels): tool approval fields show literal values with every line), with a patch changeset. The fix was handed to the integration branch owner, and both commits are now in cos/orchestration-proactive, cos/bot-talk-look, and cos/leo-feedback-preview.
Results on 2026-10-06: channel prompt tests pass, the channels suite passes 407 of 407, and web chat and client-runtime tests, typecheck, and lint pass.
Not checked: a live non-shell prompt in Slack. Auto review approved the CopyFromBox request on its own, so no prompt appeared.
Problem
When a bot asks to use a tool that is not a shell command, the approval prompt in Slack, Discord, and Telegram shows the tool's details as if they were a command, for example a code-formatted line for a file write or an MCP call. The app's own approval card already describes these tools by name and inputs, so the same request reads differently in chat and in a channel.
This prompt code is on the orchestration integration branch (
cos/orchestration-proactiveand the branches built on it), not onmainyet.Goal
Channel approval prompts describe non-shell tools the way the app does: what the tool does in plain words, then a short summary of its inputs, with secrets redacted. Shell commands keep showing the command.
Acceptance criteria
notes.txt" line, and "Nova wants to use Linear: Create issue" for an MCP tool.ls"toolApprovalPresentationinto@akeru/shared/toolApproval, which the client-runtimetoolApprovalPresentationwraps, and usesapprovalArgumentSummaryfrom@akeru/sharedfor the input lines. A web test pins the app's translated tool names to the same English phrases.cos/orchestration-proactivemainHow to verify
Run the channel prompt tests in
apps/server/src/channels/ChannelWorkCardPresentation.test.tsfor a shell command, a file tool, and an MCP tool, plus the channels suite andapps/web/src/components/chat/ToolApprovalProposal.test.ts. For the live check, connect a test Slack workspace, set the bot's approval mode so Auto review does not approve the request on its own, and ask the bot to copy a file to your computer. The Slack prompt should match the app card.Out of scope
Context
Branch:
leoplayz317/akr-141-channel-approval-prompts-describe-non-shell-tools-like-the, based oncos/orchestration-proactive. Commits 79a82dfa9 (fix(channels): approval prompts describe non-shell tools like the app) and c47c34d34 (fix(channels): tool approval fields show literal values with every line), with a patch changeset. The fix was handed to the integration branch owner, and both commits are now incos/orchestration-proactive,cos/bot-talk-look, andcos/leo-feedback-preview.Results on 2026-10-06: channel prompt tests pass, the channels suite passes 407 of 407, and web chat and client-runtime tests, typecheck, and lint pass.
Not checked: a live non-shell prompt in Slack. Auto review approved the
CopyFromBoxrequest on its own, so no prompt appeared.Created with Claude Opus 5.5 in Claude Code.