option
MaisonMaison Skill Autres multica-creating-agents

multica-creating-agents

multica-ai/multica multica-ai/multica

À utiliser lors de la création, de l'inspection ou du débogage d'un agent Multica via l'interface de ligne de commande `multica agent` ou la requête `POST /api/agents` : ce que représente chaque champ, son format de stockage, s’il s’agit uniquement de métadonnées ou s’il est utilisé par le démon au moment de la réclamation, quelles entrées sont validées ou rejetées, comment les secrets `custom_env` sont gérés, et comment fonctionne la liaison de compétences. Ne s’applique pas à l’attribution de tâches à des agents existants ni aux invites de tâches en cours d’exécution.

...Développer tout
80
Heure mise à jour 12 août 2026

Création d'agents Multica

Voici le contrat relatif au processus de création d’agents Multica : ce que les points d’entrée de création acceptent, ce que le serveur valide et rejette, comment chaque champ est stocké, et quels champs le démon lit réellement au moment de la réclamation. Il ne s’agit pas d’un manuel des paramètres — il énonce des faits tracés à partir du code source, et chaque affirmation est étayée par une référence « fichier:ligne » dans references/creating-agents-source-map.md.

Démarrage rapide (inspection en lecture seule)

Ces commandes lisent l’état et n’ont aucun effet secondaire :

multica agent get  --output json      # enregistrement complet de l’agent persisté
multica agent skills list  --output json   # liaisons de compétences actuelles
multica agent env get  --output json  # environnement en texte clair (propriétaire/administrateur uniquement, accès refusé aux agents)

La commande «agent get » renvoie l’agent enregistré, y compris les champs runtime_id, model, thinking_level, service_tier, custom_args, has_custom_env, custom_env_key_count et skills. Elle ne renvoie jamais le champ custom_env en texte clair.

Modèle de base

Un agent est une ligne au niveau de l’espace de travail (table agent). Sa création s’effectue via une seule requête POST /api/agents (multica agent create). Au moment de la réclamation d’une tâche, le démon relit la ligne de l’agent et assemble la charge utile d’exécution — ce sont donc les champs persistés, et non la sortie au moment de la création, qui servent de base à l’exécution de l’agent.

Deux champs de texte distincts, souvent confondus :

  • « description » est un résumé du catalogue. Elle est stockée et affichée dans les listes ; le démon ne l’injecte PAS dans l’invite d’exécution de l’agent. Considérez-la uniquement comme des métadonnées destinées à l’utilisateur. Limitée à 255 points de code Unicode.
  • «instructions » correspond au contrat de comportement d’exécution. Le démon le lit au moment de la demande et le transmet au fournisseur en tant qu’instructions persistantes de l’agent. Le persona, les responsabilités, les limites, la sortie et les règles d’escalade doivent figurer ici, et non dans la « description ».

Points d’entrée CLI / API

Appel minimal de création (--name et --runtime-id sont tous deux obligatoires) :

multica agent create --name  --runtime-id  \
  --description "" \
  --instructions "" \
  --output json

runAgentCreate construit un corps JSON et l’envoie à /api/agents. Il n’ ajoute une clé que lorsque son indicateur a été fourni —description/instructions avec une valeur non vide ; le reste (runtime-config, custom-args, model, thinking-level, service-tier, visibility, …) est pris en compte si l’indicateur est Changed — ainsi, les indicateurs omis reprennent les valeurs par défaut du serveur plutôt que d’envoyer des chaînes vides.

Le corps HTTP (CreateAgentRequest) accepte : name, description, instructions, avatar_url, runtime_id, runtime_config, custom_env, custom_args, model, thinking_level, service_tier, visibility, max_concurrent_tasks, mcp_config.

Contrats de champs

Valeurs par défaut en cas d’omission : runtime_config{}, custom_env{}, custom_args[], avatar_url → un emoji aléatoire :, visibilityprivate, max_concurrent_tasks6 (tous matérialisés côté serveur avant l’insertion).custom_args/runtime_config sont de type []string/any et marshalés tels quels — le rejet lié à la structure JSON a lieu dans la CLI, et non dans le gestionnaire de création.

