Product · simple — une boutique
Le cas. La même boutique que dans la version actuelle. Rien de neuf côté parcours : c'est la forme de la config qui change.
Ce qui change. Le paramètre de recherche dit qui peut le fixer. Un profil reçoit
l'opération de recherche. La station démarre en observe : aucun modèle n'agit.
examples/cible/product-simple.yaml
# Product · simple — CIBLE. The same shop as the actuelle example, in the target shape:
# fields are typed, operations say read or write.
station:
id: maison-indigo
kind: product
name: Maison Indigo
guidance: {max_mode: observe} # no model acts until the station is calibrated
global: # applies to every field of its type, every skill
language: fr
currency: EUR # every `type: price` field
locale: fr-FR
timezone: Europe/Paris
apis:
- name: boutique
openapi_url: https://api.maison-indigo.example.fr/openapi.json
base_url: https://api.maison-indigo.example.fr
auth: {type: none}
operations:
- {id: searchProducts, access: read}
profiles: # everything is closed until a profile is granted an operation
anonyme: {when: "identity.authenticated == false", grants: [boutique.searchProducts]}
skills:
- name: articles
cognitive:
objective: "aider à trouver le tissu ou le vêtement qui correspond au projet"
diagnose: [l'usage, la couleur, le budget]
params:
q: {type: text, set_by: [llm, person]} # what the person is looking for
invoke:
method: searchProducts
args: {q: "$params.q"}
present:
fields:
name: {from: name, type: text, role: title}
price: {from: price, type: price, role: billed}
image: {from: image_url, type: image}
page: {from: slug, type: url, role: link, # the shop's own page for this article
template: "https://maison-indigo.example.fr/article/{value}"}
submit:
- {name: commande, mode: handover, url: "https://maison-indigo.example.fr/commande?add={items}"}
render: {component: carousel}
submit_guard:
confirm: true
agent: # the agent Convoy deploys: a client of this station, like any other
name: Maison Indigo
persona: "une conseillère textile qui connaît chaque tissu de l'atelier"
tone: friendly
rules:
- "Ne jamais inventer un article ou un prix : tout vient de l'outil."
emoji: false # a discreet emoji in replies, or none
model: gemini-2.5-flash # the model the agent runs on
portals:
web:
widget:
origins: [https://maison-indigo.example.fr] # the only sites the widget may load on
theme: {primary: "#24508f", secondary: "#f2ede4", font: manrope} # the widget's colours and typeface
Ce qui se passe
| la personne ou l'agent | Core | résultat |
|---|---|---|
| « un wax bleu pour une robe » | articles : lecture de searchProducts | un carrousel ; une trace de lecture dans la room |
| ajoute deux articles | aucune garde | deux actions réservées, total en euros |
| « Finaliser » | confirm ; personne d'autre que la personne de la room (défaut) | le lien vers le site du tenant |
À retenir
- Une station simple reste simple : un seul profil, pas de politique, pas de playbook. Le profil
anonymereçoitboutique.searchProducts, parce que tout est fermé par défaut. role: billeddit quel champ est le prix facturé ; un item peut porter un autre champprice(un prix barré) sans ambiguïté.