TL;DR

  • Smartly는 자연어 한 문장을 단일 셸 명령어로 변환하고 즉시 실행하며, 여러 단계 스크립트는 허용하지 않는 도구임.
  • sed, date, stat 등의 GNU·BSD 차이와 현재 디렉터리 및 Git 정보를 반영해 환경에 맞는 명령어를 생성함.
  • Anthropic·OpenAI API 또는 로그인된 claude·codex CLI 세션을 제공자로 선택할 수 있음.
  • 기본 실행 모드는 확인 없이 명령어를 실행하는 auto이며, confirm, confirm-destructive, --dry-run으로 실행 전 확인을 추가할 수 있음.
  • --learn 모드는 명령어를 실행하지 않고 각 플래그·파이프·인수의 역할을 설명함.

Smartly 설치 및 시작

  • Smartly는 원하는 결과를 평문으로 입력하면 해당 작업에 맞는 셸 명령어를 만들어 실행하는 도구임.
  • Homebrew 설치 명령은 brew install rizwanreza/tap/smartly이며, Go 설치 명령은 go install github.com/rizwanreza/smartly-cli/cmd/smartly@latest임.
  • 설치 후 smartly onboard를 실행해 제공자, 모델, 실행 모드를 선택함.
  • GitHub 저장소

자연어를 명령어로 변환하는 방식

  • 결과를 한 문장으로 설명하면 Smartly가 실행 가능한 셸 명령어 하나를 반환함. 파이프, &&, 리디렉션은 허용하지만 여러 단계 스크립트는 허용하지 않음.
  • 예를 들어 숨김 파일을 크기순으로 표시하는 요청은 ls -lahS로 변환됨.
  • 지난 한 주간 저장소의 변경 내용을 묻는 요청은 git log --oneline --since='1 week ago'로 변환됨.
  • 포트 3000을 사용 중인 프로세스를 종료하는 요청은 kill $(lsof -ti :3000)으로 변환됨.
  • confirm-destructive 모드에서는 병합된 브랜치 삭제 요청에 확인 절차가 적용되며, 예시 명령어는 git branch --merged main | grep -vE '^\\*| main$' | xargs git branch -d임.
  • YAML 파일에서 api.example.com을 api.internal로 바꾸는 요청은 macOS의 BSD sed에 맞춰 sed -i ''를 사용하며, Linux에서는 sed -i를 생성함.
  • 기본 설정인 auto 모드에서는 생성된 명령어가 실제로 실행됨.

주요 기능

  • 자연어에서 명령어로 변환: 한 문장으로 요청하면 파이프·&&·리디렉션을 포함할 수 있는 단일 실행 명령어를 생성함.
  • macOS·Linux 환경 인식: 시스템의 sed, date, stat 등이 GNU 또는 BSD 중 어떤 구현인지 확인함. Homebrew coreutils가 설치된 Mac처럼 두 구현이 함께 있는 경우도 고려함.
  • 디렉터리 및 Git 정보 활용: 기본적으로 범위를 제한한 디렉터리 목록과 Git 브랜치·상태·워크트리 정보를 전송해, 현재 존재하는 항목을 기준으로 요청을 해석함.
  • 제공자 네 가지: API 키를 사용하는 Anthropic·OpenAI와 기존 로그인 세션을 사용하는 claude-cli·codex-cli를 지원함.
  • 실행 모드 네 가지: 기본 auto 모드는 즉시 실행, confirm은 매번 [y/N] 확인, confirm-destructive는 안전하다고 인식하지 못한 명령어에 확인을 요청, --dry-run은 명령어만 출력하고 실행하지 않는 방식임.
  • 명령어 설명 모드: --learn은 명령어를 실행하지 않고 각 플래그·파이프·인수를 순서대로 설명함.

설치 전 확인할 실행 안전 설정

  • 기본값인 auto 모드는 확인 프롬프트 없이 명령어를 즉시 실행하며, 파괴적인 명령어도 포함됨. 이 모드에서는 모델이 정확히 하나의 깔끔한 명령어 행을 반환했는지만 확인함.
  • confirm 모드는 명령어를 출력한 뒤 [y/N] 입력을 기다림. /dev/tty에서 직접 입력을 읽으며, 터미널이 없으면 실행을 거부함.
  • confirm-destructive 모드는 로컬 분류기가 생성 명령어를 확인하고, 안전하다고 인식하지 못하는 명령어에 확인을 요청함. 파괴적인 명령어뿐 아니라 분류되지 않은 명령어도 확인 대상임.
  • confirm-destructive는 최선을 다하는 안전장치이며 샌드박스가 아님. 모든 명령어에 확인을 적용하려면 confirm을 사용함.
  • 설정 파일 위치는 ~/.config/smartly/config.yaml이며, 실행 모드를 confirm 또는 confirm-destructive로 지정할 수 있음.
  • smartly --dry-run remove every merged branch처럼 --dry-run을 사용하면 명령어를 출력만 하고 실행하지 않음.

제공자 및 인증

  • Anthropic과 OpenAI는 사용자의 API 키로 API를 호출함. openai 제공자는 OpenAI 호환 엔드포인트도 사용할 수 있으며, 로컬 vLLM, Ollama, LM Studio도 포함됨.
  • anthropic은 기본 제공자이며, API 키 외에는 별도 설정이 필요하지 않음. 인증 환경 변수는 ANTHROPIC_API_KEY임.
  • openai의 인증 환경 변수는 OPENAI_API_KEY이며 기본 모델이 없으므로 providers.openai.model을 직접 설정해야 함.
  • claude-cli는 로그인된 claude 세션을 사용하므로 API 키가 필요 없고 Claude 구독을 활용함. 도구 접근 권한은 없음.
  • codex-cli는 로그인된 codex 세션을 사용하므로 API 키가 필요 없고 ChatGPT 구독을 활용함. --sandbox read-only로 실행됨.
  • CLI 제공자는 기존 구독을 사용해 별도의 API 요금을 피할 수 있지만, 실행 속도는 더 느림.