블로그

내 AI 에이전트는 무엇을 했을까? 증거로 답해야 할 네 가지 질문

AI 에이전트의 모든 작업에서 누가 했는지, 무엇이 바뀌었는지, 무엇을 건너뛰었고 왜인지를 “완료” 댓글이 아니라 확인할 수 있는 증거로 보아야 합니다.

Weft는 1인 창업자와 소규모 팀을 위한 AI 작업 관리 도구입니다.

모든 글

글쓴이: Andrei Finogeev ·

AI 에이전트가 무엇을 했는지 알고 싶다면 그 요약부터 보지 마세요. 네 가지를 확인하세요. 어느 연결이 일했는지, 무엇이 바뀌었는지(직접 열어 볼 수 있는 것으로 보여 주는지), 무엇이 남겨졌는지, 무엇이 왜 결정되었는지. 넷 중 하나라도 에이전트의 말에만 기대고 있다면, 그것은 기록이 아니라 서술입니다.

Weft는 우리가 만듭니다. 다른 제품에 대한 사실은 2026년 10월 27일에 확인한 공식 페이지에서 가져왔습니다.

"완료"라고 적힌 댓글로는 왜 부족할까?

댓글은 에이전트가 자기 일을 설명한 것입니다. 정확할 수도 있지만 댓글은 그것을 보여 줄 수 없습니다. 작성자가 바로 당신이 확인하려는 당사자이기 때문입니다. 에이전트가 작업에 손댔다는 것을 아는 것은 '누가'에 대한 답입니다. 그 일이 당신이 생각하는 그 일인지에 대한 답은 아닙니다.

AI 작업 귀속에 관한 Hypertask의 글은 타당한 지적을 합니다. 에이전트의 일은 아무도 읽지 않는 터미널 로그가 아니라 사람의 일과 같은 보드에 올라와야 한다는 것입니다. Hypertask는 에이전트에게 서비스 계정으로서의 자체 신원도 주므로, 쓰기 작업이 당신이 아니라 에이전트에게 귀속됩니다. 작업 증거와 리스도 있지만, 그들의 문서에 따르면 이것들은 설계상 MCP 도구가 아니라 REST 엔드포인트로만 제공됩니다. 우리가 다른 지점은 기록에 무엇이 담겨야 하느냐입니다. 에이전트의 출력이 달린 댓글 스레드는 에이전트가 한 말의 로그입니다. 우리는 기록이 증거를 담기를 원합니다.

이 가이드에는 설문 수치가 없습니다. 오늘 오후 당신의 보드에서 네 가지 질문을 시험해 볼 수 있고, 그것이 업계 평균보다 더 많은 것을 알려 줍니다.

네 가지 질문은?

지난주 에이전트가 끝낸 작업 아무거나 고르세요. 에이전트에게 묻거나 채팅을 열지 않고 각각 1분 안에 답할 수 있어야 합니다.

  1. 누가 했나? 어느 연결의 어느 클라이언트가 작업을 맡고 끝냈는지.
  2. 무엇이 바뀌었나? 결과, 그리고 에이전트를 믿지 않고도 확인할 수 있는 산출물: 커밋 해시, URL, 파일, 메시지 id.
  3. 무엇을 하지 않았나? 건너뛴 부분과 확실하지 않았던 것.
  4. 무엇이 결정되었고, 왜인가? 도중에 내린 선택과 따져 본 선택지, 그리고 당신이 일을 되돌려 보낸 모든 순간.
질문약한 답: "완료"라는 댓글강한 답: 확인할 수 있는 증거
누가 했나?모든 도구가 키 하나를 공유하므로 모든 변경에 "에이전트"나 당신 이름이 붙음작업을 맡고 끝낸 연결이 클라이언트가 등록한 이름으로 표시되고, 일지의 각 이벤트에는 사람인지 MCP인지와 클라이언트 id가 붙음
무엇이 바뀌었나?"인증 모듈을 리팩터링했고 테스트 통과"커밋 해시, PR이나 페이지 URL, sha256이 붙은 파일, 메시지 id: 직접 열어 보는 것
무엇을 하지 않았나?아무 말이 없으니 건너뛴 것이 없다고 가정함notDone 목록("staging에서 마이그레이션을 돌리지 않음")과 unknowns 목록("예전 엔드포인트를 다른 곳에서 호출하지 않는지 확실하지 않음")
무엇이 결정되었고, 왜인가?이미 스크롤 저편으로 사라진 채팅 속에 묻힘따져 본 선택지와 재검토 조건이 담긴 결정 기록, 그리고 되돌려 보낸 이유를 포함한 작업의 결정 이력

