Make successful Git commits sound like yours.
Commit Sounds is a Raycast extension for macOS and Windows. Configure a sound once for a GitHub user or organization, and it plays after each matching local commit—without a background app, network call, or push required.
For example, one example-org rule covers every current and future repository with an origin such as https://github.com/example-org/project.git.
| Control | What it does |
|---|---|
| GitHub owner or organization rules | Play a unique sound for any GitHub user or organization. One organization rule covers all of its repos. |
| Audio source | Upload an MP3, M4A, WAV, AIFF, or AAC file, or provide a direct HTTPS audio link. Linked audio is downloaded once. |
| Volume | Set a separate playback volume for every owner and author sound. |
| Playback cooldown | Collapse rapid agent commits into one sound; the default is five seconds and can be changed in Raycast. |
| Author policy | Play sounds for every local commit author, or only a set of selected Git email addresses. |
| Author overrides | Give a specific Git author email its own sound while keeping the same organization rule. |
| GitHub connections | Optionally connect multiple GitHub identities, choose a default owner, and select organizations from each identity. |
The extension only reacts to commits made on the same computer. It cannot play a sound when a teammate commits from their machine or when a pull request is merged on GitHub.
afplay (included with macOS)Windows playback uses PowerShell's Windows media stack and runs from the Git for Windows post-commit hook. No additional audio player is required.
To find the owner for the repository you are in:
git config --get remote.origin.url
Examples:
| Remote | Rule to add |
|---|---|
https://github.com/octocat/Hello-World.git | octocat |
git@github.com:example-org/project.git | example-org |
After saving the first rule, the extension asks to set Git's global core.hooksPath and installs a post-commit hook. Your next successful local commit in a matching repository plays the sound.
You never need one rule per repository. Add the organization once:
example-org
That matches all current and future github.com/example-org/* repositories automatically.
You can add an organization manually with Add GitHub Owner Rule—no GitHub connection or employer permission is needed. Or connect GitHub and use Add Organization Rule to select an organization from your account. The organization picker requests read:org to show private memberships; disconnect and reconnect an existing account if it was connected before that permission was added.
Open Commit Sound Controls → Commit Authors.
Author matching uses the author email on the commit, not the GitHub account currently signed into Raycast. Check the email Git will use with:
git config --get user.email
| Raycast command | Use it for |
|---|---|
| Commit Sound Controls | Enable or disable playback, manage rules, test audio, manage connected GitHub accounts, author policy, and global-hook health. |
| Add Commit Sound | Quickly create an owner or organization rule with an audio file/link and volume. |
| Connect GitHub Account | Add a separate, optional GitHub OAuth identity. Existing sound rules stay unchanged. |
The extension writes its own local data under:
~/.git-commit-sounds/
This includes the configuration, copied audio files, and a small global Git hook. The hook:
origin remote;The hook never reads repository content, commit diffs, or Git credentials. It does not use a daemon, so there is no idle CPU or RAM cost.
Git uses one core.hooksPath. If a repository uses a local Husky path, it overrides the global Commit Sounds hook. Add this bridge as .husky/post-commit to make both run:
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
"$HOME/.git-commit-sounds/hooks/post-commit"
Make it executable:
chmod +x .husky/post-commit
Commit the bridge if the whole team wants the behavior, or place .husky/post-commit in that checkout's .git/info/exclude to keep it personal and local-only.
git config --get remote.origin.url.git show -s --format=%ae.git config --show-origin --get-all core.hooksPath. Use the Husky bridge above when a repository-local hook path is present.The controls list marks a missing file. Edit the rule and choose or link the sound again.
Commit Sounds does not overwrite another global core.hooksPath. Keep that hook manager and merge the contents of ~/.git-commit-sounds/hooks/post-commit into its post-commit behavior.
npm install
npm run lint
npm run build
npm run dev