Skip to content

boni

화면 구석에 항상 떠있는 우리의 보니.

Core trick

On key OS events it waits 1-2 seconds, screenshots the screen, and gets one strict JSON reply for the speech bubble.

Tags

Description

화면 구석에 항상 떠있는 우리의 보니. 사용자가 화면을 전환할 때마다 행동이나 맥락을 감지해서 상황에 맞는 귀여운 한마디를 말풍선으로 띄워준다. 사용자가 막혀 보이면 먼저 나서서 답을 정리해주는 동반자.
hackerthon-gemini-agc/boni★ 10 forksPythonCreated Feb 28, 2026 · last push Mar 12, 2026

README excerpt

# boni 🦝

> Event-driven AI desktop companion for hackathons.

**boni** is a lightweight macOS agent that creates the feeling of being "watched" without constant polling.
It reacts only to key OS events, captures context with a short delay, sends it to an AI brain, and returns a strict JSON response for the UI.

---

## Why this project

Most productivity companions over-monitor everything. boni does the opposite:

- **Event-first, not always-on analysis**
- **Fast MVP architecture** for a live demo
- **Character-driven feedback** with strict machine-parseable output

---

## MVP Rules (must-have)

- No continuous polling-based analysis.
- On trigger, wait **1–2 seconds** before screenshot capture.
- AI output must be **one valid JSON object** (no parsing failures allowed).
- Only these 3 trigger families are supported in MVP.

### Supported triggers

1. `active_window_changed` / `active_window_title_changed`
2. `window_dwell_timeout` (default: 2 minutes)
3. `system_idle_threshold` (idle for 10+ seconds)

### Trigger payload (Role 3 → Role 2)

```json
{
  "reason": "active_window_changed|active_window_title_changed|window_dwell_timeout|system_idle_threshold",
  "ts": 1735689600.0,
  "app_name": "Visual Studio Code",
  "window_title": "main.py",
  "idle_seconds": 0,
  "dwell_seconds": 12
}
```

### AI response schema (Role 2 → UI)

```json
{
  "대사": "또 딴짓하다 들켰지.",
  "표정": "비웃음",
  "위치": "활성창_오른쪽",
  "mood": "judgy"
}
```

Allowed values:

- `표정`: `무표정 | 비웃음 | 노려봄 | 한심 | 소름 | 졸

Team