Blocks a few destructive shell commands (rm -rf on home or root, force-push, hard reset) before they run.

A Ladakh road trip above the Claude prompt. A Royal Enfield rides from Leh to Khardung La as your conversation's context window fills up.
/ride hides or shows it. Terminals that cannot draw images get a text track instead.Type this at the prompt of a terminal Claude Code session:
/plugin install ladakh-ride --marketplace shailendergoud2907/ladakh-ride
Answer y to add the marketplace, then pick the user scope.
claude plugin validate .
claude plugin test .
| Mod | What it does | Install |
|---|---|---|
| ride-status | Status line shows context used as altitude | /plugin install ride-status --marketplace shailendergoud2907/ladakh-ride |
| safe-ride | Blocks rm -rf on home or root, plain force-push, git reset --hard | /plugin install safe-ride --marketplace shailendergoud2907/ladakh-ride |
| tool-log | Side panel of tool calls, /tool-log | /plugin install tool-log --marketplace shailendergoud2907/ladakh-ride |
| done-chime | Chime and toast after a turn of 30 s or more (sound plays on macOS) | /plugin install done-chime --marketplace shailendergoud2907/ladakh-ride |
| limit-alert | Toast at 80% and 95% of the 5-hour limit | /plugin install limit-alert --marketplace shailendergoud2907/ladakh-ride |
| mba-voice | Adds a short working-style note to the system prompt | /plugin install mba-voice --marketplace shailendergoud2907/ladakh-ride |
| ladakh-tips | /ladakh prints a riding tip | /plugin install ladakh-tips --marketplace shailendergoud2907/ladakh-ride |
| ladakh-theme | Ladakh Dusk and Ladakh Glacier colour themes, pick with /theme | /plugin install ladakh-theme --marketplace shailendergoud2907/ladakh-ride |
| mba-shortcuts | /mba-shortcuts:case, :pitch, :redteam, :memo | /plugin install mba-shortcuts --marketplace shailendergoud2907/ladakh-ride |
/focus 25 now lives inside ladakh-ride and shows in the band.
hooks/register.tsx 19 lines1import type { Register } from 'claude-code'
2
3const BLOCKED: [RegExp, string][] = [
4 [/\brm\s+(-[a-z]*r[a-z]*f|-[a-z]*f[a-z]*r)[a-z]*\s+(\/|~|\$HOME)(\s|\/?$)/i, 'rm -rf on / or your home folder'],
5 [/\bgit\s+push\b[^\n;|&]*(--force\b|\s-f\b)(?![^\n;|&]*--force-with-lease)/i, 'a plain force-push (use --force-with-lease)'],
6 [/\bgit\s+reset\s+--hard\b/i, 'git reset --hard'],
7 [/\bmkfs(\.\w+)?\b|\bdd\s+[^\n]*of=\/dev\//i, 'a disk-wiping command'],
8]
9
10export const register: Register = on => {
11 on('tool.call', { tool: 'Bash' }, ($, e, next) => {
12 const hit = BLOCKED.find(([re]) => re.test(e.command))
13
14 return hit
15 ? { deny: `${$.plugin.name}: blocked ${hit[1]}. Run it yourself in a terminal if you really mean it.` }
16 : next(e)
17 }).catch(($, e, next) => (next.called ? next(e) : { deny: `${$.plugin.name}: its guard failed, so the command was held.` }))
18}
19