O problema é (provavelmente) que o Chef não esteja executando o comando como o usuário errado, mas que o shell que está executando o seu script não é um shell de login. Isso significa que algumas variáveis de ambiente (como HOME) não serão configuradas da maneira esperada, levando o npm a tentar gravar arquivos no lugar errado.
O problema é discutido na edição CHEF-2288. Enquanto isso permanece excelente, você pode tentar adicionarHOME=/home/hubot-user
no seu bloco de código, antes que o npm seja invocado.