Reddit, Manus engineer의 Unix-style agent 글을 계기로 function calling을 다시 보다

글의 핵심 주장

전 Manus backend lead가 올린 강한 반응의 r/LocalLLaMA post는 분명한 주장을 던진다. 2년 동안 agent를 만들고 나서, 작성자는 typed function catalog를 버리고 Unix-style command를 뒤에 둔 단일 run(command="...") tool을 선호하게 됐다는 것이다. 글은 오래된 두 설계 전통을 연결한다. Unix는 중요한 것을 text stream으로 흘려보낼 수 있다고 가정했고, LLM은 token 위에서만 reasoning한다. 이런 관점에서 shell-like interface는 임시방편이 아니라 현재 model에게 가장 자연스러운 interface model이 된다.

작성자는 큰 function inventory가 model의 attention을 문제 해결이 아니라 tool selection에 쓰게 만든다고 본다. 반대로 단일 command runner는 tool use를 하나의 namespace 안에서 string composition 문제로 바꾼다. 글은 log read, error filter, count를 각각 다른 tool로 나누는 대신 command chain 하나로 처리하는 예를 든다. 이를 위해 runtime은 |, &&, ||, ;를 parsing해 한 번의 tool call이 작은 atomic action이 아니라 complete workflow를 표현하도록 만든다.

왜 이 글이 반향을 얻었나

흥미로운 점은 작성자가 철학만 말하지 않았다는 데 있다. post는 progressive help discovery, agent에게 다음 행동을 알려주는 error message, exit code와 duration을 붙이는 consistent output footer, 그리고 raw Unix execution과 model에게 보여주는 presentation을 분리하는 two-layer architecture를 설명한다. 그 presentation layer에는 binary detection, 매우 큰 output을 위한 overflow file, command failure 시 stderr visibility가 포함된다. 요점은 model에게 terminal을 쥐여주고 운에 맡기자는 것이 아니다. CLI가 model cognition에 맞는 주변 ergonomics를 가질 때 비로소 효과적이라는 주장이다.

thread의 반응도 바로 그 강점과 위험에 동시에 꽂혔다. 몇몇 commenters는 결국 shell이 가장 자연스러운 agent framework가 될 수 있다고 봤다. 반대로 많은 사람은 모든 것이 terminal-like runner로 모일수록 sandboxing과 permission boundary가 더 중요해진다고 지적했다. 이 우려는 핵심 논지를 반박하기보다 강화한다. command line이 가장 expressive한 interface라면, 그 interface를 둘러싼 safety model이 진짜 product가 된다는 뜻이기 때문이다.

이 글이 Reddit 밖에서도 중요한 이유

작성자는 이 논의를 agent-clip open-source code와 연결했다. command routing, chain parsing, memory, browser attachment, stderr handling까지 파일 단위로 짚어 주기 때문에, 이 글은 흔한 opinion thread보다 훨씬 실용적이다. production failure를 실제로 겪은 사람이 interface를 다시 설계하며 얻은 field report에 가깝다. 결국 function calling debate의 핵심은 schema 품질만이 아니라, LLM이 tool, state, failure를 실제로 어떻게 인식하는지에 가장 잘 맞는 operating environment가 무엇인가로 이동하고 있다.

Source post: r/LocalLLaMA thread. Primary source referenced in the post: agent-clip.