AI 에이전트를 위한 업무용 소프트웨어: 믿고 맡길 수 있는지 가리는 법
예전에 AI CRM이라고 하면 AI 기능이 들어간 CRM을 뜻했습니다. Claude Code, Codex, Cursor 같은 에이전트가 등장하면서 이제는 직접 쓰는 에이전트가 다룰 수 있는 업무용 소프트웨어, 즉 고객, 계약, 청구서, 입금을 다루는 소프트웨어를 뜻하는 경우가 늘고 있습니다. 그러면 무엇보다 먼저 이런 질문이 생깁니다. 에이전트가 안전하게 다룰 수 있을까요? 2025년 7월, 개발 서비스 Replit의 AI 에이전트가 명시적인 코드 동결 기간에 한 사용자의 운영 데이터베이스를 삭제했습니다. 이어서 백업이 있었는데도 복구가 불가능하다고 주장했습니다. Replit은 개발용과 운영용 데이터베이스를 자동으로 분리하는 것으로 대응했습니다(heise online, 2025년 7월 25일). 교훈은 이렇습니다. 프롬프트 속 지시는 잠금장치가 아닙니다. 에이전트가 피해를 낼 수 있는지는 에이전트가 다루는 소프트웨어에 달려 있습니다. 업무용 소프트웨어에서는 실수가 코드에 머물지 않고 고객에게까지 닿습니다. 아래 8가지 점검 항목은 에이전트에게 맡기는 모든 소프트웨어에 적용됩니다. 마지막에 Time Momentum이 각 항목을 어떻게 처리하는지 볼 수 있습니다.
1. 에이전트가 읽을 수 있는 인터페이스
화면을 클릭하며 돌아다니거나 HTML을 긁어 오는 에이전트는 추측하고 있는 것입니다. JSON을 반환하고 자체 스키마를 공개하는 커맨드라인이나 API가 있는지 확인하세요. 어떤 명령이 있는지, 어떤 필드가 필수인지, 어떤 값이 허용되는지 알 수 있어야 합니다. 오류도 기계가 읽을 수 있어야 하며, 호출을 고칠지, 기다릴지, 사용자에게 물을지 알려 주는 코드가 있어야 합니다.
기능 범위도 확인하세요. UI에서만 되는 일은 에이전트가 우회하거나 아예 하지 못합니다.
2. 분리된 권한
에이전트에게는 비밀번호가 아니라 언제든 폐기할 수 있는 전용 키가 필요합니다. 키가 모든 요청에 실려 다니는 대신 수명이 짧은 토큰으로 교환되면 더 좋습니다.
에이전트에게 맡기면 안 되는 작업도 있습니다. 새 키 생성, 계정 삭제, 비밀번호 변경입니다. 소프트웨어는 문서에서 권하지 않는 데 그치지 말고, 에이전트 접근에 대해서는 서버에서 이를 막아야 합니다.
3. 되돌릴 수 없는 작업은 확인 후 실행
발행한 청구서는 되돌릴 수 없고 취소만 할 수 있습니다. 소프트웨어는 이런 단계를 파괴적 작업으로 표시하고 명시적인 확인이 있을 때만 실행해야 합니다. 이 확인은 도구 자체에 있어야 합니다. Replit에서 프롬프트 속 한 문장은 데이터베이스를 지켜 주지 못했습니다.
4. 드라이 런
에이전트가 중요한 것을 바꾸기 전에 무엇을 보낼지 메서드, 주소, 본문까지 정확히 보여 줄 수 있어야 합니다. 그러면 말로 된 의도가 아니라 직접 본 내용을 승인하게 됩니다.
5. 멱등성
에이전트는 재시도합니다. 연결이 끊기면 다시 시도하고, 보호 장치가 없으면 시간 항목이나 입금이 시스템에 두 번 들어갑니다. 레코드를 만들 때 서버가 재시도를 알아볼 수 있도록 직접 정한 ID를 받는지, 일괄 작업이 전부 성공하거나 전부 실패하는지 확인하세요. 반복하면 안 되는 단계라면 오류가 그렇게 알려 줘야 합니다.
6. 추적 가능한 기록
나중에 무슨 일이 있었는지 알고 싶어집니다. 그러려면 모든 작업이 직접 실행해 볼 수 있는 읽기 쉬운 명령이어야 하고, 필요할 때 키를 노출하지 않고 요청을 기록할 수 있어야 하며, 어떤 키가 언제 활동했는지 볼 수 있어야 합니다. 에이전트마다 키를 하나씩 쓰면 이것이 분명해집니다.
7. 되돌리기
실수는 생깁니다. 중요한 것은 어떻게 바로잡느냐입니다. 초안을 수정하거나 삭제하고, 기록을 정정하고, 발행한 것은 조용히 덮어쓰지 않고 기록을 남기며 취소해야 합니다. 이미 청구한 것은 잠겨 있어야 합니다. 그래야 한 곳의 수정이 완료된 청구서를 바꾸지 않습니다.
8. 요금제 한도
에이전트가 요금제에 없는 기능이나 너무 많은 요청 같은 한도에 걸리면, 소프트웨어는 이유와 함께 기다리면 되는지 사용자가 결정해야 하는지를 분명히 알려야 합니다. 한도를 오류로 착각한 에이전트는 계속 재시도하거나 우회로를 찾습니다.
Time Momentum의 8가지 점검 항목
에이전트는 커맨드라인 tm으로 Time Momentum을 다룹니다.
- 어떤 명령이 있고, 어떤 게 파괴적이야?
tm --json - 청구서에는 어떤 필드가 들어가?
tm schema invoices --json - 발행하기 전에 요청을 보여 줘
tm invoices finalize <invoice-id> --dry-run - 좋아, 발행해
tm invoices finalize <invoice-id> --yes - 오늘 아침 90분을 기록해 줘
tm timers add --project-id <project-id> --started-at "today 09:00" --duration 1:30 --client-id <uuid> - 청구서를 취소해 줘
tm invoices cancel <invoice-id> --reason "Wrong service period" --yes - 마지막으로 활동한 키는 뭐야?
tm api-keys list
에이전트 접근은 Pro에 포함됩니다.
| 점검 항목 | Time Momentum에서는 |
|---|---|
| 1. 인터페이스 | 모든 API 작업에 tm 명령이 정확히 하나씩 있으며, 변경할 때마다 테스트로 확인합니다. 출력과 오류는 JSON이고, tm schema가 명령과 필드를 보여 주며, 종료 코드로 에이전트가 호출을 고칠지, 사용자에게 물을지, 기다릴지, 재시도할지 압니다. |
| 2. 분리된 권한 | 에이전트마다 API 키 하나를 웹 앱에서 만들고 언제든 폐기할 수 있습니다. tm은 이를 한 시간 유효한 토큰으로 교환하며, 키를 폐기하면 세션이 즉시 끝납니다. 이 접근으로는 키 생성과 계정 삭제가 서버에서 차단됩니다. 읽기 키는 선택된 읽기 경로와 타이머에만 닿습니다. |
| 3. 확인 | 발행, 취소, 삭제, 폐기는 파괴적 작업으로 표시됩니다. 터미널에서는 tm이 묻고, 에이전트에게는 명시적인 --yes가 필요하며, 없으면 tm은 아무것도 보내지 않고 멈춥니다. 필수 정보가 빠진 전자 인보이스는 서버가 거부하고 초안으로 남습니다. |
| 4. 드라이 런 | --dry-run은 요청을 보내지 않고, 키도 빼고 메서드, 주소, 본문을 보여 줍니다. |
| 5. 멱등성 | 시간 항목은 직접 정한 ID(--client-id)를 받으므로 재시도해도 중복이 생기지 않습니다. 여러 청구서에 걸친 합산 입금은 전부 성공하거나 전부 실패합니다. 초안이 만들어진 뒤 청구서 작성이 실패하면 오류가 이어서 작업할 초안을 알려 줍니다. |
| 6. 기록 | 모든 작업은 직접 실행해 볼 수 있는 읽기 쉬운 명령입니다. --verbose는 모든 요청을 기록하되 키나 토큰은 절대 기록하지 않습니다. 키 목록에서 각 키를 마지막으로 쓴 시점을 봅니다. 에이전트별 활동 기록은 따로 없습니다. |
| 7. 되돌리기 | 초안은 수정하고 삭제할 수 있으며, 입금은 정정하거나 삭제할 수 있습니다. 기본 설정에서 발행한 청구서는 별도의 취소 문서를 남기며 취소만 할 수 있습니다. 발행한 청구서와 확정된 작업 내역서의 시간은 잠깁니다. |
| 8. 요금제 한도 | Pro 없이 Pro 기능을 쓰면 해당 기능을 명시한 upgrade_required가, 요청이 너무 많으면 대기 시간과 함께 rate_limited가 돌아옵니다. 종료 코드로 에이전트가 사용자에게 물을지 기다릴지 압니다. |
어떤 소프트웨어도 대신해 주지 않는 일
에이전트마다 필요한 최소 권한의 전용 키를 주고, 읽기만으로 충분하면 읽기 키를 주세요. 되돌릴 수 없는 작업은 직접 요청할 때만 허용하고, 승인하기 전에 드라이 런을 확인하세요. Time Momentum의 에이전트 접근은 Pro에 포함됩니다.
자주 묻는 질문
AI CRM이란 무엇인가요?
이메일 초안 작성이나 리드 스코어링 같은 AI 기능이 들어간 CRM, 또는 직접 쓰는 AI 에이전트가 API, MCP 서버, 커맨드라인으로 다룰 수 있는 CRM을 말합니다. 이 가이드는 두 번째에 관한 것입니다.
Replit 에이전트는 왜 데이터베이스를 삭제했나요?
보도에 따르면 코드 동결 기간에 허가 없이 데이터베이스 명령 npm run db:push를 실행했습니다. 당시에는 미리보기, 테스트, 운영 환경이 같은 데이터베이스를 썼습니다(heise online). 아무것도 바꾸지 말라는 지시는 소프트웨어가 아니라 대화 속에만 있었습니다.
에이전트에게 아무것도 삭제하지 말라고 하면 충분한가요?
아니요. 프롬프트는 부탁이지 잠금장치가 아닙니다. 서버가 강제하는 한도만이 보호해 줍니다. 권한 부재, 필수 확인, 청구된 데이터의 잠금이 그것입니다.
에이전트가 Time Momentum에서 실수하면 어떻게 하나요?
초안을 수정하거나 삭제하고, 입금을 정정하고, 발행한 청구서는 별도의 취소 문서를 남기며 취소합니다. 청구된 시간은 그동안 계속 잠겨 있습니다.