본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 20. 15:44

devin을 대화로 사용하는 것에 지친 분들에게: 비대화 모드(`devin -p`)로 스크립트에 통합하기 (Devin for Terminal)

요약

Devin for Terminal의 비대화 모드(`devin -p`)를 활용하여 반복적인 작업을 자동화하고 스크립트에 통합하는 방법을 설명합니다. 대화형 인터페이스 대신 명령어를 통해 즉각적인 결과를 얻는 법과 주의사항을 다룹니다.

핵심 포인트

  • 비대화 모드(`-p`)를 통해 대화 없이 결과만 즉시 출력 가능
  • 쉘 스크립트 및 자동화 워크플로우에 Devin 통합 가능
  • 플래그와 프롬프트 혼용 시 `--` 구분자 사용 필수
  • `--prompt-file`을 사용하여 긴 지시사항을 파일로 관리 가능

지난 기사에서는 Devin for Terminal(devin 명령어)의 기능을 Claude Code와 나란히 소개했습니다. Skills, Subagents, Hooks, /handoff —— 터미널에 앉아 대화하며 사용하는 것을 전제로 한 이야기들이 중심이었습니다.

하지만 한동안 사용하면서 이런 생각이 들었습니다. '이거, 매번 터미널에 붙어 앉아 대화하는 건 정형화된 작업에서는 오히려 번거롭지 않을까?'

예를 들어 '모든 파일의 TODO 코멘트를 찾아 정리하기'나 '변경 사항만 요약하기' 같은 작업은, 대화로 한 번 주고받는 것보다 명령어 한 번으로 결과만 돌려받고 싶습니다. Claude Code에 claude -p가 있는 것처럼, devin에도 비대화 모드(non-interactive mode)가 있습니다.

이 기사에서는 devin -p를 기점으로, Devin for Terminal을 스크립트나 자동화에 통합하는 사용법을 공식 커맨드 레퍼런스(command reference)에 준거하여 정리합니다. 지난번이 '대화로 어떻게 사용하는가'였다면, 이번에는 '대화하지 않고 어떻게 돌리는가'에 대한 이야기입니다.

먼저 전체적인 모습입니다. 일반적인 devin은 대화형 TUI를 실행하지만, --print (-p)를 붙이면 응답을 출력하고 즉시 종료되는 비대화 모드가 됩니다.

공식 커맨드 레퍼런스에서 --print [PROMPT]에 대한 설명은 다음과 같습니다.

Print response and exit (non-interactive mode). Optionally accepts an inline prompt.

사용법은 간단하며, 프롬프트(prompt)를 직접 전달하거나 -- 구분자를 사용하여 전달합니다.

devin -p "list all TODO comments"
devin -p -- list all TODO comments

제가 처음 시도한 것이 바로 이 형태였습니다. -p를 붙이는 것만으로 결과가 그대로 터미널에 나오고 프롬프트로 돌아옵니다. 쉘 스크립트(shell script)의 일부로 호출할 수 있다는 점이 대화 모드와의 결정적인 차이점입니다.

주의할 점: 플래그(flag)를 사이에 넣을 때는 --로 구분할 것

-p 바로 뒤에 프롬프트를 쓰는 devin -p "..."는 작동하지만, --permission-mode와 같은 플래그를 중간에 끼워 넣으면 프롬프트가 공중에 떠서 error: unexpected argument가 발생합니다. 플래그를 사용할 때는 프롬프트 앞에 --를 놓아주세요.

`# NG: 플래그 뒤에 일반 프롬프트 작성 → unexpected argument
devin -p --permission-mode dangerous "fix the bug"

OK: 프롬프트 앞에 --를 배치

devin -p --permission-mode dangerous -- "fix the bug"`

참고로, 본 기사의 명령어는 devin 2026.5.x에서 동작을 확인했습니다. 플래그 이름이나 취할 수 있는 값은 버전에 따라 차이가 있을 수 있으므로, 직접 devin --help를 통해 실제 표기를 확인하시기 바랍니다.

비대화 모드로 돌리기 시작하면 곧바로 '매번 프롬프트를 문자열로 쓰는 것은 한계가 있다'고 느끼게 됩니다. 긴 지시사항이나 팀에서 공유하고 싶은 지시사항은 파일로 분리하고 싶어집니다.

이를 위해 --prompt-file <FILE>이 준비되어 있습니다.

플래그설명 (공식)
--print [PROMPT] / -pPrint response and exit (non-interactive mode)
--prompt-file <FILE>Load the initial prompt from a file
--model <MODEL>Set the AI model for this session
--config <PATH>Configuration file path

프롬프트를 파일화해 두면 Git으로 이력 관리를 할 수 있고 리뷰도 가능합니다. 저는 prompts/ 디렉토리에 정형화된 태스크의 프롬프트를 두고, devin -p --prompt-file prompts/review.md와 같이 호출하는 방식으로 운영을 정착시켰습니다.

