[FEATURE] User-side sideband display: output the user sees but Claude does not

Resolved 💬 7 comments Opened Mar 6, 2026 by jeapostrophe Closed Apr 7, 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

Claude Code's extension points (hooks, skills, bang commands, statusline) all share a fundamental constraint: there is no way to show the user information without it entering Claude's context window.

  • Skills (/skill) cause Claude to think about the output, burning tokens to interpret and narrate data you just want displayed.
  • Bang commands (!command) inject stdout directly into context. Checking a status dashboard 10 times fills the conversation with repetitive tabular data Claude doesn't need.
  • Hook systemMessage (added in v1.0.64, #4084) is the closest primitive, but the message appears in the conversation transcript and enters context.
  • Statusline is user-only but limited to a single line of text --- it can't display multi-line output like a problem list, test results, or session summary.

I want to glance at my project's TODO list, problem summary, or test results without leaving the Claude Code window. Today, that means either piping it through a bang command (paying tokens for data Claude doesn't need) or switching to another terminal.

The analogy is an IDE's problems panel or output window --- always visible, never in the editor buffer. Claude Code's "editor buffer" is the conversation context, and right now there's no equivalent of the surrounding chrome.

Proposed Solution

A mechanism for hooks (or other extensions) to display output that the user sees but Claude does not. A sideband channel.

The lowest-friction version: extend the existing hook systemMessage mechanism. Today, systemMessage renders in the conversation and enters context. If hooks could instead return something like:

{
  "userDisplay": "## Active Problems\n- auth-module: Claude stopped (waiting for review)\n- api-tests: 3 failing tests\n- docs: unreviewed diff (12 files)",
  "userDisplayTitle": "Project Status"
}

...and this printed inline the same way hook errors are printed today, but with normal terminal coloring instead of red, that would be sufficient. No new UI primitives needed --- just a non-context, non-error output path.

The essential property is: user sees it, Claude doesn't, and it doesn't cost tokens.

Alternative Solutions

  • Bang commands (!cat TODO.md): Works, but every invocation enters context. Checking status 10 times during a session fills the conversation with repetitive data Claude doesn't need.
  • Multiple terminal windows / tmux: Works, but defeats the purpose of Claude Code being the primary development environment. You're context-switching to see ambient information.
  • Statusline scripts: User-only (good!), but limited to a single line. Can't display a multi-line problem list or test summary.
  • External dashboard tools (separate app, web UI): Works for desktop, but unavailable during remote workflows (SSH, Claude Code Remote Control).

Priority

Low - Nice to have

Feature Category

Interactive mode (TUI)

Use Case Example

  1. I'm managing multiple Claude Code sessions across several projects.
  2. Between sending instructions, I want to check: which sessions have stopped? Are there unreviewed diffs? Did tests pass? What's on my TODO list
  3. I run a hook (or bang command) that calls a status script.
  4. Today: the output enters Claude's context, wasting tokens on tabular data Claude doesn't need to see. Over a session, these status checks accumulate and accelerate context compaction.
  5. With this feature: the hook returns "userDisplay" instead of "systemMessage". The status prints inline with normal formatting. Claude's context is unaffected. I stay in one window.

Additional Context

Relationship to existing issues

This is the missing primitive beneath several open requests:

  • #22221 --- Expose plan usage limits in status line (wants ambient display of quota data)
  • #24537 --- Agent hierarchy dashboard (wants a dedicated panel for multi-agent state)
  • #6577 --- Context data access in statusline hooks (wants richer ambient display)
  • #29829 --- Session cost and context usage in hook event data
  • #10052 --- Expose agent information for external monitoring
  • #11224 --- Discovered that exit code 0 + stdout already gives user-only hook output (Claude doesn't see it), and proposed explicit "visibility": "user-only" control. Closed as not planned, but mapped out the existing undocumented behavior that this request builds on.

Each of these requests a specific piece of ambient information. A sideband display channel would let the community build all of them as extensions without waiting for first-party support for each one.

Acknowledgment

Thank you for building Claude Code. The hooks system, JSONL session files, and statusline are already remarkably extensible for a CLI tool. This one addition would close the loop and let the community build the ambient tooling that makes Claude Code a complete development environment.

---

This feature request was researched and drafted by Claude (Opus 4.6) via Claude Code, on behalf of the author.

View original on GitHub ↗

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