Free · Open source · macOS · Windows · Linux

The notification layer
your AI agents
are missing.

syncfu is an always-on-top overlay that puts information on your screen the moment it matters — with action buttons so you can respond without context-switching. Built for developers running Claude Code, Cursor, or any AI agent that works in the background.

macOS / Linux
$ curl -fsSL https://raw.githubusercontent.com/Zackriya-Solutions/syncfu/main/install.sh | sh
terminal — zsh
$syncfu send "All 47 tests passing."
✓ notification sent

$syncfu send -t "Deploy?" \
$-a "yes:Ship it:primary" \
$-a "no:Cancel:danger" \
$--wait "Merge PR #42?"

⌛ waiting for user…
yes# exit 0
Build Completejust now
All 47 tests passing. Coverage 91%
🔀
Deploy?2s ago
Merge PR #42?
⚙️
Phase 3/51m ago
Integration tests passed. Starting E2E…
Binary size
~9MB
Style properties per notification
27
Platforms — macOS · Windows · Linux
3
Config files required
0
Command to install everything
1

Your AI agent is smarter
than the SaaS you pay for.

It just didn't have a way to reach you. Now it does.

🧠AI Agentintelligence
+
📄Your Rulesinstructions
+
🔔syncfudelivery
=
Replaces SaaSsmarter & free
SaaS toolCost/yrWhy the AI agent is smarter
StretchlyFreeAgent tracks work patterns, not a 25-min clock
Todoist reminders$28–60/yrAgent knows context, not just clock time
UptimeRobot Pro$84–648/yrAgent explains failures with deploy correlation
PagerDuty (solo)$252/yrAgent triages alerts with real intelligence
Awario Starter$468/yrAgent searches targeted sources, filters noise

Everything your agents need
to reach you.

Zero configuration. One HTTP POST. Your screen. That's the whole model.

Always-on-top overlay
Never steals focus — the overlay sits on top without interrupting your work. Follows you across macOS Spaces and monitors.
NSPanel · non-activating
--wait flag
CLI blocks until the user clicks an action button. SSE-backed. Action ID on stdout, structured exit codes. Perfect for agent decision gates.
exit 0 · 1 · 2
27 style properties
Full visual control per notification — colors, fonts, borders, radii, button styles, progress bar colors. Every card can look different.
--style-json '{…}'
Multi-monitor
Notifications follow your mouse cursor across displays. Wherever you're looking, syncfu finds you.
cursor-aware
Live progress bars
Update in-flight notifications with new progress values, body text, and actions. Bar or ring style. Ideal for long pipeline stages.
syncfu update <id>
Webhook callbacks
Action buttons POST to your callbackUrl when clicked. Enables closed-loop automation — no polling, no waiting at the terminal.
--callback-url

Block. Wait.
Respond.

The --wait flag turns syncfu into a human-in-the-loop checkpoint for any script or agent loop.

1
Agent sends notification with action buttons via CLI or HTTP POST. The card appears on your screen instantly.
2
CLI opens an SSE stream and blocks until you click an action, dismiss the card, or the timeout fires.
3
Action ID prints to stdout with a structured exit code — 0 for action, 1 for dismissed, 2 for timeout. Pipe it anywhere.
bash
# Gate a deployment on user approval
ACTION=$(syncfu send \
  -t "Deploy v2.3?" \
  -p high \
  -a "go:Ship it:primary" \
  -a "abort:Cancel:danger" \
  --wait --wait-timeout 120 \
  "All 47 tests green. Ready?")

if [[ "$ACTION" == "go" ]]; then
  echo "Deploying..." && ./deploy.sh
else
  echo "Aborted: $ACTION"
fi

# Exit codes:
#  0 = action clicked  → stdout: "go"
#  1 = dismissed (X)   → stdout: "dismissed"
#  2 = timeout         → stdout: "timeout"

Built for every background process
that needs your attention.

If it runs without you, syncfu can reach you when it's done — or when it needs you.

