Pitch: um hook que impede o agente de rodar pkill -f 'cat' e fechar todos os apps do Mac
Há alguns dias publiquei aqui o bulkhead, um conjunto de hooks que impede sessões paralelas do Claude Code de se atrapalharem na mesma máquina. Desta vez trago um caso concreto que motivou a versão 0.3.5, publicada hoje.
No repositório do Claude Code há três issues abertas (anthropics/claude-code#100684, #90070 e #107867) com o mesmo padrão. O agente quer encerrar um único processo cat travado e executa pkill -f 'cat' -n -u 501. No macOS isso fecha praticamente todos os aplicativos abertos, porque -f compara o padrão com a linha de comando inteira e "cat" aparece em "/Applications". Para piorar, o pkill do BSD para de ler opções no primeiro argumento que não é opção, então o -n e o -u escritos depois do padrão viram mais padrões e não restringem nada. Na medição relatada na #107867, feita com pgrep, a forma com as opções depois do padrão casa com 122 processos, e a forma com as opções antes casa com um só.
A regra nova, broad-pattern, bloqueia pkill -f quando o padrão alcança um aplicativo de desktop (um processo dentro de um pacote .app) ou 8 ou mais processos fora da árvore da própria sessão. Os processos que a sessão iniciou não contam, então matar o seu próprio cat continua funcionando. Quando bloqueia, o agente recebe o motivo e a orientação de usar o PID, e pgrep -fl '<padrão>' para ver o que o padrão alcançaria. Diferente das outras regras do bulkhead, esta vale mesmo com uma única sessão aberta.
Dá para conferir sem instalar nada: npx claude-bulkhead explain -- "pkill -f 'cat' -n -u 501" mostra a decisão sem executar o comando. No Claude Code a instalação é /plugin marketplace add dooly6276/claude-bulkhead seguido de /plugin install bulkhead@bulkhead, e Codex, Gemini CLI, Copilot CLI, Cursor e opencode também são suportados. O projeto é MIT, em Node.js, sem dependências.
Repositório: https://github.com/dooly6276/claude-bulkhead
Sou o autor. Se vocês já viram o agente fazer algo parecido com outro comando, gostaria de saber qual foi.Há alguns dias publiquei aqui o bulkhead, um conjunto de hooks que impede sessões paralelas do Claude Code de se atrapalharem na mesma máquina. Desta vez trago um caso concreto que motivou a versão 0.3.5, publicada hoje.
No repositório do Claude Code há três issues abertas (anthropics/claude-code#100684, #90070 e #107867) com o mesmo padrão. O agente quer encerrar um único processo cat travado e executa pkill -f 'cat' -n -u 501. No macOS isso fecha praticamente todos os aplicativos abertos, porque -f compara o padrão com a linha de comando inteira e "cat" aparece em "/Applications". Para piorar, o pkill do BSD para de ler opções no primeiro argumento que não é opção, então o -n e o -u escritos depois do padrão viram mais padrões e não restringem nada. Na medição relatada na #107867, feita com pgrep, a forma com as opções depois do padrão casa com 122 processos, e a forma com as opções antes casa com um só.
A regra nova, broad-pattern, bloqueia pkill -f quando o padrão alcança um aplicativo de desktop (um processo dentro de um pacote .app) ou 8 ou mais processos fora da árvore da própria sessão. Os processos que a sessão iniciou não contam, então matar o seu próprio cat continua funcionando. Quando bloqueia, o agente recebe o motivo e a orientação de usar o PID, e pgrep -fl '<padrão>' para ver o que o padrão alcançaria. Diferente das outras regras do bulkhead, esta vale mesmo com uma única sessão aberta.
Dá para conferir sem instalar nada: npx claude-bulkhead explain -- "pkill -f 'cat' -n -u 501" mostra a decisão sem executar o comando. No Claude Code a instalação é /plugin marketplace add dooly6276/claude-bulkhead seguido de /plugin install bulkhead@bulkhead, e Codex, Gemini CLI, Copilot CLI, Cursor e opencode também são suportados. O projeto é MIT, em Node.js, sem dependências.
Repositório: https://github.com/dooly6276/claude-bulkhead
Sou o autor. Se vocês já viram o agente fazer algo parecido com outro comando, gostaria de saber qual foi.