Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
2. Active view content.
3. Main view: a Claude | Codex usage summary (limits plus 14-day tokens), runtime session counts, a `내 응답 대기 | 실행 중 | 턴 종료 · 검토` kanban board, then a `WORKSPACES` inventory for session-less, unknown and inactive tasks. Every card shows IDE/Terminal/Finder launchers and repo/branch Git facts without expanding; expanding adds last commits and session request/activity/response excerpts. Base repositories remain in a supporting disclosure.
4. Usage view: per-agent limits and today's token mix, one daily chart with both agents on a shared scale, and a last-7-days table.
5. Settings view: five category tabs, each one numbered page. `01 · General` opens with a Status group (the check's outcome with the one apply button, then CLI and Companion versions in the order the update runs, the update log, and a one-line CLI/agent connection summary linking to Connections), then launch-at-login and Live Claude Limits; `02 · Connections` CLI install and agent connections, right after General because the other features build on it; `03 · Menu Bar` the tray title items and percent basis; `04 · Screen Saver` the switch, idle minutes and `Show now` preview; `05 · Appearance` agent theme, font, text size and a live preview.
5. Settings view: five category tabs, each one numbered page. `01 · General` opens with a Status group (the check's outcome with the one apply button, then CLI and Companion versions in the order the update runs, the update log, and a one-line CLI/agent connection summary linking to Connections), then launch-at-login and Live Claude Limits; `02 · Connections` CLI install and agent connections, right after General because the other features build on it; `03 · Menu Bar` the tray title items and percent basis; `04 · Screen Saver` the switch and `Show now` preview; `05 · Appearance` agent theme, font, text size and a live preview.
6. Screen-reader live status in the agent shell; routine `Updated`/`Ready` text stays out of the visible header.

## Design principles
Expand Down Expand Up @@ -212,9 +212,9 @@ Git facts, base repositories, repo notes and launchers remain supporting details

Columns come straight from the existing runtime roles; no plan/execution phase is inferred. A task appears once, in the column of its representative role (waiting > running > finished), and other observed sessions surface as `+N <state>` chips. Stale or uncertain observations never enter a live column: they stay in `WORKSPACES` tagged `관측 불명`, beside `세션 없음` and `비활성`. Card borders take a faint tint of the lead session's provider (`--provider-claude-line` orange, `--provider-codex-line` cyan, `--provider-grok-line` silver); waiting cards add an outer `--runtime-waiting-ring` instead of recolouring the border, so provider and attention read together. Inventory rows stay untinted. Review cards prefer the last response excerpt over the last tool activity. Runtime state colours are theme tokens (`--runtime-waiting`, `--runtime-running`, `--runtime-finished`, `--runtime-unknown` and their soft fills) shared by both themes. Providers render as a 14px `ProviderIcon` instead of names: simplified marks (Claude spark, Codex hexagon, Grok slashed ring) coloured with the matching `--provider-claude`, `--provider-codex` and `--provider-grok` tokens, each with a `title` and `role="img"` accessible name (`Claude Code`, `Codex`, `Grok Build`). They are not brand artwork.

## Screensaver dashboard (COMP001)
## Screensaver dashboard (COMP001, COMP002)

A full-screen, view-only window on every display, shown by the opt-in screensaver while agents work and nobody touches the Mac, and read from two or three metres away. The top-left holds a 7-segment clock (hours and minutes), the date and an `입력 시 잠금` tag, shown only when input will lock the Mac (`미리 보기 · 입력하면 닫힘` in a Settings preview); the top-right holds the per-state counts in large type. Below sit the board's three live columns in the same order, with the same names, wait reasons and outcome labels (`ui/boardCopy.ts`) and the same runtime colour tokens. A card carries what the menu bar card carries and no controls: task name and time in state at title size, agent, repo · branch, one prompt line, one line-clamped detail (tool activity, or the last response on turn-ended cards, with the wait reason on waiting cards and `중단됨`/`오류로 종료` on turn-ended ones), summed repo facts (`●N`, `↑N`, `↓N`) and the notification count. Each column shows three cards, then `+n more`; sizes scale with viewport height, so nothing scrolls or overflows at any display size. Theme and font follow Settings. The window and webview background is the Claude `--surface-0` (`#131313`), so opening and closing never flash white. Behaviour is specified in `docs/specs/comp/screensaver.md`.
A full-screen, view-only window on every display, shown above the macOS screen saver and lock screen while agents work, and read from two or three metres away. The top-left holds a 7-segment clock (hours and minutes), the date and a `화면 잠김` tag, shown only when the Mac really locks under it (`미리 보기 · 입력하면 닫힘` in a Settings preview); the top-right holds the per-state counts in large type. Below sit the board's three live columns in the same order, with the same names, wait reasons and outcome labels (`ui/boardCopy.ts`) and the same runtime colour tokens. A card carries what the menu bar card carries and no controls: task name and time in state at title size, agent, repo · branch, one prompt line, one line-clamped detail (tool activity, or the last response on turn-ended cards, with the wait reason on waiting cards and `중단됨`/`오류로 종료` on turn-ended ones), summed repo facts (`●N`, `↑N`, `↓N`) and the notification count. Each column shows three cards, then `+n more`; sizes scale with viewport height, so nothing scrolls or overflows at any display size. Theme and font follow Settings. The window and webview background is the Claude `--surface-0` (`#131313`), so opening and closing never flash white. Behaviour is specified in `docs/specs/comp/screensaver.md`.

## Onboarding and Settings connections

Expand Down
4 changes: 2 additions & 2 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -229,10 +229,10 @@ Workbranch Companion은 Main, Usage, Settings view를 제공하는 macOS menu ba
- Usage: agent별 상세 — 한도, 오늘의 input/output/cache token, 두 agent를 같은 축에 놓은 14일 일별 차트, 최근 7일 표. Companion은 로그인 없이 로컬 파일만 읽습니다: `~/.claude/projects`의 Claude Code transcript와 `~/.claude.json`에 캐시된 `/usage` 결과, `~/.codex/sessions`의 Codex rollout. 한도는 각 agent가 마지막으로 관측한 값이라 관측 시각을 함께 보여주고 오래되면 흐리게 표시합니다. Claude 한도는 Claude Code가 `/usage`를 갱신할 때 바뀝니다. Settings > General > Live Claude Limits를 켜면 Claude Code 세션이 열려 있는 동안 실시간으로 바뀝니다(opt-in: `~/.claude/settings.json`의 `statusLine`을 statusline 입력의 `rate_limits`를 저장하는 relay로 바꾸고, 기존 statusline은 그대로 실행합니다. 끄면 원래대로 되돌립니다)
- Settings: General(업데이트·연결 상태, login 시 자동 실행, Live Claude Limits), Connections, Menu Bar, Screen Saver, Appearance 다섯 탭으로 나눕니다. login 시 자동 실행, menu bar icon 옆 표시(Claude 5h, Claude weekly, Codex weekly, 오늘 token 중 원하는 항목을 고르고 한도를 사용 % 또는 남은 %로 표시. 예: `CL 5h 42% · W 63% CO W 18% · 31.0M`. 1분마다 갱신하고 오래된 값은 `–`로 표시), interface font와 글자 크기, Claude Code 또는 Codex theme, 화면보호기, CLI/agent 연결 설정
- 업데이트: header의 업데이트 버튼은 Settings > General로 이동해 업데이트를 확인하고, Status 그룹에 설치·최신 버전을 표시합니다. Homebrew 확인은 요청할 때만 실행하고, 업데이트 버튼 하나로 CLI를 먼저 올린 뒤 Companion을 업데이트합니다. 설치·연결·업데이트 버튼은 실행 중 spinner를 보여주고, 결과는 해당 버튼 옆에 표시합니다
- 화면보호기(opt-in, 기본 꺼짐): Settings > Screen Saver > While agents work 를 켜면 실행 중이거나 내 응답을 기다리는 세션이 있는 동안 화면이 잠겨 있어도 Mac 이 idle 잠자기에 들어가지 않습니다. 화면이 잠기지 않은 채 정한 시간(Dashboard after, 기본 5분) 동안 아무도 Mac 을 건드리지 않으면 macOS 화면보호기 대신 모든 모니터에 아래 dashboard 를 띄웁니다. 잠금이 가능한 환경에서는 입력 시 macOS 잠금을 요청하며, 잠긴 뒤에는 macOS 암호나 Touch ID 로 돌아옵니다. 잠금이 불가능하면 잠금 표시를 숨기고 입력 시 잠금 없이 dashboard 만 닫습니다. 잠금 요청이 3회(약 6초) 모두 실패해도 잠금 없이 dashboard 만 닫습니다. 실행 중·대기 세션이 없어지면 잠자기·화면보호기·잠금은 다시 macOS 설정을 따릅니다. Show now 는 잠금 없이 dashboard 를 미리 보여 줍니다. 추가 권한을 요청하지 않습니다
- 화면보호기(opt-in, 기본 꺼짐): Settings > Screen Saver > While agents work 를 켜면 실행 중이거나 내 응답을 기다리는 세션이 있는 동안 화면이 잠겨 있어도 Mac 이 idle 잠자기에 들어가지 않습니다. Mac 을 쓰는 동안 macOS 화면보호기와 잠금은 macOS 설정대로 시작합니다. 화면보호기가 시작되거나 화면이 잠기면 companion 은 Mac 을 잠그고(아직 안 잠겼으면), 모든 모니터의 잠금 화면 위에 아래 dashboard 를 띄우고, 디스플레이를 켜 둡니다. Mac 은 잠긴 채 잠들지 않고 진행 상황이 화면에 보입니다. 입력하면 dashboard 가 비켜 macOS 잠금 화면이 보이고, 암호나 Touch ID 로 잠금을 풉니다. 풀지 않고 15초 두면 dashboard 가 다시 뜹니다. 잠금이 불가능하면 잠금 표시를 숨기고 companion 이 직접 잠그지 않습니다. 실행 중·대기 세션이 없어지면 잠금 화면·디스플레이·잠자기는 다시 macOS 설정을 따릅니다. companion 은 꺼진 디스플레이를 켜지 않으므로 macOS 화면보호기 시간을 디스플레이 끄기 시간보다 짧게 두세요. Show now 는 잠금 없이 dashboard 를 미리 보여 줍니다. 추가 권한을 요청하지 않습니다

<p align="center">
<img src="./assets/readme/dashboard-ko.svg" width="100%" alt="모니터에 뜬 Companion 화면보호기 dashboard: 7-segment 시계, 날짜와 입력 시 잠금 표시, 큰 상태별 개수, 그리고 내 응답 대기 · 실행 중 · 턴 종료 · 검토 열. task 카드마다 프롬프트, 기다리는 권한 승인, 지금 하는 도구 동작 또는 마지막 응답, agent, repo · branch, repo 변경 상태를 보여 줍니다. 5분 동안 입력이 없으면 모든 모니터에 뜹니다. 잠금 표시는 잠금 가능 시에만 보이며, 잠금 불가 또는 요청 실패 시 잠금 없이 dashboard 만 닫힙니다.">
<img src="./assets/readme/dashboard-ko.svg" width="100%" alt="모니터에 뜬 Companion 화면보호기 dashboard: 7-segment 시계, 날짜와 화면 잠김 표시, 큰 상태별 개수, 그리고 내 응답 대기 · 실행 중 · 턴 종료 · 검토 열. task 카드마다 프롬프트, 기다리는 권한 승인, 지금 하는 도구 동작 또는 마지막 응답, agent, repo · branch, repo 변경 상태를 보여 줍니다. macOS 화면보호기와 잠금 화면 위, 모든 모니터에 뜹니다. 잠금 표시는 잠금 가능 시에만 보입니다.">
</p>

Companion은 hook 기반 runtime snapshot과 Git 조회 결과를 별도로 사용합니다. `TASK-WORKBRANCH.md` 기록은 필요하지 않습니다. 설치 후 `workbranch hooks install --provider claude` 또는 `--provider codex`를 사용하고 provider의 hook trust를 확인하세요. Grok Build는 명시적인 신뢰 승인이 필요합니다. `workbranch hooks describe --provider grok`로 plugin source를 확인하고, 신뢰하는 경우에만 `workbranch hooks install --provider grok --trust`를 실행하세요. Companion의 Grok 연결 버튼도 같은 source를 먼저 보여줍니다. 자세한 내용은 [Companion 설치와 agent 연결](docs/usage.ko.md#companion-설치와-agent-연결)을 참고하세요.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -229,10 +229,10 @@ Workbranch Companion is a macOS menu bar app with Main, Usage, and Settings view
- Usage: per-agent detail — limits, today's input/output/cache tokens, a shared 14-day daily chart, and a last-7-days table. Companion reads only local files and never signs in: Claude Code transcripts in `~/.claude/projects` and its cached `/usage` result in `~/.claude.json`, and Codex rollouts in `~/.codex/sessions`. Limits are the agents' last observation, so each shows its age and dims when stale; Claude's limits refresh when Claude Code refreshes `/usage`, or live while a Claude Code session is open once Settings > General > Live Claude Limits is on (opt-in: it points `statusLine` in `~/.claude/settings.json` at a relay that saves the status line's `rate_limits` and still runs your previous status line; turning it off restores it)
- Settings: five tabs — General (update and connection status, launch at login, Live Claude Limits), Connections, Menu Bar, Screen Saver and Appearance. They control launch at login, the text beside the menu bar icon (pick any of Claude 5h, Claude weekly, Codex weekly and today's tokens, shown as used or remaining percent, for example `CL 5h 42% · W 63% CO W 18% · 31.0M`; refreshed every minute, `–` when a reading is stale), the interface font and text size, the Claude Code or Codex theme, the screen saver, and CLI/agent connections
- Updates: the header's update button opens Settings > General and checks for updates; its Status group shows the installed and latest versions. It checks Homebrew only when you ask, and one update action upgrades the CLI before Companion. Setup and update buttons show a spinner while they run, and each result appears next to the button that ran it
- Screen saver (opt-in, off by default): with Settings > Screen Saver > While agents work on, the Mac stays out of idle sleep while a session is running or waiting on you, even with the screen locked. If the screen is unlocked and nobody touches the Mac for the chosen time (Dashboard after, 5 minutes by default), every display shows the dashboard below instead of the macOS screen saver. When locking is available, input requests the macOS lock screen; after it locks, your macOS password or Touch ID is required. If locking is unavailable, the lock indicator is hidden and input only closes the dashboard without locking. If lock requests fail after three attempts (about 6 seconds), the dashboard also closes without locking. Once no session is running or waiting, sleep, screen saver and lock follow macOS settings again. Show now previews the dashboard without locking. No extra permissions are requested
- Screen saver (opt-in, off by default): with Settings > Screen Saver > While agents work on, the Mac stays out of idle sleep while a session is running or waiting on you, even with the screen locked. While you use the Mac, the macOS screen saver and lock start on their own schedule. When the screen saver starts or the screen locks, Companion locks the Mac (if macOS has not yet), shows the dashboard below on every display on top of the lock screen, and keeps the display on, so the Mac stays locked and awake and its progress stays in view. Input moves the dashboard aside to reveal the macOS lock screen, where your password or Touch ID unlocks the Mac; left alone for 15 seconds, the dashboard comes back. If locking is unavailable, the lock indicator is hidden and Companion does not lock by itself. Once no session is running or waiting, the lock screen, display and sleep follow macOS settings again. Keep the macOS screen saver time shorter than the display-off time, since Companion never turns a display back on. Show now previews the dashboard without locking. No extra permissions are requested

<p align="center">
<img src="./assets/readme/dashboard-en.svg" width="100%" alt="Companion's screen saver dashboard on a display: a 7-segment clock, the date and 입력 시 잠금 (input locks), large counts per state, and the 내 응답 대기 (waiting on you), 실행 중 (running) and 턴 종료 · 검토 (turn ended, review) columns, where each task card shows its prompt, the permission it waits on, its current tool activity or last response, the agent, repo and branch, and repo changes. No input for 5 minutes brings it up on every display. The lock indicator is shown only when locking is available; unavailable or failed locking closes the dashboard without locking.">
<img src="./assets/readme/dashboard-en.svg" width="100%" alt="Companion's screen saver dashboard on a display: a 7-segment clock, the date and 화면 잠김 (screen locked), large counts per state, and the 내 응답 대기 (waiting on you), 실행 중 (running) and 턴 종료 · 검토 (turn ended, review) columns, where each task card shows its prompt, the permission it waits on, its current tool activity or last response, the agent, repo and branch, and repo changes. It shows on every display over the macOS screen saver and lock screen. The lock indicator is shown only when locking is available.">
</p>

Companion reads hook-driven runtime snapshots separately from Git status. No `TASK-WORKBRANCH.md` reporting is required. Install hooks with `workbranch hooks install --provider claude` or `--provider codex`, then review provider hook trust. Grok Build needs explicit trust: inspect the plugin source with `workbranch hooks describe --provider grok`, and only if you trust it run `workbranch hooks install --provider grok --trust`. Companion's Grok connect button shows the same source first. See [Companion installation and agent connections](docs/usage.md#companion-installation-and-agent-connections).
Expand Down
Loading
Loading