Your prompts in the terminal as opencode-style panels: right-aligned text with a blue stripe on the right

Three mods for the Claude Code terminal (CLI). Claude Desktop, VS Code and mobile keep their normal look.
| Mod | What it does |
|---|---|
| session-panel | A side panel docked on the right: live 5-hour and weekly limits, context use with a per-category breakdown, the model and effort with switchers, skills with their context cost, connector status, the working directory, the Claude Code version and toggles for your mods. /panel opens it; the ✕ collapses it to a « button. |
| message-style | Your prompts as opencode-style panels: full width, text on the right, a thin blue stripe on the right edge. |
| mod-manager | /mods lists your installed plugins and mods with on/off toggles that apply in the open session, no restart. The side panel's Mods section uses it. |
You need Claude Code 2.1.300 or newer.
In a Claude Code terminal session, run each of these, answering y to add the marketplace and choosing the user scope:
/plugin install session-panel --marketplace Ilja-Garbuz/claude-code-mods
/plugin install message-style --marketplace Ilja-Garbuz/claude-code-mods
/plugin install mod-manager --marketplace Ilja-Garbuz/claude-code-mods
Or from any shell (PowerShell, bash, fish):
claude plugin marketplace add Ilja-Garbuz/claude-code-mods
claude plugin install session-panel@ilja-mods --scope user
claude plugin install message-style@ilja-mods --scope user
claude plugin install mod-manager@ilja-mods --scope user
session-panel brings mod-manager along, so installing it alone also works.
Start a new session (or run /reload-plugins) and the panel appears once the terminal is wide enough (144 columns in the fullscreen layout). Anywhere else, type /panel.
To update later: claude plugin marketplace update ilja-mods, then /reload-plugins.
/plugin configure message-style@ilja-mods sets the panel colour and the stripe colour./mods toggle <name>, or claude plugin disable <name>@ilja-mods./model, so it also becomes your default for new sessions. Mid-session the panel warns first, because a switch drops the prompt cache.claude -p /usage --safe-mode every 3 minutes and claude mcp list every 15 minutes. Neither calls the model or uses your limits.claude and git by name, so both need to be on your PATH. Nothing depends on the shell.See DEVELOPMENT.md. Each mod checks with:
claude plugin validate mods/session-panel
claude plugin test mods/session-panelhooks/register.tsx 31 lines1import type { Register } from 'claude-code'
2
3// Your prompts in the terminal as opencode draws them, mirrored: a padded
4// full-width panel with the text on the right and a blue stripe down the
5// right edge. Claude's replies stay as the engine draws them; Desktop, VS
6// Code and mobile keep their own look. The engine's row can't be restyled,
7// so the panel is drawn here from the prompt's text; ctrl+o still shows the
8// engine's row.
9export const register: Register = (on, options) => {
10 const panel = String(options.bubbleColor ?? '#1e1e1e')
11 const stripe = String(options.stripeColor ?? '#5c9cf5')
12
13 on('ui.render', { component: 'UserMessage', surface: 'terminal' }, async ($, e, next) => {
14 // Only the person's own prompts, and the full row under ctrl+o.
15 if (e.props.origin.kind !== 'composer' || e.props.isExpanded) return next(e)
16 const { Box, Text } = $.ui.resolve(e)
17 // The stripe is half a cell wide: a column of right-half blocks laid over
18 // the last cell, clipped to the panel's height, so it never adds rows.
19 return (
20 <Box marginTop={1} marginLeft={2}>
21 <Box flexGrow={1} flexDirection="column" alignItems="flex-end" backgroundColor={panel} paddingX={2} paddingY={1} marginRight={1}>
22 <Text wrap="wrap">{e.props.text}</Text>
23 </Box>
24 <Box position="absolute" top={0} bottom={0} right={0} width={1} overflow="hidden">
25 <Text color={stripe}>{'▐\n'.repeat(200)}</Text>
26 </Box>
27 </Box>
28 )
29 })
30}
31