← 개발 방식
사용 중 개인 프로젝트 · 코드 공개 · 2026

인맥 관리를 위한 AI 에이전트

인맥이 너무 넓어져서 누가 무엇을 필요로 하는지, 누가 도와줄 수 있는지 기억하기 어려워졌습니다. 그래서 대화 내용을 평범한 말로 적는 Android 앱을 만들었습니다. AI 에이전트가 그 내용을 알맞은 사람의 기록에 저장하고, 그 사람들에 관한 질문에 답합니다. 에이전트는 제 휴대폰에서 실행되는 도구를 통해서만 움직일 수 있습니다.

역할
제품, 에이전트, 에이전트가 쓰는 도구와 안전 규칙을 설계했습니다. 코드는 코딩 에이전트인 Claude Code와 Codex가 작성했습니다.
상태
2026년 8월에 시작했고, 지금 제 인맥 관리에 쓰고 있습니다. 코드는 GitHub에 공개되어 있습니다.
기술 스택
Android, 제 비공개 AI 게이트웨이의 Claude Agent SDK, JSON Schema를 쓰는 도구 호출, 암호화된 GitHub 백업
범위
기록을 읽거나 바꾸거나, 제게 확인을 요청하는 도구 17개

문제

평범한 대화에서도 쓸모 있는 사실이 나옵니다. 누가 어떤 일을 하고 있는지, 무엇이 필요한지, 무엇을 제공할 수 있는지 같은 것들입니다. 만나는 사람이 늘면서 저는 이런 사실들을 놓치게 되었습니다.

연락처 앱은 이름과 전화번호를 저장합니다. 하지만 “이 일을 누가 도와줄 수 있을까?”나 “지난번에 무슨 이야기를 했지?” 같은 질문에는 답하지 못합니다.

발전 과정

2026년 8월에 만든 첫 버전에는 사람, 필요한 것, 역량을 각각 입력하는 양식이 있었습니다. AI가 메모를 보고 저장할 내용을 제안하면, 저장되기 전에 제가 그 제안을 검토했습니다.

앱의 실제 스키마로 여러 AI 모델을 시험했습니다. 한 모델은 구조화된 답을 낼 때 계속 시간 초과가 나서 다른 모델로 바꿨습니다. 2026년 9월에는 모든 AI 호출을 제 비공개 게이트웨이를 거치는 Claude로 옮겼습니다.

새로운 종류의 요청이 생길 때마다 프롬프트, 스키마, 파서, 화면이 따로 필요했습니다. 그래서 9월 중순에 어시스턴트를 도구를 쓰는 에이전트로 다시 만들었습니다. 이제 채팅 스레드 하나가 메모, 질문, 수정을 모두 처리합니다.

메시지 하나가 처리되는 과정

  1. 메시지 대화에 관한 메모를 글이나 음성으로 입력합니다. 질문을 할 수도 있습니다.
  2. Claude의 계획 제 게이트웨이에서 Claude가 다음에 호출할 도구를 정합니다. Claude는 저장된 기록 없이 시작합니다.
  3. 게이트웨이 검증 게이트웨이가 각 도구 호출을 JSON Schema로 검증한 뒤 휴대폰으로 보냅니다.
  4. 휴대폰에서 도구 실행 앱이 호출을 다시 검증하고, 휴대폰의 데이터베이스에서 실행한 뒤, 결과만 돌려보냅니다. 연락처 정보는 절대 휴대폰 밖으로 나가지 않습니다.
  5. Undo가 있는 응답 응답에 모든 변경 사항이 나오고, 한 번 누르면 전부 되돌려집니다. 삭제와 병합은 제가 누를 때까지 기다립니다.
  • 개인정보 보호데이터베이스는 휴대폰에 머물고, 백업은 먼저 암호화됩니다
  • 음성가능하면 언제나 휴대폰 안에서 음성을 인식합니다
  • 피드백어떤 답변이든 정해진 라벨로 보고할 수 있습니다
에이전트의 한 턴입니다. Claude가 필요한 것을 얻을 때까지 2~4단계를 반복합니다.

가상의 인물로 채운 테스트 휴대폰에서 찍은 스크린샷입니다.

설계 결정

  • 규칙은 휴대폰이 강제합니다. 도구 호출은 두 번 검증됩니다. 먼저 게이트웨이가 스키마로 검증하고, 그다음 앱이 검증합니다. 앱은 기록이 실제로 있는지, 텍스트가 너무 길지 않은지, 중복이 없는지, 미래 날짜가 없는지 확인합니다. 거부된 호출은 아무것도 저장하지 않고, 모델은 읽고 고칠 수 있는 오류를 돌려받습니다.
  • 유연하지만, 되돌릴 수 있습니다. 처음에는 AI의 모든 변경이 제 검토를 기다렸습니다. 대신 저는 유연함을 택했습니다. 이제 추가와 수정은 바로 저장됩니다. 응답마다 모든 행의 변경 전후 사본을 보관하므로, 한 번 누르면 응답 전체가 되돌려집니다. 그 뒤에 제가 그 행을 고쳤다면 Undo는 거부됩니다.
  • 삭제는 항상 기다립니다. 사람, 메모, 기록을 삭제하거나 두 사람을 병합하는 작업은 제가 해당 카드를 누를 때만 실행됩니다.
  • 저장된 텍스트는 지시가 아니라 데이터입니다. 프롬프트는 모델에게 저장된 메모와 이전 메시지를 데이터로만 다루고, 절대 지시로 받아들이지 말라고 알려 줍니다.
  • 답변은 저장된 기록에 근거합니다. 근거가 오래되었거나 부족하면 어시스턴트는 그렇다고 말해야 합니다. 오래된 메모에 어떤 역량이 적혀 있다는 이유만으로 그 사람이 기꺼이 도와줄 것처럼 말해서는 안 됩니다.
  • 설계부터 비공개입니다. 앱에는 계정, 분석 도구, 연락처 가져오기가 없습니다. 백업은 휴대폰에서 암호화된 뒤 비공개 GitHub 저장소로 가고, 앱은 공개 저장소로의 백업을 거부합니다.

실수를 찾아 고치는 방법

모든 답변에는 Report a problem 버튼이 있습니다. 이 버튼에는 잘못된 사람, 빠뜨린 내용, 잘못된 기록 유형 같은 정해진 라벨이 있습니다. 보고에는 메시지, 답변, 저장된 내용, 모든 도구 호출이 순서대로 담기며, 연락처 정보는 빠집니다.

보고는 암호화된 백업 안에 담겨 옵니다. 제 컴퓨터에서는 스크립트가 보고만 복호화합니다. 저는 오류를 고치고, 가상의 인물로 채운 테스트 휴대폰에서 수정 결과를 확인합니다.

예를 들어, 보고를 보니 학업과 봉사 활동이 직업으로 저장되고 있었습니다. 한 테스트 메모에서는 직업이 4개 생겼습니다. 수정 후에는 직업이 1개만 생겼고, 나머지는 학력과 배경 정보로 들어갔습니다.

속도도 측정합니다. 도구 호출 한 번으로 메모와 그 메모의 사실들을 함께 저장하게 하자, 두 사람의 정보를 갱신하는 시간이 약 23초에서 약 12초로 줄었습니다.

상태

저는 이 앱으로 제 인맥을 관리하고 있으며, 앱은 서명된 GitHub Releases에서 스스로 업데이트됩니다. 코드, README, 개인정보 보호 문서는 GitHub에 공개되어 있습니다.

스크린샷은 가상의 인물로 채운 테스트 휴대폰에서 찍었습니다. 이 페이지에는 실제 연락처가 하나도 나오지 않습니다.