BrainSync Focus Timer
English | 日本語
A Pomodoro timer for engineers that estimates brain fatigue

Supported Editors
✅ Visual Studio Code (1.80.0 or later)
✅ Cursor (VS Code based)
BrainSync Focus Timer works in any VS Code compatible editor.
Features
- 🧠 30-minute focus + 5-minute break (customizable: 15–60 minutes)
- 📊 Automatic brain fatigue score estimation (calculated from your workload)
- 📈 Detailed statistics and reports (daily and weekly)
- 🔗 Integration with the BrainSync brain fatigue assessment
- ⚡ Lightweight and fast (runs in the background)
Usage
Basic Operation
- Start the timer: click the 🧠 icon in the status bar to open the menu and start the timer
- Focus: work with full concentration for 30 minutes
- Take a break: when the notification arrives, rest for 5 minutes
- Check your statistics: Command Palette > "BrainSync: Show Statistics"
Timer Cycle
🧠 Work (30 min) → ☕ Short break (5 min) → 🧠 Work → ☕ Break → 🧠 Work → ☕ Break → 🧠 Work → 🌿 Long break (15 min)
A long break is inserted after every 4 completed sessions.
Commands
| Command |
Description |
BrainSync: Start Timer |
Start the timer |
BrainSync: Pause/Resume Timer |
Pause or resume |
BrainSync: Reset Timer |
Reset the timer |
BrainSync: Skip Break |
Skip the break and start working |
BrainSync: Show Statistics |
Open the statistics view |
BrainSync: Take Brain Fatigue Assessment |
Open the assessment page |
BrainSync: Export Data |
Save your data as CSV |
BrainSync: Reset Statistics |
Clear statistics data |
BrainSync: Disable Do Not Disturb |
Manually turn off the work-session notification suppression (Do Not Disturb) |
BrainSync: Connect Slack |
Register a Slack token and enable the integration |
BrainSync: Disconnect Slack |
Disable the Slack integration and delete the token |
BrainSync: Settings |
Open the settings view |
Recommended Keyboard Shortcuts
No shortcuts are bound by default. We recommend the following:
{
"command": "brainsync.startTimer",
"key": "ctrl+alt+s",
"mac": "cmd+alt+s"
},
{
"command": "brainsync.pauseTimer",
"key": "ctrl+alt+p",
"mac": "cmd+alt+p"
},
{
"command": "brainsync.viewStats",
"key": "ctrl+alt+t",
"mac": "cmd+alt+t"
}
Brain Fatigue Score
Your brain fatigue is estimated on a 0–45 point scale from your work time and break patterns.
| Score |
Level |
Guidance |
| 🟢 0–10 |
Good |
Keep going as you are |
| 🟡 11–20 |
Caution |
Watch out for fatigue |
| 🟠 21–30 |
Warning |
Rest is recommended |
| 🔴 31–45 |
Danger |
Take a break right away |
For a detailed assessment, visit the BrainSync brain fatigue assessment.
Customization
You can customize the following under Settings > Extensions > BrainSync:
| Setting |
Default |
Range |
| Work duration |
30 min |
15–60 min |
| Short break duration |
5 min |
3–10 min |
| Long break duration |
15 min |
10–30 min |
| Sessions before a long break |
4 |
2–8 |
| Notifications |
ON |
ON/OFF |
| Sound |
ON (bell) |
bell/chime/silent |
| Volume |
50% |
0–100% |
| Auto-start break |
ON |
ON/OFF |
| Auto-start work |
OFF |
ON/OFF |
| Brain fatigue alert |
ON |
ON/OFF |
| Brain fatigue alert threshold |
21 points |
15–30 points |
| Do Not Disturb during work |
OFF |
ON/OFF |
| Slack integration |
OFF |
ON/OFF |
| Set Slack status automatically |
ON |
ON/OFF |
| Slack status text |
集中中 |
Any string |
| Slack status emoji |
:tomato: |
Emoji code |
Do Not Disturb during work: when enabled, VS Code notifications (toasts from other extensions, etc.) are automatically suppressed only during work sessions and restored on break or finish. Works on every OS with no setup.
While suppression is active, the bell icon on the right of the status bar shows a bell-slash. If suppression ever gets stuck, turn it off manually with BrainSync: Disable Do Not Disturb.
Slack Integration (Optional)
Automatically puts Slack into "focus mode" only during work sessions: notifications are snoozed (Do Not Disturb) and, optionally, your status is set to "🍅 Focusing". Everything is turned off automatically on break or finish. Works on every OS.
Setup
You need to obtain a Slack token and register it first.
- https://api.slack.com/apps → Create New App → From scratch (choose your workspace)
- OAuth & Permissions → add these two User Token Scopes (on the User side, not Bot):
dnd:write (snooze notifications)
users.profile:write (set status)
- Install to Workspace → copy the issued User OAuth Token (
xoxp-...)
- In VS Code / Cursor, run the command
BrainSync: Connect Slack and paste the token
- Turn on Slack integration in the settings
Behavior
- Work starts → Slack notifications are snoozed (DND) and your status is set automatically
- Slack shows the end time (until HH:MM) by itself (the status text does not include the time)
- Break, pause, or finish → everything is turned off automatically
- To disable the integration, run
BrainSync: Disconnect Slack
Status text: the default status text is the Japanese "集中中" ("Focusing"). You can change it to any string with the brainsync.slackStatusText setting.
Disconnecting and Reconnecting
Once registered, the token is kept in your OS secure storage and persists across restarts (you normally don't need to enter it again).
However, running BrainSync: Disconnect Slack deletes the token. To reconnect after disconnecting, you must register the token again with BrainSync: Connect Slack.
- You can reuse the same User OAuth Token (
xoxp-...) — disconnecting only removes it from the extension; the Slack app itself stays installed.
- If you no longer have the token, get it again from api.slack.com/apps → your app → OAuth & Permissions.
- If the token becomes invalid or expires, the extension disables the integration automatically and notifies you; register it again the same way afterwards.
Privacy
- The token is stored securely in VS Code's SecretStorage (your OS secure storage) and is never written to settings files or synced to other machines. The storage location depends on the OS (macOS: Keychain / Windows: Credential Manager / Linux: libsecret-based keyring).
- The only destination is the Slack API (
https://slack.com), and the only data sent is the snooze duration, the status text, and the token. Session statistics and what you work on are never sent.
- With the Slack integration disabled, the extension keeps working fully offline as before.
Installation
From the Marketplace (Recommended)
- Search for "BrainSync" in the VS Code / Cursor extension marketplace
- Click Install
From the Command Line
# VS Code
code --install-extension donut-service.brainsync-focus-timer
# Cursor
cursor --install-extension donut-service.brainsync-focus-timer
Privacy Policy
Data stored locally:
- Timer session records (start time, end time, completed/interrupted)
- Statistics (daily and weekly aggregates)
- Settings
- Slack token (only when using the Slack integration; kept in SecretStorage = your OS secure storage)
Timer data, statistics, and settings are stored in VS Code's Global State and never leave your computer. The Slack token is never written to plain-text settings files or synced to other machines.
Data sent externally:
- When opening the assessment page, UTM parameters (referrer information) are appended to the link
- Only when the Slack integration is enabled, the snooze duration, status text, and token are sent to the Slack API (
https://slack.com)
- No personally identifiable information is ever sent
- Session data and statistics are never sent (not to Slack either)
Security
- Scripts running inside the webview are protected by a Content Security Policy (CSP)
- No external scripts are ever loaded
- All data is stored locally; nothing is sent to external servers
Troubleshooting
Notifications are not shown
- Make sure
brainsync.notificationEnabled is turned on in the extension settings
- If VS Code / Cursor's Do Not Disturb mode is on, notifications may be blocked. Under Settings > Notifications > "Enable Do Not Disturb mode", make sure BrainSync Focus Timer is not checked in the extension list (a checked entry blocks its notifications)
The timer gets reset
The timer keeps running when you close a window, but its state may be reset if the editor exits completely. It is restored automatically when VS Code restarts.
Sound is not playing
- Check that
brainsync.soundEnabled is turned on in the extension settings
- Check that
brainsync.soundVolume is not 0
- Check that
brainsync.soundFile is not set to silent
Statistics disappeared
Data is stored in Global State and is removed when the extension is uninstalled. We recommend exporting regularly.
Contributing
Please report bugs and request features via GitHub Issues.
Pull requests are welcome!
License
MIT License — see LICENSE for details
Author
Donut Service
Links