기능
채팅창 하나로 무엇까지 시킬 수 있나. 그리고 그중 둘이 체감을 바꿨습니다.
| 무엇 | 명령 | 하는 일 |
|---|---|---|
| 대화 | — | DM은 이어지고, 스레드는 스레드끼리 따로. 채널 최상위는 세션을 안 만든다 |
| 긴 작업 | !jobs !cancel !stop |
동시 2개, 같은 스레드는 순서대로. 몇 시간짜리 파이프라인의 진행이 스레드에 흐른다 |
| 예약 | !schedule |
매일·매주·1회. 재부팅하면 반복은 다음 차례로 밀고 1회짜리는 즉시 |
| 목표·넛지 | !goal !nudge |
묵은 목표(72시간), 같은 이유 3연속 실패, 고른 두뇌 응답 불가 — 셋을 감시해 DM으로 찌른다 |
| 두뇌 교체 | !provider |
이 PC에 이미 로그인된 CLI를 스폰한다 |
| 체크리스트 | !check |
눌러서 체크하면 보는 사람 전원에게 동기화된다 |
| 조직 | !org |
파일 한 장 = 조직 하나. 멤버·채널·읽을 폴더·쓸 명령·시간당 상한 |
| 자동 청취 | !listen !exit |
정한 구역 안에선 멘션 없이 답한다 |
| 플러그인 | — | plugins/ 에 파일 하나 = 명령 하나 |
| 감시 | doctor |
죽으면 5분 안에 되살린다. 심장박동이 멎은 것도 죽음으로 친다 |
| 사용량 | !usage |
90일치. 메타데이터만 남기고 대화 본문은 안 적는다 |
세션을 어디에 묶느냐
처음엔 세션 키가 메시지 자기 식별자였다. 그래서 스레드는 멀쩡한데 DM 최상위가 매번 새 대화로 시작했다. 어제 하던 얘기를 오늘 이어서 못 한다는 뜻이다.
지금은 셋으로 갈렸다.
- DM — 이어진다. 유휴 시간이 지나면 만료된다
- 스레드 — 스레드마다 따로. 다른 스레드와 안 섞인다
- 채널 최상위 — 세션 없음
마지막 하나는 기능이 아니라 방어다. 채널에서는 여러 사람이 쓰는데, 거기에 세션을 붙이면 다른 사람의 대화가 내 맥락에 섞인다. 편의를 하나 포기하고 그 경로를 아예 막았다.
여기에 딸린 함정도 있었다. 잡 큐의 직렬화 키를 세션 키로 바꾸지 않으면, 연속으로 온 DM 두 건이 같은 세션을 동시에 재개한다. 세션을 이어 붙이는 순간 큐도 같이 손봐야 한다.
체크리스트를 왜 직접 만들었나
슬랙에 체크박스가 기본으로 있는데도 따로 만들었다. 이유가 하나다 — 네이티브 체크박스는 사용자별 입력이라 동기화가 안 된다. 내가 체크한 걸 다른 사람이 볼 수 없다.
그래서 버튼 라벨을 통째로 다시 그리는 방식으로 만들었다. 누가 누르면 메시지 자체가 갱신돼서 보고 있는 전원에게 같은 상태가 보인다.
말로도 토글된다. 버튼을 못 누르는 상황이 있어서다.
목표를 감시하는 것과 알리는 것
넛지는 한 명사를 두 방향으로 쓴다. 당김은 부작용 없이 추천 프롬프트를 만들고, 밀기는 쿨다운을 두고 DM으로 찌른다.
감시 대상 셋을 고를 때 기준이 있었다 — 아무것도 이해할 필요가 없을 것.
- 목표가 72시간째 안 움직였다
- 같은 이유로 3연속 실패했다
- 고른 두뇌가 응답을 못 한다
셋 다 세는 것으로 판정된다. 대화 내용을 읽고 “이거 헛돌고 있는데?“를 판단하는 방식은 기각했다.
사용량은 메타데이터만 남긴다
90일치 기록이 남는데 대화 본문은 안 적는다. 언제, 누가, 얼마나 걸렸는지만.
프라이버시에는 유리하고 감사에는 불리하다. “그때 무슨 지시를 내렸냐”에 답할 수 없다. 이건 트레이드오프고, 개인 도구라 앞쪽을 골랐다. 팀에 배포한다면 뒤집어야 할 결정이다.