Tendril – 스스로 도구를 만들고 등록하는 self-extending 에이전트
Tendril – a self-extending agent that builds and registers its own tools
TL;DR Highlight
도구 3개만 주고 나머지는 에이전트가 만들어 레지스트리에 쌓게 했다
Who Should Read
도구가 너무 많아 에이전트가 엉뚱한 도구를 고르거나 매 세션 같은 문제를 처음부터 푸느라 토큰을 쓰는 에이전트 개발자
Core Mechanics
- 도구는 항상 3개만 보인다
- 모델에게 큰 도구 묶음을 주는 대신 부트스트랩 도구 3개만 노출한다.
- 도구 표면은 고정이고 능력(capability)만 레지스트리에서 늘어난다.
- 없으면 묻지 않고 직접 만든다
- 요청이 오면 먼저 searchCapabilities로 레지스트리를 확인한다.
- 없으면 도구를 작성해 등록하고 이름으로 실행한다.
- 시스템 프롬프트에 "도구를 만들어 줄까요?"라고 묻지 말라는 규칙이 있다.
- 레지스트리는 그냥 파일이다
- index.json과 tools/*.ts로 저장되고 사람이 보고 고치고 지울 수 있다.
- 각 항목은 name, capability(한 문장 설명), triggers(호출 신호), suppression(호출 금지 조건)을 가진다.
- 코드 직접 실행은 막아 뒀다
- 원 작성자 설명에 따르면 에이전트는 등록된 capability만 실행할 수 있다.
- 그래서 모든 작업이 도구 작성, 호출 조건 정의, 등록으로 이어진다.
- 실행은 Deno 샌드박스에서 한다
- 도구는 권한 플래그가 걸린 Deno 서브프로세스에서 돈다.
- 기본 타임아웃은 45000ms이고 allowedDomains가 비어 있으면 네트워크 제한이 없다.
- 스택은 Strands + Bedrock Claude
- AWS Strands Agents SDK(TypeScript), Bedrock의 Claude, Tauri 데스크톱 셸로 구성된다.
- 에이전트와 UI는 stdio 위 JSON-RPC 2.0/NDJSON으로 통신한다.
Community Reactions
- 로컬 모델 5종은 모두 실패했다는 작성자 설명
- Qwen3-8B, Gemma 4, Mistral Small 3.1, Devstral Small 2, xLAM-2로 돌렸지만 통과한 모델이 없었다고 한다.
- 실패 양상은 별도 글로 정리했다고 한다.
- 레지스트리가 잡음으로 차고 API가 제각각이 될 거라는 우려
- 수십 세션 뒤에는 대부분의 프롬프트에 노이즈가 되고 도구들이 너무 task 특화라 일관성이 깨질 거라는 의견이 있었다.
- 확장성이 핵심 문제라는 다른 의견도 있었다.
- 비슷한 구조를 직접 만들어 썼다는 경험
- 한 회사에서는 위키에서 과거 해결 프로그램(Saved Programs)을 먼저 검색해 재사용하고, 없으면 생성 후 저장을 제안하게 했다고 한다.
- 다른 댓글은 반복 작업마다 Claude skill이나 서브에이전트 정의를 만들고 글로벌 md에 한 줄로 언급하는데, 수십 개까지는 잘 된다고 했다.
- 호출 시점을 규칙으로 박는 것에 대한 반론
- 시스템 프롬프트의 IF 찾으면, IF 없으면 식 규칙은 여전히 if-then 휴리스틱이라는 의견이 있었다.
- 상황 설명을 주고 모델이 판단하게 하는 편이 일반화가 잘 된다는 경험이 공유됐다.
How to Apply
- 도구 레지스트리 index.json 만들어 보기
- 오늘 쓰는 에이전트의 반복 작업 하나를 골라 name, capability, triggers, suppression 4개 필드로 index.json에 적어라.
- 아래 프롬프트로 에이전트가 먼저 검색하고 없으면 만들게 해 봐라.
- 도구 노출은 소수 부트스트랩으로 줄이기
- 도구가 많아 선택이 흔들리면 search, register, execute 3개만 노출하는 구조로 바꿔라.
- 나머지 도구는 파일로 저장하고 검색으로 불러오게 하라.
- 실행 샌드박스에 권한 제한 걸기
- 생성 코드를 돌릴 때는 Deno 서브프로세스에 타임아웃과 allowedDomains를 설정하라.
- 네트워크가 필요한 도구만 도메인을 명시해 허용하라.
- 레지스트리 정리 규칙 정하기
- 중복·특화 도구가 쌓이지 않도록 주기적으로 index.json을 열어 합치거나 삭제하라.
- 도구 호출 조건은 triggers·suppression에 상황 설명으로 적어라.
Try It
# Claude Code 또는 ChatGPT에 붙여넣기 (원문 Tendril 방식의 간이 버전)
너는 도구 레지스트리를 쓰는 에이전트다. 작업 폴더의 index.json이 레지스트리다.
각 항목 필드: name(snake_case), capability(한 문장), triggers, suppression.
규칙:
1. 요청을 받으면 먼저 index.json에서 관련 도구를 검색한다.
2. 있으면 tools/{name}.ts를 실행해 답한다.
3. 없으면 "만들어 줄까요?"라고 묻지 말고 도구를 직접 작성해 tools/에 저장하고 index.json에 등록한 뒤 실행한다.
4. 실패하면 에러를 읽고 코드를 고쳐 다시 시도한다.
5. 학습 데이터로 답하지 말고, 도구로 최신 정보를 얻을 수 있으면 도구를 쓴다.
요청: {{요청}}Terminology
관련 논문
모델이 그렇게 좋다면 OpenAI는 왜 회사 100개를 직접 안 차릴까
HN 댓글 답: 코드는 쉬워도 뭘 만들지 아는 건 별개라 토큰을 판다
OpenShell: 자율 AI 에이전트를 가두는 NVIDIA의 안전한 샌드박스 런타임
정책 파일로 에이전트의 파일·네트워크·자격증명 접근을 커널 수준에서 통제한다
Omnara: Claude Managed Agents의 오픈소스 대안 (셀프호스팅 가능)
어떤 모델·머신에서도 에이전트를 돌리는 오픈소스 managed agent 플랫폼
Rust off Rails: 코드 없이 Markdown 60개로 만든 AI 에이전트용 웹 스택
Markdown 규칙 60개로 에이전트가 Rust 웹앱을 짜게 한다는 프레임워크
LayerFS: AI 코딩 에이전트를 위한 파일시스템
에이전트마다 임시 Workspace를 마운트하고 결과만 커밋하는 파일시스템
Launch HN: Alter (YC S25) – 멀티유저 에이전트용 접근 제어
에이전트마다 별도 신원·정책·감사로 API 키 공유 문제를 푼다
Claude로 코드의 공격 표면(attack surface) 줄이기
Claude로 25개 오픈소스를 분석해 불필요하게 열린 코드 493건을 찾았다
WhatsApp 도움말 페이지에 숨겨진 LLM 지시문: 규제기관을 추천하지 말라
WhatsApp 도움말에 화면엔 안 보이는 AI 지시문 102개가 숨어 있었다