어느 에이전트가 했는지 어떻게 알까?

Weft는 하나의 엔드포인트 https://letsweft.com/api/mcp에서 Model Context Protocol로 AI 클라이언트와 연결됩니다. OAuth 클라이언트와 개인 액세스 토큰은 각각 별도의 행위자입니다. 작업은 어느 클라이언트가 만들었는지 기록하고, 보드는 그 클라이언트가 로그인할 때 등록한 이름과 아이콘을 보여 줍니다. 작업 일지의 모든 이벤트에는 사람에게서 왔는지 MCP로 왔는지, 어느 클라이언트가 보냈는지가 저장됩니다.

전체 일지(get_task_history의 full 모드)는 각 이벤트의 원시 클라이언트 id를 보여 줍니다. OAuth 클라이언트 id, 또는 mcp-token 뒤에 토큰 id가 붙은 형태입니다. 친숙한 이름은 아니지만 정확하고, 같은 제품에서 온 연결 두 개도 구별해 줍니다.

작업 중의 소유권도 명시적입니다. 에이전트가 start_task를 호출하면 20분 리스로 작업을 맡고 Doing으로 옮깁니다. report_progress가 리스를 갱신합니다. 같은 작업을 시도한 두 번째 에이전트는 already_claimed를 받고, 리스가 끝나면 작업은 다른 이에게 풀립니다. 작업 맡기 루프 가이드가 이를 단계별로 다루고, 한 보드에서 여러 에이전트 돌리기가 여러 클라이언트의 경우를 다룹니다.

실용적인 규칙 하나: 도구마다 자기 연결을 주세요. 두 클라이언트가 액세스 토큰 하나를 공유하면 보드에는 행위자 하나로 보이고, '누가'라는 질문은 답을 잃습니다.

무엇이 바뀌었고, 에이전트에게 묻지 않고 확인할 수 있을까?

에이전트는 일을 끝내면 complete_task를 호출합니다. 필수는 작업 id뿐이고 나머지는 모두 선택이며, 증거가 없다고 호출이 실패하지는 않습니다. 의도한 것입니다. 끝낸 일을 잃는 것이 검증되지 않은 채로 기록하는 것보다 나쁩니다. 영수증에 담을 수 있는 것은 다음과 같습니다.

  • outcome: 무엇을 했고 결과가 어디 있는지, 최대 1,000자.
  • artifacts: 최대 20개 항목. 각각 종류(url, file, message, commit 등), 위치, 그리고 선택적으로 sha256 다이제스트.
  • claims: 에이전트가 했다고 주장하는 것. 검증된 사실이 아니라 주장으로 저장됩니다.
  • notDone과 unknowns: 다음 절에서 다룹니다.
  • nextStep: 당신이 수락하면 에이전트가 다음에 할 일.
complete_task({
  "id": "<task id>",
  "runId": "<from start_task>",
  "leaseToken": "<from start_task>",
  "outcome": "Rate limiting added to /login; PR open, not merged.",
  "artifacts": [
    { "kind": "commit", "uri": "<repo>/commit/<hash>" },
    { "kind": "url", "uri": "<repo>/pull/<number>" }
  ],
  "notDone": ["Did not change the signup endpoint"],
  "unknowns": ["Limit of 5 per minute is a guess; no traffic data"],
  "nextStep": "Merge the PR to main"
})

outcome 줄은 여전히 서술입니다. 확인할 수 있는 부분은 산출물입니다. 커밋 해시는 저장소에 있거나 없습니다. URL은 열리거나 안 열립니다. 파일의 sha256은 맞거나 안 맞습니다. 영수증에 outcome만 있고 산출물이 없다면, 에이전트가 보고한 일로 다루세요. 실제로 그런 것이니까요. 웹에서 Done 카드는 작업이 검증됨인지 에이전트 보고인지를 보여 줍니다.

에이전트가 하지 않은 것은?

