Descubre herramientas existentes antes de agregar una; prefiere una llamada directa a herramienta para trabajo único. custom_tool_list encuentra flujos de trabajo guardados. Usa custom_tool_create para una secuencia reutilizable con nombre. Los nombres comienzan con user_. Describe su propósito preciso y define parámetros tipados con nombres, tipos, descripciones y banderas requeridas. Los tipos soportados son string, number, boolean, object y array.
Cada paso necesita un ID único, un nombre de herramienta hoja existente y argumentos que coincidan con el esquema de esa herramienta. En los argumentos, {"$input":"expression"} sustituye una entrada con nombre. {"$step":"earlier_step","path":"result"} lee el data.result de un paso anterior. Otro JSON es literal. Las referencias deben apuntar hacia atrás; primero verifica la forma real del resultado. Las entradas opcionales necesitan literales fijos en cualquier paso que las requiera, o deben convertirse en entradas requeridas.
Ejemplo: parámetros [{"name":"expression","type":"string","description":"Aritmética numérica","required":true}], pasos [{"id":"answer","tool":"calculate","arguments":{"expression":{"$input":"expression"}}}]. Primero descubre calculate, luego crea y prueba con una entrada inofensiva.
Las nuevas herramientas son inmediatamente detectables y sobreviven al reinicio de la aplicación. Los flujos de trabajo se ejecutan a través del registro existente: los grants, el modo sin memoria/incógnito, las restricciones de edición, la cancelación y la disponibilidad en tiempo de ejecución siguen aplicándose. Un paso fallido detiene la ejecución y devuelve los pasos completados más el error; inspecciona los efectos secundarios antes de reintentar. Nunca repitas ciegamente una acción externa completada. Las pasarelas, otros flujos de trabajo y herramientas de autoría no pueden ser pasos. Para nueva lógica ejecutable, crea y prueba un script de workspace con herramientas de archivo/terminal permitidas, luego envuelve la llamada real al terminal; esto es solo para escritorio donde el acceso a terminal está disponible. No afirmes que un skill o definición JSON crea una nueva capacidad nativa. Elimina herramientas obsoletas solo cuando se solicite usando custom_tool_delete.