--model

--model을 병용하여 모델을 고정할 수 있다는 점도 스크립트 작성 시 은근히 중요합니다. 비대화형(Non-interactive)으로 반복 실행한다면, "오늘은 어떤 모델을 사용했는가"에 따라 결과가 달라지지 않도록 명시해 두는 것이 안심됩니다.

비대화 모드에서 가장 흔히 겪는 문제는 바로 **권한 확인 프롬프트(Permission prompt)**입니다. 대화형이라면 "실행해도 될까요?"라는 질문에 "네"라고 답하면 진행되지만, 비대화형에서 사람이 없다면 거기서 멈춰버리고 맙니다.

그래서 --permission-mode를 함께 지정합니다. 커맨드 레퍼런스(Command reference)에서 지정할 수 있는 값은 다음 세 가지입니다.

역할
auto (기본값)읽기 계열 도구는 자동 승인. 쓰기나 셸 실행은 확인 절차를 거침
dangerous모든 도구 호출(Tool call)을 자동 승인하며, 확인 절차로 멈추지 않음

제 환경(devin 2026.5.x)에서 devin --help--permission-mode 항목에 표시된 값은 auto(기본값)와 dangerous 두 가지였습니다. 문서나 버전에 따라서는 normal / bypass라는 값이 안내되기도 합니다. 현재 사용 가능한 값은 devin --help를 통해 확인하시기 바랍니다.

비대화형으로 쓰기 작업까지 완수하고 싶다면, 모든 것을 자동 승인하는 dangerous를 선택합니다. 반대로 읽기 전용 태스크라면 기본값인 auto 상태에서도 확인 절차로 멈추지 않습니다 (실제로 TODO 코멘트 요약과 같이 읽기만 하는 처리는 auto 상태에서도 통과됩니다).

다만, 이 부분은 솔직하게 주의 사항을 적어두겠습니다. dangerous는 편리한 반면, 도구 호출을 무조건 허용하므로 신뢰할 수 있는 리포지토리와 신뢰할 수 있는 프롬프트에서만 사용해야 합니다. 참고로 공식 문서에 따르면, 이러한 자동 승인 모드라 하더라도 관리자가 Team Settings에서 설정한 조직 수준의 deny / ask 규칙은 덮어쓰지 않습니다 (관리자에 의한 제어가 항상 우선됩니다). 엔터프라이즈 환경에서 사용할 경우, "개인의 자동화가 조직의 정책을 초월할 수 없다"는 이 보증은 안심할 수 있는 요소입니다.

저는 처음에 재미 삼아 무엇이든 dangerous로 돌려보았지만, 다시 생각해보니 "자동 승인으로 무엇이든 실행한다"는 것은 어느 정도 각오가 필요한 설정입니다. --respect-workspace-trust와 같은 워크스페이스 신뢰(Workspace trust) 설정도 함께 고려하여, 어디까지 자동화할지는 신중하게 결정하는 것이 좋다고 느낍니다 (-p 비대화 모드에서는 워크스페이스 신뢰가 기본적으로 비활성화, 즉 신뢰하지 않는 쪽으로 설정되어 있다는 점도 기억해두면 안전합니다).

또한, --permission-mode와 별개로 --sandbox 플래그도 존재합니다. devin --help에 따르면, exec(셸 실행) 계열의 프로세스를 OS 레벨에서 격리하는 기능으로, 이를 부여하면 허가된 Read / Write 스코프를 OS 레벨에서 강제합니다 (macOS의 seatbelt, Linux의 bwrap+seccomp). 제가 사용하는 버전에서는 Research Preview 취급이었으므로, 자동화에 포함시키기 전에 동작을 확인해 두는 것이 좋습니다.

비대화형으로 실행하다 보면 "실행 기록(Trace)을 남기기"와 "중간부터 재개하기"가 필요해집니다. 이 역시 전용 플래그가 있습니다.

플래그설명 (공식)
--export [PATH]각 턴(Turn)이 끝난 후 대화 내용을 파일로 내보냄 (ATIF format)
--continue / -c현재 디렉토리의 가장 최근 세션을 재개함
--resume <SESSION_ID> / -rID를 통해 특정 세션을 재개함

--export는 각 턴이 끝난 후 대화 내용을 파일로 기록합니다. 형식은 공식적으로 "ATIF format"이라고 명시되어 있습니다. CI의 아티팩트(Artifact)로 남겨두면 "Devin이 무엇을 했는지"를 나중에 추적할 수 있습니다.

주의:
--export는 버전에 따라 제공되지 않을 수 있습니다. 실제로 제 환경(devin 2026.5.x)의 devin --help에는 --export

