by s3onghyun
🪖 불침번 — Your Mac's night-watch soldier. Keeps your Mac awake only while AI agents work. No hooks, no daemon, macOS 13+.
# Add to your Claude Code skills
git clone https://github.com/s3onghyun/bulchimbeonSee how bulchimbeon compares with popular alternatives.
bulchimbeon is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by s3onghyun. 🪖 불침번 — Your Mac's night-watch soldier. Keeps your Mac awake only while AI agents work. No hooks, no daemon, macOS 13+. It has 50 GitHub stars.
bulchimbeon's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/s3onghyun/bulchimbeon" and add it to your Claude Code skills directory (see the Installation section above).
bulchimbeon is primarily written in Go. It is open-source under s3onghyun on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh bulchimbeon against similar tools.
No comments yet. Be the first to share your thoughts!
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
Your Mac's night-watch soldier. A menu bar app that keeps your Mac awake only while your AI coding agents are actually working, then salutes "Shift over!" and lets it sleep.
No hooks, no daemon, no installed root helper. One app. macOS 13 and later. On Linux, a small daemon with a command line and a tray icon does the same job: see Linux.
Bulchimbeon (불침번) is the night-watch duty in the Korean army: someone stays up all night so everyone else can sleep. A pixel-art private takes that shift for your Mac.
🌐 한국어 · 日本語 · 简体中文 💡 Ideas / 문의 / 建议