thinking_level n’est validé qu’au niveau du fournisseur : les fournisseurs à catalogue fixe rejetent un littéral non reconnu, tandis que les fournisseurs à catalogue dynamique tels que Codex/OpenCode acceptent un jeton syntaxiquement valide. Une valeur non prise en charge par le modèle choisi n’est PAS rejetée ici — le démon vérifie son catalogue de modèles local au moment de l’exécution, consigne un avertissement et omet la redéfinition incompatible.

Définissez-le depuis l’interface CLI avec l’option --thinking-level lors de la création et de la mise à jour d’un agent, à l’instar de --model: ce drapeau sert simplement de relais vers le champ de niveau supérieur thinking_level, et lors d’une mise à jour, une chaîne vide (--thinking-level "") le réinitialise à la valeur par défaut du runtime. L’interface en ligne de commande (CLI) ne répertorie délibérément pas les niveaux valides — ceux-ci sont spécifiques au runtime et au modèle (Claude utilise actuellement low|medium|high|xhigh|max; les valeurs de Codex sont déterminées à partir du catalogue de modèles du runtime). Elle transmet le jeton, le serveur applique le filtre « fixed-enum » ou « safe-token » du fournisseur, et le démon effectue la vérification exacte du modèle et du niveau. Un runtime dont le fournisseur ne dispose pas de concept de réflexion rejette toute valeur non vide avec un code d’erreur 400.

service_tier est le contrôle de vitesse Codex de première classe correspondant. Définissez-le avec --service-tier lors de la création/mise à jour ; utilisez --service-tier "" lors de la mise à jour pour l’effacer. Le catalogue de modèles du runtime gère à la fois la disponibilité et la copie d’affichage (actuellement « priority », affichée comme « Fast »). Le serveur accepte les identifiants de catalogue Codex futurs sûrs, tandis que le démon vérifie la paire modèle/niveau exacte avant l’exécution et omet toute redéfinition obsolète et incompatible. Les agents sans modèle explicite échouent en état « closed » car le modèle effectif de config.toml est inconnu.

modèle vs custom_args

« model » est une colonne persistante de premier ordre que le démon lit directement. Les `custom_args` sont des arguments bruts de l’interface CLI du fournisseur. L’aide de la CLI indique que certains fournisseurs (codex app-server, openclaw) rejettent l’option `--model` dans les `custom_args` — mais il s’agit d’une recommandation documentée de la CLI, et non d’une contrainte imposée par le serveur ; rien dans le gestionnaire de création n’inspecte les `custom_args` à la recherche d’un indicateur de modèle.

Environnement et secrets

`custom_env` contient des informations confidentielles. L’interface CLI propose trois canaux d’entrée ; deux d’entre eux permettent de garder les secrets hors de l’historique du shell et de la liste des processus :

multica agent create --name  --runtime-id  --custom-env-stdin --output json
multica agent create --name  --runtime-id  --custom-env-file <0600-json> --output json

--custom-env-stdin lit l’objet JSON à partir de l’entrée standard ; --custom-env-file le lit à partir d’un fichier (mode recommandé : 0600). Le troisième canal, --custom-env , place la valeur sur la ligne de commande où l’historique du shell et la commande ps peuvent la voir — à éviter pour les véritables secrets.

