기능
채팅창 하나로 무엇까지 시킬 수 있나. 그리고 그중 둘이 체감을 바꿨습니다.
채팅창 하나로 어디까지 시킬 수 있나. 기능이 11가지인데, 그중 둘이 실제 체감을 바꿨습니다.
할 수 있는 일들
| 무엇 | 하는 일 |
|---|---|
| 대화 | 그냥 말 걸면 답함 |
| 긴 작업 | 몇 시간짜리 작업을 걸어 두고 진행 상황이 대화에 흘러옴 |
| 예약 | 매일·매주·한 번. 컴퓨터를 껐다 켜도 안 잊어버림 |
| 목표 챙김 | 묵은 목표를 먼저 찔러 줌 |
| AI 교체 | 어떤 AI를 쓸지 바꿈 |
| 체크리스트 | 누가 체크하면 모두에게 보임 |
| 조직 설정 | 누가 무엇까지 쓸 수 있는지 |
| 자동 듣기 | 정해진 곳에서는 이름 안 불러도 답함 |
| 기능 추가 | 파일 하나 = 명령 하나 |
| 자기 감시 | 죽으면 5분 안에 스스로 되살아남 |
| 사용량 | 90일치 통계 |
체감을 바꾼 것 하나 — 「어제 하던 얘기를 오늘 이어서」
처음에 이상한 점이 있었습니다. 답글로 이어가는 대화는 잘 이어지는데, 1:1 대화는 매번 처음부터 시작됐습니다.
원인을 찾아보니, 대화를 구분하는 열쇠를 «메시지 한 통의 고유번호»로 잡고 있었습니다.
답글은 원래 글의 번호를 공유하니까 이어집니다. 그런데 1:1 대화의 새 메시지는 매번 새 번호입니다. 그래서 매번 새 대화가 됐습니다.
「어제 하던 얘기를 오늘 이어서 못 한다」는 건 생각보다 큰 불편입니다. 매번 배경 설명을 다시 해야 하니까요.
열쇠를 바꿔서 1:1 대화는 계속 이어지게 했습니다.
체감을 바꾼 것 둘 — 「체크리스트를 왜 직접 만들었나」
슬랙에 체크박스 기능이 이미 있습니다. 그런데 따로 만들었습니다.
이유가 하나입니다.
슬랙 기본 체크박스는 «각자 자기 것»이라, 내가 체크한 걸 남이 못 봅니다.
혼자 쓸 거면 상관없는데, 여럿이 같은 목록을 보며 일할 때는 이게 치명적입니다. 누가 어디까지 했는지 모르니 목록의 의미가 없습니다.
그래서 누가 체크하면 보는 사람 전원에게 반영되는 것으로 직접 만들었습니다.
→ 기본 기능이 있다고 다 쓸 수 있는 게 아닙니다. 「있나」가 아니라 「내 상황에서 성립하나」를 봐야 합니다.
「찔러 주는 기능」은 한 단어를 두 방향으로 씁니다
목표를 챙겨 주는 기능이 있는데, 같은 이름으로 두 가지 다른 동작을 합니다.
| 방향 | 무엇 | 부작용 |
|---|---|---|
| 당김 | 제가 물어보면 추천을 만들어 줌 | 없음 |
| 밀기 | 먼저 1:1로 찔러 줌 | 있음 — 그래서 쉬는 시간을 둠 |
밀기 쪽에는 쉬는 시간을 뒀습니다. 이유는 하나입니다. 먼저 말을 거는 기능은 조금만 잘못 만들어도 잔소리가 되고, 잔소리가 되는 순간 사람은 그 기능을 꺼 버립니다.
그래서 한 번 찌르면, 한동안 조용합니다.
그리고 무엇을 안 남기는가
사용 기록이 90일치 남는데, 대화 내용은 안 적습니다.
남는 것: 언제, 누가, 얼마나 걸렸는지.
이게 중요한 이유는 — 기록은 나중에 지우기 어렵다는 것입니다. 「일단 다 남기고 나중에 정리하자」는 대개 정리가 안 됩니다. 처음부터 안 남기는 게 유일하게 확실한 방법입니다.
여기부터는 자세한 기록입니다
| 무엇 | 명령 | 하는 일 |
|---|---|---|
| 대화 | — | 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일치 기록이 남는데 대화 본문은 안 적는다. 언제, 누가, 얼마나 걸렸는지만.
프라이버시에는 유리하고 감사에는 불리하다. “그때 무슨 지시를 내렸냐”에 답할 수 없다. 이건 트레이드오프고, 개인 도구라 앞쪽을 골랐다. 팀에 배포한다면 뒤집어야 할 결정이다.