SLOPSHOPPER

you-should-know

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

newbandtoastpromptmodel
v0.1.0no licenseupdated 2026-10-11KianaVega/KianaVega/mods/you-should-know
A shopper browsing a rack in a slop shop
README

Claude Code mods

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
ModWhat it doesExtra model usage
savvy-progressProgress bar above the prompt and a live list of subagents with model, tokens and rough costnone
tool-skinsIcons and colors for tool calls in seven themes, switch with /skin <name>none
you-should-knowA second, small model reads long answers and flags anything important you might missone small call per long answer
file-treePane showing files Claude reads and edits, green once committed (/file-tree)none
cache-taxHolds a prompt that would reload a cold cache and shows an estimate. /keepwarm pings before the cache expiresnone, except keep-warm pings
blast-radiusStops recursive deletes, git clean, hard resets and shows the affected files before you press Proceednone
reflectOffers to save corrections as a rule in CLAUDE.mdone small call when you save
terminal-browser/browse <url or file> opens a pane with a screenshot (kitty or Ghostty) and the page textnone
replay-theaterReplay button after a turn that steps through each edit as a diff (/replay)none

Notes

  • Settings such as trigger phrases, price tables, skins and which model the watcher uses are constants at the top of each hooks/register.tsx. Edit and reload.
  • Cost figures are estimates from a built-in price table.
  • terminal-browser is a viewer built from a headless screenshot and page text. It is not a live, clickable browser.
  • Mods run in the terminal and the desktop app's Code tab, not the VS Code extension.
Source 2 files
hooks/register.tsx 65 lines
1import { 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}
65
types/index.d.ts 8 lines
1export type Flag = { text: string; at: number }
2
3declare module 'claude-code' {
4  interface PluginState {
5    'you-should-know': { flag: Flag | null }
6  }
7}
8