Exécutez ceci exactement comme écrit — les arguments vont sur la deuxième ligne du heredoc, jamais sur la commande elle-même, sur une seule ligne, et seulement les mots quiet normal loud mute unmute --global approve on off :
bash "${CLAUDE_PLUGIN_ROOT}/scripts/hwip-mode.sh" <<'HWIP_MODE_INPUT'
${CLAUDE_PROJECT_DIR}
$ARGUMENTS
HWIP_MODE_INPUT
La sortie avec le code 2 signifie un mauvais argument — montrez à l'utilisateur la ligne d'utilisation qu'elle a imprimée. Sinon, rapportez les lignes d'état dans vos propres mots :
NOTIFICATIONS: muted→ les hooks Stop et Ask sont silencieux ici ; les outilshwip_*fonctionnent toujours mais ne sont pas appelés sauf si l'utilisateur le demande. Mute l'emporte sur tous les niveaux.PUSH MODE: quiet→ uniquement les pushs haute priorité (bloqueurs,highPush Signal) pendant que l'utilisateur est au terminal, plus un push de complétion une fois qu'il s'est absenté (HWIP_AWAY_SEC, par défaut 300 s) ou chaque fois que le paneau tmux de cette session n'est pas à l'écran. Le réglage par défaut.PUSH MODE: normal→ un push à chaque tour qui a effectué un vrai travail, silencieux sur les tours en lecture seule ; les marqueurs Push Signal décident des cas limites.PUSH MODE: loud→ chaque tour pousse, en ignorantskip.- La parenthèse indique d'où vient le niveau :
ce projet,global par défaut(défini avec--global, hérité par les projets sans leur propre niveau), ou le niveau par défaut intégré. Un niveau de projet l'emporte toujours sur le niveau global. APPROVAL GATE: on|off→ indique si les commandes Bash difficiles à annuler (rm -rf, forcer le push, déploiement en production, SQL destructeur) attendent une approbation dans ce projet. Au terminal, l'invite de permission de Claude Code demande ; à distance, en REMOTE, ou lorsque la présence ne peut pas être lue, c'est le téléphone de l'utilisateur qui le fait.on, mais inactif quand muet— un projet muet n'a personne à qui demander, donc rien n'est retenu.SCOPE: …→ les niveaux, le muet, la porte d'approbation et le mode automatique appartiennent au répertoire du projet, pas à la session : une deuxième session Claude dans le même répertoire les partage. Dites-le quand l'utilisateur en change un.AUTO MODE: …→ une session/hwip-autoest en cours avec ce budget restant.off (une session … expirée a laissé son état derrière — effacé)signifie qu'une session a planté.LAST PUSH: …→ l'enregistrement par la CLI de son dernier push échoué (hwip notifyl'écrit, un bon push le supprime). Les hooks masquent les erreurs de notify, donc cette ligne est la façon dont « silencieux, rien à envoyer » diffère de « chaque push échoue ». Relatez la cause et sa correction telles que données (par exemple, une clé rejetée →hwip login, aucune application connectée → connectez-vous à l'application Hwip sur un iPhone ou un téléphone Android) ;hwip verifyen a plus.Hwip: <périphérique> a changé sa clé de chiffrement — …→ pas un échec : l'un des périphériques de l'utilisateur liste désormais une autre clé de chiffrement que celle que cette machine avait épinglée, et la nouvelle clé est de confiance. Montré une fois, puis effacé. Relatez-le comme tel — une application réinstallée ou un nouveau téléphone l'explique ; si ce n'est rien de tout cela,hwip trustmontre les empreintes à comparer avec l'application.
Les questions (hwip_ask, le miroir de AskUserQuestion) poussent sous tous les niveaux sauf le muet.
Le contexte qu'une question scellée transporte (le diff git masqué de la session et les dernières lignes du terminal) n'est pas un niveau ici. Si l'utilisateur demande d'arrêter de l'envoyer, dirigez-le vers hwip ask-context off (ce projet) ou hwip ask-context off --global (chaque projet) ; hwip ask-context montre lequel s'applique.
Si la sortie se termine par un bloc === Hwip rules — replace the Hwip rules from session start ===, l'état a changé et les règles que le hook SessionStart a données à cette session sont obsolètes : suivez ce bloc à la place pour le reste de la session, y compris après compaction. Session rules unchanged signifie que le changement ne les a pas touchées (par exemple, normal ↔ loud) ; conservez celles que vous avez. approve ne change jamais les règles. Une ligne could not refresh signifie que le changement s'applique toujours mais que les règles ne se sont pas mises à jour — dites à l'utilisateur qu'une nouvelle session les prendra en compte.