터미널

실제 셸, 샌드박스 안에서

Ave의 터미널은 운영체제 샌드박스 안에서 실제 셸을 돌리는 PTY입니다. 사이드 패널에서 열어 메인 영역으로 옮길 수 있습니다. 터미널에 붙인 채팅에서 에이전트가 실행 결과를 읽고, 승인받은 다음 명령을 같은 셸에 실행합니다.

메인 영역의 터미널과 그 창에 붙인 채팅. 에이전트가 terminal_read로 실패한 테스트를 읽고, terminal_run 승인을 받아 같은 터미널에서 다시 실행한 뒤 원인을 설명하는 화면
대화 옆 사이드 패널의 터미널. Blocks 4와 Attach last 버튼, git log와 실패한 테스트 1개가 있는 npm test 결과

명령 블록

명령마다 하나의 블록

셸 통합이 명령의 시작과 끝을 표시해서, 명령마다 명령어, 작업 폴더, 종료 코드, 걸린 시간을 블록으로 묶습니다.

  • 복사와 첨부. 블록마다 복사, 대화에 첨부가 있고, ‘마지막 블록 첨부’로 방금 실행한 결과를 바로 대화에 넣습니다.
  • 탭마다 셸 하나. 탭마다 오래 도는 셸이 하나씩 있고, 최대 16개까지 엽니다. 스크롤백 256KB는 다시 붙을 때 그대로 재생됩니다.
  • 셸 선택. $SHELL이 절대 경로면 그 셸을, 아니면 macOS는 zsh, 그 밖에는 bash를 씁니다.
  • 작업 공간에서 시작. 기본 폴더는 홈이 아니라 ~/.ave/workspace입니다. 셸마다 버리는 임시 HOME을 써서 내 rc 파일은 읽지 않습니다.

에이전트와 함께

결과를 읽고, 다음 명령은 승인받아서

terminal_read는 명령 블록과 출력을 읽고, terminal_run은 권한 검사를 거쳐 한 줄 명령을 같은 터미널에 실행합니다. 승인 카드의 대상 터미널과 현재 작업 폴더가 고정되며, 셸이 실행 중이거나 아직 제출하지 않은 입력이 있으면 명령을 보내지 않습니다. 읽은 출력은 신뢰할 수 없는 데이터로 표시됩니다.

터미널에 붙인 채팅이 실패한 테스트 출력을 읽은 뒤 같은 터미널에서 실행할 명령을 승인 카드로 보여 주는 화면

같은 터미널에서 다시 실행

실패한 npm test 출력을 읽고, 같은 터미널에서 테스트를 다시 실행할 명령을 승인 카드로 보여 줍니다.

사이드 채팅 탭의 입력창 위에 ‘Terminal 1’ 대상 칩이 붙어 있는 화면

사이드 채팅의 대상

마지막으로 앞에 둔 터미널이나 페이지가 사이드 채팅의 대상이 되고, 입력창 위에 표시됩니다.

builtin:bash 승인 창. OS 격리 활성(asrt), 명령마다 임시 HOME, 로그인 상태를 물려받지 않는다는 설명

에이전트의 셸 명령

에이전트가 직접 돌리는 명령은 따로 한 번씩 실행되고, 실행 위치와 격리 상태를 보여 주며 승인을 받습니다.

‘작업 공간에서 열기’ 목록. Review, Terminal, Browser, Files, Sub-agents, Activity, Side chat과 단축키

작업 공간에서 열기

빈 사이드 패널에서 터미널, 브라우저, 파일, 서브에이전트, 사이드 채팅을 바로 엽니다.

권한 설정의 OS 도구 샌드박스 항목이 켜져 있고, macOS에서 무엇을 가두는지 설명이 보이는 화면

샌드박스

샌드박스가 셸을 담지 못하면 시작하지 않습니다

터미널은 운영체제 샌드박스 안에서만 돕니다. 샌드박스가 셸을 담을 수 없으면 터미널은 시작을 거부하고, 샌드박스 없이 도는 대체 경로는 없습니다.

  • macOS는 Seatbelt, Linux는 bwrap. 파일 쓰기, 프로세스, 네트워크를 함께 가둡니다. 네트워크는 기본으로 막힙니다.
  • 직접 입력한 명령은 따로 묻지 않습니다. 내가 터미널에 친 명령에는 승인 단계가 없고, 샌드박스가 그 경계입니다.
  • 샌드박스는 직접 켭니다. 설정의 권한 탭에서 켜고, 켠 뒤에는 앱을 다시 시작해야 합니다.

자주 묻는 질문

터미널이 열리지 않아요.

터미널은 OS 샌드박스가 켜져 있어야 돕니다. 설정 → 권한에서 OS 도구 샌드박스를 켜고 앱을 다시 시작하세요. 샌드박스가 셸을 담을 수 없는 환경이면 터미널은 시작하지 않습니다.

터미널을 메인 영역으로 옮기면 셸이 다시 시작되나요?

아니요. ‘메인 영역으로 이동’이나 끌어 놓기로 옮겨도 셸과 출력이 그대로 이어집니다. 터미널은 한 번에 한 곳에만 보이고, 메인 영역의 패널을 닫으면 셸도 끝납니다.

에이전트가 제 터미널에 명령을 입력하나요?

네. terminal_run은 권한 검사를 통과한 한 줄 명령을 지정된 터미널에서 실행합니다. 승인 카드에 표시된 터미널과 현재 작업 폴더가 실행 때도 같아야 하며, 셸이 실행 중이거나 아직 제출하지 않은 입력이 있으면 거부됩니다. terminal_read는 출력 읽기만 담당합니다.

오래 걸리는 명령이 끝나면 알려 주나요?

셸이 알림 이스케이프(OSC 9 또는 OSC 777)를 보내면 그 패널에 표시가 붙고, 창이 앞에 있지 않을 때는 운영체제 알림이 뜹니다.

닫은 패널을 다시 열 수 있나요?

⌘⇧T는 같은 종류의 새 패널을 같은 위치에 엽니다. 닫힌 셸 프로세스가 되살아나지는 않습니다.

이어서 읽기