TL;DR

  • Agent Scrub은 macOS 14 이상에서 지원되는 AI 코딩 에이전트의 대화 기록을 스캔해 비밀 정보를 찾아내고, 같은 비밀 정보의 여러 복사본까지 로컬에서 수정·삭제하는 앱임.
  • Claude Code, Codex, Gemini CLI, Cursor, GitHub Copilot, Windsurf, Cody, Cline, Aider, Continue, Pi와 같은 도구의 프롬프트·대화 기록·도구 출력·저장된 메모리를 검사함.
  • 설정 파일, 인증 정보 파일, 프로젝트의 .env 파일, 편집기의 비밀 정보 저장소는 검사하거나 수정하지 않으며, 활성 인증 정보와 대화 기록에 남은 복사본을 분리해 다룸.
  • 메뉴 막대 앱에서 탐지 결과를 유형·프로젝트·애플리케이션별로 확인하고, 즉시 가리기·재등장 시 자동 가리기·JWT 디코딩·검사 제외 폴더 설정 등을 수행함.
  • 모든 처리와 앱 상태는 Mac에 남으며 네트워크 연결은 없지만, 원본 기록 파일의 수정은 자동으로 되돌릴 수 없고 이미 전송됐거나 백업에 포함된 데이터는 제거할 수 없음.

지원 도구

  • Agent Scrub이 검사하는 AI 코딩 도구는 다음과 같음.
  • Claude Code
  • Codex
  • Gemini CLI
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Cody
  • Cline
  • Aider
  • Continue
  • Pi
  • 동일한 채팅 저장 형식을 사용하는 VS Code 포크

검사 대상

  • 검사 범위는 대화와 관련된 파일로 한정되며, 프롬프트·대화 기록·도구 출력·저장된 메모리를 포함함.
  • Codex auth.json, Continue config.yaml, 프로젝트의 .env 파일, 편집기의 비밀 정보 저장소, 도구가 활성 인증 정보를 저장하는 기타 파일은 검사하거나 수정하지 않음.
  • 대화 기록에 저장된 비밀 정보는 별도의 복사본이며, 기록에 있는 복사본을 제거해도 도구가 인증에 사용하는 자격 증명에는 영향이 없음.
  • 유출된 자격 증명이 접근할 수 있는 항목을 확인하려면 읽기 전용 도구인 geiger를 사용할 수 있음.

설치

  • macOS 14 이상이 필요하며, GitHub Releases에서 최신 AgentScrub-*.zip을 내려받아 압축을 푼 뒤 격리 속성을 제거하고 앱을 실행함.
  • Agent Scrub은 현재 서명되지 않아 macOS가 내려받은 앱을 격리할 수 있음. 격리 속성을 제거하는 대신 앱을 마우스 오른쪽 버튼으로 클릭하고 Open → Open을 선택할 수도 있음.
  • 릴리스 빌드는 범용 빌드로 Apple Silicon과 Intel Mac을 모두 지원함.
  • 소스에서 빌드하려면 Xcode 16과 Swift 6이 필요함. 앱 번들 빌드 도구를 실행한 뒤 .build/AgentScrub.app을 열면 됨.

권한

  • 첫 실행 시 Keychain과 로컬 파일 접근 권한을 요청할 수 있음.
  • Keychain에는 설치별 무작위 키를 생성해 로그인 Keychain에 저장함. 이 키로 탐지된 비밀 정보의 지문을 만들며, Agent Scrub 자체 데이터베이스에는 비밀 정보 값을 평문으로 저장하지 않음.
  • Agent Scrub은 자체 Keychain 항목에만 접근함. Always Allow를 선택하면 Keychain 권한 요청이 반복되지 않음.
  • 지원되는 코딩 에이전트가 만든 로컬 기록 파일을 읽으려면 파일 접근 권한이 필요함. 에이전트 기록이 Documents, Desktop, Downloads 등에 있으면 macOS가 해당 위치에 대한 권한을 요청할 수 있으며, 모든 처리는 로컬에서 이뤄짐.

사용 방법

  • Agent Scrub은 macOS 메뉴 막대에서 실행되며, 시작할 때 스캔하고 지원되는 기록 위치의 변경 사항을 계속 감시함.
  • 개요 화면에는 탐지된 비밀 정보를 유형·프로젝트·애플리케이션별로 묶어 표시하고 전체 누적 수치를 제공함.
  • 발견된 비밀 정보 화면에서는 각 탐지 항목과 복사본이 발견된 파일을 확인하고 다음 작업을 수행함.
  • Reveal: 탐지된 값을 표시함.
  • Decode JWT: 탐지된 JWT의 내용을 확인함.
  • Redact now: 탐지된 복사본을 [REDACTED:…] 표시로 교체함.
  • Always redact: 같은 비밀 정보가 다시 나타나면 자동으로 가림.
  • Not a secret / Keep: 탐지 항목을 닫거나 변경하지 않은 상태로 둠.
  • Coverage 화면에서는 검사하지 못한 파일이나 위치와 제외 사유를 확인할 수 있으며, 스캔 대상에서 제외할 폴더도 설정할 수 있음.

가리기 동작

  • 가리기는 원본 기록 파일을 수정하며 자동으로 되돌릴 수 없음.
  • 변경 내용을 쓰기 전과 후에 대상 파일을 다시 확인하고 파싱함.
  • 에이전트가 현재 쓰는 중인 것으로 보이는 파일은 일시적으로 건너뛰고, 세션이 끝난 뒤 다시 시도함.
  • Mac에 아직 남아 있는 로컬 복사본만 제거할 수 있으며, 제공업체에 이미 전송됐거나 백업에 복사된 데이터는 제거할 수 없음.

명령줄

  • hgctl은 스캔·가리기·검증·정책·적용 작업에 명령줄 접근을 제공함.
  • 쓰기 작업은 --yes를 지정하지 않는 한 기본적으로 드라이런으로 실행됨.
  • 스캔은 Swift 패키지 실행 환경에서 hgctl scan 하위 명령으로 수행함.

데이터 처리

  • Agent Scrub은 네트워크 연결을 만들지 않으며, 스캔·상태 정보·가리기 작업은 모두 Mac에 남음.
  • 애플리케이션 상태와 탐지 결과 및 유지·가리기 결정은 ~/Library/Application Support/History Guard에 저장됨.
  • 지문 생성 키는 로그인 Keychain에, 제외 폴더 목록은 앱 환경설정에 저장됨.
  • Agent Scrub을 완전히 제거하려면 앱, ~/Library/Application Support/History Guard, io.adversis.history-guard Keychain 항목을 삭제함.

개발

  • Swift 빌드와 테스트를 실행해 프로젝트를 검증함.
  • 릴리스 게시 시 버전 태그를 만들고 원격 저장소에 푸시함. 버전 태그를 푸시하면 CI가 범용 앱을 빌드하고 GitHub Releases에 게시함.