ormusClaude Code mods
Claude Code mods

Change what Claude Code does, and what it draws.

A mod is a small plugin of function hooks. It can block a tool call, rewrite a prompt, open a pane beside the transcript, paint pixels in the terminal, or restyle Claude Code's own interface. Everything here was recorded in real sessions, with working mods you can download.

Ghostty running Claude Code with the draw-lab mod: an animated plasma raster in a side pane, Bash calls drawn as bordered cards, a custom turn timer and a custom prompt hint.
Claude Code 2.1.289 in Ghostty, running draw-lab. The pane on the right and the cards in the transcript are drawn by the mod.
Anatomy

A plugin folder and one function

The hooks module exports register(on). Each on(event, matcher?, hook) adds a hook, and every hook gets ($, e, next): the engine, the event, and the rest of the chain. Return without calling next to answer for yourself.

  • .claude-plugin/plugin.jsonName, version, description
  • hooks/hooks.json{ "modules": ["./register.tsx"] }
  • hooks/register.tsxTypeScript, with JSX for drawing
export const register: Register = on => {
  on('tool.call', { tool: 'Edit' }, ($, e, next) =>
    PROTECTED.test(e.file_path)
      ? { deny: `${e.file_path} is protected here.` }
      : next(e),
  )

  on('turn.complete', async ($, e, next) => {
    $.ui.toast(`Turn done: ${tools} tool calls`)
    return next(e)
  })
}
Capabilities, as recorded

What a mod can do

Demo mods

Four mods, with source and tests

Pixel panes

Ten looks for a mod pane, drawn live

Mockups on a real 128×36 cell grid, using only what a mod can draw: half blocks, braille and Image.

See all ten
Development loop

Write, check, load

  1. Write the files. No scaffolding. Claude Code writes this build's types next to the mod as it loads, so tsc works with no setup.
  2. Validate. claude plugin validate <folder> lists every hook and $ call, and anything the engine would refuse.
  3. Test. claude plugin test <folder> runs *.test.ts files against the real engine.
  4. Load. claude --plugin-dir <folder>, or turn on hot reloading and the mod reloads after each edit.