สร้าง subagent ด้วย Agent tool (เดิม Task) และรันแบบขนาน
แนวคิด
ใน Agent SDK การสร้าง subagent ทำผ่านเครื่องมือสำหรับ spawn เครื่องมือนี้เดิมชื่อ Task และถูกเปลี่ยนชื่อเป็น Agent ใน Claude Code เวอร์ชันใหม่ กลไกยังเหมือนเดิม คือ agent หลักเรียกเครื่องมือนี้เพื่อแตกงานย่อยออกไปให้ agent อีกตัวทำ
เงื่อนไขสำคัญคือ agent หลักจะเรียก subagent ได้ต่อเมื่อ allowedTools มีเครื่องมือ spawn นี้อยู่ ถ้าไม่ใส่ Agent (หรือ Task ในเวอร์ชันเก่า) ไว้ใน allowedTools การเรียก subagent จะไม่ถูกอนุมัติอัตโนมัติ และตกไปที่ callback ขออนุญาต หรือถูกปฏิเสธในโหมดที่ไม่ถาม การนิยาม subagent แต่ละชนิดทำผ่าน AgentDefinition ซึ่งมีฟิลด์หลัก ได้แก่ description บอกว่าเมื่อไรควรใช้, prompt เป็น system prompt ของตัวมัน, และ tools จำกัดเครื่องมือที่มันใช้ได้
การรันแบบขนานทำได้โดยปล่อย Agent call (เดิม Task) หลายอันในคำตอบเดียวของ coordinator subagent เหล่านั้นจะทำงานพร้อมกัน งานย่อยที่อิสระต่อกันจึงเสร็จในเวลาของตัวที่ช้าที่สุด ไม่ใช่ผลรวมของทุกตัว
ทำไมสำคัญ
การจำกัดเครื่องมือของ subagent ผ่านฟิลด์ tools เป็นการลดความเสี่ยงตามหลัก least privilege subagent ที่ทำหน้าที่อ่านอย่างเดียวควรมีแค่ Read, Grep, Glob ไม่ควรมี Edit หรือ Bash เพื่อกันการกระทำที่ไม่ตั้งใจ ยิ่ง subagent มีสิทธิ์แคบเท่ากับงานจริง blast radius เมื่อมันทำงานผิดพลาดก็ยิ่งเล็ก
พิจารณ Sample Question ข้อ 9 agent สังเคราะห์ต้องตรวจสอบข้อเท็จจริงบ่อย ปัจจุบันมันคืนงานให้ coordinator เรียก agent ค้นเว็บ แล้ววนกลับมา เพิ่มการเดินทางไปกลับ 2 ถึง 3 รอบต่องาน จากการประเมินพบว่า 85 เปอร์เซ็นต์เป็นการเช็กข้อเท็จจริงง่าย ๆ ส่วน 15 เปอร์เซ็นต์ต้องสืบลึก คำตอบที่ดีคือให้ agent สังเคราะห์มี tool verify_fact ที่ scope แคบสำหรับเคสง่าย ส่วนเคสยากยังส่งผ่าน coordinator เหมือนเดิม
นี่คือการประยุกต์ least privilege ให้เครื่องมือเท่าที่เคสส่วนใหญ่ต้องการ โดยไม่ยกสิทธิ์ค้นเว็บทั้งชุดให้ ซึ่งจะละเมิดการแยกหน้าที่
ตัวอย่าง
options = ClaudeAgentOptions(
# ต้องมี "Agent" (เดิมชื่อ "Task") จึงจะ spawn ได้
allowed_tools=["Read", "Grep", "Glob", "Agent"],
agents={
"code-reviewer": AgentDefinition(
description="ผู้เชี่ยวชาญรีวิวโค้ด ใช้เมื่อต้องตรวจคุณภาพและความปลอดภัย",
prompt="คุณคือผู้รีวิวโค้ด เน้นช่องโหว่ความปลอดภัยและประสิทธิภาพ",
tools=["Read", "Grep", "Glob"], # อ่านอย่างเดียว ไม่มี Edit/Bash
),
},
)
เช็คความเข้าใจ
agent หลักจะเรียก subagent ผ่าน Agent tool (เดิม Task) ได้ ต้องมีอะไรอยู่ใน allowedTools
จะรัน subagent หลายตัวแบบขนานได้อย่างไร