CLI

115 posts
Mole: 맥 청소부터 시스템 모니터링까지 한 번에

Mole: 맥 청소부터 시스템 모니터링까지 한 번에

맥으로 개발을 하다 보면 디스크가 슬금슬금 차오릅니다. 저장 공간 경고가 뜰 때쯤 확인해보면 대개 이런 상태예요. 460GB짜리 디스크에서 남은 공간이 24GB 남짓입니다. 문제는 무엇을 지워야 할지 모르겠다는 거죠. 사진이나 영상을 지우자니 아깝고, ~/Library 안쪽은 열어봐도 알 수 없는 이름의 폴더뿐입니다. 😅 맥 청소 앱은 예전부터 많았습니다. 그런데 이 바닥은 유독 미심쩍은 광고와 연 3만~5만 원짜리 구독으로 얼룩져 있어서 선뜻 손이 가지 않죠. "잡동사니 12GB를 발견했습니다" 같은 문구는 봤어도, 정확히 무슨

Herdr: AI 코딩 에이전트를 위한 터미널 멀티플렉서

Herdr: AI 코딩 에이전트를 위한 터미널 멀티플렉서

AI 코딩 에이전트 하나를 터미널에서 돌릴 때는 별문제가 없습니다. 그런데 버그 수정은 Codex에 맡기고, 테스트 실패 원인 조사는 Claude Code에 시키고, 옆에서는 개발 서버까지 띄우기 시작하면 상황이 달라져요. 터미널 탭을 돌아다니며 누가 작업 중인지, 누가 권한 승인을 기다리는지 계속 확인해야 합니다. 일은 에이전트들이 하는데 정작 사람은 터미널을 순찰하느라 바쁜 셈이죠. 🤔 Herdr는 이 문제를 풀기 위해 만든 터미널 멀티플렉서(terminal multiplexer)입니다. 화면을 나누고 세션을 유지하는 데서 그

Mosh: 네트워크가 바뀌어도 끊기지 않는 원격 셸

Mosh: 네트워크가 바뀌어도 끊기지 않는 원격 셸

카페에서 서버 작업을 하다가 노트북을 덮고 지하철을 탄 뒤 다시 열었을 때, 터미널이 그대로 멈춰 있는 걸 보신 적 있으신가요? 🤔 몇 초쯤 기다리다가 결국 Ctrl+C를 눌러보고, 그래도 반응이 없어서 창을 닫고 다시 접속합니다. 아까 어느 디렉터리에 있었는지 기억을 더듬어 다시 이동하고요. 와이파이에서 테더링으로 갈아탈 때도, 사무실에서 집으로 이동할 때도 똑같은 일이 반복됩니다. SSH는 TCP 위에서 동작하는데, TCP 연결은 클라이언트의 IP 주소에 묶여 있습니다. IP가 바뀌는 순간 그 연결은 되살릴 방법이 없어요. 서

TanStack Intent: 라이브러리와 함께 배포하는 에이전트 스킬

TanStack Intent: 라이브러리와 함께 배포하는 에이전트 스킬

AI 에이전트에게 라이브러리를 다루는 코드를 맡겼다가 한숨을 쉬어 본 적 있으신가요? 분명 최신 버전을 설치했는데 2년 전에 사라진 API를 자신 있게 써 놓거나, 이름만 남고 시그니처가 바뀐 함수를 옛날 방식으로 호출해 놓는 경우 말입니다. 모델이 게을러서가 아닙니다. 학습 데이터에 남은 옛 코드와 지금 node_modules에 설치된 코드가 다를 뿐이죠. 문제는 에이전트가 그 차이를 알 방법이 마땅치 않다는 데 있습니다. TanStack Intent는 이 간극을 조금 색다른 방식으로 메웁니다. 문서를 어딘가에 잘 정리해 두고 에

Portless로 localhost:3000 대신 이름 있는 URL 쓰기

Portless로 localhost:3000 대신 이름 있는 URL 쓰기

로컬에서 개발하다 보면 http://localhost:3000, http://localhost:3001, http://localhost:8080 같은 주소를 하루에도 수십 번씩 입력하는데요. 프로젝트가 두세 개만 돼도 어느 포트가 어느 앱이었는지 헷갈리기 시작합니다. 프런트엔드는 3000번, API는 4000번, 스토리북은 6006번... 이걸 외우고 있다가 동료에게 "그거 몇 번 포트였죠?"라고 물어본 경험, 다들 한 번쯤 있으시죠. 😅 게다가 포트가 겹치면 EADDRINUSE 에러가 나면서 서버가 안 뜨고, HTTPS가 필요한