🤖AI agents & autonomous loops
Running a Claude Code loop or multi-agent workflow? Get notified on phase completion, test failures, or when the agent needs a human decision before a destructive action.
syncfu send -t "Agent done" \ -s claude --progress 1.0 \ "$(git diff --stat HEAD~1)"
Learn more →
🚀CI/CD & DevOps
GitHub Actions hooks, multi-stage deploy progress bars, SSL cert expiry warnings with "Renew" buttons, disk full alerts with priority escalation.
syncfu send -t "Build passed" \ -s github-actions -i rocket \ --action "pr:Open PR:primary" \ "All checks green"
Learn more →
🧪Development workflow
Notify when Rust rebuilds finish, tests pass, or your background tsc --noEmit finds type errors. No more Alt-Tab to check the terminal.
cargo test && \ syncfu send -t "Tests passed" \ -p low -i circle-check \ "All tests green"
Learn more →
🧠ADHD & personal focus
Medication reminders that stay on screen until confirmed. Pomodoro timers with live progress. Reminders that actually reach you — not a badge you'll never look at.
syncfu send -t "Medication" \ -p critical --timeout never \ -a "taken:Taken" --wait \ "Time to take your meds"
Learn more →
📊ML & data pipelines
Epoch-by-epoch training updates with live progress bars, dataset processing milestones, model evaluation results with Deploy/Reject action buttons.
syncfu send -t "Epoch 45/100" \ --progress 0.45 --group training \ "Loss: 0.023 | Val acc: 94.2%"
Learn more →
🏠Server & home automation
Health check dashboards, cron job completions, AWS billing threshold alerts, Home Assistant / Node-RED webhooks — any HTTP call can trigger an overlay.
curl -X POST localhost:9868/notify \ -H 'Content-Type: application/json' \ -d '{"sender":"ha","title":"Door open", "body":"Front door opened","priority":"high"}'
Learn more →

How syncfu compares
to tools you already know.

Honest, side-by-side comparisons. We tell you when the other tool is the better choice.

syncfu vsntfy

Push notifications vs desktop overlay

syncfuNative overlayAction buttons--wait blocking27 style props
ntfyMobile push19K+ starsPub-sub fan-outOne-liner API
Full comparison →
syncfu vsPushover

Paid push service vs free open source

syncfuFree / MITRich overlay UIProgress barsWebhook callbacks
PushoverMobile + desktop$5 one-timeReliable deliverySimple API
Full comparison →
syncfu vsPagerDuty

Enterprise incident mgmt vs solo dev alerts

syncfuFree foreverAI agent triageDesktop overlayCustom styling
PagerDutyOn-call rotationEscalation policies700+ integrationsMobile app
Full comparison →
syncfu vsUptimeRobot

Cloud monitoring vs context-rich alerts

syncfuContext-rich alertsAction buttonsAgent-poweredZero cost
UptimeRobot24/7 cloud pingsStatus pages10+ yr track recordSMS alerts
Full comparison →

One command.
Running in seconds.

SHA-256 checksum verification enforced by default. All platforms. No dependencies.

🍎macOS / Linux
curl -fsSL https://raw.githubusercontent.com/Zackriya-Solutions/syncfu/main/install.sh | sh
🪟Windows (PowerShell)
irm https://raw.githubusercontent.com/Zackriya-Solutions/syncfu/main/install.ps1 | iex
📦From source (Cargo)
cargo install --path cli
quick start
# Your first notification
syncfu send "Hello from syncfu!"

# With title, priority, icon
syncfu send -t "Build Complete" -p high -i circle-check "All 142 tests passing"

# With action buttons
syncfu send -t "PR #42" \
  --action "approve:Approve:primary" \
  --action "skip:Skip:secondary" \
  "Review requested"

# Block until user responds (--wait)
CHOICE=$(syncfu send -t "Approve?" \
  -a "yes:Yes" -a "no:No:danger" \
  --wait "Merge PR #42?")
echo "User chose: $CHOICE"  # "yes", "no", "dismissed", "timeout"

# Or use curl directly
curl -X POST localhost:9868/notify \
  -d '{"sender":"ci","title":"Done","body":"Ship it"}'

HTTP REST on :9868

For programmatic access from any language, syncfu exposes a local REST API — no SDK required. The CLI and HTTP API are two interfaces to the same daemon.

MethodPathDescription
POST/notifySend a notification. Returns {id}
POST/notify/{id}/updateUpdate progress, body, or actions of an in-flight notification
POST/notify/{id}/actionTrigger an action button (fires webhook, resolves waiters)
POST/notify/{id}/dismissDismiss a specific notification by ID
GET/notify/{id}/waitSSE stream — blocks until action clicked, dismissed, or timeout
POST/dismiss-allDismiss all active notifications at once
GET/healthServer status + active notification count
GET/activeList all active notifications as a JSON array

Because your agents
shouldn't have to wait
for you to check the
terminal.

Open source. MIT license. Built with Tauri v2, Rust, and React.

Install syncfuStar on GitHub