Skip to content

bgultekin/ocak

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ocak

Ocak

/oˈdʒak/ — Turkish for "Hearth", "Stove", or "Fireplace"

A slide-out terminal drawer for managing AI coding terminals on macOS.

Platform Swift License Status GitHub Release

Download for 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.

gif

Quick Start

Grab the latest build from the releases page:

  1. Download Ocak.dmg from the latest release.
  2. Open it and drag Ocak.app into /Applications.
  3. 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.

Requirements

  • macOS 14 (Sonoma) or newer
  • Swift 5.9+ toolchain (Xcode 15 or the command-line tools)

Demo Video

demo_2x_1080p.mp4

Supported Agents

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.

Features

🖥️ Terminal experience

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.

🎛️ Interface

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.

🗂️ Organization

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.

⚙️ Configuration

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.

Build from source

git clone https://github.com/bgultekin/ocak.git
cd ocak/macos

./scripts/build-macos-app.sh

# or

swift build -c release
swift run -c release

Dependencies resolve automatically through Swift Package Manager.

Run tests

swift test
swift test --filter OcakTests.HookInstallerTests

Tests are written against Swift Testing, not XCTest.

Architecture at a glance

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.

Acknowledgements

  • SwiftTerm by Miguel de Icaza — the terminal emulator that makes the drawer useful.
  • KeyboardShortcuts by Sindre Sorhus — global shortcut handling.

License

Ocak is released under the MIT License.

About

A slide-out terminal drawer for managing AI coding terminals on macOS.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages