Agent Status Deck 대시보드를 칸반과 상세 패널로 바꾸고, 세션 159개를 뜻으로 찾게 했다
9월 30일부터 10월 8일까지 Agent Status Deck 맥 앱을 네 번 고쳤다. Claude 세션은 지금 대화를 두고 별도 창에서 열리고, 답변 완료 알림은 3분의 1 크기로 줄었다. 큰 카드 9개만 보이던 대시보드는 상태별 칸반과 상세 패널이 됐고, 키워드로 0건이던 검색은 EmbeddingGemma 2로 뜻을 찾는다.
Agent Status Deck은 Codex와 Claude Code 세션마다 상태를 색으로 보여 주고, 누르면 그 세션을 바로 여는 상태판이다. 책상 위 버튼 덱과 맥 앱으로 본다. 9월 28일에 포트폴리오를 올린 뒤로 맥 앱을 네 번 고쳤다. 이 글은 그 기록이다.
9월 30일, Claude 카드를 누르면 지금 대화를 두고 별도 창에서 열린다
Claude 카드를 누르면 Claude 앱의 메인 창이 그 세션으로 바뀌었다. 하던 대화가 화면에서 사라지는 셈이다. 그동안 쓰던 Claude 앱 내부 링크에는 새 창으로 여는 옵션이 없었다. 앱 안의 코드를 열어 봐도 그 링크는 메인 창만 이동시켰다.
그래서 사람이 하는 방법을 그대로 따랐다. Claude 앱 사이드바에서 세션의 “더 많은 옵션 → 다음에서 열기 → 새 창”을 고르는 길이다. 대시보드는 Claude가 저장해 두는 별도 창 목록에서 세션 ID와 제목을 확인해, 이미 열린 창이 있으면 그 창을 앞으로 가져오고 없으면 사이드바 메뉴로 새 창을 연다. 제목이 같은 다른 세션의 창을 잘못 재사용하지 않게 ID까지 맞춘다. 메뉴가 예상대로 열리지 않으면 메인 창을 대신 바꾸지 않고 실패 표시만 남기고 멈춘다.
설치한 앱에서 카드를 눌러 새 창이 생기는 것, 같은 카드를 다시 눌러 그 창이 앞으로 오는 것, 그동안 메인 창의 대화가 그대로인 것을 확인했다.
10월 8일, 답변 완료 알림을 3분의 1 크기로 줄이고 닫기 버튼을 달았다
화면 오른쪽 아래에 뜨는 답변 완료 알림이 너무 크고 끌 방법이 없어 일을 방해했다. 크기를 390×138에서 300×64로 줄였다. 면적으로 약 36%다. 한 줄에 공급자와 “답변 완료”, 프로젝트, 세션 제목을 넣고 안내 문구는 툴팁으로 옮겼다.
오른쪽 위에 X 버튼을 달았다. 처음 생각은 지금 뜬 알림만 닫는 것이었는데, 그러면 줄 서 있던 다음 알림이 바로 떠서 X가 안 먹은 것처럼 보인다. 그래서 X는 대기 중인 알림까지 한꺼번에 비운다. 놓친 완료는 대시보드에 빨간 줄로 남는다.
큰 카드 9개만 보이던 대시보드를 상태별 칸반과 상세 패널로 바꿨다
예전 대시보드는 세션 하나를 높이 258px짜리 카드로 그려서 한 화면에 9개쯤 보였다. 실제 데이터를 보니 세션 159개 가운데 128개(80%)가 한 시간 넘게 쓰지 않은 세션이었고, 답변 완료가 28개, 진행 중이 3개였다. 화면 대부분이 안 쓰는 세션의 노란 카드로 차 있었다.
실제 세션 데이터로 레이아웃 시안 다섯 개를 그려서 비교했다. 한 줄 목록(한 화면 약 25개), 작은 타일(약 66개), 상태별 칸반, 프로젝트별 묶음, 목록과 상세 패널이다. 그중 상태별 칸반에 상세 패널을 붙인 안을 골랐다.
- 왼쪽: 진행 중, 오류, 답변 완료 칸. 칸마다 접을 수 있다.
- 가운데: 한 시간 넘게 쉬는 세션을 좁은 목록으로 따로 모은다.
- 오른쪽: 고른 세션의 상세. 마지막 답변을 최대 20줄까지 보여 주고, 열기·ID 복사·숨기기 버튼과 같은 프로젝트의 다른 세션을 붙인다.
상세 답변은 목록 응답에 넣지 않고, 세션을 고를 때만 따로 받아 온다. 목록 한 줄에서는 마크다운 기호와 표, 태그를 지워 읽기 쉽게 했다. 키보드로 ↑↓ 이동, ⏎ 열기, ⌘⌫ 숨기기를 쓴다. 실제 화면에서 창 폭이 좁을 때 머리글이 두 줄로 꺾이는 것을 발견해 바로 고쳤다.
키워드로 0건이던 검색이 EmbeddingGemma 2로는 6개 중 4개를 맞혔다
세션이 많아지자 검색이 문제였다. 세션 제목은 짧고 내가 기억하는 말과 다르다. “목소리 피치가 이상한 애니”처럼 기억나는 대로 쳐 보면 키워드 검색은 아무것도 찾지 못했다.
그래서 먼저 실험만 했다. 스파크에서 돌고 있던 EmbeddingGemma 2 임베딩 서버로 세션 159개의 프로젝트, 제목, 마지막 답변 앞부분을 벡터로 만들었다. 색인에 35초, 질의 하나에 약 42ms가 걸렸다. 평소 말투로 만든 질의 6개를 던졌더니 키워드 검색은 6개 모두 0건이었고, 의미 검색은 1위 결과가 6개 중 4개 맞았다.
| 질의 | 의미 검색 1위 |
|---|---|
| 목소리 피치가 이상한 애니 | H3/LTX 애니메이션 품질 |
| 여러 컴퓨터 상태 한눈에 | 멀티 기기 모니터링 대시보드 |
| 주식 종목 분석 | 국내 AI 종목 박스권 분석 |
| 검색 품질 평가 | 사유고 검색기 |
“블로그 글 올리기”는 애매했고 “알림 창 크기”는 못 찾았다. 그 이야기는 대화 중간에만 나와서 제목과 마지막 답변에 없었다. 점수도 0.66~0.76에 몰려 있어 점수만으로 관련 없는 결과를 걸러낼 수 없었다.
그래서 키워드 검색을 바꾸지 않고 옆에 붙였다. 두 글자 이상 검색하면 왼쪽 맨 위에 “의미로 찾은 세션” 칸이 따로 뜬다. 색인은 세션의 프로젝트·제목과 상세 답변 1,200자로 만들고, 내용이 바뀐 세션만 다시 임베딩해 디스크에 캐시한다. 임베딩 서버가 꺼져 있으면 키워드로만 동작한다. 세션 텍스트가 맥 밖의 스파크로 나가는 일이라 먼저 물었고, 써도 된다는 답을 받은 뒤에 붙였다. 끄는 설정도 남겼다.
첫 색인은 159개에 약 125초, 이후 질의는 45~68ms였다. 상세 답변까지 색인하자 “검색 품질 평가”에서 사유고의 임베딩 연결 확인 세션이 2위로 올라왔다. 실제 앱에 “목소리 피치가 이상한 애니”를 입력하니 키워드 결과는 0건, 의미 칸에 8개가 떴고 1위인 H3/LTX 애니메이션 품질 세션이 자동으로 골라져 상세 답변이 열렸다.
배운 것
레이아웃은 데이터가 정했다. 세션의 80%가 한 시간 넘게 쉬고 있다는 숫자를 보고 나니 큰 카드를 고집할 이유가 없었다. 실제 데이터로 시안 다섯 개를 그려 놓고 고르니 결정이 빨랐다.
의미 검색은 키워드를 대신하지 않고 보조로 붙였다. 기억나는 말로 찾는 데는 강했지만 점수가 몰려 있어 아래쪽에는 무관한 결과가 섞인다. 그래서 따로 된 칸에 위 몇 개만 보여 준다.