적어 두고 안 지키던 조항
아키텍처는 처음부터 말했지. 블록이 닫히고, 인자가 파싱되고, 그 요청이 광고한 스키마를 통과하고, 정책이 결정하고, tool_call 줄이 플러시됐을 때만 실행해. 한동안 그 스키마 조항은 산문이었어. 필수 내용 없는 쓰기가 빈 파일을 만들고 성공을 보고했어. 루프가 소원을 실행한 거야.
지금은 그 요청이 광고한 스키마에 대해 JSON Schema 검사기 하나가 입장에서 돌아. 내장 도구든 MCP 도구든. 루프는 여전히 도구가 뭔지 안 배워. 실패는 이유 schema인 잘못된 호출을 적고, 굳은 tool_call은 없고, 모형이 읽을 교정을 남겨. 모르는 스키마 어휘는 무시해. 입장 제어지 린터가 아니야. MCP 서버는 아무 스키마나 실어. 모든 키워드를 안다고 구는 게이트는 거절을 지어내기 시작해.
정책은 결정이지 분위기가 아니야
허용은 실행해. 거절은 에러 결과를 돌려. 물음은 운영자에게 선택지를 주고 권한으로 기록해. 기본 실행은 순차라 기록이 결정론을 지켜. 프로필은 읽기 전용으로 선언된 도구를 병렬로 돌릴 수 있어. 결과는 실행 순서가 달라도 모형이 부른 순서로 투영해. 거절된 결과는 안 버려. 빠진 자리 결과는 모형의 짝을 밀어.
사고 뒤에는 많아야 한 번
부작용 있는 호출은 많아야 한 번이야. 결과 없이 발견된 tool_call은 미해결 의도가 되고, 합성 에러로 접히고, 자동으로 다시 안 돌아. 다시 돌리는 건 엔진이 떠난 세상이 그대로라고 결정하는 거야. 운영자는 재시도해도 돼. 루프는 안 돼.