대부분의 기록이 건너뛰는 질문이고, 2주 뒤에 발목을 잡는 질문입니다. complete_task에는 이를 위한 목록이 두 개 있고, 각각 500자짜리 항목을 최대 20개까지 담습니다. 에이전트가 일부러 뺀 것을 위한 notDone과, 확실하지 않은 것을 위한 unknowns. 도구 설명 자체가 에이전트에게 하지 않은 일을 분명히 밝히라고 요청합니다. 그것이 믿고 쓸 수 있는 결과와 다시 따져 봐야 하는 결과를 가릅니다.

이 목록부터 읽으세요. "staging 데이터베이스에서 테스트를 돌리지 않음"은 다음에 할 일을 바꿉니다. 큰 작업인데 notDone 항목이 하나도 없는 영수증이라면, 그 자체로 물어볼 만합니다.

무엇이 결정되었고, 왜인가?

채팅에서 내린 결정은 채팅이 스크롤되면 사라집니다. record_decision은 두 가지 방식으로 결정을 보관합니다.

  • 독립된 결정 기록: 제목, 결과, 맥락, 실제로 따져 본 선택지, 결과적 영향, 그리고 재검토할 조건. 기록은 바꿀 수 없습니다. 바꾸려면 그것을 대체하는 새 결정을 기록하고, 예전 것은 대체됨으로 표시된 채 남습니다.
  • 판정 전달: 대화 중에 에이전트에게 "수락", "X로 다시 해", "폐기해", "지금은 아니야"라고 말하면, 에이전트가 그 판정을 당신의 메모와 함께 작업에 기록합니다.

get_task_history는 이를 세 가지 모드로 읽어 줍니다. summary(카드, 최신 영수증, 개수), decisions(되돌려 보낸 이유를 포함해 작업에 관한 모든 결정. 나중에 수락해도 남음), full(원시 일지, 최대 100개 이벤트). get_context는 살아 있는 결정을 토큰 예산 안에서 다음 에이전트에게 넘기므로, 다음 실행은 처음부터가 아니라 결정된 것에서 시작합니다. 자세한 내용은 AI 채팅의 결정이 사라지는 이유에 있습니다.

어디서 검토하고, 무엇을 누르면 될까?

기본적으로 완료된 작업은 곧바로 Done으로 갑니다. 작업에 검토가 필요하거나 검증 확인이 실패하면 받은편지함에 멈춥니다. 거기서 영수증과 버튼 네 개, 수락, 재작업, 나중에, 폐기를 보게 됩니다. 재작업은 메모를 요구하고, 그 메모는 에이전트에게 돌아갑니다.

에이전트가 nextStep을 넘겼다면 수락 버튼 위에 표시되고, 수락은 정확히 그 단계를 승인합니다. 승인은 72시간 동안 유효하며, get_my_work나 start_task를 통해 다음에 할 단 하나의 단계로 에이전트에게 돌아갑니다. 에이전트가 request_input으로 한 질문도 같은 받은편지함에, 웹과 iOS·Android 앱에 모바일 푸시와 함께 도착합니다.

받은편지함에는 일부러 한도를 두었습니다. 1인 워크스페이스는 대기 항목 5개, 팀은 10개, 또는 예상 검토 시간 45분 중 먼저 닿는 쪽입니다. 가득 차면 start_task가 attention_queue_full로 거절하므로, 에이전트는 당신이 확인할 것을 더 쌓는 대신 일을 마무리하거나 명확히 합니다.

작업 유형별로 어떤 증거를 요구해야 할까?

에이전트가 당신이 기대하는 증거를 알 수 있도록 작업 설명에 적어 두세요.

  • 코드: 산출물로 커밋 해시와 PR URL. notDone에는 돌리지 않은 테스트, 적용하지 않은 마이그레이션, 일부러 건드리지 않은 파일을 적어야 합니다.
  • 콘텐츠: 게시된 URL, 아직 공개 전이라면 sha256이 붙은 초안 파일. unknowns에는 에이전트가 확인하지 못한 사실을 적어야 합니다.
  • 리서치: 핵심 주장마다 출처 URL, 그리고 메모 파일. unknowns에서는 출처가 말한 것과 에이전트가 추론한 것을 구분해야 합니다.
  • 아웃리치: 보낸 메시지마다 메시지 id, 그리고 수신자 목록 파일. notDone에는 연락하지 않은 사람과 그 이유를 적어야 합니다.

애초에 에이전트가 할 수 있는 일을 어떻게 제한할까?

