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 defaultQuiet 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_SECseconds (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.