개발자와 데브옵스 엔지니어의 노트에는 명령어가 쌓인다. 배포 절차, 디버깅 재현 순서, 데이터 조회 쿼리 같은 것들이다. 문제는 이 기록이 대부분 '죽어 있는 텍스트'라는 점이다. 노트에 적힌 명령을 쓰려면 복사해서 터미널에 붙여 넣고, 결과를 다시 노트로 옮겨 적는 왕복이 필요하다. 최근 'Show HN'에 공개된 오픈소스 도구 Ledge.sh는 이 왕복을 없애는 데 초점을 맞춘다. 마크다운 노트 안의 코드 블록에 커서를 두고 단축키를 누르면, 그 자리에서 명령이 실행되고 출력이 블록 아래로 흘러 들어온다. Mac, Linux, Windows는 물론 iPhone과 Android까지 지원하며 라이선스는 Apache-2.0이다.
노트가 곧 셸 세션이 된다
Ledge의 핵심은 셸 블록이 노트에 귀속된 '지속적인 셸'에서 실행된다는 설계다. 한 블록에서 cd로 디렉터리를 옮기거나 환경 변수를 export하거나 파이썬 가상환경을 활성화하면, 그 상태가 다음 블록 실행으로 이어진다. 즉 노트 하나가 하나의 작업 세션처럼 동작한다. 실행 환경도 폭넓다. Python, Node, Ruby, PHP는 설치 없이 바로 돌아가고, TypeScript는 앱에 내장된 Bun 런타임을 쓰기 때문에 ts 블록을 추가 설치 없이 실행할 수 있다. redis 블록은 노트의 REDIS_URL 값에 따라 스테이징이나 운영 환경의 redis-cli로 연결되며, 새 인터프리터 추가는 설정에서 한 줄이면 된다.
원문에 담긴 사용 예시는 이 도구가 겨냥하는 실무 맥락을 잘 보여준다. 월요일 아침 지난주 가입자를 점검하면서 Stripe API 키와 데이터베이스 URL을 프로파일에 보관해 두고, 노트 안에서 결제 데이터와 데이터베이스 집계를 나란히 돌려 숫자가 일치하는지 확인하는 식이다. 부분 환불에서 합계가 1센트씩 어긋나는 문제를 '먼저 재현부터 한다'는 메모, 배포 후 세션 키가 남는 문제를 스테이징에서 먼저 비우고 검증한 뒤 운영에 적용하는 체크리스트처럼, 실행 가능한 런북(runbook)으로서의 쓰임새가 분명하다.
원격 서버와 모바일을 하나로 묶는 구조
Ledge는 ssh를 통해 원격 머신을 가리킬 수 있다. 이때 노트 파일과 셸 실행은 모두 서버에 존재하고, 내 컴퓨터의 앱은 그 서버를 들여다보는 '창'이 된다. iPhone과 iPad에서도 같은 방식으로 동작해 전화기 자체에는 노트가 저장되지 않고, 서버에 있는 내용을 읽고 편집하고 실행만 한다. 노트는 제자리에 두되 특정 호스트에서 실행하고 싶다면, 프런트매터에 host: 한 줄을 추가하는 것만으로 해당 노트의 모든 실행이 그 호스트의 ssh 위에서 일어난다. 노트 파일의 물리적 위치와 실행 위치를 분리한 셈이다.
환경 변수 관리에도 비슷한 분리 원칙이 적용된다. 프로파일은 노트 폴더 바깥에 보관되는 환경 변수 모음 파일이고, 노트는 그 이름만 참조한다. 따라서 노트 본문에는 AWS 키 같은 민감 정보가 아니라 프로파일 이름만 남는다. 여기에 더해 노트 잠금 기능은 본문을 패스프레이즈로 암호화해 디스크에 저장한다. 잠긴 노트는 AI 에이전트나 검색에 노출되지 않고, 동기화 서비스도 암호문만 실어 나른다.
에이전트 연동과 '그냥 파일'이라는 철학
주목할 만한 부분은 MCP(Model Context Protocol) 서버를 기본 탑재한다는 점이다. 'claude mcp add ledge -- ledge mcp' 명령으로 Claude Code를 연결하면, MCP를 지원하는 에이전트가 노트를 읽고 검색하고 생성하고 편집할 수 있다. CLI도 제공되어 어느 터미널에서든 노트를 조회·검색·생성·추가할 수 있고, 앱은 그 변화를 실시간으로 따라간다. 결과는 stdout으로, 대화성 메시지는 stderr로 분리해 파이프를 깨끗하게 유지하며, --json 옵션으로 기계 판독용 출력으로 전환된다.
Ledge가 반복해서 강조하는 가치는 데이터를 별도 데이터베이스에 가두지 않는다는 점이다. 노트는 평범한 폴더 안의 일반 마크다운 파일이므로, 동기화는 그저 폴더를 동기화하는 일이다. iCloud Drive, Dropbox, git, Syncthing 등 이미 쓰던 수단을 그대로 활용할 수 있다. 워크스페이스가 git 저장소라면 한 번의 실행으로 모든 노트를 커밋하고 푸시하는 것도 가능하다. 프로젝트 폴더를 붙이면 그 안의 마크다운 파일이 제자리에서 노트가 되고, 연결을 해제해도 파일은 건드리지 않는다.
실무 관점에서 Ledge의 강점은 명확하다. 명령어 중심 메모를 많이 남기는 사람이라면 '기록과 실행의 분리'에서 오는 마찰이 사라지고, 계정 없이 로컬 혹은 자기 서버에서 데이터 소유권을 유지할 수 있다. 다만 지속적 셸과 ssh 실행, 암호화 잠금은 운영 환경에 직접 명령을 흘려보내는 통로이기도 하므로, 프로파일과 잠금으로 비밀 관리를 분리했더라도 어떤 노트가 어떤 호스트에서 실행되는지에 대한 규율이 필요하다. 공개된 정보만으로는 대규모 팀 협업이나 권한 통제, 감사 로그 같은 조직 단위 운영 요건이 어디까지 다뤄지는지 확인하기 어렵다는 점도 도입 전 따져볼 대목이다.