A hook should be a function call, not a shell A developer moved thirteen of the shell-script hooks in workkit, a workflow kit for Claude Code, into a single plugin module loaded once per session, cutting each hook fire from about 90 ms at the median to near zero on an M1 Max. The same update routes the agent's GitHub bookkeeping through a workkit-agent[bot] GitHub App and replaces assignee-based claims with an agent:claimed label. A separate fix in the omega framework caps the Firebase emulator's auth-trigger worker pool with a mapLimited helper after a 91-user seed hit 52 workers and ran out of memory on a 7 GB CI runner. This one covers October 14 to 21. Most of the week went into one idea: the small scripts that guard my Claude Code sessions should not each start a shell. The rest went into giving the agent its own name on GitHub, and into a framework bug that only showed up on a small CI runner. workkit https://github.com/itw-creative-works/workkit is my workflow kit for Claude Code: GitHub issues as the work list, labels as the pipeline, and hooks that enforce the rules. A hook is a small program Claude Code runs on an event, like a prompt, a file edit, or a shell command. It can add context, warn, or block the action. Until this week every hook was a shell script. Each fire went through a loader script, which started bash, which usually called jq to read the event, and often node for the real logic. That is three or four processes for one check. The count adds up fast. Before version 0.79, every prompt I sent started four shell hooks. Every file edit started four more after the write. Session start ran four, and every subagent spawn ran three. So I timed it. On my M1 Max, with other work running and the machine busy, one fire routed through the loader took about 90 ms at the median. A bare bash, jq and node chain alone took about 38 ms. A function call inside a process that is already running rounds to zero. Claude Code can now load a plugin module once per session and call it on each event. workkit 0.79 moved thirteen hooks into one such module, and fifteen live there now. My personal hooks did the same in my dotfiles: seven of them, including the ones that stamp the time and check each reply's format, run as one module. The design rule that made the move safe: only one file, register.js , touches the host's interface. It gathers the facts a hook needs a file's text, a git answer, a stored marker , and hands them to plain functions in hooks/mods/