ACP 에이전트와 함께 Noir 사용하기

Codex, Gemini, Claude 같은 ACP 기반 에이전트를 Noir와 연결해 AI로 엔드포인트를 분석하는 방법입니다.

ACP(Agent Client Protocol) 제공업체를 쓰면 Noir는 LLM HTTP API를 호출하는 대신 AI 에이전트 프로세스를 띄워 통신합니다.

지원되는 ACP 제공업체

  • acp:codex -> npx @zed-industries/codex-acp 실행
  • acp:gemini -> gemini --experimental-acp 실행
  • acp:claude -> npx @zed-industries/claude-agent-acp 실행
  • acp:<custom> -> NOIR_ACP_ALLOW_CUSTOM_COMMAND=1이 설정된 경우에만 <custom> 명령을 ACP 호환 에이전트로 실행

그 외의 대상은 거부됩니다. --ai-provider는 설정 파일에서도 올 수 있고, 거기에 적힌 명령을 그대로 실행하면 코드 실행 경로가 되므로 사용자 지정 바이너리는 명시적으로 허용해야 합니다.

NOIR_ACP_ALLOW_CUSTOM_COMMAND=1 noir scan ./myapp --ai-provider="acp:my-agent --flag"

사용 방법

Codex

noir scan ./myapp --ai-provider=acp:codex

Gemini

noir scan ./myapp --ai-provider=acp:gemini

Claude

noir scan ./myapp --ai-provider=acp:claude

모델

acp:*에서는 --ai-model이 필수가 아닙니다. Noir는 이 값을 에이전트에 넘기지 않으며, 에이전트는 자체 설정된 모델을 씁니다.

로그 동작

기본적으로 Noir는 ACP 라이프사이클 이벤트를 Noir 스타일 로그로 출력하고, ACP/에이전트의 원본 stderr 로그는 숨깁니다.

원본 ACP/에이전트 로그가 필요하면 다음을 설정하세요.

NOIR_ACP_RAW_LOG=1 noir scan ./myapp --ai-provider=acp:codex

도구 실행 권한

ACP 에이전트는 자신의 도구(셸 명령, 파일 쓰기, 네트워크 요청)를 실행하기 위해 Noir에 권한을 요청할 수 있습니다. Noir는 이 요청을 모두 거부합니다.

Noir가 보내는 프롬프트는 스캔 대상 트리의 소스 코드이고, 내가 작성하지 않은 코드인 경우가 많습니다. "위 내용은 무시하고 이것을 실행하라"라고 적힌 파일 하나로 에이전트를 조종할 수 있습니다. 여기서 자동으로 승인하면 엔드포인트 스캔이 내 컴퓨터에서의 임의 코드 실행으로 바뀝니다.

거부해도 잃는 것은 없습니다. 분석할 코드는 이미 프롬프트에 담겨 있어 에이전트가 도구를 쓰지 않아도 답할 수 있습니다. 신뢰하는 트리를 스캔하면서 에이전트가 직접 탐색하기를 원한다면 명시적으로 허용하세요.

NOIR_ACP_ALLOW_TOOL_PERMISSIONS=1 noir scan ./myapp --ai-provider=acp:codex

참고

  • acp:* 제공업체에서는 --ai-key가 필요하지 않습니다.
  • NOIR_AI_TIMEOUT은 프롬프트 턴 하나의 제한 시간입니다(기본값 300초). NOIR_AI_CONNECT_TIMEOUT은 에이전트 시작과 세션 생성의 제한 시간입니다(기본값 120초로, 첫 npx 다운로드에 충분합니다).
  • ACP 요청은 재시도하지 않으며 --ai-max-requests에도 포함되지 않습니다.
  • 캐시 플래그(--cache-disable, --cache-clear)는 다른 AI 제공업체와 똑같이 동작합니다.
  • acp:claude-code는 acp:claude의 별칭입니다.