Emacs-AI 통합 실행 계획
🎯 목표
agent-shell에서 Emacs 상태를 AI가 읽고 쓸 수 있게 만들기 → 진정한 REPL 방식 협업 실현
📋 체크리스트 (우선순위 순)
Phase 1: MCP 기초 구축 (오늘 완료 목표)
-
1-1. elisp-dev-mcp 설치 ```bash cd ~/repos/3rd/ git clone https://github.com/laurynas-biveinis/elisp-dev-mcp.git cd elisp-dev-mcp npm install npm run build ```
-
1-2. Emacs 설정 추가 (mcp-server-lib) ```elisp
(package! mcp-server-lib :recipe (:host github :repo “laurynas-biveinis/mcp-server-lib”))
```
-
1-3. Emacs MCP 서버 시작 테스트 ```elisp M-x package-install RET mcp-server-lib RET M-x mcp-server-lib-start
```
-
1-4. OpenCode에 emacs-elisp-dev 서버 등록 ```jsonc
“mcp”: { “emacs-elisp-dev”: { “type”: “local”, “command”: [ “node”, “/home/goqual/repos/3rd/elisp-dev-mcp/build/index.js” ], “environment”: { “EMACS_SERVER_FILE”: “/tmp/emacs1000/server” }, “enabled”: true } } ```
-
1-5. 연결 테스트 ```bash
opencode
“Emacs에서 use-package 함수의 정의를 찾아줘”
```
Phase 2: 기본 통합 (내일 목표)
-
2-1. mcp.el 설치 (Emacs가 MCP 클라이언트로) ```elisp
(package! mcp :recipe (:host github :repo “lizqwerscott/mcp.el”))
doom sync ```
-
2-2. 기본 MCP 클라이언트 설정 ```elisp
(use-package! mcp :config (mcp-add-server “git” :command ’(“uvx” “mcp-server-git” “—repository” (expand-file-name ”~/repos/gh”)))) ```
-
2-3. git MCP 서버 동작 확인 ```elisp M-x eval-expression (mcp-call-tool “git” “git-status” nil)
```
Phase 3: agent-shell 확장 (이번 주 목표)
-
3-1. 컨텍스트 수집 함수 작성 ```elisp
(defun my/agent-shell-context () “현재 Emacs 상태를 문자열로 반환” (format “Buffer: %s\nMode: %s\nPoint: %d\n%s” (buffer-name) major-mode (point) (when (use-region-p) (format “Region:\n%s” (buffer-substring-no-properties (region-beginning) (region-end))))))
M-x eval-expression (my/agent-shell-context) ```
-
3-2. agent-shell 전송 함수 작성 ```elisp (defun my/agent-shell-send-with-context (prompt) “컨텍스트와 함께 agent-shell에 전송” (interactive “sPrompt: ”) (let ((full-prompt (format “%s\n\n<emacs-context>\n%s\n</emacs-context>” prompt (my/agent-shell-context)))) (agent-shell-send-prompt full-prompt)))
(map! :leader :desc “Agent with context” “a e” #‘my/agent-shell-send-with-context) ```
-
3-3. 실제 사용 테스트 ```elisp
SPC a e “이 함수를 설명해줘”
```
Phase 4: 양방향 통합 (다음 주 목표)
-
4-1. eval 함수 작성 ```elisp (defun my/agent-eval-response () “마지막 agent 응답에서 코드를 추출하여 eval” (interactive) (let* ((response (agent-shell-last-response)) (code (when (string-match “```elisp\n\.\*?\```” response) (match-string 1 response)))) (when code (eval (read code)))))
(map! :leader :desc “Eval agent response” “a E” #‘my/agent-eval-response) ```
-
4-2. REPL 워크플로우 테스트 ```
- 함수 작성
- SPC a e “에러 핸들링 추가해줘”
- 응답 확인
- SPC a E (eval)
- 테스트
- SPC a e “추가 수정…”
```
🚀 Quick Start (지금 당장)
1분 테스트: MCP 서버 설치만
```bash
cd ~/repos/3rd/ git clone https://github.com/laurynas-biveinis/elisp-dev-mcp.git cd elisp-dev-mcp
npm install npm run build
node build/index.js
```
5분 테스트: OpenCode 연동
```bash
cp ~/sync/emacs/claude-config/opencode/opencode.jsonc \ ~/sync/emacs/claude-config/opencode/opencode.jsonc.backup
nvim ~/sync/emacs/claude-config/opencode/opencode.jsonc
“emacs-elisp-dev”: { “type”: “local”, “command”: [“node”, “/home/goqual/repos/3rd/elisp-dev-mcp/build/index.js”], “environment”: { “EMACS_SERVER_FILE”: “/tmp/emacs1000/server” }, “enabled”: true }
ps aux | grep emacs
opencode
```
10분 테스트: 컨텍스트 전송
```elisp ;; 1. ~/.doom.d/config.el 끝에 추가 (defun my/test-agent-context () (interactive) (message “%s” (format “Buffer: %s\nMode: %s” (buffer-name) major-mode)))
;; 2. Emacs 재시작 또는 M-x eval-buffer
;; 3. 테스트 M-x my/test-agent-context ;; → Messages 버퍼에 현재 상태 출력되는지 확인
;; 4. agent-shell에서 사용 ;; (수동으로 컨텍스트 복사해서 전송) ```
💡 트러블슈팅 가이드
elisp-dev-mcp가 시작 안 됨
```bash
node —version # v18 이상 필요
cd ~/repos/3rd/elisp-dev-mcp rm -rf node_modules npm install npm run build
EMACS_SERVER_FILE=/tmp/emacs1000/server node build/index.js ```
Emacs 서버 파일 못 찾음
```elisp ;; Emacs에서 서버 파일 위치 확인 M-: server-socket-dir ;; → tmp/emacs1000 같은 경로 나옴
;; 데몬 재시작 M-x kill-emacs emacs —daemon
;; 서버 파일 생성 확인 ls -la /tmp/emacs1000/server ```
OpenCode가 MCP 서버 인식 못 함
```bash
tail -f ~/.local/share/opencode/log/*.log
jq . ~/sync/emacs/claude-config/opencode/opencode.jsonc
pkill opencode opencode ```
agent-shell에서 응답 없음
```elisp ;; agent-shell 디버그 모드 (setq agent-shell-debug t)
;; 로그 확인 Messages agent-shell-log ; 있다면
;; ACP 연결 상태 확인 ;; (agent-shell 구현에 따라 다름) ```
📊 성공 지표
Phase 1 성공 조건
- elisp-dev-mcp가 OpenCode에서 인식됨
- “Emacs에서 함수 찾아줘” 요청이 작동함
- find-function 도구가 실제로 호출됨
Phase 2 성공 조건
- mcp.el이 설치됨
- Emacs에서 git MCP 서버 호출 가능
- (mcp-call-tool “git” “git-status” nil) 작동
Phase 3 성공 조건
- 컨텍스트 수집 함수 작동
- SPC a e로 컨텍스트와 함께 전송 가능
- OpenCode가 Emacs 상태를 이해하는 응답
Phase 4 성공 조건
- eval 함수 작동
- 코드 제안 → eval → 테스트 → 재수정 순환 가능
- 실제 Elisp 개발에서 생산성 향상 체감
🎓 학습 목표
이해해야 할 개념
- MCP 프로토콜: stdio 기반 통신
- Emacs Server: emacsclient 연결 원리
- Elisp eval: 런타임 코드 실행
- ACP 프로토콜: agent-shell ↔ OpenCode
익혀야 할 도구
- mcp-server-lib: Emacs를 MCP 서버로
- mcp.el: Emacs를 MCP 클라이언트로
- elisp-dev-mcp: Elisp 인트로스펙션
- agent-shell: OpenCode ACP 연동
🔄 반복 개선 사이클
``` Week 1: 기초 구축 └─ elisp-dev-mcp 연동 ├─ 성공: Phase 2로 └─ 실패: 트러블슈팅 → 재시도
Week 2: 통합 테스트 └─ agent-shell 확장 ├─ 성공: Phase 4로 └─ 실패: Phase 3 재검토
Week 3: 실전 사용 └─ REPL 워크플로우 ├─ 생산성 향상: 문서화 └─ 불편함 발견: 개선 사이클
Week 4: 최적화 └─ 성능 및 UX 개선 ```
📝 다음 세션 준비
다음에 작업할 때 이 파일을 읽고:
-
현재 진행 상황 확인
- 체크리스트 어디까지 했는지
- 막힌 부분이 있는지
-
다음 단계 실행
- 체크리스트 순서대로
- 막히면 트러블슈팅 참고
-
결과 기록
- 성공/실패 체크
- 새로 발견한 문제점
- 개선 아이디어
메타데이터
- 작성일: 2025-11-21 금요일 13:28
- 작성자: AI Assistant (OpenCode via ACP)
- 목적: 실행 가능한 액션 플랜
- 디바이스: LAPTOP
- 예상 소요: Phase 1-2 (1-2일), Phase 3-4 (1주)
Comments