Faits relatifs à la lecture (voici les hypothèses erronées à éviter) :

  • Les ressources de l’agent n’exposent jamais custom_env en clair. Les commandes agent list/get/create/update et les événements WS renvoient uniquement has_custom_env (booléen) et custom_env_key_count (entier).
  • La lecture des valeurs en clair nécessite l’utilisation du point de terminaison GETdédié /api/agents/{id}/env (multica agent env get). Son accès est réservé au propriétairede l’espace de travail etaux membres administrateurs, et les agents n’y ont pas accès, quel que soit le rôle du membre à l’origine de la requête — un agent en cours d’exécution ne peut pas lire les secrets d’un autre agent.
  • L’écriture de valeurs après la création ne passe PAS par la mise à jour de l’agent. Le gestionnaire de mise à jour générique rejette tout champ `custom_env` avec un code d’erreur 400 (« utilisez PUT /api/agents/{id}/env »). Les écritures d’environnement en texte clair sont gérées par PUT /api/agents/{id}/env (définition de l’environnement d’un agent Multica), qui est réservée au propriétaire ou à l’administrateur et génère une ligne d’audit.

mcp_config

mcp_config correspond à la configuration du serveur MCP de l’agent (un objet JSON tel que {"mcpServers": {…}}). Il s’agit également d’informations confidentielles — les entrées MCP intègrent systématiquement des jetons API — et offre les trois mêmes canaux d’entrée que custom_env, aussi bien lors dela création que de la mise à jour de l’agent:

multica agent create --name  --runtime-id  --mcp-config-file <0600-json> --output json
multica agent update  --mcp-config-stdin --output json
multica agent update  --mcp-config 'null'   # efface la configuration

--mcp-config-stdin / --mcp-config-file: permet de ne pas enregistrer la valeur dans l’historique du shell ni dans ps; ce n’est pas le cas avec l’option en ligne --mcp-config . L'interface CLI requiert unobjet JSON ou la valeur littérale null; un tableau de niveau supérieur ou une valeur primitive est rejeté côté client, et une entrée stdin/fichier vide génère une erreur plutôt que d'effacer silencieusement la configuration.

Deux différences entre mcp_config et custom_env:

  • Il PEUT être configuré via la mise à jour de l’agent. Contrairement à custom_env, mcp_config ne dispose pas d’un point de terminaison audité dédié — la requête PUT générique /api/agents/{id} l’accepte. Trois états possibles selon le corps brut de la requête : champ omis → aucun changement ; null → effacement ; objet → remplacement.
  • Il est sérialisé à la lecture, mais expurgé.Les méthodes get/list de l’agent renvoient mcp_config uniquement aux appelants autorisés à consulter les secrets de l’agent ; sinon, le champ est null et mcp_config_redacted est vrai. Les acteurs de l’agent ne le voient jamais , et un espace de travail peut forcer l’expurgation pour tout le monde.

La prise en charge par les fournisseurs n’est pas uniforme : Qwen Code accepte un mcp_config géré via un fichier JSON temporaire 0600 appartenant au démon et transmis avec l’option --mcp-config; il est supprimé à la fin de l’exécution. Laissez le champ non défini (null) pour hériter des paramètres natifs de Qwen Code.

Liaison des compétences

La création d’un agent ne lie AUCUNE compétence de l’espace de travail — le liaison est un appel distinct effectué après la création de l’agent. Deux verbes distincts :

  • add est additif — il fusionne les identifiants fournis avec les liaisons existantes (POST /api/agents/{id}/skills/add).
  • set remplace tout — il écrase l’intégralité de la liste de liaisons par exactement les identifiants fournis (PUT /api/agents/{id}/skills) ; --skill-ids '' efface tout.
multica agent skills add  --skill-ids  --output json
multica agent skills list  --output json

Au moment de la requête, le démon assemble d’abord les compétences de l’agent en tant que compétences liées à l’espace de travail, puis ajoute les compétences intégrées à la plateforme. La fonction `LoadAgentSkills` charge le contenu de chaque compétence liée ainsi que ses fichiers associés ; les compétences intégrées sont intégrées au moment de la compilation et chargées à partir du fichier `SKILL.md` et des fichiers associés. Les deux parviennent au fournisseur sous forme de contenu de compétence — c’est pourquoi la capacité doit figurer dans une compétence liée, et non être insérée dans les instructions.

Effets secondaires nécessitant une validation