Install: brew install --cask s3onghyun/tap/bulchimbeon — or download the latest macOS zip and move it to /Applications.
First launch: the app is not notarized yet, so macOS blocks it once. See the first-launch steps under Install.
Supported agents: Claude Code · Codex · Gemini CLI · Cursor Agent · Copilot CLI · Aider · OpenCode (and your own custom agents).
Why not just use caffeinate or Amphetamine? Those are great when you want a manual, fixed wake lock. Bulchimbeon starts and ends the lock around active AI-agent work, so it does not get left on overnight.
What does it inspect or send? It uses no hooks and makes no network connections. It observes only your own local process metadata to decide whether a supported agent is working; it never stores or prints process command lines or environment variables.
Can it keep a closed laptop awake? Yes, but turning on the lid-closed mode requires an administrator approval. It restores normal lid sleep when the watch ends or the app quits.
| State | The private | When |
|---|---|---|
| 💤 Off duty | Dozing in his helmet, zzz | Nothing to guard |
| 👀 Standing by | Looking around | Waiting for an agent to clock in |
| 🪖 On duty | Flashlight on, on patrol | The Mac won't sleep |
| 🫡 Shift over | ^ ^ salute |
Agents went quiet / watch time is up |
| 🥵 Combat rest | Sweating, eyes closed | The Mac is overheating |
The private patrols just under your menu bar with a flashlight. While standing by he looks around in the corner; at shift change he salutes with a speech bubble. Clicks pass straight through, he fades when your pointer comes close, and he stays out of full-screen apps (presentations, screen sharing, video). Size 2× / 3×, or turn him off.
| When | He says |
|---|---|
| On watch | "Won't doze off! …probably." · "Sleep tight. I've got this!" |
| Standing by | "Polishing my rifle… standing by." |
| Mac heating up | "Heat advisory! Hydrating 🥵" → "Combat rest! Cooling down 🧊" |
| Low battery | "Reporting to the duty officer 🔋 Battery at 15%… out of strength, standing down." |
| Sleep block lost | "Not AWOL! Back on post! 🫡" |
| You come back | "Handover report! 📋" |
To leave an agent running overnight I used to do this:
caffeinate -d # ...and forget to turn it off
sudo pmset disablesleep 1 # ...and forget to turn it back on → battery at 0%
Bulchimbeon stays awake only while an agent is working and hands the Mac back to normal sleep when it's done.
| Feature | What it does |
|---|---|
| 🤖 Agent watch | Detects Claude Code, Codex, Gemini CLI, Cursor Agent, Copilot CLI, Aider, OpenCode (plus your own). Only counts agents that are actually working, not sessions that are merely open. Clocks in when one starts working and hands over 5 minutes (adjustable) after everything goes quiet |
| 🪖 Timed watch | 30 min / 1 h / 2 h / 4 h / indefinitely |
| Watch modes | Keep display on (caffeinate -d) · Display may sleep, Mac stays awake (caffeinate -i) · Stay awake with the lid closed (admin) |
| 🔋 Battery stand-down | Stands down when running on battery below your threshold (default 20%) |
| ⚠️ Lid safety net | Restores normal lid sleep (disablesleep back to off) when the watch ends or the app quits; after a crash, the next launch offers Restore lid sleep in the menu |
| 🌡️ Heat advisory → 🔥 combat rest | Warns when the Mac heats up; when it gets critical, pauses the watch to cool down and resumes automatically once it cools (no more cooking a closed Mac in a bag) |
| ⚠️ Abandoned-post check | If the sleep block disappears for any reason, it is re-engaged immediately |
| 🕵️ Watchdog | In lid-closed mode, restores normal sleep within 5 s when the app quits or the watch ends (including a timed watch running out) — no second password prompt needed; re-enabling replaces rather than stacks it |
| 📋 Night-watch handover | Come back after 10+ minutes away and get a report of what happened while you were gone |
| 🔁 Survives restarts | Remaining watch time carries over app restarts, updates and reboots (for security, a lid-closed watch comes back as a system watch for that watch only; lid mode stays selected in the menu and asks for approval again on the next watch) |
| 🖥️ Who else is holding the Mac awake | The menu shows other apps blocking sleep, e.g. "Vivaldi (video)" |
| 🌐 Korean / English / Simplified Chinese | Follows the system language by default; pick one from 언어 / Language / 语言 in the menu |
| 📒 Duty log | ~/Library/Application Support/Bulchimbeon/duty-log.txt |
Adrafinil solves the same problem and came first. The two take opposite approaches, so pick the one that fits. (As of October 2026.)
| Bulchimbeon | Adrafinil | |
|---|---|---|
| How it knows an agent is working | Watches from outside: the agent's caffeinate child and CPU use |
The agent tells it: hooks (acquire on prompt submit, release when the reply ends) plus observation |
| What installing changes | Nothing. One app; agent config files are never touched | Hooks added to agent configs (one-click install/uninstall), a user daemon, a root helper |
| macOS | 13 and later | 26.4 and later |
| Awake with the lid closed | Admin password each time you turn it on; a watchdog guarantees the setting is restored | Approved once at install, no password afterwards |
| Agent asks to stay awake (long builds) | — | CLI and MCP tool |
| Heat | Warns even with the lid open; when it gets too hot, rests and resumes automatically once cool | Force-releases on overheating while the lid is closed |
| Distribution | Ad-hoc signed (notarization planned), personal Homebrew tap | Notarized, official Homebrew cask |
Choose Adrafinil if you're on macOS 26.4+ and want hooks to track turns precisely, or want agents to request wake time themselves. Choose Bulchimbeon if you're on macOS 13–15, don't want anything installed into your agent configs or system, or would rather have a private on watch.
brew install --cask s3onghyun/tap/bulchimbeon
# Update — refresh the tap first, Homebrew's auto-update interval is long
brew update && brew upgrade --cask bulchimbeon
Or download the zip from Releases and move it to /Applications.
macOS 13+, universal (Apple Silicon and Intel).
First launch: the app is ad-hoc signed and not notarized by Apple yet, so macOS blocks it once. Try to open it, then go to System Settings → Privacy & Security → "Open Anyway". (Since macOS 15, right-click → Open no longer bypasses this.) Until it's notarized, macOS won't grant it notification permission, so notifications show up as "Script Editor".
Release zips are built only in GitHub Actions and carry a build provenance attestation.
gh attestation verify Bulchimbeon-<version>.zip --repo s3onghyun/bulchimbeon
shasum -a 256 -c Bulchimbeon-<version>.zip.sha256
| Watch mode | Under the hood |
|---|---|
| Keep display on | IOPMAssertion PreventUserIdleDisplaySleep, same as caffeinate -d |
| Display may sleep (default) | IOPMAssertion PreventUserIdleSystemSleep, same as caffeinate -i |
| Lid closed | The above plus pmset -a disablesleep 1. Closing the lid is a hardware trigger that assertions can't block |
Bulchimbeon scans your own user's processes with libproc and matches agents by executable name, argv[0],
install path or script path. Never by substring (Claude Code hooks run node -e "...'.claude'...", which would match).
| Install method | What the process looks like | Matched by |
|---|---|---|
| Claude Code native installer | executable ~/.local/share/claude/versions/2.1.296 (named after the version!) |
argv[0] = claude, or the install path |
| Homebrew / IDE-bundled binary | .../claude, /opt/homebrew/bin/codex |
executable name |
| npm global install | node /opt/homebrew/bin/claude |
script name |
| npx / package path | node .../@anthropic-ai/claude-code/cli.js |
package path |
| bun / deno | bun .../@google/gemini-cli/... |
package path |
Supported: Claude Code · Codex · Gemini CLI · Cursor Agent · Copilot CLI · Aider · OpenCode
Only while working. People keep several Claude Code sessions open, so counting open sessions would never let the Mac sleep. An agent counts as working when (you can switch back to counting open sessions in the menu):
| Signal | Why (measured on a real machine) |
|---|---|
It has a caffeinate child process |
Claude Code spawns caffeinate -i -t 300 itself, only while it's working |
| Its process tree uses ≥ 2% CPU averaged over 60 s | Covers tool runs like buil |