엔지니어링

SSH용 AI 명령 생성: 10,000명 사용자에게서 배운 것

1년간 AI 명령 제안을 운영하며 배운 프롬프트 설계, 컨텍스트 윈도우, 신뢰 형성.

CC Chen Chen· 창업자·2026년 5월 14일·9분 분량

왜 SSH가 채팅보다 어려운가

LLM에게 셸 명령을 작성하게 하는 것은 작은 문제처럼 들립니다. 그렇지 않습니다. 채팅 제품에서 잘못된 답변은 사용자가 다시 읽거나 다시 묻는 비용입니다. 셸에서 잘못된 답변은 프로덕션 서버에서 실행되는 명령의 비용입니다. 출력이 실행될 때 "충분"의 기준은 훨씬 높습니다.

TermAI v0.4에 AI 명령 도우미를 출시하고 1년의 텔레메트리를 봤습니다. 약 3분의 1의 사용자가 매일 사용; 약 절반이 주간으로 사용; 4분의 1은 거의 만지지 않습니다. 매일 사용자가 우리가 가장 주의 깊게 듣는 사람들 ── 그들은 모든 작은 결함을 발견하고 의견을 가지고 있습니다.

컨텍스트: 얼마나, 무엇을

첫 버전은 사용자의 질문만 보내고 다른 것은 아무것도 보내지 않았습니다. 모델은 종종 셸 컨텍스트를 잘못 추측 ── Alpine에서 Ubuntu라고 가정, zsh에서 bash라고 가정, root가 아닌데 root라고 가정.

그래서 컨텍스트를 추가했습니다. 하지만 얼마나?

저렴한 것은 전체 터미널 스크롤백을 보내는 것. 우리는 안 했습니다, 세 가지 이유로:

  1. 프라이버시. 스크롤백에는 모든 것이 포함됨 ── 파일 내용, 출력, 스크롤되어 사라진 비밀. 기본적으로 모델에 보내는 것은 잘못된 느낌이었습니다.
  2. 토큰 비용. 긴 컨텍스트는 비쌉니다. AI 도우미 사용은 무료 등급; 호출당 10배 비용을 감당할 수 없습니다.
  3. 품질. 직관에 반하여, 더 많은 컨텍스트가 종종 답변을 **해칩니다**. 모델은 새 질문과 관련 없는 스크롤백의 오래된 오류에 매달립니다.

출시된 동작: 도우미는 작업 디렉터리, 마지막 명령의 종료 코드, (선택적으로) 마지막 5줄의 출력을 봅니다. 나머지를 누설하지 않고 답변을 **이 세션**에 고정시키기에 충분. 프록시는 전달 전에 IP, 호스트명, 명백한 비밀을 제거합니다. 사용자는 "맨 프롬프트"를 위해 컨텍스트를 완전히 거부할 수 있습니다.

작동하는 프롬프트 설계

프롬프트 엔지니어링은 자체 에세이 가치가 있지만, 1년 반복 후 수렴된 패턴은 다음과 같습니다:

System: You are a shell command generator. Output ONLY a runnable
command, no explanation. If the request is ambiguous, generate the
most common interpretation. Do not include backticks or markdown.
Target shell: {detected_shell}
OS: {detected_os}

User: {question}

Context (last 5 lines of output):
{context_lines}

주목할 두 가지. 첫째, 모델에게 명령만, 명령만 출력하라고 말합니다 ── 서두 없음. 모바일 사용자는 결과를 원하지 튜토리얼이 아닙니다. 둘째, 시스템 프롬프트는 명확화를 요청하는 대신 "가장 일반적인 해석"이라고 말합니다. ChatGPT에서 채팅을 통해 명확화를 요청하는 것은 괜찮습니다; 터미널에서는 그것이 흐름을 깨는 추가 라운드트립입니다. 사용자가 더 구체적인 것을 원하면 결과를 편집할 것입니다.

실행 전 확인

생성된 명령은 절대 자동 실행되지 않습니다. 도우미가 제안을 생성; 당신이 탭하여 터미널로 전송. 이것은 명백하게 들리지만, 전체 제품에서 가장 중요한 UX 결정입니다. 사용자가 도우미를 신뢰하는 것은 정확히 그것이 놀라움을 가져오지 않기 때문입니다.