En lecture seule (sans risque) : récupération de l’agent, liste des compétences de l’agent, récupération de l’environnement de l’agent.

Modification d’état (nécessite une instruction explicite — ne pas exécuter de manière spéculative) :

  • multica agent create — insère une nouvelle ligne d’agent.
  • multica agent skills add / set — modifie les liaisons (set est destructif : il supprime les liaisons qui ne figurent pas dans la nouvelle liste).
  • multica agent env set — écrase l’intégralité de la carte custom_env et écrit une ligne d’audit.

Idées fausses courantes

  • «La description correspond à l’invite. » Ce n’est pas le cas — seules les instructions parviennent à l’ environnement d’exécution. Une description détaillée avec des instructions vides génère un shell nommé sans contrat d’exploitation.
  • « La commande create lie les compétences de l’agent. » Ce n’est pas le cas ; effectuez la liaison explicitement par la suite.
  • «La mise à jour de l’agent peut modifier l’environnement. » Ce n’est pas le cas — elle renvoie un code d’erreur 400 sur custom_env; utilisez le point de terminaison env.
  • «mcp_config se comporte comme custom_env lors d’une mise à jour. » Ce n’est pas le cas — mcp_config PEUT être configuré via agent update (--mcp-config), avec --mcp-config null pour effacer ; seul custom_env est géré par le point de terminaison env dédié.
  • «La commande get de l’agent affiche les valeurs d’environnement. » Elle n’affiche que has_custom_env et custom_env_key_count.
  • « Une combinaisonthinking_level/model non valide est détectée lors de la création. » Seul un littéral inconnu au niveau du fournisseur l’est — les incohérences spécifiques au modèle échouent lors de l’exécution.
  • «set et add sont interchangeables pour les compétences. » set remplace toutes les liaisons ; l’utiliser alors que vous vouliez utiliser add supprime silencieusement des capacités.

Références

references/creating-agents-source-map.md établit une correspondance entre chaque contrat ci-dessus et son fichier : ligne dans l’arborescence actuelle, l’effet en exécution et une commande de vérification sûre en lecture seule.

Voir sur GitHub

Creating Multica agents

This is the contract for Multica's agent-creation path: what the create entry points accept, what the server validates and rejects, how each field is persisted, and which fields the daemon actually reads at claim time. It is not a parameter manual — it states source-traced facts, and every claim is backed by file:line in references/creating-agents-source-map.md.

Quick start (read-only inspection)

These commands read state and have no side effects:

multica agent get <agent-id> --output json      # full persisted agent record
multica agent skills list <agent-id> --output json   # current skill bindings
multica agent env get <agent-id> --output json  # plaintext env (owner/admin only, agents denied)

agent get returns the persisted agent including runtime_id, model, thinking_level, service_tier, custom_args, has_custom_env, custom_env_key_count, and skills. It never returns plaintext custom_env.

Core model

An agent is a workspace-scoped row (table agent). Creation is a single POST /api/agents (multica agent create). At task claim time the daemon re-reads the agent row and assembles the runtime payload — so the persisted fields, not the create-time output, are what the agent runs on.

Two distinct text fields, often confused:

  • description is a catalog summary. It is stored and shown in listings; the daemon does NOT inject it into the agent's runtime prompt. Treat it as human-facing metadata only. Capped at 255 Unicode code points.
  • instructions is the runtime behavior contract. The daemon reads it at claim time and ships it to the provider as the agent's durable instructions. Persona, responsibilities, boundaries, output and escalation rules go here, not in description.

CLI / API entry points

Minimum create call (--name and --runtime-id are both required):

multica agent create --name <name> --runtime-id <runtime-id> \
  --description "<short catalog summary>" \
  --instructions "<runtime behavior contract>" \
  --output json

runAgentCreate builds a JSON body and posts it to /api/agents. It only adds a key when its flag was provided — description/instructions on a non-empty value, the rest (runtime-config, custom-args, model, thinking-level, service-tier, visibility, …) on the flag being Changed — so omitted flags fall through to server defaults rather than sending empty strings.

