Quiero configurar aprobaciones de herramientas
Para un desarrollador que decide qué herramientas del agente necesitan un humano en el bucle · 15 min · una app mínima funcional
Terminas con una sesión donde herramientas específicas se ejecutan automáticamente y otras se pausan para aprobación, resueltas ya sea mediante la interfaz incluida o de forma programática.
Antes de empezar#
- Una app mínima funcional
- Saber qué herramientas puede llamar el agente en tu app (
Read,Glob,Grep,Edit,Write,Bash, la herramienta SQL,AskUserQuestion,ExitPlanMode, herramientas provistas por MCP, …) y cuáles de ellas son destructivas en tu contexto.
Pasos#
- Define
allowed_toolsenCocoOptionspara las herramientas que nuncadeberían necesitar un prompt, y
require_approval_forpara las que siempre deberían pausarse:options = st_coco.CocoOptions( connection="my_connection", allowed_tools=["Read", "Glob", "Grep"], require_approval_for=["Edit", "Write", "Bash"], )AskUserQuestionyExitPlanModesiempre se pausan para una decisión, sin importar lo que se liste en ninguna de las dos opciones. - Monta el panel con las aprobaciones visibles (el valor por defecto):
st_coco.panel(session, show_approvals=True)Cuando el agente llama a una herramienta coincidente con
require_approval_for, el estado de la sesión pasa aawaiting_useryrender_approvals()muestra tres controles: Approve once, **Always allow, Deny**. NiAskUserQuestionni las solicitudes deExitPlanModemuestran Always allow. - Para resolver las aprobaciones desde tu propia interfaz en lugar de los
controles incluidos, llama directamente a los resolvers de bajo nivel con el id de la solicitud pendiente (de
session.chat_result().pending_approval):result = session.chat_result() if result.pending_approval: request_id = result.pending_approval["request_id"] st_coco.approve_pending(session, request_id, always=False) # o: st_coco.deny_pending(session, request_id, reason="not now") - Opcionalmente, estrecha o amplía la puerta en tiempo de ejecución
pasando un callable a
require_approval_foren lugar de una lista fija, y luego llama asession.sync_options(options)después de cambiarlo para que la sesión adopte el nuevo hash.
Resultado#
Las herramientas en allowed_tools se ejecutan sin ningún prompt. Las herramientas coincidentes con require_approval_for pausan la ejecución y muestran el control de aprobación de tres botones (o esperan a approve_pending/deny_pending en una interfaz personalizada) antes de ejecutarse. Una denegación no ejecuta la llamada a la herramienta; el turno del agente continúa desde ahí, opcionalmente con el motivo que pasaste.
Variaciones#
- Always allow aplica solo para la sesión actual — se borra en
session.reset()o al reiniciar el proceso, nunca se escribe en una política persistida. permission_mode="plan"enruta las llamadas a herramientas a través deun flujo
ExitPlanModeen lugar de aprobación por herramienta;render_plan_banner()muestra el banner de modo plan y la llamada a la acción Execute plan.approval_timeout_seconds(por defecto600.0, diez minutos) controlacuánto tiempo espera una aprobación pendiente antes de que la ejecución falle con
ApprovalTimeoutError.