Presence Scheduler for Slack
Keep your Slack dot 🟢 green—on your schedule—even when you’re away
from the keyboard, switching between workspaces, or letting the laptop sleep.
Why would I need this?
Slack flips you to Away after ~10 minutes of real inactivity (or immediately
when a tab loses focus). That can break collaboration workflows—stand-ups in
threads, on-call handoffs, queue assignments—when teammates don’t know you’re
actually around.
Presence Scheduler solves that by sending a tiny, harmless activity “pulse”
exactly when your working hours say you should look available, and staying
silent the rest of the time.
Headline features
- 🕑 Schedule-aware – set multiple windows per workspace, each in its own
time-zone, Mon–Sun checkboxes, lunch gaps, or 24 × 7 “always-on”.
- 🖥️ Hidden tab, zero clutter – one background tab per Slack workspace, no
pop-ups, no keyboard hijacking, <0.1 % CPU when idle.
- 🌍 Multi-workspace – pulses every team you’ve authorised, even across
different Slack domains and grid instances.
- 🔒 Private – all schedule data lives in Chrome Storage; nothing leaves
your browser except the synthetic mouse/keyboard events Slack already trusts.
- ⏸️ One-click pause – un-tick the Enabled box in the popup to let Slack
idle naturally (great for PTO).
- 🔔 Server-side presence fallback (optional) – if you grant OAuth, our
server keeps you green every 5 minutes even when Chrome is closed.
Quick start
- Click Add to Chrome → Add extension.
- Open the purple “PS” icon – pin it for next time.
- Copy your Personal API token from the Presence Scheduler dashboard
(sk_live_…) → paste → Save.
- Hit Fetch schedules – you’ll see each workspace with a 🟢 dot.
- Customise windows in the web app; click Fetch again to sync.
That’s it! The dot stays green whenever at least one rule is active.
How does it work?
- Every two minutes a hidden tab dispatches
mousemove + keydown events
inside Slack’s DOM—exactly the same events you’d generate by touching the
mouse.
- No clipboard, file-system, or network permissions.
- Tab reuse: we open once, re-inject forever; if you close the tab we reopen
next tick.
- When the browser sleeps we resume automatically on wake.
Permissions explained
| Permission |
Why it’s needed |
host *.slack.com |
Inject the pulse script into your workspaces. |
| storage |
Save schedules, token, enabled flag. |
| alarms |
Fire a tick every 2 minutes & hourly schedule sync. |
| scripting (MV3) |
Run content/pulse.js in the hidden tab. |
Security & Privacy
- Source code is unobfuscated, audit anytime.
- No analytics, no trackers, no remote logging.
- API token is stored with Chrome’s built-in encryption (
chrome.storage.sync).
- Pulses never leave your browser; our server only runs if you opt-in to the
fallback feature.
Full policy: presencescheduler.com/privacy
Troubleshooting
- Dot still flips to Away
→ Check the popup: Enabled ✔? Token saved? Click Fetch schedules again.
- Infinite tabs?
→ Make sure Chrome “Tab Groups Collapse Freezing” isn’t force-closing the
hidden tab; disable that flag if you’re on Canary.
- Status never shows green on mobile
→ Mobile Slack has its own idle logic; you need the desktop/web client open
somewhere for presence to propagate.
See the FAQ: presencescheduler.com/faq
Changelog
- 1.2.0 Per-rule time-zone, red/green status dots in popup, MV3 upgrade.
- 1.1.0 Multi-workspace schedules, personal API token auth.
- 1.0.0 First public release.
Support
Email [email protected]
© 2025 Presence Scheduler