bra0 / Docs / Concepts / A skill and an agent
Concept

A skill and an agent Une skill et un agent

Both are software, both are invoked, both have a name and a prompt, and in our own vocabulary one was declared a subclass of the other. That declaration was wrong, and finding out why took measuring what our ontology could and could not tell apart. The distinction turns out to rest on a single question — what does activity get attributed to? — and the answer makes one of them accountable and the other replaceable. Tous deux sont du logiciel, tous deux s'invoquent, tous deux ont un nom et un prompt, et dans notre propre vocabulaire l'un était déclaré sous-classe de l'autre. Cette déclaration était fausse, et comprendre pourquoi a demandé de mesurer ce que notre ontologie savait et ne savait pas distinguer. La distinction tient à une seule question — à quoi l'activité est-elle attribuée ? — et la réponse rend l'un responsable et l'autre remplaçable.

What our vocabulary actually said Ce que notre vocabulaire disait réellement

Not an ambiguity of usage. A written axiom: our BFO companion file recorded that asc:Skill and asc:Plugin are subclasses of asc:AgentService in the native vocabulary. A skill therefore was an agent, by entailment, in every graph that loaded both files — and asc:Skill had grown four properties and a shape of its own on that footing. Pas une ambiguïté d'usage. Un axiome écrit : notre fichier compagnon BFO enregistrait que asc:Skill et asc:Plugin sont sous-classes de asc:AgentService dans le vocabulaire natif. Une skill était donc un agent, par entailment, dans tout graphe chargeant les deux fichiers — et asc:Skill avait accumulé quatre propriétés et une forme propre sur cette base.

The foundational grounding cannot settle it L'ancrage fondationnel ne peut pas trancher

The first instinct is to go upward: let the foundational ontology discriminate. It cannot, and this is worth stating because it redirects the whole repair. Every one of Skill, Plugin, ToolPolicy, BootstrapIdentity, GatingRequirements, SubagentPolicy, AntiPattern and AgentService is grounded in BFO as a generically dependent continuant — an information artefact. At that level the ontology cannot tell an agent from a skill from a policy from an anti-pattern. The grounding is defensible for a piece of software and it is useless as a discriminator, so no further foundational work answers the question. Le premier réflexe est de monter : laisser l'ontologie fondationnelle discriminer. Elle ne peut pas, et le dire importe car cela réoriente toute la réparation. Chacune de Skill, Plugin, ToolPolicy, BootstrapIdentity, GatingRequirements, SubagentPolicy, AntiPattern et AgentService est ancrée dans BFO comme continuant génériquement dépendant — un artefact informationnel. À ce niveau l'ontologie ne distingue pas un agent d'une skill, d'une politique ou d'un anti-pattern. L'ancrage est défendable pour du logiciel et il est inutile comme discriminateur : aucun travail fondationnel supplémentaire ne répond donc à la question.

The discriminator that does exist Le discriminateur qui existe

It comes from PROV, and it is behavioural rather than taxonomic. PROV attributes an activity to a software agent. That is what an agent is: something to which what happened can be attributed. In our vocabulary an agent accordingly bears a mandate, carries an autonomy level and a policy, and operates on behalf of a responsible human. A skill bears none of those, and nothing is attributed to it. It is a method an agent invokes — which, in the vocabulary already running in thirty of our production mappings, is a function. Il vient de PROV, et il est comportemental plutôt que taxonomique. PROV attribue une activité à un agent logiciel. Voilà ce qu'est un agent : quelque chose à quoi ce qui s'est produit peut être attribué. Dans notre vocabulaire un agent porte en conséquence un mandat, un niveau d'autonomie et une politique, et opère pour le compte d'un humain responsable. Une skill ne porte rien de cela, et rien ne lui est attribué. C'est une méthode qu'un agent invoque — ce qui, dans le vocabulaire déjà employé par trente de nos mappings de production, est une fonction.

The question An agent A skill
Is activity attributed to it?L'activité lui est-elle attribuée ? yes no
Does it bear a mandate from a responsible human?Porte-t-elle un mandat d'un humain responsable ? yes no
Does it carry an autonomy level and a policy?Porte-t-elle un niveau d'autonomie et une politique ? yes no
Can it be swapped for another implementation of the same contract?Est-elle échangeable contre une autre implémentation du même contrat ? no yes
Is it the unit a verification package is published for?Est-elle l'unité pour laquelle on publie un paquet de vérification ? no yes

The last two rows are why the distinction earns its keep rather than merely being correct. A skill is replaceable: it declares a contract, and any implementation satisfying the contract may stand in. An agent is not, because a mandate is held by one party and cannot be swapped without reopening who is accountable. That asymmetry is the whole practical content of the distinction. Les deux dernières lignes sont ce qui fait gagner son prix à la distinction plutôt que la rendre seulement correcte. Une skill est remplaçable : elle déclare un contrat, et toute implémentation satisfaisant le contrat peut s'y substituer. Un agent ne l'est pas, car un mandat est détenu par une partie et ne s'échange pas sans rouvrir la question de qui répond. Cette asymétrie est tout le contenu pratique de la distinction.

The shape of the repair, and the hole it has to close La forme de la réparation, et le trou qu'elle doit fermer

Remove the subsumption; type a skill as a function; keep its four existing properties; bind a skill to the agent that implements it with a mapping, exactly the pattern that already binds a capability to a tool. Nothing is minted. A persona invocation then reads precisely instead of confusedly: a function whose implementation is an agent. Retirer la subsomption ; typer une skill comme fonction ; conserver ses quatre propriétés existantes ; lier une skill à l'agent qui l'implémente par un mapping, exactement le motif qui lie déjà une capacité à un outil. Rien n'est minté. L'invocation d'un persona se lit alors précisément au lieu de confusément : une fonction dont l'implémentation est un agent.

And one thing must be said rather than left to be discovered. Until 2026-10-17, two properties — autonomy level and policy — declared their domain to be the agent class. That domain was wrong on its own terms: it contradicted fourteen mandates and left our production corpus without a model, so it was removed. But however wrong, it did at least stop a skill from bearing an autonomy level. Removing it opened that hole. So the control that refuses a node which is both a function and carries an autonomy level or a policy is not a refinement to schedule later — the repair opened the hole, and naming it belongs to the same repair. A repair that opens a hole and does not name it is worse than the defect it closed. Et une chose doit être dite plutôt que laissée à découvrir. Jusqu'au 2026-10-17, deux propriétés — niveau d'autonomie et politique — déclaraient pour domaine la classe agent. Ce domaine était faux en lui-même : il contredisait quatorze mandats et laissait notre corpus de production sans modèle, il a donc été retiré. Mais tout faux qu'il était, il empêchait au moins une skill de porter un niveau d'autonomie. Son retrait a ouvert ce trou. Le contrôle qui refuse un nœud à la fois fonction et porteur d'un niveau d'autonomie ou d'une politique n'est donc pas un raffinement à programmer plus tard — la réparation a ouvert le trou, et le nommer appartient à la même réparation. Une réparation qui ouvre un trou sans le nommer est pire que le défaut qu'elle a fermé.

Measured 2026-10-17 over the published governance vocabularies; the subsumption removal is proposed here and ratified by the architecture authority.