Summary
Add a configurable verbosity level per agent across all chat frontends (Discord, Slack, Web) so users can control how much output they see — from "just the final answer" to "everything I'd see in Claude Code."
Reported by community member Oliver on Discord.
Current Behavior
Each agent can configure output via chat.<platform>.output, backed by the shared ChatOutputSchema:
chat:
discord:
output:
tool_results: true
tool_result_max_length: 900
system_status: true
errors: true
This provides basic toggles, but there's no way to:
- Show/hide tool calls themselves (only tool results are toggleable)
- Suppress all intermediate output and only show the final assistant text
- Show streaming/progress events for a fully verbose mode
Users currently have to modify each frontend's implementation to achieve different verbosity levels per agent.
Proposed Solution
Add a verbosity field to the shared ChatOutputSchema so it applies to all three chat frontends:
chat:
discord:
output:
verbosity: minimal
slack:
output:
verbosity: standard
web:
output:
verbosity: verbose
| Level |
Behavior |
minimal |
Only final assistant text + errors. No tool calls, no tool results, no system status. |
standard |
Current default behavior (tool results, system status, errors). |
verbose |
Everything: tool calls, tool results, system status, streaming/progress events. Closest to the raw Claude Code experience. |
The existing granular toggles (tool_results, system_status, etc.) should continue to work and override the verbosity preset when explicitly set.
Implementation Notes
Schema (shared)
packages/core/src/config/schema.ts — Add verbosity enum to the shared ChatOutputSchema so all platform-specific schemas (DiscordOutputSchema, SlackOutputSchema, etc.) inherit it automatically.
Frontend-specific filtering
Each frontend has its own message handler that would need verbosity-aware filtering:
packages/discord/src/manager.ts — onMessage callback (~line 449-605)
packages/slack/src/manager.ts — equivalent message handler
packages/web/ — web dashboard message display
Shared utilities
Consider extracting a shared shouldShowMessage(messageType, outputConfig) helper into @herdctl/chat so all three frontends apply verbosity rules consistently rather than duplicating the filtering logic.
Scope
- Schema change: ~10 lines
- Shared helper: ~30-50 lines
- Per-frontend wiring: ~20-30 lines each
- Fully backward-compatible — existing configs default to
"standard"
Summary
Add a configurable verbosity level per agent across all chat frontends (Discord, Slack, Web) so users can control how much output they see — from "just the final answer" to "everything I'd see in Claude Code."
Reported by community member Oliver on Discord.
Current Behavior
Each agent can configure output via
chat.<platform>.output, backed by the sharedChatOutputSchema:This provides basic toggles, but there's no way to:
Users currently have to modify each frontend's implementation to achieve different verbosity levels per agent.
Proposed Solution
Add a
verbosityfield to the sharedChatOutputSchemaso it applies to all three chat frontends:minimalstandardverboseThe existing granular toggles (
tool_results,system_status, etc.) should continue to work and override the verbosity preset when explicitly set.Implementation Notes
Schema (shared)
packages/core/src/config/schema.ts— Addverbosityenum to the sharedChatOutputSchemaso all platform-specific schemas (DiscordOutputSchema,SlackOutputSchema, etc.) inherit it automatically.Frontend-specific filtering
Each frontend has its own message handler that would need verbosity-aware filtering:
packages/discord/src/manager.ts—onMessagecallback (~line 449-605)packages/slack/src/manager.ts— equivalent message handlerpackages/web/— web dashboard message displayShared utilities
Consider extracting a shared
shouldShowMessage(messageType, outputConfig)helper into@herdctl/chatso all three frontends apply verbosity rules consistently rather than duplicating the filtering logic.Scope
"standard"