각 제안에 세 가지 액션: 실행은 있는 그대로 전송, 편집은 조정을 위해 입력 줄에 떨어뜨림, 해제는 제안을 닫음. "간단한 명령에 대한 자동 실행" 모드를 고려하고 잠시 출시했습니다. 사용자는 싫어했습니다. ls조차 탭이 필요합니다, 도우미가 다음에 제안하는 것은 ls가 아닐 수 있기 때문에.

오류를 컨텍스트로 붙여넣기

가장 많이 사용되는 흐름은 명령 생성이 아닌 오류 분석으로 밝혀졌습니다. 패턴: 사용자가 명령을 실행, 실패, 오류 출력을 선택, "이에 대해 AI에게 묻기"를 탭. 도우미는 오류, 실패한 명령, 컨텍스트로서 스크롤백의 마지막 몇 줄을 가져옴 ── 무엇이 잘못됐는지 설명.

이 단일 기능이 도우미 사용량의 40%를 차지할 수 있습니다. 오류 메시지는 거칠고 위협적; LLM은 그것들을 파싱하는 데 정말 능숙합니다. 입력이 오류처럼 보일 때(sshd, nginx, systemd, docker 등의 알려진 패턴과 일치) 감지하고 더 작은 모델로 더 엄격한 오류 설명 프롬프트로 라우팅하는 fast-path를 추가했습니다. 더 빠르고, 더 저렴하며, 종종 더 좋습니다.

어떤 모델로 언제 라우팅하는가

이 부분이 가장 자주 변합니다. 당신이 읽을 때쯤이면 세부 사항이 다를 것입니다. 원칙은 그렇지 않을 것입니다.

여러 모델을 사용합니다. 고용량 케이스(간단한 명령, 오류 파싱)에는 저렴하고 빠른 모델, 어려운 케이스(복잡한 다단계 요청, "TLS 및 리디렉션으로 nginx 설정")에는 느리지만 똑똑한 모델. 클라이언트 측의 작은 분류기가 토큰 수, 특정 키워드 존재 여부, 사용자 등급에 따라 어디로 라우팅할지 결정.

무료 등급 사용자는 모든 것에 fast 모델(80%+ 케이스에 충분). Pro 사용자는 기본적으로 똑똑한 모델, 피크 시 fast 모델로 폴백.

우리가 어렵게 배운 다섯 가지 교훈

  1. 지연 시간이 품질을 이긴다. 200ms의 괜찮은 답변이 800ms의 훌륭한 답변보다 낫다. 모바일 사용자는 느리게 느껴지는 것을 무시하고 직접 명령을 입력합니다.
  2. 컨텍스트는 다이얼이지 최대값이 아니다. 더 많은 컨텍스트가 종종 해칩니다. 쿼리 유형별로 튜닝합니다.
  3. 절대 자동 실행하지 마라. 제품은 신뢰 위에 구축되어 있습니다. 한 번의 놀라움으로 잃기에 충분합니다.
  4. 실패를 번역하지 말고 설명하라. 좋은 오류 분석은 "이것은 X를 의미하고 Y를 시도하라" ── "이 오류는 Y/n 프롬프트가 답변되지 않았음을 의미한다"가 아닙니다.
  5. 무료 등급에 기능이 아닌 호출 수를 제한하라. 매일 20회 풀 기능 세트가 희석된 모델로 무제한 호출보다 훨씬 변환이 좋습니다. 업그레이드로 이익을 얻을 사용자는 하고; 그렇지 않은 사용자는 압박을 느끼지 않습니다.

핵심 요약

  • 자연어를 명령으로: 작업을 설명하면 실행 전 검토할 수 있는 shell 명령을 AI가 제안
  • 위험한 명령은 차단: 재귀 삭제, 디스크 직접 쓰기, 재포맷 같은 파괴적 명령은 명시적 확인 필요, 일반 명령은 탭으로 실행
  • 실제 컨텍스트: AI가 OS/배포판, 실시간 디스크/메모리/CPU, 최근 출력과 명령 기록을 참고해 해당 기기에 맞는 명령 제안
  • 무료 등급: 경량 모델로 AI 하루 5회, 자정에 초기화; Pro는 무제한
  • 옵트인: 세션이 자동으로 모델에 전달되지 않으며, AI는 질문마다 호출
TermAI 사용해 보기

iOS/Android 무료. 무료 플랜은 AI 5회/일, SSH/SFTP 무제한, Tailscale 내장.

CC
Chen Chen — Founder of TermAI

Writes about mobile DevOps, terminal UX, and the surprising depth of "boring" infrastructure.

Was this useful? ← Back to blog