/oˈdʒak/ — Turkish for "Hearth", "Stove", or "Fireplace"
A slide-out terminal drawer for managing AI coding terminals on macOS.
Made with tokens 🤖, no love included 💔
Ocak lives in your menu bar and hides a terminal drawer just off the right edge of your screen. Pull it out with a keystroke or a nudge of the mouse, run Claude Code, OpenCode, or whatever shell you want, and let Ocak track what each terminal is doing in the background.
Grab the latest build from the releases page:
- Download
Ocak.dmgfrom the latest release. - Open it and drag
Ocak.appinto/Applications. - Launch it. Ocak runs as a menu bar accessory — look for the icon in the top-right of your screen.
Releases are not signed. You may need to visit Settings > Privacy & Security and click Open Anyway.
Prefer to build it yourself? See Build from source below.
- macOS 14 (Sonoma) or newer
- Swift 5.9+ toolchain (Xcode 15 or the command-line tools)
demo_2x_1080p.mp4
Ocak works with any shell command, but has first-class status tracking for:
| Agent | Status tracking | Setup |
|---|---|---|
| Claude Code | Working / waiting for input / done, via Claude Code hooks | One-click install from Settings → Hooks |
| OpenCode | Working / waiting for input / done, via OpenCode plugin | One-click install from Settings → Hooks |
Both agents report live status through their respective plugin systems — Ocak shows at a glance which terminal is busy, waiting for your input, or idle. Any other CLI tool runs fine as a plain terminal without status badges.
| Real terminals | Full emulation — colors, mouse, vim, htop, fancy keybindings. Not a chat box. |
| Live AI status | Sidebar shows when each terminal is working, waiting for input, or done — at a glance. |
| Git at a glance | Current branch and directory cleanliness shown inline on every terminal row. |
| Slide-out drawer | Tucks off the right screen edge. Glides in on demand, disappears on click-outside. No dock icon, no main window. |
| Edge reveal | Hover the screen edge to open. Style options: solid bar, animated smoke, invisible zone, or none (shortcut only). |
| Hotkey modes | Two ways to open the drawer: a key combination (default Cmd+Control+O, fully rebindable) or a double-tap modifier — tap ⌘, ⌥, ⌃, or ⇧ twice in quick succession. Switch modes and tune the double-tap window in Settings. |
| Terminal groups | Named folders tied to a project directory. Each holds multiple terminals; state persists as you switch. |
| Per-group setup | Custom name, working directory, and auto-run command per group — kick off claude or a dev server automatically. |
| Open in VS Code | Optional per-group button to open the group's folder in VS Code with one click. Enable it in group settings. |
| Multi-screen | Choose which display the drawer opens on. Width preference is remembered per screen. |
| Theming | Separate controls for app and terminal colors. Light and dark palettes, app icon follows system mode. |
| One-click setup | Enable AI status tracking from the settings pane with a single click. No config files to edit. |
| Auto start | Toggle launch-at-login in settings. Ocak is ready in the menu bar before you need it. |
| Auto update | Ocak checks for new releases on launch and updates itself in the background. Always on the latest version without manual downloads. |
git clone https://github.com/bgultekin/ocak.git
cd ocak/macos
./scripts/build-macos-app.sh
# or
swift build -c release
swift run -c releaseDependencies resolve automatically through Swift Package Manager.
swift test
swift test --filter OcakTests.HookInstallerTestsTests are written against Swift Testing, not XCTest.
AppDelegate ── orchestrates panels, shortcut, hook server
│
├── FloatingPanel edge ribbon, always visible
├── DrawerPanel slide-in, anchored to screen edge
│ └── DrawerView
│ ├── SessionListView
│ └── TerminalPaneView (SwiftTerm)
│
├── HookServer TCP 27832, receives Claude Code events
├── ProcessWatcher 2s sysctl poll for running claude
└── SessionStore @Observable, persists to UserDefaults
For a full breakdown of modules, stores, and conventions, see AGENTS.md.
- SwiftTerm by Miguel de Icaza — the terminal emulator that makes the drawer useful.
- KeyboardShortcuts by Sindre Sorhus — global shortcut handling.
Ocak is released under the MIT License.