1Password Service Account로 로컬 자동화 시크릿을 Touch ID 없이 관리하기

1Password Service Account로 로컬 자동화 시크릿을 Touch ID 없이 관리하기

얼마 전에 Discord MCP 서버를 클로드 코드에 붙여서 쓰고 있었는데요. 봇 토큰을 설정 파일에 평문으로 박아두기는 찜찜해서, 1Password CLI로 토큰을 주입하도록 바꿔뒀습니다. 그런데 그날부터 클로드 코드를 켤 때마다 화면 한가운데 "1Password Access Requested" 창이 뜨면서 Touch ID를 요구하기 시작했어요. 😅 하루에도 몇 번씩 터미널을 새로 여는데, 그때마다 손가락을 갖다 대는 건 생각보다 거슬립니다. 게다가 cron으로 돌리는 스크립트라면 아예 사람이 없으니 인증 자체가 불가능하죠. 이

mktemp로 안전하게 임시 파일 만들기

mktemp로 안전하게 임시 파일 만들기

쉘 스크립트를 쓰다 보면 잠깐 저장할 파일이 필요할 때가 많습니다. API 응답을 받아서 가공하거나, 여러 명령의 중간 결과를 합치거나, 압축하기 전에 작업 디렉토리를 하나 만들어두는 경우가 그렇죠. 처음에는 대충 /tmp/result.txt 같은 이름을 쓰기 쉽습니다. 조금 더 신경 쓰면 프로세스 ID를 붙여서 /tmp/myapp.$$처럼 만들기도 하고요. 혼자 쓰는 노트북에서는 별문제가 없어 보이지만, 이런 방식은 스크립트가 서버나 CI에서 돌기 시작하면 꽤 위험해집니다. 파일 이름이 예측 가능하고, 이미 같은 이름의 파일이 있

bat 사용법: cat을 대체하는 문법 강조 지원 뷰어

bat 사용법: cat을 대체하는 문법 강조 지원 뷰어

터미널에서 코드 파일을 빠르게 훑어보고 싶을 때 보통 cat file.py라고 입력하는데요. 출력은 잘 되지만 색도 없고 줄 번호도 없어서 조금만 길어져도 가독성이 뚝 떨어집니다. 그렇다고 매번 에디터를 켜기엔 번거롭고, less로 열면 페이징은 되지만 여전히 흑백이라 아쉽죠 😅 이런 답답함을 해결해 주는 도구가 바로 bat입니다. 이름에서 짐작하셨겠지만 cat을 본떠 만든 도구인데요. Rust로 작성됐고 ripgrep, fd처럼 "기존 유닉스 도구를 현대적으로 다시 만든" 계열에 속합니다. 문법 강조, Git 통합, 줄 번호,

presenterm으로 마크다운 발표 자료 만들기: 터미널에서 돌아가는 슬라이드

presenterm으로 마크다운 발표 자료 만들기: 터미널에서 돌아가는 슬라이드

개발자 모임이나 사내 세미나에서 발표 자료를 만들 때 늘 똑같은 고민이 들곤 합니다. Keynote나 파워포인트로 만들자니 코드 블록 하나 넣자고 폰트와 들여쓰기를 만지작거리는 게 영 번거롭고, 그렇다고 Google Slides는 코드 신택스 하이라이팅이 부실하죠. 마크다운으로 그냥 글 쓰듯 쓰면 안 될까 싶었던 적이 한두 번이 아닙니다. presenterm은 딱 그 가려운 곳을 긁어주는 도구입니다. 마크다운 파일 하나로 슬라이드를 만들고 터미널에서 바로 띄울 수 있어요. 코드 블록은 bat 기반의 신택스 하이라이팅이 자동으로 들어

1Password Shell Plugins로 CLI 인증 관리하기

1Password Shell Plugins로 CLI 인증 관리하기

CLI 도구를 쓰다 보면 인증 토큰을 어디에 둘지가 늘 고민입니다. GitHub CLI는 GH_TOKEN, Cloudflare Wrangler는 CLOUDFLARE_API_TOKEN 같은 환경 변수를 지원하는데요. 편하다고 셸 설정 파일이나 .env 파일에 토큰을 넣어두면 어느 순간 평문 시크릿이 로컬 디스크 여기저기에 흩어집니다. 1Password에는 이런 문제를 줄여주는 Shell Plugins 기능이 있습니다. CLI가 인증 정보를 필요로 할 때 1Password가 토큰을 꺼내 환경 변수로 주입하고, 사용자는 지문이나 Appl

