원문 캡처 · tenbri.com
원문 캡처 · tenbri.com

Tenbri는 AI 에이전트가 내린 결정과 그 결과를 서명된 변경 불가 기록으로 남기는 오픈소스 도구다. Claude, OpenAI, LangGraph 에이전트와 Python·TypeScript 함수에 연결할 수 있으며, 기록은 사용자가 관리하는 저장소에 보관하고 오프라인에서도 검증할 수 있다.

에이전트의 도구 호출은 실행 전 의도와 실행 후 결과로 기록된다. 각 기록에는 누가 어떤 규칙과 입력을 바탕으로 행동했는지, 누가 승인했는지가 담긴다. Tenbri는 해시 체인과 Ed25519 서명을 사용하며, 기록의 서명 키는 저장된 스트림과 분리한다. 사용자는 CLI나 Python, TypeScript를 통해 기록을 확인하고 검증할 수 있다.

제작자가 공개한 시연에서는 환불 함수를 세 번 호출해 성공·거부·오류 결과를 기록했다. 이후 저장된 항목 한 바이트를 바꾸자 검증 도구가 5번 항목에서 서명 오류를 찾아냈다. 제작자는 오프라인 검증이 해시 체인과 서명, 키를 확인하며, 미리 보관한 체크포인트로 기록의 잘림이나 분기 여부도 확인할 수 있다고 설명한다.

Tenbri는 로컬 디스크, Cloudflare R2, MinIO를 지원하고, AWS S3 지원은 진행 중이다. REST·gRPC 데몬인 tenbrid, 액션 스키마, 암호화된 본문과 데이터 삭제 기능은 선택 사항이다. 로드맵에는 프록시 관측 기록, Kafka 연동, 클라우드 키 관리 등 아직 제공되지 않는 기능도 포함돼 있다. 상태는 0.1.0-beta.5 기준이다.

기록과 검증 기능이 규정 준수 자체를 보장하는 것은 아니다. Tenbri도 이를 명시한다. 설치와 사용 방법은 빠른 시작 안내에서 확인할 수 있고, 소스 코드는 GitHub 저장소에 공개돼 있다.

부록: 원문 예시

text
import tenbri tenbri.init() @tenbri.decision("issue_refund", target="stripe:{charge}", policy="policy:refund@14") def refund(charge: str, amount: int) -> None:     if amount > 500:         raise tenbri.Refused("over the ceiling")  # recorded as refused     stripe.Refund.create(charge=charge, amount=amount) refund("ch_81f2", 4200)  # intent before it runs, outcome after