The HTTP body (CreateAgentRequest) accepts: name, description, instructions, avatar_url, runtime_id, runtime_config, custom_env, custom_args, model, thinking_level, service_tier, visibility, max_concurrent_tasks, mcp_config.

Field contracts

Defaults when omitted: runtime_config{}, custom_env{}, custom_args[], avatar_url → a random emoji:<glyph>, visibilityprivate, max_concurrent_tasks6 (all materialized server-side before the insert). custom_args/runtime_config are typed []string/any and marshaled as-is — the JSON-shape rejection happens in the CLI, not the create handler.

thinking_level is validated only at the provider level: fixed-catalog providers reject an unrecognized literal, while dynamic-catalog providers such as Codex/OpenCode accept a syntactically safe token. A value unsupported for the chosen model is NOT rejected here — the daemon checks its local model catalog at execution time, logs a warning, and omits the incompatible override.

Set it from the CLI with --thinking-level on agent create and agent update, mirroring --model: the flag is a thin pass-through to the top-level thinking_level field, and on update an empty string (--thinking-level "") clears it back to the runtime default. The CLI deliberately does not enumerate the valid levels — they are runtime/model-specific (Claude currently uses low|medium|high|xhigh|max; Codex values are discovered from the runtime's model catalog). It forwards the token, the server applies the provider's fixed-enum or safe-token gate, and the daemon performs the exact model/level check. A runtime whose provider has no thinking concept rejects any non-empty value with a 400.

service_tier is the matching first-class Codex speed control. Set it with --service-tier <catalog-id> on create/update; use --service-tier "" on update to clear it. The runtime model catalog owns both availability and display copy (currently priority, shown as Fast). The server accepts safe future Codex catalog IDs, while the daemon verifies the exact model/tier pair before execution and omits a stale incompatible override. Agents without an explicit model fail closed because the effective config.toml model is unknown.

model vs custom_args

model is a first-class persisted column the daemon reads directly. custom_args are raw provider CLI args. The CLI help notes that some providers (codex app-server, openclaw) reject --model inside custom_args — but that is documented CLI guidance, not a server-enforced invariant; nothing in the create handler inspects custom_args for a model flag.

Env & secrets

custom_env is secret material. The CLI offers three input channels; two keep secrets out of shell history and the process list:

multica agent create --name <name> --runtime-id <runtime-id> --custom-env-stdin --output json
multica agent create --name <name> --runtime-id <runtime-id> --custom-env-file <0600-json> --output json

--custom-env-stdin reads the JSON object from stdin; --custom-env-file reads it from a file (suggested mode 0600). The third channel, --custom-env <json>, puts the value on the command line where shell history and ps can see it — avoid it for real secrets.

Read-side facts (these are the wrong assumptions to avoid):

  • Agent resources never expose plaintext custom_env. agent list/get/create/update and WS events return only has_custom_env (bool) and custom_env_key_count (int).
  • Reading plaintext values requires the dedicated GET /api/agents/{id}/env endpoint (multica agent env get). It is gated to workspace owner/admin members, and agent actors are denied regardless of the backing member's role — a running agent cannot read another agent's secrets.
  • Writing values after creation does NOT go through agent update. The generic update handler rejects any custom_env field with a 400 ("use PUT /api/agents/{id}/env"). Plaintext env writes are handled by PUT /api/agents/{id}/env (multica agent env set), which is owner/admin-only and writes an audit row.

mcp_config

mcp_config is the agent's MCP server configuration (a JSON object such as {"mcpServers": {…}}). It is also secret material — MCP entries routinely embed API tokens — and offers the same three input channels as custom_env, on BOTH agent create and agent update:

multica agent create --name <name> --runtime-id <runtime-id> --mcp-config-file <0600-json> --output json
multica agent update <agent-id> --mcp-config-stdin --output json
multica agent update <agent-id> --mcp-config 'null'   # clears the config

--mcp-config-stdin / --mcp-config-file keep the value out of shell history and ps; the inline --mcp-config <json> does not. The CLI requires a JSON object or the literal null; a top-level array or primitive is rejected client-side, and empty stdin/file input errors rather than silently clearing.

Two ways mcp_config differs from custom_env:

  • It IS settable through agent update. Unlike custom_env, mcp_config has no dedicated audited endpoint — the generic PUT /api/agents/{id} accepts it. Tri-state per the raw request body: field omitted → no change; null → clear; object → replace.
  • It is serialized on read, but redacted. agent get/list return mcp_config only to callers allowed to view agent secrets; otherwise the field is null and mcp_config_redacted is true. Agent actors never see it, and a workspace may force redaction for everyone.

Provider support is not uniform: Qwen Code accepts a managed mcp_config through a daemon-owned 0600 temporary JSON file passed with --mcp-config; it is removed when the run exits. Leave the field unset (null) to inherit Qwen Code native settings.

Skill binding

Creating an agent does NOT bind any workspace skill — binding is a separate call after the agent exists. Two distinct verbs:

  • add is additive — it merges the given ids with existing bindings (POST /api/agents/{id}/skills/add).
  • set is replace-all — it overwrites the entire binding list with exactly the given ids (PUT /api/agents/{id}/skills); --skill-ids '' clears all.
multica agent skills add <agent-id> --skill-ids <skill-id> --output json
multica agent skills list <agent-id> --output json

At claim time the daemon assembles the agent's skills as workspace-bound skills FIRST, then appends the platform built-in skills. LoadAgentSkills loads each bound skill's content plus its supporting files; built-in skills are embedded at compile time and loaded from SKILL.md + sibling files. Both reach the provider as skill content — which is why capability belongs in a bound skill, not pasted into instructions.

Side effects needing approval

Read-only (safe): agent get, agent skills list, agent env get.

State-changing (require an explicit instruction — do not run speculatively):

  • multica agent create — inserts a new agent row.
  • multica agent skills add / set — mutate bindings (set is destructive: it drops bindings not in the new list).
  • multica agent env set — overwrites the full custom_env map and writes an audit row.

Common wrong assumptions

  • "description is the prompt." It is not — only instructions reaches the runtime. A rich description with empty instructions yields a named shell with no operating contract.
  • "Create binds the agent's skills." It does not; bind explicitly afterward.
  • "agent update can rotate env." It cannot — it 400s on custom_env; use the env endpoint.
  • "mcp_config behaves like custom_env on update." It does not — mcp_config IS settable via agent update (--mcp-config), with --mcp-config null to clear; only custom_env is gated behind the dedicated env endpoint.
  • "agent get shows env values." It shows only has_custom_env and custom_env_key_count.
  • "An invalid thinking_level/model combo is caught at create." Only an unknown provider-level literal is — model-specific gaps fail at run time.
  • "set and add are interchangeable for skills." set replaces all bindings; using it when you meant add silently removes capabilities.

References

references/creating-agents-source-map.md maps every contract above to its file:line on the current tree, the runtime effect, and a safe read-only verification command.

Tous les fichiers

0 fichiers

Installer multica-creating-agents

Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.

Télécharger le ZIP

Clonez le dépôt et copiez les fichiers de compétence dans votre projet.

git clone https://github.com/multica-ai/multica/tree/main/server/internal/service/builtin_skills/multica-creating-agents # Copy the skill folder to .claude/skills/ or .codex/skills/

Copier Copier
Configuration rapide: Copiez le dossier de la compétence dans .claude/skills/ ; Claude la détectera automatiquement et l'utilisera.

Compétences similaires

tilemaps
Heure mise à jour 4 août 2026
v4-new-features
Heure mise à jour 4 août 2026
agent-github-pr-manager
Heure mise à jour 3 août 2026
pixijs-application
Heure mise à jour 4 août 2026
OR