Local Notifier for VS Code

日本語
Shows Windows desktop notifications when AI agents and other tools finish their work. It works even when they run inside a Dev Container or WSL. Any tool that can run a command from a hook can use it.
You don't need a separate app, port, or token. A hook writes a small JSON file to an inbox folder, and the extension shows it as a notification.
Features
- Send Test Notification: sends a test notification through the inbox to check the setup.
- Copy Hook Command: copies a command that sends a notification from the current environment. Paste it into your tool's hook settings.
- Show Status: shows whether notifications work and which inboxes this window watches.
- Log: the Local Notifier channel in the Output panel records what happened to each notification file.
Usage
- Open a folder locally, in WSL, or in a Dev Container.
- Run Local Notifier: Copy Hook Command from the Command Palette (
Ctrl+Shift+P).
- Select the notification to send, such as
done or waiting.
- Select where you configure the hook: This workspace only or All workspaces.
- Select where you will paste it. For a settings file such as
settings.json, select Settings file (JSON). It copies a JSON string with the quotes escaped.
- Paste it into your tool's hook settings.
To change the text later, edit the localNotifier.presets setting. You don't need to touch the hook. Changes to the settings take effect right away.
After you update the extension, reload every open window. A window that still runs an older version may drop notifications in a newer format.
Where the inbox is
Each window watches an inbox for its own workspace, and an inbox shared by all windows.
| Where your tool runs |
This workspace only |
All workspaces |
| Windows (local) |
The workspace storage folder that Visual Studio Code provides |
The global storage folder that Visual Studio Code provides |
| WSL |
Same as local. The command converts the path with wslpath |
Same as local |
| Dev Container |
.devcontainer/.local-notifier/inbox in your project |
Not available |
Use This workspace only for hooks in the project settings. Only the windows of that workspace handle it. Presets in the workspace settings apply. Use All workspaces for hooks in your user settings. Any open window handles the notification with the presets in your user settings.
In a Dev Container, the extension also adds a .gitignore next to the inbox. It keeps the inbox out of Git.
A hook writes one JSON file per notification. Use a preset name, or write the text directly.
| Field |
Required |
Description |
preset |
No |
Name of a preset. Uses the text of the preset |
title |
Without preset |
Title of the notification. Overrides the preset |
message |
Without preset |
Body of the notification. Overrides the preset |
project |
No |
Project name. Defaults to the workspace folder name in a Dev Container |
level |
No |
info, success, warning, or error. Defaults to the preset, then info. Sets the emoji and how long the notification stays |
source |
No |
Name of the tool, shown below the message |
Presets
Three presets are built in. Their text follows the display language of VS Code.
| Name |
Use |
Level |
done |
The work is finished |
success |
waiting |
Waiting for input or permission |
info |
error |
Stopped with an error |
error |
Override or add presets in localNotifier.presets. For a built-in name, only the fields you write change. Put project-specific text in .vscode/settings.json of the workspace.
{
"localNotifier.presets": {
"done": { "message": "Build and tests passed." },
"review": { "title": "Review requested", "message": "Please check the changes.", "level": "warning" }
}
}
Example: Claude Code in a Dev Container
Copy the command with Settings file (JSON). Paste it as the value of "command" in .claude/settings.local.json.
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "d='/workspace/.devcontainer/.local-notifier/inbox'; n=\"$(date +%s%N)-$$\"; printf '%s' '{\"preset\":\"done\"}' > \"$d/.tmp-$n.json\" && mv \"$d/.tmp-$n.json\" \"$d/$n.json\""
}
]
}
]
}
}
Settings
| Setting |
Default |
Description |
localNotifier.enabled |
true |
Watch the inbox and show desktop notifications |
localNotifier.inboxPath |
Empty |
Folder to use as the local inbox instead of the default one |
localNotifier.presets |
Empty |
Presets to override or add |
localNotifier.showLevelIcon |
true |
Show an emoji for the kind before the title: ✅ success, ℹ️ info, 🟡 warning, 🔴 error |
localNotifier.duration |
Warnings and errors long |
How long each kind stays on screen. short is about 7 seconds, and long is about 25 seconds |
Requirements
- Windows
- Visual Studio Code 1.138 or later
Known limitations
- The extension shows notifications while Visual Studio Code runs.
- Remote SSH is not supported.
License
MIT