SLOPSHOPPER

pretty-replies

답변 왼쪽에 테마색 세로 테두리와 여백을 그림 (/pretty)

newrowscommand
v0.1.0no licenseupdated 2026-10-15nemokoala/claude-mods/plugins/pretty-replies
A shopper browsing a rack in a slop shop
Preview · a replayed session in a sandbox
claude · ~/work/app · pretty-replies
› fix the failing auth test and add an audit log call ⏺ Read(src/auth.ts) ⎿ Read 6 lines ⏺ Update(src/auth.ts) ⎿ Added 2 lines, removed 1 line ⏺ Bash(bun test) ⎿ 3 pass, 1 fail ● Done. refresh now rejects expired claims and logs an audit event. ✻ Worked for 42s · done 4:20 PM › /pretty ⎿ pretty-replies: Pretty replies off. ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── › ? for shortcuts
README

nemokoala-mods

Claude Code 모드 모음 (CLI · 데스크톱 앱 Code 탭 공용)

플러그인설명
usage-band입력창 위에 5시간 / 주간 / Fable 주간 사용량 게이지 표시 (claude.ai Pro·Max 로그인 필요)
git-graph접었다 펼 수 있는 깃 커밋 그래프 패널. 세션 시작 때 자동으로 열리지 않고 /git-graph로 열면 그래프가 펼쳐진 상태로 보임. ▾ (c)로 접기. 레인(브랜치)이 많으면 그래프 폭을 제한하고 ◀ ▶ (h l)로 좌우 이동. /git-graph [저장소 경로]
pretty-replies답변 왼쪽에 세로 테두리와 여백을 그림. 답변의 첫 블록은 주황(Claude 색), 도구 호출 뒤 이어지는 블록은 흐린 색. `/pretty [on\off]`로 켜고 끔(인자 없으면 토글, 설정은 유지)

설치

Claude Code에서:

/plugin marketplace add nemokoala/claude-mods
/plugin install usage-band@nemokoala-mods
/plugin install git-graph@nemokoala-mods
/plugin install pretty-replies@nemokoala-mods

또는 터미널에서:

claude plugin marketplace add nemokoala/claude-mods
claude plugin install usage-band@nemokoala-mods
claude plugin install git-graph@nemokoala-mods
claude plugin install pretty-replies@nemokoala-mods

설치 후 새 세션부터 적용됩니다.

Source 2 files
hooks/register.tsx 44 lines
1import { atom, read, update } from 'claude-code'
2import type { Register } from 'claude-code'
3
4const enabled = atom({ plugin: 'pretty-replies', key: 'enabled' } as const, true)
5
6export const register: Register = on => {
7  on('session.start', async ($, e, next) => {
8    await $.command.register({
9      name: 'pretty',
10      description: 'Toggle the pretty reply style (on | off)',
11      argumentHint: '[on|off]',
12    })
13    const saved = await $.store.get('enabled')
14    if (typeof saved === 'boolean') await update($, enabled, () => saved)
15
16    return next(e)
17  })
18
19  on('command.run', { command: 'pretty' }, async ($, e) => {
20    const arg = e.args.trim().toLowerCase()
21    const isOn = await update($, enabled, now =>
22      arg === 'on' ? true : arg === 'off' ? false : !now,
23    )
24    await $.store.set('enabled', isOn)
25
26    return { text: `Pretty replies ${isOn ? 'on' : 'off'}.` }
27  })
28
29  on('ui.render', { component: 'AssistantMessage' }, async ($, e, next) => {
30    if (e.props.isSummary || !(await read($, enabled))) return next(e)
31    const { Box, Markdown } = $.ui.resolve(e)
32
33    return (
34      <Box
35        borderStyle="quote"
36        borderColor={e.props.isFirstOfReply ? 'claude' : 'subtle'}
37        paddingLeft={1}
38      >
39        <Markdown text={e.props.text} />
40      </Box>
41    )
42  })
43}
44
types/index.d.ts 8 lines
1export type PrettyRepliesState = { enabled: boolean }
2
3declare module 'claude-code' {
4  interface PluginState {
5    'pretty-replies': { enabled: boolean }
6  }
7}
8