"Flint 이 프롬프트 전체를 스스로 렌더하고 완성된 텍스트를 보내. 브레인한테 뭘 찾아보라고 절대 안 시켜."
로컬로 렌더, 완성해서 보내
계약이 'apply-free' 라 불리는 건 Flint 이 자유형 프롬프트를 적용하기 때문이야: 템플릿 렌더링을 자기 쪽에서 하고, 캡처한 선택을 {input} 자리에 떨구고, 완성된 프롬프트 문자열을 만들어. 그런 다음에야 경계를 건너 호출해. 브레인은 채울 템플릿도 풀 이름도 아니라, 변환할 완성된 텍스트를 받아. 렌더링은 Flint 의 일; 생각은 브레인의 일.
와이어를 건너는 것
요청은 셋을 날라: 렌더된 프롬프트, vault-맥락 선택, 그리고 — 로컬 모델 티어엔 — 어느 티어와 모델을 쓸지. 그게 계약 전부야. 프롬프트는 내용; vault 선택과 티어는 브레인한테 그걸 어떻게 돌릴지 알려주는 실행 파라미터. 세션도, 기록도, 딴 데 저장된 뭐로의 참조도 없어. 각 호출은 자기완결적이야: 브레인이 답하는 데 필요한 전부가 그 요청 하나에 있어.
Vault 우회는 와이어에 명시적 — 절대 숨은 기본값 아냐. 매크로가 완전한 개인 vault 맥락으로 도는지 아예 우회하는지는 진짜 결과(지연, 그리고 모델이 너에 대해 아는 것)를 가진 진짜 결정이야. 그래서 모든 요청에 명시적 필드로, 매크로별로 설정돼 다녀. 빈 소울이나 빠진 필드가 조용히 성능 지름길이 되면 절대 안 돼; 선택은 매번 소리 내어 진술돼, 어떤 요청도 의도한 것보다 많거나 적은 맥락을 조용히 안 보내게.
절대 매크로 ID 아냐
요청에서 제일 중요한 필드는 없는 필드야: 매크로 id. Flint 은 '저장해둔 7번 매크로를 돌려' 라고 절대 안 해. 실제 프롬프트를 보내. 이건 의도적이야 — Flint 이 브레인 쪽 매크로를 id 로 참조하는 순간, 두 시스템이 그 id 로 결합되고, 다음 레슨이 다룰 독립성이 사라져. 데이터를 보내, 남의 데이터로의 포인터 말고.
내용을 보내, 상대가 쥔 내용으로의 참조 말고. 필요한 전부를 나르는 자기완결적 요청은 피호출자의 내부 상태로부터 분리돼; 피호출자가 찾아봐야 하는 id 를 이름 붙이는 요청은 저기서 그 id 가 뭘 뜻하든에 결합돼. 통째로 보낼 여유가 있으면, 보내 — 몇 바이트를 양쪽을 독립으로 바꿀 자유와 맞바꿔.