Agent
Un agent porte une responsabilité explicite. Contrairement à une skill, qui décrit une composition bornée et réutilisable, l’agent est l’unité qui choisit, dans un périmètre déclaré, quelle capacité exécuter pour cette exécution, et qui peut être tenue responsable de ce choix.
Forme
agent AgentName
takes request as RequestType
gives ResultType
responsibility "Fulfill the declared AgentName responsibility using only authorized capabilities."
uses SomeSkill
callable_by strategy StrategyName
uses déclare ce que l’agent peut exécuter : function, tool, skill, autre agent ou strategy. callable_by déclare les stratégies ou agents autorisés à l’invoquer.
takes et gives déclarent, quand ils sont présents, l’interface directe de
l’agent. Elle n’est jamais déduite de uses : les capacités restent des moyens
internes que l’agent peut choisir, pas son point d’entrée implicite.
Interface d'appel typée
module examples.agent_type
type ReviewRequest
summary is Text
type ReviewResult
verdict is Text
tool InspectRequest
description "Inspect one request and return a review result."
takes request as ReviewRequest
gives ReviewResult
agent Reviewer
takes request as ReviewRequest
gives ReviewResult
responsibility "Review the explicit request and return one typed final result."
uses InspectRequest
callable_by strategy RunReview
strategy RunReview
takes request as ReviewRequest
gives ReviewResult
uses Reviewer
do
Reviewer
with request as request
into review
give review
Chaque entrée est liée par with; seule la sortie finale validée contre
gives est placée dans into. Une réponse directe du provider est soumise au
même contrôle de type. Les résultats de capacités et les observations de la
boucle restent intermédiaires et ne deviennent pas implicitement la sortie.
Un agent sans takes ni gives accepte l'appel simple, sans with ni
into. Pour un agent importé avec une interface explicite, le compilateur
résout les signatures depuis les sources des modules du projet. Les types
conservent leur identité de module et le caller doit toujours être autorisé.
Voir Imports multi-modules.
Cas simple
module examples.agent_simple
type DatasetRequest
query is Text
type DatasetBrief
summary is Text
tool SearchDatasets
takes request as DatasetRequest
gives DatasetBrief
requires network
skill BuildDatasetBrief
takes request as DatasetRequest
gives DatasetBrief
uses SearchDatasets
do
SearchDatasets
with request as request
into result
give result
agent Researcher
responsibility "Fulfill the declared Researcher responsibility using only authorized capabilities."
uses BuildDatasetBrief
callable_by strategy RunDatasetResearch
strategy RunDatasetResearch
uses Researcher
do
Researcher
Avec une seule capacité déclarée dans uses, le runtime peut sélectionner BuildDatasetBrief automatiquement, sans décision explicite ni provider configuré.
Cas avancé
module examples.agent_advanced
type DatasetRequest
query is Text
type DatasetBrief
summary is Text
tool SearchDatasets
takes request as DatasetRequest
gives DatasetBrief
requires network
skill BuildDatasetBrief
takes request as DatasetRequest
gives DatasetBrief
uses SearchDatasets
do
SearchDatasets
with request as request
into result
give result
skill ReviewBrief
takes brief as DatasetBrief
gives DatasetBrief
do
human.approve
with context as brief
into approved
give brief
agent Researcher
responsibility "Fulfill the declared Researcher responsibility using only authorized capabilities."
uses BuildDatasetBrief
uses ReviewBrief
callable_by strategy RunDatasetResearch
strategy RunDatasetResearch
uses Researcher
do
Researcher
Dès qu’un agent déclare plusieurs capacités dans uses, une décision structurée devient nécessaire : le runtime présente le résumé des capacités autorisées à un provider de décision configuré, vérifie que la cible choisie appartient bien à uses, mappe les arguments fournis sur sa signature, puis trace la décision ou le refus. Le détail de cette boucle est couvert par Décision agentique gouvernée.
Skill vs agent
- Une
skilldécrit comment composer des étapes : elle ne décide de rien, elle exécute une séquence bornée. - Un
agentporte qui est responsable du choix : il sélectionne, parmi ce queusesautorise, la capacité à exécuter pour cette exécution.
Un agent peut uses une skill (le cas le plus courant), un tool, une function, un autre agent ou une strategy. Dans tous les cas, uses reste la seule source de périmètre : l’agent ne peut pas appeler ce qui n’y figure pas.
Ce que l’agent porte
Sans agent, le choix entre plusieurs capacités serait soit codé en dur dans une skill (donc plus une vraie décision), soit délégué à un appel de modèle libre, hors du contrôle du runtime.
Avec agent, ce choix devient un point explicite du graphe : déclaré, borné par uses, autorisé par callable_by, et tracé par le runtime, qu’une décision soit automatique (capacité unique) ou structurée via un provider (capacités multiples).
Portée technique
- Un
agentne peut exécuter que ce qui est déclaré dansuses. callable_byaccepte des callersstrategyouagent, y compris qualifiés par module.- Les mémoires et secrets accessibles exigent des scopes explicites ; une délégation ne transfère pas les droits du spécialiste à son parent.
- Une stratégie peut distribuer une liste d'entrées sur un agent typé avec
parallel. Chaque invocation garde ses données et partage les budgets du run. - Un agent peut aussi sélectionner une stratégie autorisée contenant un groupe parallèle. Sa propre boucle de décision reste séquentielle.
- La coordination passe par des arguments et résultats typés ; elle ne crée ni conversation libre, ni découverte de capacités hors
uses. - Une capacité autorisée reste réutilisable tant que les budgets le permettent.
- Voir Autonomie bornée et Décision agentique gouvernée pour le détail du contrôle runtime.