Skip to content

About

A menu bar app that can become anything you ask it to be.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

 
 

Latest commit

 

History

101 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

baby-menu

CI Platform Electron X Discord

Adopt a baby menu and help it grow.

Ask baby-menu to build a cpu and a claude usage widget and watch them appear in your menu bar

Every menu-bar app ships a fixed set of widgets. Want your CPU usage next to your Claude usage next to your next calendar event? Good luck waiting for someone to build exactly that.

baby-menu flips it. The popover menu can run your coding agent to edit the menu on the fly. You ask for a feature in plain English, the agent writes an extension and it hot reloads into the menu in real time.

  • Personal self-evolving software - jump into the future where every piece of software is personal and self-evolving towards your exact needs.
  • Ask, don't configure - tweak the menu using natural language, not configuration.
  • Worry-free - every agent turn can be kept or undone.

Quick Start

Requires macOS 13 Ventura or newer, Homebrew, and a supported, already-authenticated agent CLI such as claude or codex on PATH.

brew install --cask kunchenguid/tap/baby-menu
open -a "Baby Menu"

Click the tray icon, then ask for a widget in the composer such as:

add a CPU usage widget that shows current load in %

Baby Menu writes changes under ~/.baby-menu/extensions, mounts updated widgets or layouts live, and shows a Keep / Undo bar only when files actually changed. The bar labels the real diff (Added the cpu extension, Updated the layout) so you can keep or throw away each turn.

Open the popover header to reload the layout, reach Settings (an overlay that preserves your menu state), quit, or install an update. Reloading the layout remounts the widget canvas and root layout while preserving the agent conversation and Settings state. Settings lets you toggle launch-at-login, pick the embedded agent, and manage custom ACP agents.

Install Details

The packaged app stores extensions, the local database, caches, agent sessions, and preferences under ~/.baby-menu, so upgrades preserve user-created widgets and extension state. Baby Menu refreshes its provider-neutral managed defaults from the release on each launch. If ~/.baby-menu/extensions is a symlink, Baby Menu seeds bundled defaults and compiles widget or layout CSS from the resolved writable target while leaving the symlink itself in place.

Update with Homebrew:

brew update
brew upgrade --cask baby-menu

When a newer release exists, Baby Menu shows an update indicator in the popover header.

For agent selection, custom ACP agents, telemetry, and environment flags, see docs/configuration.md.

How It Works

   ┌─────────────────────┐
   │  macOS tray popover │   (React renderer, adaptive size)
   │ + Menu / Settings   │
   │ + Reload layout     │
   │ + Update / Quit     │
   └──────────┬──────────┘
              │  send()
              ▼
   ┌───────────────────────┐       ┌──────────────────────┐
   │  BabyMenuAgentRuntime ├──────►│    Change Session    │
   │   wraps acpx/runtime  │       │   git or snapshot    │
   └──────────┬────────────┘       │   by runtime mode    │
              │                    └──────────┬───────────┘
              │ edits files                   │ save / rollback
              ▼                               ▼
   ┌─────────────────────┐       ┌──────────────────────┐
   │ active extensions/  │       │   save snapshot or   │
   │  layout.tsx         │◄──────┤   rollback files     │
   │  <id>/widget.tsx    │       │   safely             │
   │  <id>/server.ts     │       │                      │
   └──────────┬──────────┘       │                      │
              │ hot-reload       └──────────────────────┘
              ▼
   ┌─────────────────────┐
   │     WidgetHost      │
   │ mounts layout/widget│
   └─────────────────────┘
  • Three processes, one bridge - the renderer never touches git, the agent, or the filesystem; everything goes through window.babyMenu.
  • Recipes are specs, not prompts - HTML files under extensions/recipes/ describe a widget's capability and data sources; the agent reads the matching recipe before implementing. For live or system data, recipe guidance requires the agent to inspect the real source before parsing it and verify the finished widget against that same data before reporting done. The bundled quota recipes cover Claude Code, Codex, Cursor, GitHub Copilot, and Grok. Cursor, GitHub Copilot, and Grok quota recipes avoid separate quota helpers such as quota-axi; each recipe is authoritative for its provider-owned state, API, and credential-refresh contract.
  • Bundled ACP adapters - built-in Claude Code and Codex run through clean-room adapters isolated from user-level agent configuration.
  • Diff-derived Keep / Undo - the change bar reflects the actual git or snapshot diff, not agent wording, and clears itself when nothing changed on disk.
  • Extensions own their capabilities - widgets, layouts, settings sections, server actions, background tasks, and a shared SQLite store, all behind the stable bridge.

For the full design notes and repository layout, see docs/architecture.md.

Docs

License

Baby Menu is released under the MIT License. See LICENSE for details.

About

A menu bar app that can become anything you ask it to be.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages