OpenAI CLI

OpenAI CLI

github.com/openai ▲ 230 댓글 109 armcat

요약

오픈AI가 자사 REST API를 터미널에서 바로 호출하는 공식 명령줄 도구 OpenAI CLI를 공개했습니다.

오픈AI가 GitHub에 올린 이 도구는 Go로 작성됐고 Apache 2.0 라이선스를 따릅니다. 앱을 따로 만들지 않고도 셸이나 스크립트에서 이미지 생성, 파일 업로드, 배치 작업 같은 API 기능을 쓰게 하려는 도구입니다.

왜 중요한가

  • 코딩 에이전트인 Codex CLI와 달리, API 호출 자체를 스크립트로 엮으려는 사람을 위한 도구입니다.
  • 명령 구조가 API의 자원 구조를 그대로 따르므로 curl 요청을 손으로 짤 필요가 줄어듭니다.
  • JSON·JSONL 출력과 필드 추출 기능이 있어 jq 같은 다른 도구와 파이프로 연결하기 쉽습니다.

핵심 내용

  • 명령은 openai <자원> <명령> 형태이고, 도움말은 API 키나 네트워크 없이도 볼 수 있습니다.
  • 기본 출력은 사람이 읽는 텍스트이고, --format으로 JSON·YAML 등을 고르거나 --transform으로 필드만 뽑습니다.
  • 이미지 생성, 파일 업로드와 내려받기, 배치 제출과 결과 대기, 관리자용 사용량 조회를 지원합니다.
  • 업데이트는 확인만 하고 자동 설치하지 않으며, 외부에서 들어온 입력이 로컬 파일을 읽지 못하게 막는 모드도 있습니다.
  • Homebrew, Go, 미리 빌드된 바이너리로 설치할 수 있고, 외부 기여자의 풀 리퀘스트는 받지 않습니다.

HN 반응

  • 제품 이름이 헷갈린다는 불만이 많았고, Codex는 에이전트 실행 환경이고 이 도구는 API를 감싼 래퍼라는 정리가 뒤따랐습니다.
  • curl과 다를 바 없다는 반론에는 -h로 명령을 찾기 쉽고 curl 예시처럼 API 키가 프로세스 목록에 드러나지 않는다는 반박이 나왔습니다.

댓글

