Herman's Claude Code mod: blue speaker bar for user messages, orange for Claude replies (more features to come)

Herman's Claude Code mods. One marketplace (herman-mods), one folder per mod.
| Mod | What it does | Version | |
|---|---|---|---|
speaker-colours | Speaker colours: a blue bar for your messages, orange for Claude's replies. | 0.1.0 | |
team-orchestrator | Runs a team of Claude Code sessions as Orca tabs, managed from a panel above the prompt: quick starts, a team form, a live roster (stacked, side by side or docked) and an org chart. Members start on their first message, close when idle and reopen when a message arrives; each has a role file. A guard keeps members from starting subagents, and members with reports from writing files, unless you allow it. Works on Windows, macOS and Linux (see the mod's README). | 0.5.18 | |
clean-view | Hides tool calls and shows a calm step checklist above the prompt, with a Hide details / Show details button (`/simple on\ | off`). | 0.1.0 |
claude plugin marketplace add herman925/925-cc-pluginsclaude plugin install team-orchestrator@herman-mods --scope user/reload-plugins in a session that is already open..claude-plugin/plugin.json and hooks/hooks.json (and hooks/register.tsx)..claude-plugin/marketplace.json.claude plugin validate <folder> and claude plugin test <folder>.hooks/register.tsx 40 lines1import type { Register } from 'claude-code'
2
3// Bar colours and the faint wash behind each speaker. Change these to taste.
4const USER_COLOR = '#8FC1FF' // light blue
5const USER_TINT = '#27384F'
6const CLAUDE_COLOR = '#FFA38F' // light orange / salmon
7const CLAUDE_TINT = '#4A2F27'
8
9export const register: Register = on => {
10 // Your prompts: the engine paints its own grey strip behind the text, which
11 // fights the tint. Typed prompts are plain text, so draw them ourselves in the
12 // default colour (no colour prop) inside the light-blue bar and tint. Anything
13 // else (task notices, peer messages) keeps the engine's drawing.
14 on('ui.render', { component: 'UserMessage' }, async ($, e, next) => {
15 if (e.props.origin.kind !== 'composer') {
16 return next(e)
17 }
18
19 const { Box, Text } = $.ui.resolve(e)
20
21 return (
22 <Box borderStyle="quote" borderColor={USER_COLOR} backgroundColor={USER_TINT}>
23 <Text>{'❯ ' + e.props.text}</Text>
24 </Box>
25 )
26 })
27
28 // Claude's replies: same, in orange.
29 on('ui.render', { component: 'AssistantMessage' }, async ($, e, next) => {
30 const theirs = await next(e)
31 const { Box } = $.ui.resolve(e)
32
33 return (
34 <Box borderStyle="quote" borderColor={CLAUDE_COLOR} backgroundColor={CLAUDE_TINT}>
35 {theirs}
36 </Box>
37 )
38 })
39}
40