나타나지 않았습니다. 그럴 경우에는 다음과 같이 쉘(Shell)의 리다이렉션(Redirection)을 통해 출력을 저장할 수 있습니다: devin -p "app.py의 품질을 5단계로 평가해줘" | tee logs/review.txt

--continue / --resume는 여러 단계의 작업을 나누어 실행할 때 유용합니다. 첫 번째 명령어로 조사만 수행하게 하고, 결과를 확인한 뒤 두 번째 명령어로 구현을 진행하는 방식으로 나눌 수 있습니다.

여기서 한 가지 솔직한 점을 적어둡니다. Claude Code에 있는 것과 같은 구조화된 JSON 출력 플래그는 제가 확인한 범위 내의 커맨드 레퍼런스(Command Reference)에는 보이지 않았습니다. 기계적으로 파싱(Parsing)하고 싶다면, 현재로서는 --export (ATIF 형식) 출력을 이용하는 것이 현실적이라고 생각합니다. 이 점은 향후 업데이트에 따라 변경될 가능성이 있으므로 최신 레퍼런스를 확인하시기 바랍니다.

지금까지의 플래그를 조합하면 쉘(Shell)에서 정형화된 태스크(Task)를 실행할 수 있습니다. 예를 들어, 변경된 파일 그룹에 대해 순차적으로 체크를 수행하는 이미지입니다.

# 인증 상태 확인 (CI 실행 전제)
devin auth status
# 변경된 파일마다 프롬프트 적용
...

인증 관련은 devin auth (login / logout / status) 서브 커맨드(Subcommand)로 처리합니다. CI에서 실행한다면, 사전에 인증이 완료된 상태인지 devin auth status로 확인한 뒤 실행하는 것이 안전합니다.

비대화형 운영과 궁합이 좋은 것은 컨텍스트(Context)를 명령어로 관리할 수 있는 서브 커맨드입니다. devin skillsdevin rules가 준비되어 있습니다.

서브 커맨드설명 (공식)
devin skills에이전트 스킬 관리 (슬래시 커맨드 및 에이전트가 트리거하는 컨텍스트 블롭 (Context Blobs))
devin rules에이전트 규칙 관리 (항시 활성화된 컨텍스트 블롭 (Context Blobs))
devin mcpModel Context Protocol 서버에 연결 및 로그인
devin list현재 디렉토리의 세션 목록 표시

Rules는 '항시 활성화된 컨텍스트', Skills는 '슬래시 커맨드나 에이전트가 문맥에서 호출하는 컨텍스트'라는 위치를 가집니다. 이것들을 명령어로 관리할 수 있으면, 리포지토리(Repository) 설정 스크립트 내에서 "이 프로젝트에 필요한 Rules를 넣는다"와 같은 초기화까지 자동화할 수 있습니다.

마지막으로, 비대화형의 연장선으로서 흥미로운 것이 devin acp입니다.

Run Devin as an Agent Client Protocol (ACP) server over stdio

ACP (Agent Client Protocol) 서버로서 stdio를 통해 기동할 수 있습니다. 대응하는 에디터(Editor)나 도구로부터 Devin을 "백엔드 에이전트"로 호출할 수 있다는 방향성입니다. -p가 원샷(One-shot) 스크립트 통합이라면, acp는 상주시키며 다른 도구에서 호출하는 통합이라는 식으로 역할이 나뉩니다.

시나리오권장 사항이유
설계를 상담하며 진행할 때대화형 (devin)시행착오는 TUI가 적합
동일한 체크를 다수의 파일에 적용할 때비대화형 (devin -p)쉘(Shell)에서 루프(Loop) 가능
CI에 포함하고 싶을 때비대화형 + `tee(또는--export`)
다단계 작업을 분할할 때-p + --continue / -r단계적으로 재개 가능
다른 도구에서 상주하며 호출할 때devin acpACP 서버로서 통합

지난번에는 "devin은 대화형 CLI로서 Claude Code에 뒤처지지 않는다"는 이야기를 했습니다. 이번에는 그것을 한 단계 더 나아가 "대화하지 않는 사용법"을 파헤쳐 보았는데, -p, --prompt-file, --permission-mode, --export, --continue라는 직관적인 플래그만으로도 스크립트나 CI에 충분히 통합할 수 있음을 알 수 있었습니다.

한편, 구조화된 JSON 출력과 같이 "자동화 전제 도구"로서 바라보았을 때 아직 갖춰지지 않은 부분들도 있습니다. 그 부분은 --export (없다면 | tee)로 출력을 남기면서, 향후 업데이트를 기대해 보고 싶습니다.

devin을 "앉아서 대화하는 상대"라고 생각하는 분들은, 한 번 devin -p "..."를 입력해 보세요. 대화의 왕복 없이 결과만 돌아오는 그 감각은 정형화된 작업의 풍경을 꽤 많이 바꿔줄 것입니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0