Playwright CLI: AI 코딩 에이전트를 위한 Microsoft의 새로운 브라우저 자동화 도구

Playwright CLI: AI 코딩 에이전트를 위한 Microsoft의 새로운 브라우저 자동화 도구

AI 코딩 에이전트에게 브라우저를 맡기는 흐름이 더 빨라지고 있습니다. 이전에 Playwright MCP로 AI 에이전트가 MCP 서버를 통해 브라우저를 다루는 방법을 살펴봤고, Vercel Labs의 agent-browser 같은 CLI 기반 접근도 소개했었는데요. 이번에는 Playwright를 만든 Microsoft가 직접 내놓은 새 도구를 들고 왔습니다. Playwright CLI는 그 이름 그대로 Playwright의 핵심 기능을 명령줄 인터페이스로 노출한 도구입니다. 흥미로운 점은 이게 단순한 playwright 패키지의

gh skill로 에이전트 스킬 관리하기

gh skill로 에이전트 스킬 관리하기

좋아 보이는 에이전트 스킬을 동료 깃허브 저장소에서 발견해서 따라 써보고 싶은데, 막상 적용하려고 하면 막막할 때가 있죠. SKILL.md 파일을 다운로드해서 어디다 저장할지 검색하고, 의존하는 스크립트까지 같이 챙겨오고, 며칠 뒤에 원본이 업데이트되면 또 수동으로 덮어쓰고... 😅 게다가 직접 만든 스킬을 동료에게 공유할 때도 비슷한 문제가 생깁니다. 스펙에 맞게 잘 작성했는지 확인하기도 쉽지 않고, 검색이 잘 되도록 메타데이터를 챙기는 일도 신경 쓸 게 한두 가지가 아니거든요. GitHub이 이 문제를 해결하려고 GitHub

Obsidian CLI 사용법: 터미널에서 내 볼트를 다루는 법

Obsidian CLI 사용법: 터미널에서 내 볼트를 다루는 법

터미널에서 살다시피 하는 개발자라면 한 번쯤 생각해봤을 거예요. "Obsidian 볼트를 커맨드라인에서 다룰 수 없을까?" 노트를 쓰려면 매번 Obsidian 앱으로 전환해야 하고, 자동화하고 싶어도 마땅한 방법이 없었으니까요. 커뮤니티 도구가 이 빈자리를 채워왔지만 2026년 2월 Obsidian 1.12 버전에서 공식 CLI가 등장했습니다. "Obsidian에서 할 수 있는 건 뭐든 커맨드라인으로도 할 수 있다"는 기치를 내세우며요. 이 글에서는 Obsidian CLI의 설치부터 자주 쓰는 명령어와 셸 스크립트 자동화, AI 에

gh stack으로 PR 쌓아 올리기

gh stack으로 PR 쌓아 올리기

PR 하나에 파일 30개가 바뀌고 코드가 2,000줄 넘게 추가된 걸 리뷰해달라고 받아본 적 있으신가요? 😅 리뷰어 입장에서는 어디서부터 봐야 할지 막막하고, 작성자 입장에서는 피드백을 기다리는 시간이 길어지죠. "PR은 작게 만들어라"라는 원칙은 누구나 알고 있지만 실제로 지키기가 쉽지 않습니다. 큰 기능을 구현하다 보면 인증 레이어, API 엔드포인트, 프론트엔드 화면이 서로 물려 있어서 하나만 떼어내기 어렵거든요. 억지로 쪼개봤자 의존하는 브랜치끼리 rebase를 수동으로 맞추느라 시간을 허비하게 됩니다. 이 문제를 해결하기

ripgrep(rg) 사용법: grep보다 빠르고 스마트한 검색 도구

ripgrep(rg) 사용법: grep보다 빠르고 스마트한 검색 도구

이전 글에서 grep의 기본기를 살펴봤는데요. grep이 50년 넘게 살아남은 검증된 도구인 건 맞지만, 요즘 코드베이스를 다루다 보면 살짝 아쉬운 부분이 있습니다. node_modules를 빼먹으면 결과가 쏟아지고, .gitignore에 있는 파일까지 뒤지고, 바이너리 파일도 가리지 않죠 😅 ripgrep(rg)은 이런 불편함을 해결하기 위해 만들어진 검색 도구입니다. fd의 핵심 라이브러리를 만든 Andrew Gallant(BurntSushi)가 Rust로 개발했고, grep보다 훨씬 빠르면서도 개발자에게 친화적인 기본값을 가

