Hwip Docs
Claude Code Plugin

Mute & Push Mode

Dial how much Hwip pushes, per project or machine-wide.

Pushes fire for every Claude Code session, not only ones launched with hwip cc — that command is the remote-control bridge, not the notification switch.

/hwip-mode              Show current state (mute + push mode, where it came from, last failed push)
/hwip-mode mute         Disable all notifications for this project
/hwip-mode unmute       Re-enable them

/hwip-mode quiet        Only high-priority pushes, plus completions while you're away  ← the default
/hwip-mode loud         Push on every turn
/hwip-mode normal       Push on every turn that did real work, quiet on reads

/hwip-mode approve on   Hold hard-to-undo Bash commands for approval in this project
/hwip-mode approve off  Let them run as usual  ← the default

Quiet is the default

An install with no dial pushes only on high-priority signals, so a long session does not turn into a stream of per-turn notifications.

What still reaches you:

  • Questions. The agent asking you something is never suppressed.
  • The completion push once you have stepped away from the terminal: no input for HWIP_AWAY_SEC seconds (default 300), or no tmux client attached.
  • For a session you drove from your phone, the server's completion push after five minutes idle.

If you would rather hear about every working turn, run /hwip-mode normal.

Machine-wide defaults

Add --global to quiet, normal or loud to set the default for every project that has no dial of its own. A per-project dial always outranks it, so /hwip-mode normal opts a single project back into per-turn pushes and /hwip-mode normal --global does it everywhere.

The approval gate

/hwip-mode approve on holds rm -rf, force pushes, prod deploys and destructive SQL before they run. At the terminal (in tmux, with this session's pane on screen), Claude Code's own permission prompt asks. When you are away, in a phone-driven session, or when presence cannot be read, your phone gets Approve and Deny. No answer within 75 seconds is a Deny.

It is a speed bump against accidents, not a security boundary, and it is off while the project is muted.

Where the state lives

State lives in a file under ${XDG_STATE_HOME:-~/.local/state}/hwip, keyed by project directory, with pushmode-default holding the global one. It survives reboots and new sessions until you undo it.

Mute silences both hooks and CLI calls and overrides any push mode. Mute stays per-project by design, since a global mute could never be lifted for a single project.

A push that fails shows as LAST PUSH: in /hwip-mode and at session start — for example when no app is signed in, or when the push could not be encrypted so nothing was sent. See CLI → Commands for the full command reference.

On this page