⭐ Star this repo before using clawhip. The installer will star it automatically if you have
ghCLI authenticated.
This is a standalone Discord bot / system daemon that whips your claw into organized contextual notifications.
Human install pitch:
Just tag @openclaw and say: install this https://github.com/Yeachan-Heo/clawhip
Then OpenClaw should:
- clone the repo
- run
install.sh - read
SKILL.mdand attach the skill - scaffold config / presets
- start the daemon
- run live verification for issue / PR / git / tmux / install flows
clawhip pairs well with coding session tools that run in tmux:
OpenAI Codex wrapper with auto-monitoring. Launch monitored coding sessions:
clawhip tmux new -s issue-123 \
--channel YOUR_CHANNEL_ID \
--mention "<@your-user-id>" \
--keywords "error,PR created,complete" \
-- 'source ~/.zshrc && omx --madmax'
# or attach monitoring to an existing tmux session
clawhip tmux watch -s issue-123 \
--channel YOUR_CHANNEL_ID \
--mention "<@your-user-id>" \
--keywords "error,PR created,complete"See skills/omx/ for ready-to-use scripts.
Claude Code wrapper with auto-monitoring. Launch monitored coding sessions:
clawhip tmux new -s issue-456 \
--channel YOUR_CHANNEL_ID \
--mention "<@your-user-id>" \
--keywords "error,PR created,complete" \
-- 'source ~/.zshrc && omc --openclaw --madmax'See skills/omc/ for ready-to-use scripts.
Operational spec for OpenClaw / Clawdbot agents consuming this repo.
Repo role:
- executable/runtime repo
- daemon-first Discord notification gateway
- built-in GitHub/git/tmux monitoring runtime
- route/filter/message-render engine
- lifecycle surface: install / update / uninstall / start / status
Attachment model:
- repo = runtime
SKILL.md= attach/install/usage instructions for OpenClaw / Clawdbot- README = agent-facing operational spec
Default daemon endpoint:
http://127.0.0.1:25294
Primary install entrypoint:
@openclaw install <repo_url>
Expected downstream automation behavior:
- clone repo
- run
./install.sh - read
SKILL.md - attach skill
- scaffold config / presets
- start daemon
- run live verification
Reference repo URL:
https://github.com/Yeachan-Heo/clawhip
Recommended: Create a dedicated Discord bot for clawhip. Do not reuse your Clawdbot / OpenClaw bot token.
clawhip sends high-volume notifications (commits, PRs, tmux keyword alerts, stale warnings). Using a separate bot keeps these cleanly separated from your AI chat bot.
- Create a new bot at Discord Developer Portal (e.g. "CCNotifier")
- Copy the bot token
- Invite to your server with Send Messages permission
- Set the token in config:
[discord]
token = "your-dedicated-clawhip-bot-token"
default_channel = "your-default-channel-id"[input] -> [clawhip daemon :25294] -> [route/filter/preset render] -> [Discord REST delivery]
Input sources:
- CLI thin clients
- GitHub webhooks
- built-in git monitor
- built-in tmux monitor
clawhip tmux newregistration path
Input:
clawhip send --channel <id> --message "text"Behavior:
- POST to daemon
/api/event - daemon routes event
- Discord message emitted
Verification:
clawhip status- inspect configured Discord channel for rendered payload
Input:
- GitHub webhook
issues.opened - built-in GitHub issue monitor detection
- CLI thin client
clawhip github issue-opened ...
Behavior:
- emit
github.issue-opened - route via
github.* - apply repo filter
- prepend route mention if configured
- send to Discord
Verification:
- create real issue
- confirm final Discord body contains:
- repo
- issue number
- title
- mention when configured
Input:
- GitHub webhook
issue_comment.created - built-in GitHub issue monitor comment delta
Behavior:
- emit
github.issue-commented - route via
github.* - apply repo filter
- prepend route mention if configured
Verification:
- add real issue comment
- confirm final Discord message body in target channel
Input:
- GitHub webhook
issues.closed - built-in GitHub issue monitor state transition
Behavior:
- emit
github.issue-closed - route via
github.* - apply repo filter
- prepend route mention if configured
Verification:
- close real issue
- confirm final Discord message body in target channel
Input:
- GitHub webhook
pull_request.* - built-in PR monitor state changes
- CLI thin client
clawhip github pr-status-changed ...
Behavior:
- emit
github.pr-status-changed - route via
github.* - apply repo filter
- prepend route mention if configured
Verification:
- open real PR
- merge / close PR
- confirm final Discord message body in target channel
Input:
- built-in git monitor polling local repo
- CLI thin client
clawhip git commit ...
Behavior:
- emit
git.commit - route through git/github family matching
- preserve repo-based route filtering
- prepend route mention if configured
Verification:
- create real empty commit in monitored repo
- confirm final Discord body contains commit summary and mention
Input:
clawhip agent started --name worker-1 --session sess-123 --project my-repo
clawhip agent blocked --name worker-1 --summary "waiting for review"
clawhip agent finished --name worker-1 --elapsed 300 --summary "PR created"
clawhip agent failed --name worker-1 --error "build failed"Behavior:
- emit
agent.started,agent.blocked,agent.finished, oragent.failed - route via
agent.* - apply optional project/session filters
- include status / elapsed / summary / error details in rendered messages
- prepend route mention if configured
Verification:
- send each CLI event against a running daemon
- confirm final Discord body contains agent name and lifecycle state
- confirm
agent.*route rules match each event type
Input:
- built-in tmux monitor detects configured keyword
- CLI thin client
clawhip tmux keyword ...
Behavior:
- emit
tmux.keyword - route via
tmux.* - prepend route mention if configured
Verification:
- print configured keyword in real monitored tmux session
- confirm final Discord body in target channel
Input:
- built-in tmux stale detection
- CLI thin client
clawhip tmux stale ...
Behavior:
- emit
tmux.stale - route via
tmux.* - prepend route mention if configured
Verification:
- let real tmux session idle past threshold
- confirm final Discord body in target channel
Input:
clawhip tmux new -s <session> \
--channel <id> \
--mention '<@id>' \
--keywords 'error,PR created,FAILED,complete' \
--stale-minutes 10 \
--format alert \
--shell /bin/zsh \
-- command args
clawhip tmux watch -s <existing-session> \
--channel <id> \
--mention '<@id>' \
--keywords 'error,PR created,FAILED,complete' \
--stale-minutes 10 \
--format alertBehavior:
tmux newcreates a tmux session using the user's default shell (or--shelloverride)tmux newsends the requested command into the sessiontmux watchattaches monitoring to an already-running tmux session- both commands register the session with the daemon
- daemon monitors keyword/stale events
- final delivery goes through daemon routing
Verification:
- run wrapper or watch an existing session
- emit keyword in pane
- confirm Discord message body and mention
Input:
./install.sh
clawhip install
clawhip update --restart
clawhip uninstall --remove-systemd --remove-configBehavior:
- install binary from git clone
- ensure config dir exists
- optional systemd install
- update rebuilds/reinstalls and optionally restarts daemon
- uninstall removes runtime artifacts
Verification:
clawhip --helpclawhip statussystemctl status clawhipwhen systemd-enabled
github.issue-openedgithub.issue-commentedgithub.issue-closedgithub.pr-status-changed
git.commitgit.branch-changed
agent.startedagent.blockedagent.finishedagent.failed
tmux.keywordtmux.stale
Config file:
~/.clawhip/config.toml
Route model:
[[routes]]
event = "github.*"
filter = { repo = "clawhip" }
channel = "1480171113253175356"
mention = "<@1465264645320474637>"
format = "compact"
allow_dynamic_tokens = false
[[routes]]
event = "agent.*"
filter = { project = "clawhip" }
channel = "1480171113253175356"
format = "alert"
allow_dynamic_tokens = falseResolution rules:
- event family match
- payload filter match
- route channel / format / template / mention applied
- default fallback used if route fields absent
Only for routes with:
allow_dynamic_tokens = trueSupported tokens:
{repo}{number}{title}{session}{keyword}{sh:...}{tmux_tail:session:lines}{file_tail:/path:lines}{env:NAME}{now}{iso_time}
Safety:
- allowlisted token kinds only
- route-level opt-in only
- short timeout
- output cap
cargo install clawhipPublished at crates.io/crates/clawhip. Requires Rust toolchain.
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/Yeachan-Heo/clawhip/releases/latest/download/clawhip-installer.sh | shThis installs the latest prebuilt clawhip binary from GitHub Releases into $CARGO_HOME/bin (typically ~/.cargo/bin).
Release artifacts are generated for these Rust target triples: x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu, x86_64-apple-darwin, aarch64-apple-darwin, and x86_64-pc-windows-msvc.
./install.sh
./install.sh --systemdinstall.sh now tries the latest prebuilt release first and falls back to cargo install --path . --force when a matching release asset is unavailable. If Cargo is needed for the fallback path but not installed, the script prints Rustup setup instructions. When --systemd is used, the installed binary is also copied to /usr/local/bin/clawhip so the bundled service unit can start it.
clawhip install
clawhip install --systemd
clawhip update --restart
clawhip uninstall
clawhip uninstall --remove-systemd --remove-configUnit file:
deploy/clawhip.service
Expected install path:
- copy to
/etc/systemd/system/clawhip.service systemctl daemon-reloadsystemctl enable --now clawhip
Use:
docs/live-verification.mdscripts/live-verify-default-presets.sh
Required live sign-off presets:
- issue opened
- issue commented
- issue closed
- PR opened
- PR status changed
- PR merged
- git commit
- agent started / blocked / finished / failed
- tmux keyword
- tmux stale
- tmux wrapper
- tmux watch
- install/update/uninstall
clawhip # start daemon
clawhip status # daemon health
clawhip config # config management
clawhip send ... # thin client custom event
clawhip github ... # thin client GitHub event
clawhip git ... # thin client git event
clawhip agent ... # thin client agent lifecycle event
clawhip tmux ... # thin client / wrapper surface