This page covers macOS. Running Proximate on Windows? See Advanced Integration Recipes for Windows — the commands are different.
Before You Start
Create an integration in Proximate first (see the Setup guide). With the platform toggle set to macOS, copy the Success command — it looks like this:YOUR_ID below, use the ID from your own copied command. The status at the end of the URL (success, warning, error, or none) sets the badge color.
Two Patterns You’ll Reuse
Most command-line tools don’t have a built-in “when I’m done” hook, so you run the Proximate command right after them. There are two ways to do it. Just tell me when it’s done — chain with&&:
if so a failure shows a red badge:
Claude Code CLI
Claude Code has a native Stop hook that fires whenever Claude finishes responding. The short version: add this to~/.claude/settings.json.
~/.claude/settings.json
Full Claude Code walkthrough
See the complete step-by-step guide, including how to verify the hook with
/hooks.Docker CLI
Docker has no completion hook, so chain the command after a longbuild or compose up:
docker compose up --build, docker push, or any other long-running Docker command.
FFmpeg
Get a badge the moment a long encode finishes:Gradle
Chain the command after your Gradle task:Homebrew
Longbrew upgrade runs are a perfect fit:
Jest
The quick way is to chain it after your test command:proximate-reporter.js in your project:
proximate-reporter.js
jest.config.js:
jest.config.js
make
Chain the command after your build:Makefile as the last step of a target:
n8n (Local)
In a self-hosted n8n, add an Execute Command node as the last step of your workflow, so it fires when the workflow finishes.The Execute Command node is disabled by default in n8n v2.0+ and isn’t available on n8n Cloud. If you run n8n in Docker, the command executes inside the container, not on your Mac — run n8n directly on the machine where Proximate is installed.
pytest
Add aconftest.py to your project (or extend an existing one) using pytest’s native pytest_sessionfinish hook, which runs after the whole test session and receives the exit status (0 means everything passed):
conftest.py
pytest run ends with a green badge on pass, red on failure — no shell chaining needed.
Rust
Chain the command aftercargo build, cargo test, or cargo run:
Cargo’s
build.rs runs before compilation, so it’s not the place for a finish notification — chaining in the shell is the right approach.Terraform
Get a badge when a longapply completes:
Xcode CLI
From the command line (xcodebuild), use the standard pattern:
Add a post-action
Expand Build (or Test) in the left list, select Post-actions, then click + → New Run Script Action.
Scheme post-actions run after the phase completes but don’t branch on success or failure, so this is best used as a “build finished” (neutral or success) signal rather than a pass/fail one.
A Couple of Edge Cases
success && … || errorcan mislead. With the one-linecmd && open success || open errorform, if theopen successstep itself fails, theerrorcommand runs too. Theif … then … else … fiform avoids this, which is why the recipes above prefer it whenever pass/fail matters.- Keep the quotes. The
&in the URL is meaningful to your shell, so the command must stay inside double quotes (open "…"). The card copies it that way already.