Skip to content

Channel approval prompts show non-shell tools as code instead of describing them like the app #440

Description

@linear-code

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-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.

Created with Claude Opus 5.5 in Claude Code.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions