텔레그램으로 AI에게 코드 수정 시키고 폰으로 바로 확인하는 워크플로우 구축

소개

텔레그램 메시지 하나로 실제 프로젝트 코드를 AI가 직접 수정하고, 맥 (로컬pc) 없이 폰에서 바로 결과를 확인하는 환경을 만들고 싶었습니다.

외출 중이거나 출근하고 나서 등 맥이 없는 환경에서도 프로젝트 코드에서 수정하고 싶을때 텔레그램으로 단단한 자연어 요청을 하는 것으로 코드가 수정되고 결과까지 확인할 수 있는 워크플로우를 만드는 것을 목표로 했습니다.

진행 방법

어떤 도구를 사용했고, 어떻게 활용하셨나요?

- Claude Code CLI — 실제 파일 수정

- python-telegram-bot — 텔레그램 봇

- Tailscale — 맥 ↔ 폰 내부 네트워크 연결 

- Vite — React 개발 서버

Step 1. 텔레그램 → Claude Code 연동

    텔레그램에서 /code 로 명령어를 입력하면 subprocess로 claude -p를 실행하여 파일을 수정하도록 구현했습니다.

  핵심 코드

  def run_claude(prompt: str, cwd: str) -> str:
      full_prompt = (
          "설명하지 말고 실제로 파일을 직접 읽고 편집해줘. "
          "너는 이 프로젝트의 코드를 직접 수정하는 역할이야.\n"
          "1. 먼저 프로젝트 파일 구조를 파악해.\n"
          "2. 요청과 관련된 파일을 스스로 찾아서 읽어봐.\n"
          "3. 설명이나 예시 코드 없이, Edit/Write 툴로 파일을 직접 수정해.\n"
          "4. 완료 후 어떤 파일을 어떻게 수정했는지 한 줄로만 알려줘.\n\n"
          f"요청: {prompt}"
      )
      result = subprocess.run(
          ["claude", "-p", full_prompt,
           "--dangerously-skip-permissions",
           "--output-format", "text"],
          cwd=cwd,
          capture_output=True,
          text=True,
          timeout=180,
      )
      return result.stdout.strip()

** subprocess는 파이썬에서 다른 프로그램을 실행시키는 도구

** 터미널에서 claude -p를 입력하는 것과 같은 원리

claude-p : Claude Code CLI의 비대화형 실행 모드

claude

터미널에서 대화형으로 주고 받음

 claude -p "..." 

프롬프트 한 번 보내고 결과만 받고 종료 

  텔레그램 사용 예시

  /setproject /Users/saerok-portfolio

  /code 강의경력에 삼성생명 AI 과정 2026.05~08 추가해줘

  Step 2. 시행착오 — 파일 수정이 안 되던 문제  

  처음엔 /code 요청을 보내도 Claude가 코드를 설명하는 텍스트만 반환했습니다.

  문제 1: 권한 차단

  - claude -p 비대화형 모드에서 파일 수정 권한이 막혀 있었음

  - 해결: --dangerously-skip-permissions 플래그 추가

  문제 2: 설명만 반환

  - 플래그를 추가해도 Claude가 "방법을 설명"하는 텍스트만 반환

  - 해결: 프롬프트에 "설명하지 말고 직접 수정해"라는 강제 지시문 추가하여 프롬프트 수정

  문제 3: 파일명을 정확히 입력해야 하는 불편함

  - /code src/App.jsx의 CAREER_LECTURE 배열에... 처럼 입력해야 했음

  - 해결: "파일 구조를 먼저 파악하고 스스로 찾아서 수정해"라는 지시 추가

  - 이후 /code 강의경력에 추가해줘 같은 자연어 요청으로 수정 가능해짐

  ---

  Step 3. Tailscale로 폰에서 결과 확인

    vite.config.js 설정

  export default defineConfig({
    plugins: [react()],
    server: {
      host: '0.0.0.0',
      port: 5173,
      allowedHosts: true,
    },
  })
  • vite의 역할 : 코드를 실시간으로 화면에 보여주는 로컬 웹 서버

  • Vite 설정 파일(vite.config.js)에서 host: '0.0.0.0'과 allowedHosts: 

      true를 추가해서 맥 외부(폰)에서도 접근 가능하도록 열어줌

  Tailscale IP 자동 감지 코드

def get_tailscale_ip() -> str:
      try:
          result = subprocess.run(["ifconfig"], capture_output=True, text=True, timeout=5)
          for line in result.stdout.splitlines():
              if "inet " in line:
                  ip = line.strip().split()[1]
                  if ip.startswith("100."):  # Tailscale은 100.x.x.x 대역
                      return ip
      except Exception:
          pass
      return None

   

  텔레그램 /devserver 응답 예시

  ✅ dev 서버 실행 중!

  🖥️  로컬: http://localhost:5173

  🌐 Tailscale: http://100.79.187.20:5173

완성된 워크플로우

  텔레그램: /code 강의경력에 삼성생명 추가해줘

           ↓

  Claude Code가 프로젝트 탐색 → App.jsx 수정

           ↓

  폰 브라우저에서 Tailscale URL로 접속하여 수정된 결과 확인

휴대폰에 있는 한국어 문자 메시지 스크린샷
휴대폰에 있는 한국어 문자 메시지 스크린샷

결과와 배운 점

 배운

  - claude -p 단독으로는 파일 수정이 안 되고, --dangerously-skip-permissions가 반드시 필요함

  - Vite 6.x는 외부 호스트 접근을 기본으로 차단 → allowedHosts: true 필수

  - Tailscale은 맥과 폰 양쪽 앱이 켜져 있어야 통신됨

  앞으로의 계획

  - 봇이 꺼지면 수정이 불가능한 문제 → 맥 부팅 시 자동 실행(launchd) 설정

  - /screenshot 으로 수정 전/후 비교 자동화

뉴스레터 무료 구독