사후 귀속은 사전 제한과 함께일 때 가장 잘 통합니다. Weft에서는 OAuth 연결마다 세 가지 권한 수준 중 하나가 있고, 동의 화면이나 나중에 설정 → 연결된 AI 클라이언트에서 정합니다.

  • full(기본값): 도구 32개 전부.
  • write: 파괴적 도구 세 개(trash_task, archive_done_tasks, complete_sprint)를 뺀 전부.
  • read: 읽기 전용 도구 11개만.

확인은 호출마다 이루어집니다. 연결 끊기는 그 연결의 리프레시 토큰을 취소하고, 끊기 전에 발급된 토큰은 다음 호출에서 거절합니다. OAuth가 없는 클라이언트를 위한 개인 액세스 토큰에는 범위가 없습니다. 토큰 하나가 도구 32개 모두에 닿고, 취소하면 다음 호출부터 적용됩니다. 에이전트는 작업을 30일 휴지통으로 옮길 수는 있지만 영구 삭제는 못 합니다. 휴지통에서 복원하는 것은 Pro 기능입니다.

여기서 Weft가 하지 않는 것은?

  • GitHub이나 Slack 연동이 없으므로, Weft가 커밋이나 메시지를 대신 찾아보지 않습니다. 산출물은 당신이 엽니다.
  • 영수증을 다른 시스템으로 보낼 공개 REST API, 웹훅, CLI가 없습니다. JSON과 Markdown 내보내기는 있습니다.
  • 모델 단계를 추적하지 않습니다. 모델 계층에서 프롬프트, 토큰, 지연 시간을 기록하는 도구는 다른 일을 하며, 그런 도구도 함께 두고 싶을 수 있습니다.
  • 영수증은 에이전트가 직접 씁니다. Weft는 주장과 증거 사이의 간극을 보이게 할 뿐, 에이전트를 정직하게 만들 수는 없습니다.

REST API로 관리되는 서비스 계정 형태의 에이전트, CI 스크립트용 CLI, 작업 작성과 분류 같은 내장 AI 기능을 원한다면 Hypertask가 더 잘 맞습니다. 우리의 Hypertask 대안 페이지에서 둘을 나란히 비교합니다.

에이전트가 한 일을 알려면 git 기록으로 충분하지 않나요?
git은 코드에서 무엇이 바뀌었는지 보여 줍니다. 에이전트가 무엇을 건너뛰었는지, 무엇이 확실하지 않았는지, 두 선택지 중 무엇을 골랐는지는 보여 주지 않습니다. 커밋 해시는 작업의 산출물로 쓰고, 나머지는 영수증과 결정 기록에 두세요.
에이전트가 산출물을 지어낼 수도 있지 않나요?
어떤 문자열이든 보낼 수는 있습니다. 산출물의 핵심은 당신이 열어 볼 수 있다는 것입니다. 찾아볼 수 있는 해시, 열 수 있는 URL, 찾을 수 있는 메시지 id. 지어낸 것은 확인하는 순간 드러나지만, 댓글은 결코 그렇지 않습니다. 작업에 검증 확인이 있고 차단 확인이 실패하면, 그 작업은 Done에 들어가지 않습니다.
끝난 작업은 모두 내 검토를 기다리나요?
아닙니다. 기본적으로 완료된 작업은 Done으로 갑니다. 작업에 검토가 필요하거나 검증 확인이 실패한 경우에만 받은편지함에서 수락, 재작업, 나중에, 폐기를 기다립니다.
어떤 AI 클라이언트가 Weft에 영수증을 쓸 수 있나요?
어떤 MCP 클라이언트든 됩니다. ChatGPT에는 무료를 포함한 모든 요금제에 Weft가 게시된 플러그인으로 있습니다. Claude Code는 claude mcp add --transport http weft https://letsweft.com/api/mcp로 연결합니다. Claude.ai와 Claude Desktop은 커스텀 커넥터를 씁니다. Claude Code, ChatGPT, Cursor, Codex 등 33개 클라이언트의 설정 페이지가 있습니다.
비용은 얼마인가요?
무료는 작업 50개와 월 200회 AI 호출을 포함합니다. Pro는 좌석당 월 $7 또는 좌석당 연 $60입니다. Weft에는 AI 크레딧이 없습니다. 생각은 당신의 AI 클라이언트에서 일어납니다. 요금을 보세요.