명령줄
무료 marsdawn 명령줄 도구입니다. 셸이나 LLM 에이전트에서 Markdown을 PDF로 내보내고, MarsDawn 앱이 설치되어 있으면 앱에서 파일을 열 수 있습니다.
marsdawn은 무료이며 Mac App Store와 별도로 배포됩니다. Homebrew로 설치하세요. Apple 실리콘 Mac에서는 바로 실행할 수 있는 상태로 설치됩니다. export는 단독으로 작동하고, open은 MarsDawn 앱이 필요합니다.
AI 에이전트나 스크립트에서 marsdawn을 호출하나요? JSON 출력과 스키마, 모든 종료 코드는 에이전트를 위한 marsdawn에서, 에이전트가 MCP로 도구를 호출한다면 MCP 서버에서 확인하세요.
설치
Homebrew를 사용하는 경우:
brew tap redtear1115/tap && brew install marsdawn
코딩 에이전트를 쓰고 있나요? marsdawn skill --install을 실행해 marsdawn 스킬을 추가하세요. 파일 하나로, 에이전트가 자기가 쓴 것을 MarsDawn에서 열어 검토를 받고 PDF로 내보내는 법을 익힙니다.
Apple 실리콘 Mac에서는 Homebrew가 미리 빌드된 버전을 몇 초 만에 설치하며, 따로 설치할 것이 없습니다. Intel Mac에서는 대신 소스에서 marsdawn을 빌드하므로 몇 분이 걸리고 Xcode 26 이상(Swift 6.2)이 필요합니다. 이 도구는 macOS 15 이상에서 실행됩니다.
또는 Swift Package Manager로 소스에서 빌드하세요.
git clone https://github.com/redtear1115/mars-dawn-kit.git
cd mars-dawn-kit
swift build -c release --product marsdawn
설치된 버전은 marsdawn --version으로 확인할 수 있습니다.
명령
marsdawn open
Markdown 파일 하나 이상을 MarsDawn 앱에서 열어 검토할 수 있게 합니다. 앱이 설치되어 있어야 합니다. 앱이 없으면 marsdawn open은 코드 3으로 종료하며 MarsDawn이 설치되어 있지 않다고 알립니다. export는 앱이 필요 없습니다. 앱은 Mac App Store에 있습니다.
marsdawn open notes.md
marsdawn open notes.md:120
marsdawn open notes.md --line 120
marsdawn open .
marsdawn open notes.md --folder .
path:line: MarsDawn에 해당 줄로 이동하도록 요청합니다.notes.md:120:8처럼 뒤에 붙은 열 번호는 무시됩니다. 전체 이름 그대로의 파일이 있으면 인수는 그 파일을 가리킵니다.--line <n>: 파일 하나에 대해 같은 일을 하며, 경로 자체가 콜론과 숫자로 끝날 때 줄을 지정하는 방법입니다. 파일이 정확히 하나여야 합니다.- 줄 번호는 1부터 999999999까지입니다.
- MarsDawn 1.0은 해당 줄에서 파일을 엽니다.
- 폴더를 인수로 주면 문서가 아니라 윈도우의 사이드바에 열립니다.
marsdawn open .은 현재 폴더를 보여줍니다.--folder <path>는 파일과 함께 같은 일을 합니다. 윈도우의 사이드바는 폴더 하나만 보여주므로, 두 개를 지정하면 사용법 오류입니다. --wait <n>: 결과를 알려 주는 MarsDawn 1.0.2 이상에서는--folder가 폴더에 대한 앱의 응답을 최대 n초(0~30, 기본값 2) 기다립니다.--wait 0이거나 결과를 알려 주지 않는 앱이면 기다리지 않으며, 이전과 똑같은 요청을 보냅니다.--wait값이 0~30을 벗어나면 사용법 오류(코드 64)입니다. 음수는--wait=-1처럼 쓰세요.--json에서는 폴더를 “연결됨”이 아니라 “요청함”으로 알려 줍니다. 결정은 앱이 하기 때문입니다.--wait를 주면 폴더가 어떻게 되었는지도 결과에 담깁니다. 전체 목록은 에이전트를 위한 marsdawn에 있습니다.--background: MarsDawn을 앞으로 가져오지 않고 엽니다.--json: 텍스트 대신 JSON 결과를 출력합니다.
줄 지정은 marsdawn 0.3.0에서, 폴더와 --background는 0.5.1에서, --wait와 폴더 상태는 0.5.3에서 추가되었습니다.
marsdawn export
MarsDawn 자체의 PDF 내보내기와 같은 엔진으로 Markdown 파일을 페이지가 나뉜 PDF로 렌더링합니다. MarsDawn 앱은 필요 없습니다. 상대 경로의 이미지는 입력 파일이 있는 폴더를 기준으로 찾습니다.
marsdawn export notes.md -o notes.pdf --theme classic --paper a4
-o, --output <path>: PDF를 쓸 위치입니다. 기본값은 입력 경로에.pdf확장자를 붙인 것입니다.--theme <dawn|classic|modern|vivid>: 미리보기 테마의 라이트 팔레트입니다. 기본값은$MARSDAWN_THEME, 그다음dawn입니다.--paper <a4|letter>: 용지 크기입니다. 기본값은a4입니다.--breaks: HackMD처럼 문단 안의 모든 줄바꿈을 줄바꿈으로 표시합니다. 주지 않으면 중국어나 일본어 글자 두 개 사이의 줄바꿈은 없어져, 앞뒤 줄이 한 문장으로 이어집니다.--layout <document|handbook>: 페이지 레이아웃입니다. 기본값은document입니다.handbook은 설명서로 내보냅니다. 여백을 넓히고 제본 쪽을 남기며, 최상위 제목마다 새 페이지에서 시작하고, 페이지 번호가 붙은 목차 페이지, 바닥글의 페이지 번호, PDF 책갈피를 넣습니다. front matter에title이 있으면 표지도 붙입니다.--toc-title <text>: 설명서 목차 페이지의 제목입니다. 기본값은Contents입니다.- 한 줄에 단독으로 쓴
<!--BREAK-->는 새 페이지를 시작합니다. 두 레이아웃 모두 해당합니다. --allow-remote-images: 렌더링하는 동안 웹 이미지를 불러옵니다. 기본값은 꺼짐입니다.--force: 출력 파일이 이미 있으면 바꿉니다.--json: 텍스트 대신 JSON 결과를 출력합니다.- 16MiB를 넘는 파일은 내보내지 않습니다.
export는 코드 5로 종료하며 아무것도 쓰지 않습니다.
--breaks는 marsdawn 0.7.0에서, --layout과 --toc-title은 0.7.1에서, handbook 값은 0.7.2에서 추가되었습니다. 0.7.1의 이전 값 manual도 계속 쓸 수 있습니다.
marsdawn theme
테마 파일(theme.json)을 공유하기 전에 확인하고, 어떻게 보이는지 살펴봅니다. MarsDawn 앱은 필요 없습니다. 테마의 항목은 에이전트와 함께 테마 만들기를 참고하세요.
marsdawn theme validate my-theme.json
marsdawn theme css my-theme.json
marsdawn theme preview my-theme.json --appearance dark -o preview.png
validate <file>: 앱과 같은 검사기로, MarsDawn 테마가 지켜야 할 모든 규칙에 맞는지 확인합니다. 테마가 올바르면 코드 0, 아니면 코드 1로 종료하며 문제를 하나씩 보여 줍니다.--require-complete를 주면 공개하는 테마에 꼭 필요한 구문 강조와 다이어그램 색상도 요구합니다.css <file>: 올바른 테마에 대해 미리보기가 쓰는 CSS를 출력합니다.preview <file> --appearance <light|dark> -o <out.png>: 그 테마로 샘플 문서를 PNG로 렌더링합니다.--width로 너비를 픽셀 단위로 정합니다(600~2000, 기본값 1200). 파일이 이미 있으면--force를 줄 때만 바꿉니다.--json: 텍스트 대신 JSON 결과를 출력합니다.
theme 명령은 marsdawn 0.6.1에서 추가되었습니다.
$MARSDAWN_THEME 변수
--theme를 주지 않으면 export는 $MARSDAWN_THEME 환경 변수를 읽습니다. 값은 dawn, classic, modern, vivid 중 하나여야 하며, 그 밖의 값은 dawn으로 처리됩니다. 다른 앱의 컨테이너를 읽으면 macOS 개인정보 보호 확인 창이 뜰 수 있기 때문에, CLI는 앱 자체의 테마 설정을 읽지 않습니다.
파일 덮어쓰기
export는 --force를 주지 않는 한 기존 출력 파일을 바꾸지 않습니다.
종료 코드
| 코드 | 의미 | 해결 방법 |
|---|---|---|
0 | 성공. | --json을 줬다면 stdout의 JSON 한 줄을 읽으세요 |
2 | 입력을 찾을 수 없음. | 경로와 파일 이름을 확인하세요 |
3 | MarsDawn이 설치되어 있지 않음(open만 해당). | 앱을 설치하거나, 앱이 필요 없는 export를 쓰세요 |
4 | 출력 파일이 이미 있음(--force를 주세요). | --force로 바꾸거나, -o로 다른 곳에 쓰세요 |
5 | 내보내기 실패. | JSON 결과의 message를 읽으세요 |
6 | 이 MarsDawn은 폴더를 보여줄 수 없어 아무것도 열지 않았음(open만 해당). | |
64 | 사용법 오류. 범위를 벗어난 줄 번호, 파일 둘 이상이나 폴더와 함께 쓴 --line, 폴더 둘 이상 등이 포함됩니다. | 옵션이나 값을 고치세요. 이 오류는 --json을 줘도 stderr에 텍스트로 나옵니다 |
--json 출력
성공하면 marsdawn open --json은 ok, opened(각 파일의 path와, 줄을 요청한 경우 line이 담긴 목록), app(앱 경로), 그리고 폴더를 준 경우 folder를 출력합니다. marsdawn export --json은 ok, output, pages, theme, paper, diagramErrors를 출력합니다. 실패하면 둘 다 ok, error, message를 출력합니다.