ddiring 터미널 매핑·Windows 알림 리서치 — 요약 (2026-08-23)
8개 에이전트 팬아웃(4축+확장 4), 소스 102건, 주장 74건 중 검증 42 / 미확정 32 / 반박 0 (validate_ledger 통과, signature 588417d1).
확정 결론
- 기존 매핑 대부분 유효, 수정 1건 확정: Cursor 매핑은
와일드카드가 위험 —
com.todesktop.*는 다른 ToDesktop 배포 앱(예: ClickUp)까지 오탐하므로 고정 IDcom.todesktop.230313mzl4w4u92정확 매칭으로 바꿔야 한다. Windsurf는 Devin Desktop으로 리브랜드됐지만 번들 IDcom.exafunction.windsurf는 그대로다. - CC 병렬 세션 관리 앱 신규 매핑(검증): cmux
com.cmuxterm.app, Conductorcom.conductor.app, Orcacom.stablyai.orca(로컬 실측), Sculptorcom.electron.sculptor, Paseosh.paseo.desktop(로컬 실측). tmux/Zellij 류 CLI 멀티플렉서는 앱 번들이 없어 호스트 터미널로 잡힌다(실측 — 올바른 동작). - Windows 토스트: 의존성 0의 PS 5.1 WinRT 원샷(클릭 무반응)과 BurntToast v1.0(클릭 포커스 가능, 모듈 설치)이 두 축. WSL은 powershell.exe interop 경유.
- Windows 부모 앱 식별: 만능 변수가 없어 2단 — env 판별(안쪽 변수 우선: TERM_PROGRAM=vscode를 WT_SESSION보다 먼저 검사, 상속 오탐 함정) → PowerShell 부모 프로세스 추적 폴백.
미확정 요약 (재확인 후 채택)
- 구글 Antigravity: 신 cask ID가 로컬 구버전(
-ide접미)과 갈라짐 → prefix 매칭 필요하나 신버전 미실측. - Claude Code 훅의 Windows 실행 셸(bash 기본·powershell 폴백)과 네이티브 토스트 채널 부재는 공식 문서 단일 출처 — Windows 실기 검증 필요.
- iTerm2·VS Code·Ghostty·JetBrains 번들 ID는 통념 부합하나 단일 출처.
- 상세는
01_report.md의 미확정 annex와unresolved_claims.json.
ddiring 터미널 매핑 + Windows 알림 구현 리서치 (2026-08-23)
본문은 검증(verified) 주장만 단정형으로 기술한다. 단일 출처 등으로 교차검증 미달인 항목은 맨 아래 미확정(Unresolved) annex에 모아뒀다 — 채택 전 재확인 필요.
1. 기존 매핑 검증 결과 — 확정분
| 앱 | 번들 ID | 근거 | 비고 |
|---|---|---|---|
| Terminal | com.apple.Terminal |
로컬 실측 | |
| Cursor | com.todesktop.230313mzl4w4u92 |
로컬 실측+cask | ⚠️ com.todesktop.* 와일드카드는 ClickUp 등 타 ToDesktop
배포 앱까지 오탐 위험 → 고정 ID 정확 매칭으로 변경 |
| Windsurf→Devin | com.exafunction.windsurf |
cask 개명 이력 교차 | 2026-06-02 Devin Desktop으로 리브랜드(cask windsurf→devin-desktop)됐지만 번들 ID는 그대로 — 기존 매핑 유효, 표시명 "Devin" 병기 고려 |
| Warp | dev.warp.Warp-Stable |
로컬 실측 | 채널 접미사 → dev.warp.Warp* prefix 유지 적절 |
| Alacritty | org.alacritty |
brew API 실측 | |
| kitty | net.kovidgoyal.kitty |
brew API 실측 | |
| WezTerm | com.github.wez.wezterm |
brew API 실측 | |
| Tabby | org.tabby |
공식 저장소 appId 정의+cask 교차 | 미특정이었던 ID 확정 |
| Hyper | co.zeit.hyper |
brew API 실측 | Vercel 개명 후에도 zeit 네임스페이스 유지 |
| Zed | dev.zed.Zed |
로컬 실측+cask | Preview/Dev 채널 → dev.zed.Zed* prefix 유지 |
| Paseo | sh.paseo.desktop |
로컬 실측+cask |
나머지 기존 매핑 6종(통념 부합 단일출처들과 상충 1건)은 미확정 annex 참조.
2. CC 병렬 세션 관리 앱 — 확정 매핑
| 앱 | 번들 ID | 근거 | 형태 |
|---|---|---|---|
| cmux (manaflow-ai) | com.cmuxterm.app
(+.nightly/.debug) |
repo 설정 1차+cask | Swift+libghostty 네이티브 |
| Conductor (Melty Labs) | com.conductor.app |
cask zap+공식 | macOS 전용 클로즈드소스 |
| Orca (Stably AI) | com.stablyai.orca |
로컬 실측 | Electron. ⚠️ brew 'orca'는 plotly 도구(동명이인) |
| Sculptor (Imbue) | com.electron.sculptor |
cask zap+공식 | Electron 기본 appId 그대로 출하 |
| Waku (egoist) | sh.waku (dev sh.waku.dev) |
Info.plist 1차 | Rust+GPUI 네이티브 |
| GraphCode | dev.graphcode.app |
Tuist Project.swift 1차 | Swift 네이티브 |
| Fletch (fwdai) | com.fletch.desktop |
tauri.conf.json 1차 | Tauri |
| constellagent | com.constellagent.app |
electron-builder.yml 1차 | Electron |
번들 ID 없음(호스트 터미널로 잡힘): Vibe Kanban(npx 로컬 웹앱, 데스크톱 배포 없음). Zellij/tmux는 앱 번들이 없는 CLI로 실측 확인 — 멀티플렉서 세션은 frontmost가 호스트 터미널(예: ghostty)로 잡히므로 ddiring 훅에는 자동으로 호스트 터미널이 표시된다(올바른 동작).
추가 터미널/IDE 확정 ID: Rio=com.raphaelamorim.rio,
Termius=com.termius-dmg.mac(비정형 주의),
VSCodium=com.vscodium,
Wave=dev.commandline.waveterm,
Positron=com.rstudio.positron,
Kiro(AWS)=dev.kiro.desktop,
Trae=com.trae.app.
3. Windows 구현 가이드 — 확정분
토스트 발화
- PS 5.1 WinRT 원샷: 외부 의존성 0으로
[Windows.UI.Notifications.ToastNotificationManager, …, ContentType = WindowsRuntime]타입 로드 → 템플릿 XML →CreateToastNotifier(<AppId>).Show(). 단 원샷 스크립트는 프로세스가 종료돼 activation 이벤트를 못 받으므로 클릭 무반응이 기본. - BurntToast v1.0: 2025-07 v1.0 도달, PS Gallery 2,500만+ 다운로드, Windows 10/11·PS 5.1·7.3+ 호환으로 활발히 유지보수. v1.0의 ActivatedAction script block으로 클릭 시 포커스 스크립트 실행 가능 — 클릭 동작이 필요하면 이 경로가 가장 실용적.
- WSL:
powershell.exeinterop으로 WinRT 스크립트 직접 호출, 또는 wsl-notify-send.exe를 notify-send 셸 함수로 감싸 Stop 훅에서 호출(클릭 동작 미지원).
부모 터미널 식별
- 1차 env 판별 — 검사 순서가 핵심(안쪽 변수 우선):
TERM_PROGRAM=vscode(VS Code 계열) →WT_SESSION+WT_PROFILE_ID(Windows Terminal) →ConEmuPID(ConEmu/cmder) → mintty(Git Bash 자체 창). 상속 오탐 주의: Windows Terminal에서 VS Code를 열면 VS Code 통합터미널에도 WT_SESSION이 남는다 — vscode 검사를 먼저 해야 한다. - 2차 폴백 — 부모 프로세스 추적: PowerShell로 프로세스 트리를 거슬러 known 터미널 exe(WindowsTerminal/wezterm-gui/alacritty/Code/ConEmu64/Cursor/mintty/Hyper/Tabby…)를 찾는다. Windows Terminal은 직계 부모가 아닐 수 있어 전체 계보 검사가 필요하다.
- WSL에서의 식별: WSL2는 VM이라 /proc으로 Windows 프로세스가 안 보이고 부모 추적도 wslhost에서 끊긴다. 실용 경로는 환경변수 월경 — Windows Terminal은 WSLENV로 WT_SESSION·WT_PROFILE_ID를 WSL 안까지 전달한다.
- 클릭 포커스: 표준 패턴은 터미널 프로세스
MainWindowHandle에
SetForegroundWindow(+ShowWindowAsync) P/Invoke, 간단 대안은(WScript.Shell).AppActivate(PID). 제약: 포그라운드 잠금 정책상 사용자가 다른 창 작업 중이면 강제 전환이 거부될 수 있다(작업표시줄 깜빡임 폴백). - Git Bash 훅 판별 함수(bash 몇 줄): env 1차 → powershell.exe 부모 추적 폴백 구조가 실증돼 있다.
4. ddiring 반영 권고
- 매핑 수정: Cursor를 고정 ID로 정확 매칭(확정). 구글 IDE는 신·구 버전 ID 갈림 → prefix 확대(annex 상충 항목 — 신버전 실측 후).
- 매핑 추가: cmux·Conductor·Orca·Sculptor(확정분 우선), Rio·Kiro·Trae·Wave·VSCodium 검토. 그 외 미확정 매니저들은 annex 재확인 후.
- Windows 지원: notify.sh 단일 파일
uname분기 — mac=terminal-notifier / win=powershell.exe WinRT 원샷 기본 + BurntToast 옵트인(클릭 포커스). 부모 식별은 §3 env 2단 판별표 이식. 셸 스크립트 줄끝을 LF로 고정하는 설정 필수(annex 함정 항목 참조). - 표시명 갱신: Windsurf→"Devin" 병기.
미확정 (Unresolved) — 재확인 후 채택 (32건 중 채택 관련 핵심)
아래는 단일 출처(대부분 공식 문서·저장소 설정이라 신뢰도는 높으나 교차검증 미달) 또는 상충으로 abstention 처리된 항목. 전체는
unresolved_claims.json.
| 항목 | 내용 | 재확인 방법 |
|---|---|---|
| iTerm2 | com.googlecode.iterm2 (cask 단일출처, 통념 부합) |
설치 후 Info.plist |
| VS Code | com.microsoft.VSCode / Insiders
com.microsoft.VSCodeInsiders |
〃 |
| Ghostty | com.mitchellh.ghostty (cask 단일출처) |
〃 |
| JetBrains | com.jetbrains.* — WebStorm 대소문자 혼재,
case-insensitive prefix 권장. Android Studio는 별도 네임스페이스 |
Toolbox 설치본 실측 |
| Antigravity 상충 | 신 cask(v2.9.1)=com.google.antigravity, 로컬
구버전=com.google.antigravity-ide →
com.google.antigravity* prefix 필요 |
신버전 업데이트 후 실측 |
| Crystal | com.stravu.crystal (package.json 단일출처) |
설치 실측 |
| Superset | com.superset.desktop(+.canary), ELv2, 13k
stars |
설치 실측 |
| clave / diri / jean / Tempest / parallel-code / Xum | com.clave.app / 스크립트 조립 /
com.jean.desktop / com.user.tempest(스캐폴드
기본값 — 변경 위험) / com.parallel-code.app /
com.mux.app |
각 설치 실측 |
| Claude Squad / Omnara / Terragon | CLI·웹 전용, 번들 ID 없음. Terragon은 2026-01-16 서비스 종료→terragon-oss | 저장소 재확인 |
| 인기도 순위 | Homebrew 30일 설치수: Ghostty 32k > iTerm2 22k > Zed 9.1k > Warp 8.9k > Cursor 8.1k > kitty > WezTerm > VSCodium > Antigravity > Alacritty | brew analytics API |
| 훅 실행 셸 | Windows 훅 셸 기본 bash(Git Bash)·미설치 시 powershell 폴백,
핸들러별 shell 필드 강제 가능(args와 배타) —
공식문서 단일출처 |
Windows 실기 테스트 |
| 네이티브 토스트 부재 | preferredNotifChannel에 windows_toast 없음, 요청 이슈
#67220 'not planned' 마감 |
이슈/문서 재확인 |
| PS7 WinRT | pwsh에서 WinRT 프로젝션 제거로 원샷 실패 가능, 미등록 AppId는 Win11에서 미표시 사례 | Windows 실기 |
| AUMID 차용 | Claude Desktop AUMID Claude_pzs8sxrjxfjjc!Claude로 공식
아이콘 표시 가능(PoC) |
Windows 실기 |
| CRLF 함정 | core.autocrlf=true 시 .sh 훅 CRLF 체크아웃으로 Git Bash
실행 실패 → .gitattributes LF 고정 |
Windows 실기 |
| SESSIONNAME | 터미널 식별에 사용 불가(모든 로컬 터미널 'Console') | Windows 실기 |
| Cursor 판별 한계 | Windows에서 TERM_PROGRAM=vscode 동일 → exe 이름 부모 추적으로 구분, CURSOR_TRACE_ID류 고유 변수는 미검증 | Windows 실기 |
| soulee-dev 기성품 | claude-code-notify-powershell — 의존성 0 ps1, 이벤트별 토스트 | 저장소 검토 |
Refuted
없음.