A second agent reads each answer and pops up anything important you might miss: costs, risks, things that need your decision.

Nine mods for Claude Code (2.1.287 or newer), written from the walkthrough video. Each lives in mods/<name>.
Install one, or all, from a terminal session:
/plugin install <name> --marketplace KianaVega/KianaVega
| Mod | What it does | Extra model usage |
|---|---|---|
| savvy-progress | Progress bar above the prompt and a live list of subagents with model, tokens and rough cost | none |
| tool-skins | Icons and colors for tool calls in seven themes, switch with /skin <name> | none |
| you-should-know | A second, small model reads long answers and flags anything important you might miss | one small call per long answer |
| file-tree | Pane showing files Claude reads and edits, green once committed (/file-tree) | none |
| cache-tax | Holds a prompt that would reload a cold cache and shows an estimate. /keepwarm pings before the cache expires | none, except keep-warm pings |
| blast-radius | Stops recursive deletes, git clean, hard resets and shows the affected files before you press Proceed | none |
| reflect | Offers to save corrections as a rule in CLAUDE.md | one small call when you save |
| terminal-browser | /browse <url or file> opens a pane with a screenshot (kitty or Ghostty) and the page text | none |
| replay-theater | Replay button after a turn that steps through each edit as a diff (/replay) | none |
hooks/register.tsx. Edit and reload.hooks/register.tsx 65 lines1import { atom, read, update } from 'claude-code'
2import type { Register } from 'claude-code'
3
4import type { Flag } from '../types'
5
6// Steer what the watcher looks for. This mod makes one extra model call per
7// long answer, so it counts against your usage. Short answers are skipped.
8const FOCUS = 'unexpected costs, destructive or irreversible actions, security risks, and decisions the user must make'
9const MIN_CHARS = 600
10const MODEL = 'haiku'
11
12const flag = atom({ plugin: 'you-should-know', key: 'flag' } as const, null as Flag | null)
13
14export const register: Register = on => {
15 on('turn.complete', async ($, e, next) => {
16 const shown = await next(e)
17
18 if (e.agentId !== undefined || e.reason !== 'answer' || shown.text.length < MIN_CHARS) {
19 return shown
20 }
21
22 const result = await $.model.complete({
23 model: MODEL,
24 maxTokens: 150,
25 system:
26 'You review an AI coding assistant reply for the person who may not have read all of it. ' +
27 `Look only for: ${FOCUS}. ` +
28 'If something important is buried in the text, answer with one plain sentence, under 25 words. ' +
29 'If nothing needs attention, answer exactly NONE.',
30 prompt: shown.text.slice(0, 12000),
31 })
32
33 if (result.isAnswered) {
34 const text = result.text.trim()
35 if (text !== '' && !/^none\b/i.test(text)) {
36 await update($, flag, () => ({ text, at: Date.now() }))
37 $.ui.toast(`You should know: ${text}`, { timeoutMs: 15000 })
38 }
39 }
40
41 return shown
42 })
43
44 on('prompt.submit', async ($, e, next) => {
45 await update($, flag, () => null)
46
47 return next(e)
48 })
49
50 on('ui.render', { component: 'AbovePrompt' }, async ($, e, next) => {
51 const current = await read($, flag)
52 if (e.props.hasSurvey || current === null) {
53 return next(e)
54 }
55 const { Box, Button, Text } = $.ui.resolve(e)
56
57 return (
58 <Box>
59 <Text color="warning">You should know: {current.text} </Text>
60 <Button key="dismiss" label="Dismiss" onPress={() => update($, flag, () => null)} />
61 </Box>
62 )
63 })
64}
65types/index.d.ts 8 lines1export type Flag = { text: string; at: number }
2
3declare module 'claude-code' {
4 interface PluginState {
5 'you-should-know': { flag: Flag | null }
6 }
7}
8