A macOS menu bar app powered by GitHub Copilot SDK. Chat with AI and control your computer from the menu bar.
By default it uses gpt-5-mini, the shared history is intentionally disabled. This is a hobby project.
Todos:
- Improve overall performance
- Chat with AI - Ask questions, get help with tasks
- Markdown Rendering - Rich text formatting with syntax highlighting
- Chat History - Conversations persist across sessions (SQLite)
- Chat Sessions - Multiple independent conversations
- Screenshot Analysis - Capture screen and ask AI about what's visible
- Document Analysis - Attach and analyze PDFs, images, and text files
- Data Visualization - Generate charts from CSV and Excel files
- Image Analysis - Extract metadata and dimensions from images
- URL Summarizer - Fetch and summarize any web page
- Code Runner - Execute Python or JavaScript snippets
Hardware controls use native macOS framework calls via koffi FFI for instant, reliable operation — no shell commands or AppleScript for core operations.
| Control | Native Framework | What it does |
|---|---|---|
| Brightness | DisplayServices | Get/set screen brightness (precise float 0-100%) |
| Volume | CoreAudio | Get/set volume, mute/unmute |
| Bluetooth | IOBluetooth | Power on/off, status check |
| Screen Size | CoreGraphics | Detect actual display resolution |
Additional system controls:
- WiFi - Turn on/off, check status, list saved networks (
networksetup) - Do Not Disturb - Toggle Focus mode (
defaultscommand) - AirDrop - Toggle on/off
- Window Management - Maximize, split, cascade, minimize/restore windows (adapts to your display resolution)
- App Launcher - Open any application by name
- Shell Commands - Run terminal commands via natural language
- Clipboard - Get, set, and clear clipboard contents
- Play/Pause/Next/Previous - Control Spotify or Apple Music
- Now Playing - Get current track info
- Timer - Interactive stopwatch
- Countdown - Custom duration countdown with notifications
- Pomodoro - 25min work / 5min break timer
- World Clock - Real-time display of multiple timezones
- Unit Converter - Length, weight, temperature, volume, area, speed
- Notes - Create, search, and manage persistent notes
- Todos - Task list with completion tracking
- Weather - Current weather for any location
- WiFi Widget - Visual network status display
- Bluetooth Widget - Paired/connected device listing
- Native Notifications - Set reminders that trigger macOS notifications
- List & Cancel - View active reminders and cancel them
- CSV/Excel Parsing - Upload data files for analysis
- Interactive Charts - Bar, horizontal bar, pie, doughnut, line, and scatter charts
- Automatic Type Detection - Column analysis with numeric stats
- Theme-Aware - Charts adapt to light/dark mode
- Table Fallback - Data displays as tables if chart rendering fails
- Speech-to-Text - Activate macOS dictation
- Text-to-Speech - Read responses aloud with configurable voice and speed
- Light/Dark Theme - Toggle between themes in settings
- Global Shortcut - Customizable keyboard shortcut (default:
Cmd+Shift+T) - Model Selection - Choose from multiple AI models
- GitHub Copilot - Active Copilot subscription and CLI installed
- Node.js - v18 or higher
No additional tools required — brightness, volume, and Bluetooth use native macOS APIs directly.
cd copilot-bar
npm install
npm run build
npm startSome features require macOS permissions (grant in System Settings > Privacy & Security):
| Permission | Required for |
|---|---|
| Notifications | Reminder notifications |
| Screen Recording | Screenshot capture |
| Accessibility | Window management (arrange/focus/close) |
Settings are stored in SQLite at: ~/.copilot-bar/copilot-bar.db
Access settings via the gear button in the app to configure:
- AI Model
- Theme (Light/Dark)
- Global Shortcut
"Set volume to 50%" "Turn on Bluetooth"
"Set brightness to 80%" "List Bluetooth devices"
"Mute my computer" "Turn off WiFi"
"Turn on do not disturb" "What network am I on?"
"Open Safari" "Maximize Chrome"
"Split Safari and Terminal" "Tile my windows"
"Start a Pomodoro" "Remind me in 30 minutes"
"What time is it in Tokyo?" "Convert 100 lbs to kg"
"Take a screenshot" "What's the weather in NYC?"
"Play next song" "Create a note about..."
"Run this Python: ..." "Summarize this URL: ..."
"Analyze this document" "What file types are supported?"
"Show me a bar chart" "Plot this data as a pie chart"
"Visualize sales by month" "Make a scatter plot"
| Tool | Description |
|---|---|
set_volume |
Set system volume (0-100%) via CoreAudio |
get_volume |
Get current volume level via CoreAudio |
toggle_mute |
Mute/unmute audio via CoreAudio |
set_brightness |
Adjust screen brightness via DisplayServices |
get_brightness |
Get current brightness level via DisplayServices |
| Tool | Description |
|---|---|
set_bluetooth |
Turn Bluetooth on/off via IOBluetooth |
get_bluetooth_status |
Check Bluetooth state via IOBluetooth |
toggle_bluetooth |
Toggle Bluetooth via IOBluetooth |
list_bluetooth_devices |
List paired/connected devices via system_profiler |
set_wifi |
Turn WiFi on/off |
get_wifi_status |
Get WiFi status and current network |
toggle_wifi |
Toggle WiFi on/off |
list_wifi_networks |
List saved WiFi networks (widget) |
toggle_airdrop |
Toggle AirDrop on/off |
| Tool | Description |
|---|---|
list_windows |
List all visible applications and windows |
arrange_windows |
Split, cascade, maximize, minimize/restore |
focus_window |
Bring an app to the front |
close_window |
Close an app's window |
| Tool | Description |
|---|---|
attach_document |
Open file picker to attach PDFs, images, or text files (up to 10MB) |
list_supported_formats |
Show supported document formats and size limits |
Supported formats:
- PDFs - Document analysis via vision
- Images - PNG, JPG, JPEG for image analysis
- Text - TXT, MD, JSON, CSV for text processing
- Spreadsheets - XLSX, XLS for data analysis and charts
| Tool | Description |
|---|---|
analyze_data_file |
Parse CSV/Excel and return column types, stats, and chart suggestions |
render_chart |
Generate interactive charts (bar, pie, line, scatter, table) |
| Tool | Description |
|---|---|
create_note / list_notes / search_notes |
Persistent notes (SQLite) |
create_todo / list_todos / complete_todo |
Todo list with completion |
start_timer / start_countdown / start_pomodoro |
Interactive timer widgets |
set_reminder / list_reminders / cancel_reminder |
Scheduled notifications |
show_world_clock / get_time |
Timezone display |
show_unit_converter / convert_unit |
Unit conversion |
get_weather |
Weather for any location |
capture_screenshot |
Screen capture for AI analysis |
analyze_image |
Image metadata extraction |
summarize_url |
Web page summarization |
run_code |
Execute Python or JavaScript |
calculate |
Open calculator |
| Tool | Description |
|---|---|
play_music / pause_music |
Control Spotify or Apple Music |
next_track / previous_track |
Skip tracks |
get_music_status |
Current track info |
speak_text |
Text-to-speech |
speech_to_text |
Activate dictation |
| Tool | Description |
|---|---|
open_application |
Open macOS apps by name |
run_shell_command |
Execute shell commands |
get_clipboard / set_clipboard |
Clipboard operations |
set_do_not_disturb / toggle_do_not_disturb |
Focus mode |
Screenshots are saved locally by default. For cloud storage, configure S3-compatible storage:
- Copy
.env.exampleto.env - Configure your S3 credentials (supports AWS S3, Cloudflare R2, MinIO, etc.)
All data is stored locally in SQLite:
| Data | Location |
|---|---|
| Config, chat history, notes, todos | ~/.copilot-bar/copilot-bar.db |
- Electron + menubar - Menu bar desktop app
- @github/copilot-sdk - AI capabilities
- koffi - FFI for native macOS framework calls (CoreAudio, DisplayServices, IOBluetooth, CoreGraphics)
- sql.js - SQLite for persistence
- marked + highlight.js - Markdown rendering
- Chart.js - Interactive data visualization
- papaparse + xlsx - CSV and Excel parsing
- TypeScript - Type safety
npm run build # Compile TypeScript
npm run dev # Build and run
npm start # Build and run| Package | Author / Org | License | Used for |
|---|---|---|---|
| Electron | OpenJS Foundation | MIT | Desktop app runtime |
| menubar | Max Ogden | BSD-2-Clause | Menu bar window management |
| @github/copilot-sdk | GitHub | MIT | AI chat and tool calling |
| koffi | Niels Martignène | MIT | FFI for native macOS framework calls |
| sql.js | sql.js contributors | MIT | In-browser SQLite for persistence |
| marked | Christopher Jeffrey & contributors | MIT | Markdown to HTML rendering |
| highlight.js | Ivan Sagalaev & contributors | BSD-3-Clause | Syntax highlighting in code blocks |
| Chart.js | Chart.js Contributors | MIT | Interactive data visualization |
| papaparse | Matthew Holt | MIT | CSV parsing |
| xlsx | SheetJS LLC | Apache-2.0 | Excel file parsing |
| @aws-sdk/client-s3 | Amazon Web Services | Apache-2.0 | S3 upload for screenshots (optional) |
| dotenv | Scott Motte | BSD-2-Clause | Environment variable loading |
| TypeScript | Microsoft | Apache-2.0 | Type-safe development |
| Service | Provider | Used for |
|---|---|---|
| wttr.in | Igor Chubin | Weather data API |
| GitHub Copilot | GitHub | AI model backend |
MIT

