[FEATURE] Channel notifications should preserve readable content for the human operator

Resolved 💬 3 comments Opened Apr 5, 2026 by gmaxvl Closed May 16, 2026

Preflight Checklist

  • [x] I have searched existing requests and this feature hasn't been requested yet
  • [x] This is a single feature request (not multiple features)

Problem Statement

The current display reduces channel messages so aggressively that structured notifications become hard to read in the terminal. Content is truncated at 60 characters and all whitespace (newlines, tabs) is collapsed to single spaces, which makes the display impractical for any channel where the human needs to read the actual content.

The full content IS delivered to Claude's context — the <channel> tag is unmodified. The problem is purely in the human-facing terminal rendering (UserChannelMessage), which currently provides no way to preserve the readable structure of the original message.

Example — a channel plugin pushes a multi-line message:

await mcp.notification({
  method: 'notifications/claude/channel',
  params: {
    content: 'Build failed on main:\n  tests/auth.test.ts — timeout\n  tests/api.test.ts — assertion error',
    meta: { source: 'ci' },
  },
})

What the human sees:

← ci-monitor: Build failed on main: tests/auth.test.ts — …

What the human should see:

← ci-monitor: Build failed on main:
    tests/auth.test.ts — timeout
    tests/api.test.ts — assertion error

Proposed Solution

Render channel notifications so the terminal display preserves the readable structure of the original content.

For example, Claude Code could avoid collapsing line breaks, use the available terminal width, and indent continuation lines under the prefix, consistent with how tool results and Claude's own output handle multi-line content in the TUI.

Alternative Solutions

_No response_

Priority

High - Significant impact on productivity

Feature Category

Interactive mode (TUI)

Use Case Example

A channel plugin monitors an external system and pushes structured updates:

  1. CI pipeline finishes with failures
  2. Channel plugin pushes the failure summary as a notification
  3. Human sees: ← ci-monitor: Build failed on main: tests/auth.test.ts — …
  4. Human cannot read which tests failed or why without asking Claude to fetch the full content

With faithful rendering, the human reads the full failure summary inline.

Additional Context

  • The rendering lives in the UserChannelMessage component
  • Channels are a research preview — this is feedback from building a real application on top of them
  • Channels docs position webhook, CI, and monitoring events as a core channel use case, which makes readable terminal rendering important for the documented workflow

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