Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Enem

A tiny native macOS menubar tool: press ⌥Space, describe a task in plain language, and an LLM schedules it into your calendar and saves it as a todo.

  • Instant popup — resident menubar app, global hotkey via Carbon (no Accessibility permission needed), black-and-white terminal-style panel (monospace, ❯ prompt). Compact input line by default; submitting shows "scheduling…" then the answer inline right below the bar. ↑ reveals the history (persisted in SQLite) — one row per task with a dim ✓/✗ outcome mark; ↑/↓ move message-to-message and the selected row expands to reveal the LLM's answer, ↩ on a selected row (empty prompt) recalls its input, Esc collapses then closes. Standard editing shortcuts (⌘A/⌘C/⌘V/⌘X/⌘Z) work despite the app having no menu bar.
  • LLM scheduling harness — tool-calling loop against any OpenAI-compatible chat-completions API (default: Mixedbread toast-1). The system prompt already includes your next-7-days agenda, so most tasks schedule in a single API round-trip; the model can also call get_events (look further out) and create_event.
  • Calendar via EventKit — reads/writes through macOS Calendar, so events sync to Google Calendar (your Google account must be added in System Settings → Internet Accounts with Calendar enabled).
  • Slash commands (instant, no LLM call): /revert undoes the last LLM action — a created event is deleted, a deleted event is restored from its snapshot; repeat to walk further back. /clear wipes the whole transcript history. /today, /tomorrow (or /tmrw), and /view <date> (YYYY-MM-DD, DD.MM.YYYY, "15.9", or a weekday name) show that day's schedule. Typing / opens an autocomplete below the bar: ↑/↓ choose, Tab completes, ↩ completes and runs, Esc dismisses.
  • Local todos — SQLite at ~/Library/Application Support/Enem/todos.db; browse and check off the last 10 from the menubar menu.

Setup

  1. scripts/install.sh — builds and launches ~/Applications/Enem.app.
  2. Grant calendar access when macOS asks (or System Settings → Privacy & Security → Calendars → Enem).
  3. Add your API key: menubar icon → Settings… (↩ saves), or keep it in ~/.config/enem/.env (MIXEDBREAD_API_KEY for the default provider, OPENAI_API_KEY for OpenAI) — a symlink to a project .env works. A key set in the config/Settings wins over .env.
  4. Press ⌥Space, type e.g. "prepare slides for the sales call, needs an hour, sometime before Thursday", hit ↩.

Optional: menubar → Launch at Login.

Config — ~/.config/enem/config.json

Key Default Notes
api_key "" Empty = fall back to ~/.config/enem/.env (key name matching base_url's provider), then env vars.
base_url https://api.mixedbread.com/v1 Any OpenAI-compatible endpoint, e.g. https://api.openai.com/v1.
model toast-1 For OpenAI use e.g. gpt-5.6-terra or gpt-5.6-luna.
hotkey opt+space e.g. cmd+shift+space, ctrl+opt+t.
calendar_name "" Empty = your default calendar.
work_hours 09:00-18:00 Scheduling preference given to the model.
default_duration_minutes 30 Used when the task doesn't imply a duration.

Edit, then menubar → Reload Config (no restart needed).

Development

swift build            # debug build
scripts/build_app.sh   # release build + signed dist/Enem.app
scripts/install.sh     # build, install to ~/Applications, relaunch

Plain SwiftPM, no dependencies. Sources/enem/: Agent.swift (LLM harness), CalendarService.swift (EventKit), TodoStore.swift (SQLite), PopupPanel.swift (UI), HotKey.swift (global hotkey), AppDelegate.swift (menubar wiring). Note: notifications and launch-at-login only work from the installed .app bundle, not swift run.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages