Wenlan
Wenlan is a source-backed AI knowledge base and LLM wiki for AI work: organize documents and decisions into pages you can find, inspect, and review.
Answer your coding agents, control your music, and keep files, notes, and reminders one hover away.
ProductivityGitHub @HamzaLovesCodingOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
Native macOS notch workspace with media controls, files, notes, system monitoring, and coding agent integrations.
Loading the full README.
Read the full README ↗A native macOS app that turns your notch into a small workspace. Hover over it to open your tools, then move away to close it. Works on displays without a notch, too.
Requires an Apple silicon Mac and macOS 14 or later.
Download NotchLab.dmg from the latest release.
Open it and drag NotchApp into Applications.
Open NotchApp from Applications. NotchLab isn't notarized by Apple yet, so the first time macOS says it can't verify the app. Click Done, open System Settings → Privacy & Security, scroll down, and click Open Anyway next to NotchApp. You only have to do this once.
Or skip the prompt from Terminal: xattr -dr com.apple.quarantine /Applications/NotchApp.app
Hover over the notch to get started. The first time it opens, you'll see Connections: Claude Code, Codex, Claude usage, Camera, Reminders, Calendar, VPN control (Accessibility), and Launch at Login, each with its own button, plus Connect all to set everything up at once. It's always under the gear in Settings, along with:
The camera turns off when the notch closes or when you click the mirror.
Beside the closed notch:
Focus timer presets you add can keep leftover time: switch to another preset mid-countdown and the time left is saved for next time, like a debate prep-time bank. Reset refills it. A running or paused countdown carries on after NotchLab restarts. To turn a Focus mode on and off with the timer, make two shortcuts in the Shortcuts app with the Set Focus action and pick them in Settings → Focus Timer. Breaks don't run them.
Requires Xcode Command Line Tools with Swift 6 or later (xcode-select --install).
git clone https://github.com/HamzaLovesCoding/NotchLab.git
cd NotchLab
./build.sh --install
This builds, installs, and opens /Applications/NotchApp.app. Use ./build.sh --dmg to make build/NotchLab.dmg for sharing.
NotchLab shows Claude Code and Codex permission requests in the notch with Allow and Deny, lets you answer Claude's questions there by picking options or typing your own answer, and flashes a side alert when an agent finishes.
To connect: click Connect Claude and Connect Codex on the Dev page, or switch them on in Settings → Connections. NotchLab adds its bundled notch-hook helper to ~/.claude/settings.json and ~/.codex/hooks.json, keeps everything else in those files, and saves a one-time backup next to each as *.before-notchapp. Then:
/hooks in Codex once and trust NotchLab's hooks. Codex won't run new hooks until you do.Run NotchApp from your Applications folder before connecting, since the hooks point at the app's location. To undo, switch the agent off in Settings before you delete the app.
Manual setup: if you'd rather edit the files yourself, add these entries. If your config already has a hooks section, merge them into it.
Claude Code: ~/.claude/settings.json
{
"hooks": {
"PermissionRequest": [{ "matcher": "*", "hooks": [{ "type": "command", "command": "/Applications/NotchApp.app/Contents/MacOS/notch-hook claude", "timeout": 300 }] }],
"PreToolUse": [{ "matcher": "AskUserQuestion", "hooks": [{ "type": "command", "command": "/Applications/NotchApp.app/Contents/MacOS/notch-hook claude", "timeout": 300 }] }],
"Stop": [{ "hooks": [{ "type": "command", "command": "/Applications/NotchApp.app/Contents/MacOS/notch-hook claude" }] }],
"UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "/Applications/NotchApp.app/Contents/MacOS/notch-hook claude" }] }],
"SessionEnd": [{ "hooks": [{ "type": "command", "command": "/Applications/NotchApp.app/Contents/MacOS/notch-hook claude" }] }]
}
}
Codex: ~/.codex/hooks.json, then run /hooks in Codex once to trust it.
{
"hooks": {
"PermissionRequest": [{ "matcher": "*", "hooks": [{ "type": "command", "command": "/Applications/NotchApp.app/Contents/MacOS/notch-hook codex", "timeout": 300 }] }],
"Stop": [{ "hooks": [{ "type": "command", "command": "/Applications/NotchApp.app/Contents/MacOS/notch-hook codex" }] }],
"UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "/Applications/NotchApp.app/Contents/MacOS/notch-hook codex" }] }],
"SessionEnd": [{ "hooks": [{ "type": "command", "command": "/Applications/NotchApp.app/Contents/MacOS/notch-hook codex" }] }]
}
}
While a request waits in the notch, the agent holds its terminal prompt, so the question doesn't show in the terminal or in Claude's Remote Control. Answer in the notch, click Terminal to answer there instead, or wait about five minutes for the terminal prompt to come back. Settings → Agents picks where questions and approvals go: