14 단계 사무직 AI 작업실 — 직원마다 개인 비서
이 페이지 목차
목적만든 순서1 · 방향을 정했다 — 메신저와 작업실 둘 다 (9/27)2 · 연결 프로그램 첫 판 — 기본 도구를 전부 끄고 (9/27 21:24)3 · 첫 실물과 로그인 함정 둘 (9/28 오전)4 · 만든 파일을 동료에게 — 9/19 부터 죽어 있던 메신저 파일 (9/28)5 · 명령창 없이 — 설치 파일, 로그인 단추, 첫 직원 설치 (9/28)6 · 개인 파이스 — 기본 도구를 열었다 (9/29 00:50~01:36)7 · 메일 정리함 (9/29 02:24)8 · P&ID 를 못 찾던 원인과 두 벌 카드 17만 장 (9/29 아침)9 · 메일 첨부 — 5MB 한계와 구글 메일 연결 (9/29 11:00~16:58)10 · Gemini 조사, 그리고 npm 으로 깐 Claude Code (9/30)💡 설명함정과 배운 것출처뒷이야기 · 14 / 17단계 · 2026-09-27 ~ 09-30 · 갈래 작업실
이전 단계: 13 플랫폼 지키기 — 한도 · 규칙 · 보안 · 다음 단계: 15 회사 자료 AI — making-ai
핵심 요약
| 항목 | 내용 |
|---|---|
| 이 단계에서 한 일 | 사무직 직원 PC 에 Claude Code(터미널에서 도는 AI 코딩 도구)를 붙여, 플랫폼 화면 안에서 엑셀·워드·발표 자료를 만들게 했다. 두뇌는 직원 각자의 Claude(회사가 산 팀 좌석)에 맡기고, 회사는 자료와 울타리만 준다. 처음엔 기본 도구를 전부 끈 채 내보냈다가, 이틀 뒤 "개인 비서" 로 넓혔다. |
| 기간 | 2026-09-27 21:24 첫 판(a1) ~ 09-30 18:55 연결 프로그램 1.3.5 — 69시간 31분 |
| 규모 | tools/ai-workroom 을 건드린 커밋 15개(9/27~9/30, 10/3 까지 29개) · 제목에 「작업실」이 든 커밋 25개(문서 커밋 포함) · 연결 프로그램 판 1.0.0 → 1.3.5 · 화면 판 a1 → a18 |
| 다룬 도구 | Claude Team · Claude Code · 연결 프로그램 · MCP · claude.ai 조직 커넥터 · claude.ai Gmail 커넥터 · Gmail API · 맥 로컬 LLM · Gemini CLI(조사) |
| 결과 | 작업실 도구 11 → 17종 · 자체 시험 13 → 30개 · 코드 662 → 1,935줄(도구 서버 + 연결 프로그램 + 화면) · 사무직 첫 설치 성공(9/28) |
| 공개 범위 | 사내(로그인 뒤) — 🔒 항목은 넣지 않음 |
한 줄 요약 — 직원 PC 안에 "개인 비서" 를 세우되, 닿을 수 있는 곳은 도구로만 좁혔다. 회사 자료는 그 사람의 로그인 권한으로만 읽고, 쓰기는 사람이 「실행」을 눌러야 했다.
14단계 · 사무직 AI 작업실 — 직원마다 개인 비서
목적
메신저 AI(무료 모델)는 전 직원이 폰에서 쓰기 좋았지만 파일을 만들 수 없었다. "발표 자료 만들어 줘" 하면 글로 흉내만 냈다. 사무직의 일은 회사 자료를 여러 번 읽고 엑셀·워드·발표 자료를 만드는 일이 많다. 산초(개인 비서 시제품)처럼 스스로 여러 번 읽고 파일까지 만드는 채팅이 필요하다고 봤다. 그래서 직원 PC 에서 도는 AI 비서를 하나 더 두기로 했다.
문제가 둘 있었다. 첫째, 서버가 남의 Claude 구독을 대신 쓸 길이 없다(구독은 Anthropic 앱 안에서만 쓴다). 둘째, 사무직 PC 에는 NAS(사내 공용 파일 서버) 드라이브가 붙어 있다. AI 에게 명령 실행과 아무 파일 읽기를 열어 주면, 플랫폼의 권한 판정과 반출금지 원칙을 건너뛰고 NAS 를 직접 읽는다. 두뇌는 각자 PC 에 두고, 닿는 곳은 회사가 정한 도구로만 좁히기로 했다.
만든 순서
1 · 방향을 정했다 — 메신저와 작업실 둘 다 (9/27)
이날 오후에 옛 AI 비서(플랫폼 안에 있던 챗봇)와 메신저 AI 를 하나로 모으는 일을 했다. 대조해 보니 옛 비서 기능 20개 중 메신저에 없던 것이 아홉이었다(프로젝트 생성·견적·결재 기안·OKR·회의실 예약·태그·브리핑 일부·첨부 분석·화면 문맥). 17:20 에 이 기능들을 메신저로 옮겼다(b123). 입력창 열기 여섯은 저장하지 않고, 화면의 원래 입력창을 열어 값만 채운다. 결재선·예약 겹침 검사를 입력창이 이미 하기 때문이다.
17:53 에 옛 비서를 걷어냈다. 파일 24개를 바꿔 113줄을 더하고 3,825줄을 지웠다. 옛 비서 본체(ai-assistant.js)가 2,928줄이었다. 이 비서는 회사망이 *.workers.dev 주소를 막는 PC 의 유일한 AI 길이라 남겨 둔 것이었다. 같은 커밋에서 관문(AI 요청이 지나는 문)에 회사 주소를 붙여 그 이유를 없앴다.
같은 날 방향을 두 줄로 정했다. 메신저는 전 직원·폰·무료 AI. 플랫폼 대시보드 아래 새 메뉴는 사무직·PC·본인 Claude. 두뇌를 개인 PC 에 두는 원칙은 새 아이디어가 아니었다. 9/22 에 깃에 넣은 청사진(blueprint-final)에 "자기 Claude·ChatGPT 가 모델, 회사는 자료만" 이 이미 적혀 있었다. 이날 도우미 AI 가 이것을 새 방향처럼 제안했고, 작성자(crazy4eu)가 청사진에 이미 있다고 바로잡았다. 합의한 설계는 네 가지다. ① 옛 비서는 걷는다(AI 가 셋이 되면 안 된다) ② 저장은 AI 가 제안하고 사람이 「실행」을 누른다 ③ 만든 파일은 플랫폼에 올려 회사 자산으로 ④ 메신저와 작업실이 서로 일을 넘겨 준다.
옛 비서를 걷은 17:53 에서 새 메뉴 첫 판(21:24)까지 3시간 31분이 걸렸다. 배운 것은 하나다. 제안하기 전에 청사진부터 본다.
2 · 연결 프로그램 첫 판 — 기본 도구를 전부 끄고 (9/27 21:24)
구조는 세 겹이다. 브라우저의 작업실 화면이 내 PC 안에서만 열리는 문(47823번)에 말을 보낸다. 그 문의 주인인 연결 프로그램(workroom.mjs)이 같은 PC 의 claude -p 를 부른다. Claude 는 도구 서버(mcp.mjs)의 도구로만 일한다. 첫 판의 도구는 11종이었다(회사 자료 읽기 4 · 작업 폴더 3 · 문서 만들기 3 · 제안 1).
울타리를 다섯 겹으로 쳤다.
- 기본 도구 전부 끔(
--tools "") — 명령 실행과 아무 파일 읽기가 없다. - 작업실 도구 서버 하나만 허용(
--strict-mcp-config), 사람이 쓰던 설정·훅·CLAUDE.md는 싣지 않음(--setting-sources project). - 이 PC 의
CLAUDE*·ANTHROPIC*환경변수를 뗌. 데스크톱 앱이 물려준 토큰이 구독 로그인을 덮어 "로그인 안 됨" 이 났기 때문이다(9/27 실측). - 문은 작업실 화면 주소(Origin)와 이 PC(Host)에서 온 요청만 받음.
- 회사 자료는 그 사람의 플랫폼 로그인 토큰으로만 읽음. 권한 판정은 서버(보안 규칙·관문)가 한다. 쓰기는 하지 않는다.
propose_action은 제안만 하고, 화면 카드의 「실행」은 사람이 누른다.
도구 이름과 칸 이름은 영문 ASCII 로만 썼다. 한글 이름이면 API 가 도구째 뺀다. 9/22~9/25 에 규격 검색 도구가 claude.ai 에서 한 번도 안 돈 이유가 이것이었다. 4분 뒤(21:28) GitHub 경고(높음 2·중간 1)가 와서, 부품의 부품 취약점 둘을 overrides 한 줄씩으로 막았다(npm audit 0).
첫 판은 10파일·2,045줄(그중 package-lock 1,162줄)이었고, 가짜 두뇌를 끼운 자체 시험 13개가 통과했다. 윈도우에서 겪은 함정 둘은 바로 적어 뒀다. where 명령이 한글 사용자 폴더를 깨뜨려 ENOENT(파일 없음 오류)가 났고, 크롬이 공개 사이트에서 내 PC 주소로 가는 접근을 허락받을 때 iframe 에는 허용(local-network-access)을 따로 넘겨야 했다.
3 · 첫 실물과 로그인 함정 둘 (9/28 오전)
화면은 연결됐는데 답이 영어 그대로 "OAuth session expired" 였다. 로그인하려고 Claude 앱 안의 터미널에서 claude 를 켰는데, 그곳은 앱이 물려준 토큰으로 떠서(API 사용량 과금 모드) 로그인 화면이 안 나왔다. 그 PC 의 로그인 파일은 9/17 그대로였다. 작업실은 그 토큰을 일부러 떼므로 만료가 그대로 남았다. 10:10 에 로그인·만료·인증 오류를 한국어 안내로 바꿨다(a2, 1.0.1). 설치 안내에도 같은 주의를 넣었다.
같은 날 실물이 돌았다. NCR(부적합 보고서) 원인별·월별 엑셀이 두 시트로 나왔고, 「업무 등록」 제안 카드도 떴다. AI 가 칸 이름을 틀리고는 스스로 알아채 다시 조회했다(기억 노트의 기록).
11:00 에 두 번째 함정을 잡았다(1.1.1). claude auth status 가 "로그인 됨" 이라 하는데 메일·구독이 비어 있었다. 이 명령이 사람 설정(~/.claude/settings.json)의 환경변수를 읽어, 다른 프록시의 토큰을 로그인으로 착각한 것이다. 대화는 --setting-sources project 로 그 토큰을 안 쓰니, claude.ai 로그인이 만료돼도 "됨" 이라고 할 뻔했다. claude --setting-sources project auth status 는 claude.ai·team 을 제대로 답했다(뒤에 붙이면 unknown option). 시험은 가짜 두뇌가 이 앞머리 없이 부르면 거짓으로 "됨" 을 답하게 만들어, 앞머리를 빼면 시험이 깨지게 했다.
배운 것: 확인하는 쪽과 일하는 쪽이 같은 설정을 봐야 한다.
4 · 만든 파일을 동료에게 — 9/19 부터 죽어 있던 메신저 파일 (9/28)
작업실이 만든 엑셀·워드는 그 PC 폴더에만 있었다. 동료에게 보낼 길이 없었다. 플랫폼 본체에는 첨부·자료실 화면이 한 곳도 없었다(index.html 에서 '첨부' 검색 0건). 직원이 파일을 주고받는 곳은 메신저 방뿐이라, 새 저장 길을 만들지 않고 메신저의 파일 보내기를 쓰기로 했다.
10:36 에 「💬 올리기」를 붙였다(b126, 작업실 a3). 만든파일/ 폴더만 올린다. 받은파일/ 은 사람이 넣은 원본이라 도면일 수 있어서 안 올린다. 방은 사람이 고른다(AI 방·전사 공지는 목록에서 뺐다). 반대로 메신저에서 "워드·PPT 만들어 줘" 하면(형식 낱말과 만드는 말이 둘 다 있을 때) 모델을 부르지 않고 「AI 작업실에서 이어서」 로 넘긴다. 못 만드는 걸 약속하지 않고 무료 한도도 아끼려는 것이다. 엑셀은 넘기지 않는다. 센 표에 「엑셀로 받기」가 이미 있다.
시험하다가 5분 뒤(10:41) 다른 고장을 찾았다. 「올리기」를 실제 '나와의 채팅' 에 보내 보니 "지금은 파일을 보낼 수 없습니다" 토스트(화면 구석에 잠깐 뜨는 알림) 한 줄만 뜨고 메시지가 안 생겼다. 플랫폼 안 메신저가 빌려 쓰는 부모 화면의 Firebase(플랫폼이 쓰는 구글 클라우드 서비스)에 storage 가 없었다. 첨부를 9/19 에 R2(클라우드 파일 보관소)로 옮기면서 빠진 것이다. 그날부터 PC 메신저 방의 파일·사진 보내기가 통째로 죽어 있었다. 오류가 아니라 토스트 한 줄이라 아무도 말하지 않았다(b127). 파일을 R2 로 보내고 fileUrl 칸에는 주소가 아닌 열쇠를 넣었다. 보안 규칙의 칸 허용 목록을 늘리지 않으려는 선택이다.
5 · 명령창 없이 — 설치 파일, 로그인 단추, 첫 직원 설치 (9/28)
첫 시험을 보던 중 "다른 사람도 PowerShell 에서 저렇게 치고 해야 돼? 구글 로그인하듯이 하면 되잖아" 라는 말이 나왔다. 직원에게 irm … | iex 와 claude /login 을 시킬 수는 없었다.
먼저 길이 있는지 봤다. 플랫폼 구글 로그인을 Claude 로 넘기는 길은 없었다. Anthropic 은 자기 OAuth 만 받고, 우리 서버가 Claude 토큰을 만들거나 들고 있을 수도 없다. 대신 Claude Code 2.1.283 에 claude auth login --claudeai --email 과 claude auth status --json 이 있었다. 회사는 이미 Claude Team 이라, 직원은 회사 메일로 팀 좌석에 들어간다.
10:58 에 두 가지를 내놓았다(a4, 1.1.0).
- 설치 파일(
install.cmd) 두 번 누르기. Node.js(winget) → Claude Code(공식 설치기) → 연결 프로그램 순서다. 연결 프로그램이 켤 때claude.exe를 찾으므로 순서가 중요했다..cmd는 줄바꿈(CRLF)을 그대로 두려고.gitattributes에*.cmd -text를 적었다. - 화면의 「Claude 로그인」 단추. 누르면 연결 프로그램이 회사 메일을 싣고
auth login을 돌리고, 이 PC 브라우저가 창을 연다. 안 돌아오면 창에 뜬 코드를 칸에 붙여 넣는다. 10분 안에 안 끝나면 접는다.
a2 에서 a4 까지 48분이 걸렸다. 설치 없이 쓰는 길도 이미 있었다. claude.ai 조직 커넥터 「파이스」 가 등록돼 있었다(9/28 확인). 읽기 전용이고 확인 카드·「올리기」는 없다. 이 창구의 뿌리는 9/24 에 만든 MCP 창구(OAuth 2.1 + 플랫폼 로그인 + 부서 범위)다.
9/28 에 사무직 과장 한 분의 PC 에 첫 설치가 성공했다(막힌 곳 보고 없음). 그 뒤 전사 공지에 설치 안내를 올렸다(기억 노트). 안 본 것이 하나 남았다. 로그인 안 된 PC 에서 진짜 로그인 창이 저절로 돌아오는지는 확인하지 못했다.
6 · 개인 파이스 — 기본 도구를 열었다 (9/29 00:50~01:36)
9/29 에 회사 소개서를 시켜 보니 품질이 낮았고, 파이스처럼 자료를 찾지도 못했다. 그래서 방향을 넓혔다. "개개인한테 파이스를 주자." 구성도는 00:24 에 청사진으로 먼저 남겼다.
00:50 에 연결 1.2.0(a5)을 냈다.
- 기본 도구 10종을 켰다(Read·Write·Edit·Glob·Grep·Bash·PowerShell·WebSearch·WebFetch·Skill). 노력을 Ultracode 로 놓으면 하위 AI(Task)도 켠다.
--permission-mode dontAsk로 허용 목록 밖은 묻지 않고 거절하게 했다. 보는 사람이 없는 창에서 허락을 기다리다 멈추지 않게 하려는 것이다. 울타리가 "전부 끄기" 에서 "허용 목록 + 작업 폴더 안" 으로 바뀌었다. - 모델·노력 고르기(low~max), 대화 목록(고정·이름·찾기·지우기), 개인 기억(
기억/, 옵시디언 호환), 스킬, 작업 기록(.기록/)을 붙였다. 회사 스킬sejong-docs(로고·색·글꼴 같은 회사 양식)도 넣었다. - 반출금지 도면은 NAS 에 따로 폴더가 없고 섞여 있어서, 개인 PC 의 AI 가 그 사람 권한으로 읽는 것은 개인 윤리로 두기로 했다. 그 대신 AI 가 쓴 도구·파일·주소를 작업 기록에 남긴다.
이 기능들은 진짜 Claude Code 로 먼저 재서 정했다. 도구 이름이 Agent 가 아니라 Task 였고, 명령줄에는 /compact 가 없어서 압축은 "요약해서 새 세션 첫 말로" 로 만들었고, 웹 검색·PowerShell 이 머리 없이 돈다는 것을 확인했다.
01:03(a6)에는 "기억해 줘" 가 엉뚱한 곳에 쌓이는 것을 잡았다. Claude Code 가 자기 자동 기억 폴더에 적어서, 화면의 「기억」 칸과 옵시디언이 보는 기억/ 은 비어 있었다. --settings 파일로 autoMemoryDirectory 를 작업 폴더의 기억/ 에 맞췄다. 프로젝트 설정에 두면 보안상 무시되고 명령줄 설정은 받는다. 같은 PC 에서 다시 해 보니 옛 기억을 읽어 답했고, 압축 뒤 새 세션이 요약을 이어받았다(입력 18만 → 2.5만).
01:16(a7)에 모델 목록을 데스크톱 앱과 같게 맞췄고(Opus 5.5·Fable 5.1·Sonnet 5·Haiku 4.5 + 여섯), 01:31(a8)에 그림·파일 첨부를 붙였다. 01:36(a9)에는 다른 PC 에서 나온 API Error: 400 Claude Code 2.1.269 does not support this model; version 2.1.280 or newer is required 를 고쳤다. 설치 스크립트가 Claude Code 가 이미 있으면 건너뛰어 직원 PC 가 옛 판에 멈추는 것이었다. 있으면 claude update 를 돌리고, 연결 프로그램도 켠 뒤 20초에 조용히 업데이트하게 했다. a5 에서 a9 까지 46분이 걸렸고, 자체 시험은 a4 의 15개에서 22개(a5), 23개(a9)가 됐다.
7 · 메일 정리함 (9/29 02:24)
산초가 쓰던 길을 그대로 가져왔다. 우리 구글 앱을 만들지 않고 claude.ai 의 Gmail 커넥터를 쓴다. 직원이 claude.ai 설정에서 회사 구글 계정을 한 번 연결하면 된다. 실측으로 세 가지를 알아냈다.
--strict-mcp-config가 claude.ai 커넥터를 통째로 막는다. 이 옵션을 빼고, 울타리는 허용 목록과dontAsk로 쳤다.- 커넥터가 붙으면 MCP 도구가 "미뤄진 도구" 가 된다. ToolSearch 를 켜고, 안내문에 불러올 목록을 적었다.
- MCP 연결을 안 기다리면 첫 턴에 Gmail 이 없다.
MCP_CONNECTION_NONBLOCKING=0을 줬다. (allowedMcpServers로 좁히면 Gmail 까지 막혀서 쓰지 않았다.)
Gmail 은 읽기·라벨·초안만 열었다. 보내기·전달·지우기·스팸은 어디서도 허용하지 않는다. 정리·초안 같은 뒷일은 더 좁게, 파일 읽기와 Gmail 읽기·라벨·초안·저장 도구뿐이다. 인터넷·코드·회사 자료가 없다. 메일이 AI 를 속여 자료를 밖으로 내보내는 길을 끊으려는 것이다. 도구 둘(mail_save·mail_set_draft)이 늘어 11 → 13종이 됐다. 실물 시험은 90초에 메일 19건을 나눴다(업무 6·광고 6·뉴스레터 4·알림 3). 라벨·초안·보내기는 0번이었다.
8 · P&ID 를 못 찾던 원인과 두 벌 카드 17만 장 (9/29 아침)
9/29 새벽에 작업실에 한 프로젝트의 Equipment List(장비 목록)를 시켰다(15단계의 "30분 사고" 와 같은 부탁이다). 그런데 AI 가 P&ID(배관계장도)를 못 찾고, 못 열고, 회사 양식도 쓰지 않았다. "멍청해졌다" 는 체감이었다. 아침에 맥에서 직접 재 보니 원인이 겹쳐 있었다.
- P&ID 카드는 색인에 있었다. 작업실에는 뜻 검색뿐이라 엉뚱한 프로젝트의 P&ID 가 1등으로 나왔다.
- 작업실에는 원본을 여는 도구가 없었다. 도면은 원칙상 일부러 막혀 있었다.
- 회사 양식을 가르친 적이 없었다.
08:58 에 파이스 쪽에 도구 셋을 만들었다. 09:07 에 작업실에 연결했다(a12, 연결 1.3.1). find_files(이름·경로 낱말 찾기)는 카드 217만 장을 낱말로 걸러 0.8초에 낸다. read_source 는 원본을 읽는다. drawing_info 는 도면을 맥의 로컬 LLM(gemma4 12b)이 읽어 표 하나로 돌려준다. 결정은 이랬다. 도면 파일은 맥 밖으로 나가지 않는다. 로컬 LLM 이 뽑은 표만 Claude 에게 간다. 첫 판에서 gemma4 가 표 대신 "분석해 드리겠습니다" 하는 글을 쓰느라 160초 대부분이 말이었고, 태그 972개가 16k 글자에서 잘렸다. 표 하나만 내게 하고, 옆에 낱말이 붙은 태그를 앞에 놓아 고쳤다.
숫자를 세다가 두 번째 원인이 나왔다. 217만 장을 원본별로 묶어 세니, 같은 원본을 가리키는 카드가 17만 장 더 있었다. 한 프로젝트 폴더는 파일 이름 925개 중 632개가 두 곳에 카드가 있었다. 표본에서 옮길 쪽이 더 새 카드(303 대 47)였다. 옛 판이 아니라 지금의 색인기가 만들고 있었다.
원인은 카드 이름을 80자로 자르는 코드였다. 맥은 NAS 의 한글 이름을 분해형(NFD)으로 받는다. 한글 한 글자가 2~3칸이라 PC(NFC)일 때보다 짧은 데서, 글자 중간에서 잘린다('성적서' → '성저'). 기대하는 경로가 달라져서 PC 시절 카드를 못 알아보고 옆에 새 카드를 썼다. 재색인할 때마다 조용히 쌓였다. 10:43 에 NFC 로 모은 뒤 자르게 고치고 시험에 박았다. 맥에서 두 벌 71,554장과 옛 자리 두 벌 99,197장, 합쳐 170,751장을 되돌릴 수 있게 따로 옮기고, 짝 없는 잘린 카드 4,849장은 이름을 바로잡았다. 도구 셋을 낸 때(09:07)에서 두 벌 고침(10:43)까지 1시간 36분이 걸렸다.
배운 것: "멍청해졌다" 한 체감 밑에 도구 부족과 색인 오염이 따로 있었다. 맥에서 숫자로 센 뒤에야 둘이 갈렸다.
9 · 메일 첨부 — 5MB 한계와 구글 메일 연결 (9/29 11:00~16:58)
초안은 잘 되는데 첨부를 검토해 반영하지는 못했다. 실측해 보니 claude.ai Gmail 커넥터는 메일을 두 모양으로 준다. 보통 모양은 첨부 이름만 주고, 원문(RAW)은 메일 통째를 준다. 원문이 크면 Claude Code 가 대화에 넣지 않고 파일로 떨어뜨린다(17만·70만·80만·150만 자 네 통 모두). 그래서 우리 구글 앱 없이도 꺼낼 수 있었다.
11:00 에 mail_attachments 를 붙였다(a13, 1.3.2). 최근 6시간 안에 저장된 원문 중 메일 번호가 맞는 것만 열고(아무 파일이나 안 읽는다), 첨부를 풀어 받은파일/메일첨부/ 에 둔다. 한글 이름(옛 한글 글자판 EUC-KR · 메일 첨부 이름 규칙 RFC 2231)을 그대로 살렸다. PDF 는 맥 OCR 이 5쪽을 2~4초에 읽고, 도면이면 drawing_info 로 넘긴다. 도면이 붙은 구매요청서에서 맥 로컬 LLM 이 품목 표를 16초에 냈다.
두 번째 시험에서 문제가 하나 나왔다. "AI 초안은 했는데 첨부를 안 읽는다." 뒷일 기록을 보니 AI 는 원문을 부르고 있었고, claude.ai Gmail 연결이 "session expired" 로 다섯 번 거절했다. 바로 앞 단계와 뒤 단계는 됐으니 로그인이 아니라 크기였다. 재 보니 원문 2·3.6·5.2MB 는 오고 8~10MB 는 안 왔다. 그런데 AI 는 이 사정을 말하지 않고 첨부 없이 초안을 썼고, 화면이 마지막 말의 끝 줄만 보여 줘서 아무도 몰랐다. 16:45 에 되풀이를 금지하고, 마지막 줄에 ATTACH_NOT_READ 를 쓰게 해서 메일 창 위에 노란 경고가 뜨게 했다(1.3.3).
16:58 에 「🔗 구글 메일 연결」을 냈다(1.3.4). 직원 PC 에서 루프백 주소와 PKCE(로그인 코드를 중간에 가로채도 못 쓰게 하는 추가 검증)로 Gmail 읽기 전용을 허용하면, 첨부를 Gmail API 로 하나씩 받는다(첨부당 25MB). 갱신 토큰은 작업 폴더 밖 연결 프로그램 폴더에 둔다. 같이 잡은 고장이 하나 더 있었다. 초안·정리 뒷일에 플랫폼 토큰이 안 넘어가서, 첨부를 꺼내도 맥 OCR 이 "토큰이 없습니다" 로 죽었을 것이다. 도구는 17종이 됐다. 이날 16:24 에는 메일 창 바깥을 누르면 창이 닫혀 쓰던 초안이 날아가는 것도 고쳤다. 이제 ✕ 로만 닫힌다(a14).
10 · Gemini 조사, 그리고 npm 으로 깐 Claude Code (9/30)
Gemini 를 두뇌로 붙일 수 있는지 조사했다. 작성자 PC 에 있던 Gemini CLI 0.53.1 로 회사 계정 구글 로그인은 됐다. 그러나 바로 onboardUser 에서 "valid license of this product 가 없다(#3501)" 로 거절됐다. 회사 Workspace 요금에는 Gemini 앱과 Gmail·Docs 속 Gemini 만 들어 있고, Gemini CLI 는 Code Assist 라이선스가 따로 필요했다(기억 노트의 실측). 남은 길은 둘이다. 라이선스를 사거나, 게이트웨이를 거쳐 API 키로 가는 것이다. Gemini CLI 는 GOOGLE_GEMINI_BASE_URL 을 지원해서 키가 직원 PC 에 안 간다. 결정은 "그대로 둔다 — 나중에" 였다. 알아 둔 것은 이 문서의 함정 절에 적었다.
같은 날 대리 한 분의 노트북에서 설치 뒤 "spawn …" 오류가 났고, 18:55 에 고쳤다(1.3.5). 설치 스크립트가 Get-Command claude 로 "이미 있다" 고 보고 공식판(claude.exe)을 안 깔았는데, npm 으로 깐 Claude Code 는 확장자 없는 claude(셸 스크립트)와 claude.cmd 만 PATH 에 둔다. 연결 프로그램이 그중 앞의 것을 골라 불렀다. 윈도우에서 스크립트는 못 부르고, .cmd 는 Node 18.20·20.12 부터 EINVAL(잘못된 호출 오류) 이다. 작성자 PC 는 claude.exe 가 있어 안 걸렸다. .exe·npm 본체만 고르게 고치고, PATH 를 npm 흔적만 있는 노트북처럼 좁혀 옛 코드로 돌려 실패를 확인한 뒤 시험에 넣었다.
💡 설명
- 연결 프로그램: 직원 PC 에서 도는 작은 중계 프로그램. 화면의 말을 받아 그 PC 의 Claude Code 를 불러 주고, 결과를 화면으로 흘려 보낸다.
- Claude Code / 팀 좌석: Claude 를 터미널에서 일 시키는 도구 / 회사가 산 Claude Team 구독의 한 자리. 직원은 회사 메일로 들어간다.
- MCP: AI 가 쓸 도구를 꽂는 표준 규격. 이 단계의 도구 서버(
mcp.mjs)가 이 규격으로 11~17종 도구를 내놓는다. - 울타리: AI 가 닿을 수 있는 곳을 좁히는 장치들. 기본 도구 끄기, 허용 목록, 작업 폴더 안, 쓰기는 제안만.
- Origin·Host 검사: 내 PC 의 문이 "어느 사이트에서 왔나, 내 PC 를 부른 게 맞나" 를 보고 아닌 요청을 거절하는 검사.
- 루프백 주소: 내 PC 안에서만 열리는 주소. 밖에서는 닿지 않는다.
- 카드(파일 카드): NAS 파일 하나를 설명한 작은 메모 파일. 이름·경로·수정일과 일부 요약이 든다. 색인은 이 카드를 읽어 만든다.
- NFC·NFD: 한글을 글자 하나(NFC)로 저장하느냐 자음·모음 낱개(NFD)로 저장하느냐의 차이. 맥은 NFD 로 받아서 글자 수가 두세 배로 센다.
- 로컬 LLM: 인터넷 밖으로 안 나가고 맥에서 직접 도는 AI(여기서는 gemma4). 도면은 이것만 읽는다.
- P&ID: 배관과 계기를 그린 공정 도면. 이 도면에서 장비 목록(Equipment List)을 뽑는다.
- PKCE: 로그인 코드를 중간에 가로채도 못 쓰게 하는 추가 검증. 직원 PC 에서 구글 로그인을 할 때 쓴다.
- R2: 클라우드 파일 보관소. 메신저 첨부가 여기에 저장된다.
함정과 배운 것
- 확인하는 쪽과 일하는 쪽이 같은 설정을 보게 한다.
auth status가 사람 설정의 토큰을 읽어 "됨" 이라고 했다(--setting-sources project를 앞에 붙여야 한다). - Claude 앱 안의 터미널은 앱 토큰을 빌려 쓴다. 거기서는 구독 로그인 화면이 안 나온다. 직원에게는 깨끗한 창이나 로그인 단추를 쓰게 한다.
- 윈도우에서는 한글과 확장자가 함정이다.
where가 한글 사용자 폴더를 깨고, 설치 스크립트(.ps1)는 한글이 있으면 5.1 이 통째로 죽어 ASCII 로만 쓴다..cmd는 줄바꿈을 건드리지 않게-text로 두고, 노드는.cmd를 직접 못 부른다(EINVAL). - npm 으로 깐 Claude Code 와 공식판을 구별한다. 설치 스크립트는
claude.exe가 있는지만 센다. - 도구 이름·칸 이름은 ASCII. 한글이면 API 가 도구째 뺀다.
- 조용히 죽는 것을 의심한다. PC 메신저 파일 보내기는 9월 19일부터 토스트 한 줄만 남기고 죽어 있었다. AI 는 첨부를 못 받고도 말없이 초안을 썼다. 새 기능을 시험할 때는 끝까지 실제로 보내 보고, 못 한 일은 사람 눈에 보이게 한다.
- 증상 하나 밑에 원인이 여럿일 수 있다. "멍청해졌다" 는 도구 부족, 원본 읽기 없음, 색인 오염의 합이었다. 맥에서 숫자로 센 뒤에야 갈렸다.
- 연결 프로그램은 저절로 새로 받지 않는다. 판을 올려도 직원이 화면의 「새 판 받기」를 눌러야 한다(이 단계 뒤 10/1 에 확인). Claude Code 는 연결 프로그램이 켜질 때마다 20초 뒤
claude update로 새로 받는다(a9 부터). - Gemini 를 붙일 때 알아 둘 것(0.53.1). 자동 실행은
-p·-o stream-json·--approval-mode가 있고, 설정 폴더는GEMINI_CLI_HOME, 신뢰는GEMINI_CLI_TRUST_WORKSPACE(없으면 종료 55)다. 구글 로그인은 자동 실행에서도 되지만 기본 브라우저를 열고[Y/n]을 묻는다. 사용자 환경변수GEMINI_API_KEY가 있으면 로그인 대신 그 키로 간다. - Claude 데스크톱 앱 자동 업데이트 직후를 조심한다(이 단계 밖, 9/10 사고). 밀린 예약이 한꺼번에 떠서 앱이 먹통이 되고 재부팅으로만 풀렸다. 업데이트 낌새가 보이면 앱을 한 번 닫고 다시 연다.
- 아직 못 본 것. 로그인 안 된 PC 에서 로그인 창이 저절로 돌아오는지, 나머지 사무직 PC 에 실제로 몇 대가 깔렸는지는 확인하지 못했다.
출처
sejong-platform-v2커밋: f865e27 · 39fa994 · 786e58c · f1210e7 · c9cecc4 · da3ca8d · 42db092 · 9607c96 · 1e959ac · c4f412a · 27cbd0f · 74d01a8 · bd8cc3d · 4299eb1 · d70bcf1 · 90ad51a · f31d764 · b27c53e · 9ee572c · 6781318 · 601e51c · 403cb8f · e2a4884 · 05c9661pais_project커밋: 4d679af · 50476f4 · eb2335c · 0bf3e0e · 75215cf · 448ffc3 · 735a691 · 0c9b94f- 문서:
docs/blueprints/blueprint-final.html·docs/blueprints/workroom-v2.html - 기억 노트: office-ai-workroom-plan · workroom-data-tools · workroom-gemini-option · claude-desktop-pc