ccusage: 클로드 코드 토큰 사용량과 비용을 한눈에

ccusage: 클로드 코드 토큰 사용량과 비용을 한눈에

클로드 코드를 쓰다 보면 어느 순간 궁금해지는 게 있어요. 이번 달에 토큰을 얼마나 썼지? 비용은 얼마쯤 나왔을까? 세션 중에 /cost로 현재 비용을 확인할 수는 있는데, 지난주 월요일에 얼마를 썼는지나 프로젝트별 비용 분포는 알기 어렵죠. ccusage는 이 질문들에 답해주는 CLI 도구예요. 클로드 코드가 로컬에 남기는 세션 로그 파일을 분석해서 일별, 월별, 세션별 토큰 사용량과 비용을 테이블 형태로 보여줘요. 설치할 필요도 없이 npx 한 줄이면 바로 실행할 수 있어서 진입 장벽이 거의 없어요. 바로 실행해보기 ccusag

1Password CLI(op) 사용법: 터미널에서 비밀번호와 시크릿 관리하기

1Password CLI(op) 사용법: 터미널에서 비밀번호와 시크릿 관리하기

개발하다 보면 API 키, 데이터베이스 비밀번호, 토큰 같은 시크릿(secret)을 다룰 일이 정말 많죠. .env 파일에 평문으로 저장하자니 불안하고, 팀원이랑 공유하려고 슬랙으로 보내자니 그것도 영 찝찝합니다 😅 1Password는 이미 많은 개발자가 비밀번호 관리 도구로 사용하고 있는데요. 사실 1Password에는 op라는 공식 CLI 도구가 있어서 터미널에서도 1Password 볼트에 저장된 시크릿을 자유롭게 다룰 수 있습니다. 환경 변수에 시크릿을 주입하거나, 스크립트에서 비밀번호를 안전하게 참조하거나, SSH 키 관리

Zerobrew: Homebrew보다 최대 20배 빠른 패키지 매니저

Zerobrew: Homebrew보다 최대 20배 빠른 패키지 매니저

Homebrew를 쓰면서 느린 속도 때문에 답답했던 적 있으신가요? brew install 하나 실행했을 뿐인데 몇십 초씩 걸리고, brew update는 아예 커피 한 잔 타올 시간을 주기도 하죠. Homebrew는 macOS 개발 환경의 사실상 표준이지만 Ruby로 작성된 태생적 한계 때문에 성능은 늘 아쉬웠습니다. Zerobrew는 바로 이 문제를 풀려고 나온 프로젝트입니다. Rust로 작성했고 Homebrew의 패키지 생태계를 그대로 쓰면서도 설치 속도를 5배에서 최대 20배까지 끌어올렸는데요. Python 생태계에서 pip

AI를 위한 CLI 설계: 에이전트가 쓰기 좋은 커맨드라인 도구 만들기

AI를 위한 CLI 설계: 에이전트가 쓰기 좋은 커맨드라인 도구 만들기

요즘 개발하다 보면 CLI 도구를 직접 타이핑하기보다 AI 에이전트한테 시키는 일이 부쩍 늘었습니다. 클로드 코드나 Cursor 같은 코딩 에이전트가 터미널에서 git, npm, docker, grep 같은 명령어를 알아서 실행해주니까요. 근데 가만 생각해보면 우리가 쓰는 CLI 도구 대부분은 사람이 직접 타이핑하는 걸 전제로 만들어졌어요. --help 플래그로 사용법을 찾아보고, 탭 완성으로 옵션을 탐색하고, 에러 메시지를 읽고 다시 시도하는 거죠. AI 에이전트는 이렇게 도구를 쓰지 않습니다. 문서를 읽어 이해한 뒤 명령어를 한

Vite+로 웹 개발 도구 통합하기

Vite+로 웹 개발 도구 통합하기

웹 프론트엔드 프로젝트 하나를 제대로 셋업하려면 도구가 정말 많이 필요하죠. 번들러는 Vite, 테스트 러너는 Vitest, 린터는 ESLint, 포맷터는 Prettier... 거기에 Node.js 버전 관리자랑 패키지 매니저까지 더하면 package.json의 devDependencies가 금세 길어지고 설정 파일도 여기저기 흩어집니다. 2026년 3월, Vite의 창시자 Evan You가 이끄는 VoidZero가 이 문제에 대한 답을 내놓았는데요. Vite+ — Vite, Vitest, Oxlint, Oxfmt, Rolldown

Discord