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 워크플로우 테스트 ```

    1. 함수 작성
    2. SPC a e “에러 핸들링 추가해줘”
    3. 응답 확인
    4. SPC a E (eval)
    5. 테스트
    6. 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 개발에서 생산성 향상 체감

🎓 학습 목표

이해해야 할 개념

  1. MCP 프로토콜: stdio 기반 통신
  2. Emacs Server: emacsclient 연결 원리
  3. Elisp eval: 런타임 코드 실행
  4. ACP 프로토콜: agent-shell ↔ OpenCode

익혀야 할 도구

  1. mcp-server-lib: Emacs를 MCP 서버로
  2. mcp.el: Emacs를 MCP 클라이언트로
  3. elisp-dev-mcp: Elisp 인트로스펙션
  4. 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 개선 ```

📝 다음 세션 준비

다음에 작업할 때 이 파일을 읽고:

  1. 현재 진행 상황 확인

    • 체크리스트 어디까지 했는지
    • 막힌 부분이 있는지
  2. 다음 단계 실행

    • 체크리스트 순서대로
    • 막히면 트러블슈팅 참고
  3. 결과 기록

    • 성공/실패 체크
    • 새로 발견한 문제점
    • 개선 아이디어

메타데이터

  • 작성일: 2025-11-21 금요일 13:28
  • 작성자: AI Assistant (OpenCode via ACP)
  • 목적: 실행 가능한 액션 플랜
  • 디바이스: LAPTOP
  • 예상 소요: Phase 1-2 (1-2일), Phase 3-4 (1주)