SLOPSHOPPER

session-label

After the first prompt, Haiku names the session and a color is picked, so ClaudePulse can show them.

newpromptmodel
A shopper browsing a rack in a slop shop
README

claude-mods

Small Claude Code mods.

/plugin marketplace add PhilRoli/claude-mods

train-pause

For TrainTracker. Shortly before your tracked train arrives (default: 10 minutes), every session is told to stop starting new work, leave the code in a consistent state and report what's done and what remains, so you can switch locations or turn off wifi without cutting a session off mid-task.

/plugin install train-pause@claude-mods

Requires TrainTracker (≥ 1.3.0), which writes the arrival time to ~/.traintracker/arrival.json ({"arrival": <epoch seconds, delay included>}) while a train is tracked. Idle sessions pick up the instruction on their next prompt; the status line shows a countdown. Change the window with WRAP_UP_MINUTES in plugins/train-pause/hooks/register.ts.

session-limit-pause

Same idea for usage limits: once the 5-hour or weekly window is ≥ 95% used, the session is told to wrap up. A window that resets within 5 minutes is ignored. Needs a subscription (the engine reports no limits otherwise).

/plugin install session-limit-pause@claude-mods

Tune with WRAP_UP_PERCENT and IGNORE_IF_RESET_WITHIN_MIN in plugins/session-limit-pause/hooks/register.ts.

nosleep

/nosleep keeps the Mac awake with the lid closed (pmset -a disablesleep 1) and restores sleep when the session ends. /nosleep on|off sets it explicitly; the status line shows lid-closed awake while active.

/plugin install nosleep@claude-mods

macOS only. One-time setup so sudo doesn't prompt:

echo "$USER ALL=(root) NOPASSWD: /usr/bin/pmset -a disablesleep 1, /usr/bin/pmset -a disablesleep 0" | sudo tee /etc/sudoers.d/nosleep >/dev/null && sudo chmod 0440 /etc/sudoers.d/nosleep && sudo visudo -cf /etc/sudoers.d/nosleep

A hard-killed session leaves sleep disabled until the next session starts (or sudo pmset -a disablesleep 0).

session-label

For ClaudePulse. After your first prompt, Haiku gives the session a short title (/rename) and a color is picked from the session id (/color), so the menu bar app can show both.

/plugin install session-label@claude-mods
Source 1 files
hooks/register.tsx 28 lines
1import type { Register } from 'claude-code'
2
3const COLORS = ['red', 'blue', 'green', 'yellow', 'purple', 'orange', 'pink', 'cyan']
4
5const SYSTEM = 'Title a coding session from its first prompt in 2-4 words. Reply with the title only.'
6
7const pick = (seed: string) => COLORS[[...seed].reduce((h, c) => (h * 31 + c.charCodeAt(0)) >>> 0, 7) % COLORS.length]
8
9export const register: Register = on => {
10  let isLabelled = false
11
12  on('prompt.submit', async ($, e, next) => {
13    const entered = await next(e)
14    if (isLabelled || e.origin.kind !== 'composer' || e.text.startsWith('/')) return entered
15    isLabelled = true
16
17    // Not awaited: the commands queue until the session is idle.
18    ;(async () => {
19      const r = await $.model.complete({ model: 'haiku', system: SYSTEM, prompt: e.text.slice(0, 2000), maxTokens: 30 })
20      const name = r.isAnswered ? r.text.trim().replace(/^["']|["']$/g, '').slice(0, 60) : ''
21      if (name) await $.command.run({ command: 'rename', args: name })
22      await $.command.run({ command: 'color', args: pick(await $.session.id()) })
23    })().catch(err => $.ui.log(`session-label: ${err}`))
24
25    return entered
26  })
27}
28