30개 표시 · 전체 109개
  1. nater5000 HN

    기술 사용자를 대상으로 하는 사이트인데, 이 스레드에는 하나의 서비스가 특정 용도에 맞춘 소프트웨어를 여러 개 내놓을 수 있다는 개념 자체를 전혀 이해하지 못하는 사람이 꽤 많네요.

    codex: OpenAI의 에이전트 하네스입니다. OpenAI 모델로 구동되는 에이전트가 여러분의 머신에서 작업을 하게 하고 싶을 때 보통 상대하게 되는 도구죠. API의 저수준 기능을 추상화해 주기 때문에 신경 쓸 필요가 없습니다.

    openai-cli: OpenAI REST API의 저수준 작업을 노출하는 단순한 CLI입니다. completions API를 직접 호출하는 저수준 스크립트를 만들거나 계정을 관리할 때 쓰는 도구죠.

    솔직히 이름만 봐도 뻔합니다. 그래도 모르겠다면 여러분을 위한 도구가 아닌 겁니다. 자기가 대상 사용자가 아닌 소프트웨어가 나왔다고 흥분할 필요는 없어요.

  2. gavinray HN

    그쪽 웹사이트의 코드 예제를 보면 cURL을 쓰나 이 CLI를 쓰나 길이는 대충 비슷합니다. CLI를 따로 유지할 이유를 잘 모르겠네요.

        openai responses create \
          --model gpt-6-astra \
          --input "Write a short bedtime story about a unicorn." \
          --raw-output \
          --transform 'output.#(type=="message").content.0.text'
    

    대(對)

        curl https://api.openai.com/v1/responses \
          -H "Content-Type: application/json" \
          -H "Authorization: Bearer $OPENAI_API_KEY" \
          -d '{
            "model": "gpt-6-astra",
            "input": "Write a short bedtime story about a unicorn."
          }'
    
  3. scientaster2 HN

    -h만 치면 모든 명령어와 인자가 나오는 게 좋은 점이죠. REST 엔드포인트도 그런 게 있었으면 좋겠어요 :)

  4. td521534f12 HN

    두 번째 예제는 API 키를 OS 프로세스 트리에 흘리고 있습니다.

  5. phoghed HN

    curl 쪽에는 --transform 'output.#(type=="message").content.0.text'에 해당하는 부분이 빠져 있네요.

  6. gavinray HN

    저는 뺀 거 없습니다. OpenAI 문서에서 그대로 붙여 넣은 겁니다.

    https://developers.openai.com/api/docs?lang=curl

  7. yipinwong HN

    어떤 사람들에게는 차이가 분명하겠죠. 저도 이해합니다.

    하지만 이건 AX(에이전트 경험) 친화적이지 않고, 여기 있는 일부 사람들에게도 마찬가지입니다.

    문서에는 이걸 "왜" 또는 "언제" 써야 하는지가 없습니다. 어떤 상황에서 왜 이게 필요한지를 AI에게 알려주는 일은 결국 우리 사람이 해야 합니다.

    그래서 제 요점은 README가 부실하다는 겁니다.

    문서에 모호한 부분이 있고, 누군가에게 "뻔하다"고 여겨지는 것이 다른 누군가에게는 뻔하지 않다면, 그건 나쁜 문서입니다.


    제가 이걸 쓴다면 먼저 이렇게 지시해야 합니다. 이봐 Codex, 하네스를 우회해서 저수준 API를 호출해야 할 때는,

    1. OpenAI CLI 문서를 읽어라(그리고 Codex가 왜 이게 필요한지도 알려준다)
    2. OpenAI CLI를 설치해라
    3. 저수준 API를 호출해라: 언제 codex 하네스를 거치지 않고 이걸 써야 하는지 알려준다
  8. threecheese HN

    json/jsonl 출력도 지원하고 명령과 하위 명령에 대한 도움말도 자세합니다. 지금은 "AX용 CLI를 어떻게 만들어야 하나"를 두고 이런저런 시도가 한창이라서, "기계가 소화하기 쉽고 단계적으로 정보를 드러낸다"는 것 말고는 뭐가 좋고 나쁜지 짚어 말하기 어렵다고 생각합니다.

    얼마 전에 파이썬 CLI 라이브러리 네 가지로 codex와 간단한 실험을 해 봤습니다. CLI 규모는 꽤 컸고, 타입이 잘 지정된 코드에 docstring도 있었는데, 차이는 거의 없었어요. 결국 그 두 가지 특성이 중요했고, 거기에 이르는 수단은 별로 상관이 없었습니다. 물론 어디까지나 일화 수준의 얘기입니다.

  9. yipinwong HN

    AX가 무엇을 뜻하는지는 분명히 논쟁이 많습니다.

    말씀하신 "차이 없음"은 하네스가 아주 잘 만들어져서 그 형편없는 README도 문제없이 소화하는 경우이거나, 하네스가 너무 형편없어서 뭘 해도 차이가 안 나는 경우, 둘 중 하나입니다.

    더 좋고 구체적인 README로 실험을 한 번 더 해서 차이가 나는지 봐야 합니다. 차이가 난다면 README가 별로인 거고, 아니라면 말씀하신 주장이 맞는 거죠.

    실험이 "간단한" 수준이었다니 아직은 선뜻 받아들이기 어렵습니다.

  10. kristopolous HN

    저도 비슷한 부류의 도구를 1년 가까이 만들고 있는데, 이름이 llcat입니다.

    cURL, awk, sed처럼 동작하는, LLM 중심의 유닉스 친화적인 도구가 없어서 시작한 프로젝트입니다.

    찾아봐도 없길래 직접 만들었습니다.

    상태가 없고, 명시적이고, 저수준이고, 모드 설정 없이 조합할 수 있는 레퍼런스를 원했습니다.

    예를 들어 설정 파일 대신 llcat은 내장된 jq 문법과 줄 번호로 파일 안을 찾아 들어갈 수 있습니다. 그리고 호출 내용을 나중에 쓰려고 저장할 수도 있고요.

        llcat --save invocation.json \
          -k "@~/credentials.txt:12" \
          -u "@settings.json:.[3].host" \
          -s "@system_prompts:8" \
          -m "@settings.json:.[3].model" \
             "@query.txt:12" > output.txt
    

    그런 다음에는 이렇게 씁니다.

       llcat --load invocation.json { ... parameters you want to override ... }
    

    동료에게 채팅으로 보내기도 쉽고, 공유 네트워크 폴더에 호출 내용을 보관해 두기도 쉽습니다.

    대화도 그냥 JSON 파일입니다. 입력용과 출력용을 서로 다르게 지정할 수도 있어요. 그래서 이런 것도 할 수 있습니다.

       for i in *; do 
         # use a non-mutable conversation
         # apply it over a group of files with standard unix pipes
         cat "$i" | llcat --load settings.json -cr context.json  > ../results/"${i}.output"
    
    # or use attachments 
         llcat --load settings.json -a "$i" -cr context.json > ../results/"${i}.output"
    
    # or save the whole context
         llcat --load settings.json -a "$i" -cr context.json -c ../results/"${i}.output" > /dev/null
    
    done
    

    제가 가장 좋아하는 패턴 중 하나는 이겁니다.

       llcat -k @~/secrets.json:.anthropic -u api.anthropic.com 
       llcat -k @~/secrets.json:.openrouter -u openrouter.ai/api
    

    숨겨진 상태가 없으니 셸 스크립트에서 llcat을 써도 동작이 보장됩니다.

    공을 많이 들였고 저도 매일 쓰고 있습니다. 한번 써 보시고 피드백을 주시거나 버그를 등록해 주시면 정말 고맙겠습니다.

    https://github.com/day50-dev/llcat

  11. rtaylorgarlock HN

    멋진 도구네요 :) 저는 sysadmin, devops 같은 운영 환경에서 LLM 도구를 쓰는 게 아직도 영 겁이 납니다. 그런데 최첨단 모델들은 엄청난 tok/s로 bash에서 저를 가볍게 압도해요. cURL과 cat에 json을 곁들이는 방식은 괜찮아 보입니다.

  12. isodev HN

    잠깐, codex가 "openai cli"였던 거 아니에요? 제품 이름이 너무 헷갈려요(chat이랑 work는 또 뭐죠?!). 마치 전부 바이브 코딩으로 만든 것 같네요.

  13. haaz HN

    둘은 목적이 다르고, 제품을 그렇게 구분하는 건 합리적이라고 봅니다. 하나는 openai 워크스페이스나 API 등을 관리하는 용도이고, 다른 하나는 소비자 제품입니다. 관리자가 openai cli 도구는 허용 목록에 올려도 codex는 올리지 않는 상황은 충분히 예상할 수 있습니다.

  14. robertlagrant HN

    하나는 openai 워크스페이스나 API 등을 관리하는 용도이고

    그런데 페이지에는 이렇게 나와 있는데요.

    openai images generate --prompt "A tiny orange robot" 은 이미지를 ~/Downloads/gpt-images/ 에 저장하고, 파이프 안에서도 그 경로를 출력합니다.

    이건 "API 관리"처럼 보이지 않아요. "소비자 제품"처럼 보이죠.

    진짜 답은 콘웨이의 법칙이라고 생각합니다.

  15. raddan HN

    Codex는 대화형입니다. 이건 배치 방식으로 보이고요.

  16. oblio HN

    회사 경영 자체를 바이브로 하겠다는 궁극의 목표를 세우면 논리적으로 이렇게 되는 거죠.

  17. mi_lk HN

    Codex 대신 이걸 써야 할 때는 언제인가요? 다른 도구나 에이전트가 호출하라고 만든 건가요?

  18. imdsm HN

    Codex = 에이전트 하네스

    OpenAI CLI = API를 감싼 래퍼

  19. theanonymousone HN

    API를 감싼 래퍼

    그러니까 curl이라는 거죠? :-/

  20. mohsen1 HN

    솔직히 말하면 curl 요청을 직접 만드는 것보다 gh가 훨씬 잘 맞습니다(LLM을 써서 만들 때조차도요).

  21. tomrod HN

    나이가 좀 티 나는 질문인데, 여기서 gh는 GitHub CLI인가요, 아니면 다른 새로운 건가요?

  22. istjohn HN

    네.

  23. xboxnolifes HN

    SaaS/IaaS CLI 도구를 한 번도 써 본 적이 없다면, 네, 그런 겁니다.

  24. BikiniPrince HN

    토큰 사용량을 보여주는 curl이니까 더 낫죠.

  25. NothingAboutAny HN

    저도 그렇게 짐작했습니다. 예를 들어 Claude를 쓰면서 OpenAI의 이미지 생성을 쓰게 하고 싶을 때요. 이걸 보고는 저도 모르게 어깨를 으쓱했습니다.

  26. guyuedumingx HN

    이름만으로 도구가 설명된다는 주장은 근거가 약합니다. CLI 래퍼라도 어떤 문제를 해결하고 누가 써야 하는지는 한 줄로 밝혀야 합니다.

  27. chaos_emergent HN

    README의 부제에 나와 있습니다.

    The official CLI for the OpenAI REST API. (OpenAI REST API의 공식 CLI.)

    README는 읽어 보셨나요?

  28. pllbnk HN

    Apache 2.0으로 공개하는 게 무슨 의미가 있나요? 어차피 조만간 LLM 학습이나 추론 과정에 빨려 들어갈 텐데요. 그때가 되면 라이선스는 더 이상 중요하지 않을 겁니다.

  29. albert_e HN

    이걸 쓰면 월 정액 구독 한도가 소모되나요, 아니면 API 크레딧이 소모되나요?

    Anthropic도 비슷한 게 있나요?

    "claude -p"는 구독 한도로 쓰기에 불안정했고 "추가 사용량" 크레딧이 필요한 경우가 많았던 걸로 알고 있습니다.

  30. walthamstow HN

    claude -p는 실제로 추가 사용량으로 청구된 적이 없습니다. 그렇게 하겠다는 계획을 발표했다가 슬그머니 접었어요.

Hacker News에서 보기 ↗