에이전트는 프로세스를 남기고 갑니다.
AgentsRoom이 그것을 찾아냅니다.
AI 코딩 에이전트는 도구를 호출할 때마다 실제 시스템 프로세스를 띄웁니다. 대부분은 몇 초 만에 끝납니다. 어떤 것은 영영 끝나지 않고, CPU는 하나도 쓰지 않으면서 수 기가바이트의 메모리를 붙잡고 놓지 않습니다.
프로세스 가드는 에이전트의 자식 프로세스를 훑어서 더는 진전이 없는 것을 알려주고, 어느 에이전트가 띄웠는지 이름을 붙여주고, 클릭 한 번으로 끝내게 해줍니다. 당신 모르게 종료되는 것은 없습니다.
프로세스 가드가 실제로 보는 것: 한 에이전트가 띄운 프로세스들, 그리고 그중 어느 것이 일을 멈췄는지.
AI 코딩 에이전트는 프로세스 하나가 아닙니다. 에이전트가 도구를 호출할 때마다 당신의 컴퓨터에서 진짜 프로세스가 하나 시작됩니다. 검색, 빌드, 타입 검사, 테스트 실행, 스크립트. 여기에 동시에 돌아가는 에이전트 몇 개를 곱하고 하루를 곱하면, 당신이 한 번도 보지 못한 채 태어나고 묻히는 프로세스가 수백 개가 됩니다.
거의 다 끝납니다. 문제는 끝나지 않는 쪽입니다. 패턴 하나가 정규식 엔진을 터뜨린 검색은 죽지도 않고 느려지지도 않습니다. 메모리를 할당하고, 압축 메모리로 밀려나고, 그다음부터는 CPU 4%로 페이지 폴트만 일으키며 평생을 보냅니다. 절대 끝나지 않습니다. 아무도 죽여주지 않습니다. 그리고 그것을 띄운 에이전트를 닫으면 init 프로세스에 재부모화되어, 이 컴퓨터에서 아무도 책임지지 않는 고아 프로세스가 됩니다.
느려짐이 슬금슬금 스며드는 이유가 이것입니다. 극적으로 망가지는 순간이 있는 게 아니라, 하루에 걸쳐 천천히 쌓입니다. 그리고 바로 이 모양 때문에 사람들은 엉뚱한 범인을 지목합니다. 발열이겠지, 에이전트를 너무 많이 띄웠겠지, 앱에 메모리 누수가 있겠지. 우리가 측정한 세션에서 앱 자체는 프로세스 91개에 2.8GB, 에이전트 CLI 8개는 다 합쳐서 1.6GB였습니다. 둘 다 원인이 아니었습니다.
프로세스 가드는 안전망입니다. 에이전트가 남기고 간 것을 지켜보고, 어느 것이 멈췄고 누가 띄웠는지 알려주고, 끝낼 수 있게 해줍니다. 근본 원인은 계속 바뀔 겁니다. 다른 도구, 다른 패턴, 다른 제공자. 안전망은 바뀌지 않아도 됩니다.
AI 에이전트를 돌리는 컴퓨터가 느려지는 이유
아래 숫자는 에이전트 8개를 돌린 16GB 노트북에서 실제로 측정한 세션의 값입니다. 추정치는 하나도 없습니다.
컴퓨터는 다섯 시간 반째 켜져 있었습니다. 발열 문제는 전혀 없었습니다. 스로틀링 기록은 0, 배터리는 30.6도. 로드 애버리지는 8코어에서 17에서 21 사이였고, CPU는 시간의 56%를 커널에서 보내면서 유휴는 1.5%였습니다. 바로 이 비율이 모든 것을 말해줍니다. 진짜로 일하는 컴퓨터는 사용자 코드에서 시간을 씁니다. 시스템 시간이 56%인 컴퓨터는, 메모리를 압축하고 풀고 스왑하는 일밖에 하지 않는 커널입니다.
멈춘 검색 프로세스 7개가 각각 3.9GB에서 8.0GB씩 붙잡고 있었고, RAM이 16GB인 컴퓨터에서 도합 41.8GB를 점유하고 있었습니다. 스왑은 23.5GB 중 22.3GB, 부팅 이후 스왑에 쓰인 양은 약 993GB였습니다. 그 7개를 종료하자 에이전트를 하나도 재시작하지 않고, 앱도 재시작하지 않고 15.5GB가 즉시 돌아왔습니다.
아무도 이걸 손으로 잡아내지 못하는 이유는, 늘 쓰던 도구들이 이 문제에 대해 거짓말을 하기 때문입니다. macOS에서는 멈춘 프로세스가 실제로는 8GB를 붙잡고 있으면서 실제 메모리 20MB로 표시될 수 있습니다. 그것이 건드린 모든 것이 메모리 압축기를 거쳤기 때문입니다. 우리는 살아 있는 프로세스 하나를 실측했는데, 실제 사용량은 14GB인데 실제 메모리 항목은 4.7GB였습니다. 가상 메모리도 도움이 안 됩니다. 이 플랫폼에서는 launchd조차 가상 크기를 약 440GB로 보고하니, 그것으로 거르면 컴퓨터 전체가 걸립니다.
같은 세션을 시간대별로: 이제 아무도 쓰지 않는 메모리 덩어리들, 그리고 그것을 풀어줬을 때 벌어지는 일.
그리고 이 프로세스들에는 내일도 그 자리에 있을 것을 보장하는 네 가지 성질이 있습니다.
절대 끝나지 않습니다
자기 메모리가 스왑에 있으니 계산 대신 페이지 폴트로 시간을 보냅니다. 멀쩡한 검색은 코어 하나를 꽉 채웁니다. 이것들은 4%에 머뭅니다. 이 악순환에서 빠져나올 길은 없고, 아무리 기다려도 달라지지 않습니다.
절대 죽지 않습니다
도구 호출에는 시간 제한이 없습니다. 50분째 아무것도 안 하는 프로세스에 대해 이 컴퓨터의 그 무엇도 의견을 갖고 있지 않습니다. 누군가 죽이거나 컴퓨터를 재부팅할 때까지 그대로 앉아 있습니다.
자기를 띄운 에이전트보다 오래 삽니다
에이전트 탭을 닫아도 프로세스는 살아남을 수 있고, init 프로세스에 재부모화됩니다. 그 순간부터는 무엇과도 연결되지 않습니다. 고아 프로세스이고, 아무도 회수하지 않습니다. 우리가 측정한 7개 중 2개는 이미 그 상태였습니다.
차곡차곡 쌓입니다
검증 한 번에 하나, 운 나쁜 검색 한 번에 하나. 그래서 느려짐이 하루 내내 계속 심해지기만 하고, 재부팅하면 고쳐진 것처럼 보입니다. 아무것도 고쳐지지 않았습니다. 숫자만 0으로 돌아갔을 뿐입니다.
프로세스 가드가 하는 일
에이전트가 띄운 프로세스를 지켜보고, 손대는 대상은 일부러 아주 좁게 잡았습니다.
진짜 메모리를 측정합니다
실제 메모리 크기가 아닙니다. 그 값은 멈춘 프로세스를 기가바이트 단위로 축소해서 보여줍니다. 프로세스 가드는 압축된 페이지와 스왑으로 빠진 페이지까지 포함한 실제 사용량을 읽으므로, 20MB로 표시되면서 8GB를 붙잡고 있는 프로세스도 있는 그대로 드러납니다.
RAM만이 아니라 CPU도 봅니다
메모리만 보면 컴퓨터에서 돌아가는 모든 빌드가 걸립니다. 프로세스 가드는 프로세서 사용량을 두 번의 검사 사이의 변화율로 재기 때문에, 한참 일하다가 멎어버린 프로세스도 놓치지 않고 잡히고, 진짜로 일하고 있는 빌드는 건드리지 않습니다.
고아 프로세스를 잡아냅니다
자기를 띄운 에이전트보다 오래 살아남은 프로세스는 그 사실만으로 보고됩니다. 다른 누구도 회수해주지 않기 때문입니다. 소유 관계는 프로세스가 아직 붙어 있는 동안 기억해 둡니다. 그때가 그것을 확정할 수 있는 유일한 순간이기 때문입니다.
클릭 한 번으로 종료
상태 표시줄의 칩이 멈춘 프로세스를 하나씩, 그것을 띄운 에이전트와 메모리, 나이, CPU와 함께 보여줍니다. 하나를 종료하면 그것이 포크한 것까지 함께 끝납니다. 메모리는 곧바로 돌아오고 에이전트는 계속 돌아갑니다.
macOS, Windows, Linux
메모리에 대해 사실대로 말하려면 시스템마다 다른 측정이 필요합니다. macOS는 압축된 페이지, Linux는 실제 메모리에 스왑된 분량을 더한 값, Windows는 프라이빗 커밋. 셋 다 계획이 아니라 이미 구현되어 있습니다.
비용이 거의 없습니다
분당 프로세스 스냅숏 한 번, 프로세스 824개가 도는 컴퓨터에서 약 40밀리초로 측정됐습니다. 비싼 메모리 검사는 이미 멈춘 것처럼 보이는 게 있을 때만 돌고, 활성 에이전트가 없으면 검사 자체가 아예 돌지 않습니다.
늑대야 소리를 하지 않게 만드는 규칙
빌드를 신고하는 감시자는 일주일이면 꺼버리는 감시자입니다. 그래서 프로세스는 메모리만 가지고는 절대 보고되지 않습니다. 커야 하고, 살아 있은 지 좀 됐어야 하고, 프로세서를 쓰지 않게 됐어야 합니다. 세 가지가 한꺼번에 맞아야 합니다.
일을 하는 건 세 번째 조건입니다. 타입 검사나 번들러도 몇 분씩 기가바이트를 붙잡지만, 그동안 코어 하나를 꽉 채웁니다. 스왑에 갇힌 프로세스는 4% 언저리에 머뭅니다. 계산 대신 페이지 폴트를 기다리며 평생을 보내기 때문입니다. 이 격차가 일하는 컴퓨터와 가라앉는 컴퓨터를 가르고, 둘을 안정적으로 갈라주는 유일한 신호입니다.
프로세서 사용량도 읽어오는 게 아니라 직접 잽니다. 시스템 도구가 보여주는 흔한 값은 프로세스의 전 생애 평균이라, 20분을 일하다가 멎어버린 것도 여전히 바빠 보입니다. 프로세스 가드는 두 번의 검사 사이에 소비된 프로세서 시간을 비교하므로, 보는 것은 지난 한 시간이 아니라 지난 1분입니다.
동작 방식
분당 한 번, 네 단계. 그중 비싼 단계는 거의 돌지 않습니다.
컴퓨터를 값싸게 한 장 찍습니다
매분 프로세스 가드는 돌고 있는 모든 프로세스의 스냅숏을 한 장만 찍고, 각 에이전트 터미널 아래의 트리를 훑습니다. 프로세스 824개가 도는 컴퓨터에서 측정된 비용은 약 40밀리초. 돌고 있는 에이전트가 없으면 이 일 자체가 일어나지 않습니다.
용의자를 추립니다
그 스냅숏에서, 당신이 정한 기준보다 오래 살아 있고 더는 프로세서를 쓰지 않는 에이전트의 자식 프로세스만 남깁니다. 평소에는 이 목록이 비어 있고, 모든 것이 여기서 끝납니다.
멈춘 것처럼 보이는 것만 측정합니다
그 짧은 목록에 대해서만 프로세스 가드는 압축된 페이지와 스왑으로 빠진 페이지를 포함한 진짜 메모리 측정 비용을 치릅니다. 측정하지 못한 프로세스는 절대 신고되지 않습니다. 모르는 것은 판정이 아니기 때문입니다.
알려주고, 판단은 당신에게 맡깁니다
상태 표시줄에 칩이 뜨고 알림이 한 번만 알려줍니다. 목록을 열면 그 프로세스가 무엇인지, 얼마나 붙잡고 있는지, 얼마나 오래 멈춰 있었는지, 어느 에이전트가 띄웠는지가 보이고, 원하면 끝내면 됩니다.
절대 건드리지 않는 것
프로세스를 끝낼 수 있는 도구는 자기 관할을 아주 좁게 정해야 합니다. 아래 한계선은 구조적인 것이지, 당신이 켜는 걸 기억해야 하는 옵션이 아닙니다.
- 에이전트 CLI 자체. 어떤 제공자를 쓰든, 프로세스 가드는 앱이 그 터미널을 띄울 때 사용한 실행 파일을 보호합니다. 그 이름을 하드코딩된 목록이 아니라 실행 자체에서 읽기 때문에, 같은 CLI의 하위 프로세스도 깊이에 상관없이 보호됩니다.
- 당신의 개발 명령 터미널. 가만히 떠 있는 개발 서버는 폭주 프로세스의 조건을 전부 만족합니다. 크고, 오래됐고, 프로세서를 쓰지 않습니다. 그러면서도 당신이 진짜로 돌아가길 바라는 바로 그 프로세스입니다. 감시 대상은 에이전트 터미널뿐이므로, 개발 서버는 애초에 시야에 들어오지 않습니다.
- 셸과 앱 자체의 배관. 터미널 헬퍼와 에이전트가 돌아가는 셸은 구조적으로 제외되어 있습니다. 후보가 될 수 있는 것은 에이전트 CLI 아래에 있는 도구 프로세스뿐입니다.
- 자기가 거두지 않은 것 전부. 프로세스를 끝낼 수 있는 유일한 경로는, 프로세스 가드가 에이전트 자신의 트리에서 주워 오지 않은 프로세스를 모두 거부합니다. 당신 컴퓨터의 다른 무언가를 종료하는 수단이 될 수는 없습니다.
그리고 당신이 요청하지 않는 한 자동으로 종료되는 것은 아무것도 없습니다. 기본값에서 프로세스 가드는 찾아낸 것을 알려주고, 결정은 당신이 합니다. 크고 조용한 프로세스가 예상된 것이었는지 아는 사람은 당신뿐이기 때문입니다.
제 몫을 하는 순간
여기 있는 것은 전부 실제 상황이고, 가정한 이야기는 하나도 없습니다.
아침 9시보다 저녁 6시에 더 느린 컴퓨터
고장 난 순간이 따로 있는 게 아니라, 하루에 걸쳐 꾸준히 미끄러지기만 합니다. 이 모양은 거의 언제나 멈춘 프로세스가 쌓인 결과이고, 어느 순간을 봐도 이상해 보이지 않기 때문에 손으로 진단하기가 가장 어렵습니다.
여러 에이전트를 동시에 돌릴 때
에이전트를 많이 돌릴수록 도구 호출이 늘고, 그중 하나가 멎을 확률도 늘어납니다. 호출 하나당 실패율은 아주 작지만, 병렬로 일한 하루를 곱하면 더는 작지 않습니다.
돌아오지 않는 검색
정규식 엔진을 터뜨리는 패턴은 몇백 킬로바이트짜리 파일에 대고 기가바이트를 할당합니다. 에이전트는 그것을 기다리고, 당신은 에이전트를 기다리고, 값은 컴퓨터가 두 번 치릅니다.
에이전트는 닫았는데 프로세스는 남았을 때
탭을 닫는다고 늘 뭔가가 풀리는 것은 아닙니다. 이미 떨어져 나간 프로세스는 메모리를 그대로 쥔 채, 앱에서 볼 수 있는 것과의 마지막 연결마저 잃습니다.
16GB 노트북
RAM이 넉넉한 컴퓨터에서는 멈춘 프로세스 몇 개가 오래 숨어 있을 수 있습니다. 16GB 노트북에서는 금방 스왑까지 밀리고, 시스템이 메모리를 압축하기 시작하는 순간부터 모든 에이전트가 한꺼번에 느려집니다.
앱을 탓하기 전에
AgentsRoom을 켜 둔 상태에서 컴퓨터가 기어가면 앱이 제일 먼저 의심받습니다. 프로세스별 실제 숫자를, 각각을 띄운 에이전트와 함께 손에 쥐면 의심은 실제로 확인할 수 있는 것이 됩니다.
한계선은 당신이 정합니다
기본값은 일부러 조심스럽게 잡아뒀습니다. 아래 항목은 모두 설정의 터미널 탭에 있고, 하나하나가 AgentsRoom MCP 도구를 통해 에이전트가 읽고 바꿀 수도 있습니다.
- 에이전트 자식 프로세스 감시
- 기본값은 켜짐. 끄면 검사가 단 한 번도 돌지 않습니다.
- 메모리 기준을 넘으면 알림
- 기본값 2기가바이트. 그 아래라면 멈춘 프로세스 하나 때문에 당신을 방해할 이유가 없습니다. RAM이 넉넉한 워크스테이션에서는 올리고, 메모리가 빠듯한 노트북에서는 내리세요.
- 최소 생존 시간이 지난 뒤에
- 기본값 5분. 느리지만 정상인 작업이 신고되는 일을 막아주는 게 바로 이것입니다. 당신이 정말로 원하는 일 중에 프로세서를 전혀 쓰지 않고 5분이 걸리는 것은 거의 없기 때문입니다.
- 멈춘 프로세스 자동 종료
- 기본값은 꺼짐이고, 이건 신중함이라기보다 의도적인 제품 결정입니다. 프로세스 가드는 판단을 내리는 중이고, 크고 조용한 프로세스가 예상된 것이었는지 아는 사람은 당신뿐입니다. 켜면 알아서 처리하고, 처리한 뒤에 알려줍니다.
프로세서 기준값은 일부러 노출하지 않았습니다. 일하는 빌드와 멈춘 프로세스를 갈라주는 측정이고, 취향의 문제가 아니기 때문입니다.
자주 묻는 질문
그러면 AgentsRoom이 내 컴퓨터를 느리게 한다는 뜻인가요?
아닙니다. 그리고 바로 그래서 이 기능이 있습니다. 우리가 측정한 세션에서 앱은 프로세스 91개에 2.8GB, 에이전트 CLI 8개는 다 합쳐 1.6GB를 썼습니다. 41.8GB를 붙잡고 있던 것은 멎어버린 도구 프로세스들이었습니다. AgentsRoom은 마침 모든 에이전트와 그것들이 띄운 모든 프로세스를 한눈에 볼 수 있는 유일한 곳이라, 판정을 내릴 수 있는 유일한 곳이기도 합니다.
내 빌드나 테스트를 죽이지는 않나요?
아닙니다. 프로세스는 크고, 그리고 오래됐고, 그리고 프로세서를 더는 쓰지 않을 때만 신고됩니다. 진짜로 일하는 빌드는 코어 하나를 꽉 채우니 세 번째 조건에서 걸러지고, 애초에 후보가 되지 않습니다. 이 조건은 정확히 그 구분을 위해 존재합니다.
내 개발 서버도 감시하나요?
아니고, 앞으로도 하지 않습니다. 가만히 떠 있는 개발 서버는 폭주 프로세스의 조건을 전부 만족합니다. 메모리를 많이 붙잡고, 몇 시간째 돌고 있고, 요청 사이에는 프로세서를 쓰지 않습니다. 감시 대상은 에이전트 터미널의 자식 프로세스뿐이라, 개발 명령은 구조적으로 범위 밖입니다.
에이전트 자체를 종료할 수도 있나요?
아닙니다. 에이전트 CLI는 어떤 제공자를 쓰든 보호되고, 그 보호는 알려진 이름 목록이 아니라 앱이 그 터미널을 띄울 때 사용한 실행 파일을 근거로 합니다. 셸과 앱 자체의 터미널 헬퍼도 마찬가지로 제외됩니다.
고아 프로세스가 뭔가요? 왜 따로 취급하나요?
부모가 종료된 프로세스는 시스템의 init 프로세스에 재부모화됩니다. 그 순간부터 자기를 띄운 에이전트와의 연결이 사라지므로, 아무도 치워주지 않습니다. AgentsRoom은 프로세스가 아직 붙어 있는 동안 소유 관계를 기억해 둡니다. 그때가 그것을 확정할 수 있는 유일한 순간이고, 덕분에 나중에도 그 프로세스를 알려줄 수 있습니다.
감시 자체의 비용은 얼마나 되나요?
분당 프로세스 스냅숏 한 번, 프로세스 824개가 도는 컴퓨터에서 약 40밀리초로 측정됐습니다. 더 비싼 메모리 측정은 이미 멈춘 것처럼 보이는 프로세스에만 돌기 때문에, 평소에는 돌지 않는다는 뜻입니다. 그리고 활성 에이전트가 없는 동안에는 검사 자체가 존재하지 않습니다.
그냥 활성 상태 보기의 메모리 항목을 보면 되지 않나요?
macOS에서는 그 항목이 문제를 자릿수 단위로 작게 보여주기 때문입니다. 압축 메모리로 밀려난 프로세스는 8GB를 붙잡고 있으면서 실제 메모리 20MB로 표시될 수 있습니다. 우리는 살아 있는 프로세스 하나를 실측했는데, 실제 사용량 14GB에 표시는 4.7GB였습니다. 가상 메모리도 나을 게 없습니다. 시스템 프로세스조차 수백 기가바이트로 보고합니다.
Claude Code, Codex 같은 다른 도구에서도 되나요?
됩니다. 프로세스 가드는 특정 도구나 제공자에 대해 아무것도 모릅니다. 당신이 띄운 에이전트 터미널의 자식 프로세스를 지켜볼 뿐이고, 보호할 CLI는 실행 자체에서 읽어옵니다. 제공자가 늘어나도 여기서 달라지는 것은 없습니다.
Windows와 Linux에서도 되나요?
됩니다. 메모리를 정직하게 재려면 플랫폼마다 다른 측정이 필요합니다. macOS는 압축된 페이지, Linux는 실제 메모리에 스왑된 분량을 더한 값, Windows는 프라이빗 커밋. 셋 다 구현되어 있습니다.
나한테 안 묻고 프로세스를 끝내기도 하나요?
당신이 그 설정을 켜지 않는 한 없습니다. 기본값에서는 찾아낸 것을 에이전트, 메모리, 나이, 프로세서 사용량과 함께 알려주고, 결정은 당신이 합니다. 자동 종료는 설정 항목이고, 처음에는 꺼져 있습니다.
프로세스 하나를 끝내면 그 에이전트는 어떻게 되나요?
에이전트는 계속 돌아갑니다. 그 도구 호출은 영원히 매달려 있는 대신 오류를 받습니다. 그게 바라던 결과입니다. 어차피 그 프로세스는 끝날 리가 없었으니까요. 아무것도 재시작되지 않고 맥락도 잃지 않습니다.
근본 원인까지 고쳐주나요?
아니고, 그러려고 하지도 않습니다. 원인은 바뀝니다. 오늘은 어떤 도구, 내일은 다른 패턴, 다음 달에는 다른 제공자. 이건 안전망이고, 아직 아무도 본 적 없는 원인이 와도 계속 동작하도록 설계했습니다.
이런 것도 함께 보세요
컨텍스트 카나리아
또 하나의 조기 경보. 컴퓨터가 아니라 에이전트 자신의 맥락을 지켜보다가, 없는 파일과 API를 지어내기 시작하기 전에 에이전트가 흔들리고 있다고 알려줍니다.
개발 터미널
개발 서버와 오래 걸리는 명령을 AgentsRoom 안에서 돌리고, 긴 작업이 끝나면 알림을 받으세요. 이 터미널이 바로 프로세스 가드가 절대 건드리지 않도록 만들어진 대상입니다.
에이전트 상태 추적
어느 에이전트가 일하고 있고, 어느 것이 당신을 기다리고, 어느 것이 놀고 있는지를 터미널 하나 읽지 않고 한눈에 봅니다.
토큰 사용량
지켜볼 가치가 있는 또 하나의 자원. 에이전트별 토큰 소비와 할당량을 보여주니, 사용량이 어디로 가는지 알 수 있습니다.
분할 보기
창 하나에 여러 에이전트를 나란히 두고, 각자 전용 패널과 색, 실시간 상태를 갖습니다.
CLI Doctor
에이전트가 시작되지 않을 때, 빈 터미널만 남기는 대신 이유와 대처 방법을 알려줍니다.
아무도 쓰지 않는 프로세스에 대가를 치르지 마세요
AgentsRoom은 무료로 내려받을 수 있고, 프로세스 가드는 첫 실행부터 켜져 있습니다.
컴패니언 앱: 이동 중에도 에이전트를 모니터링
Claude, Codex, Antigravity CLI 또는 다른 AI 공급자를 사용하세요.
버그와 요청을 공개 백로그로 바로 보내세요.
AgentsRoom의 실제 모습.