Récupère la seule note de design de la branche feature/agent-skill-awareness (5be8987), hors bruit runtime .ideai. Documente la conception du manifeste de skills, de l'outil MCP idea_skill_read et du brief « capacités IdeA ». Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6.7 KiB
name, description, metadata
| name | description | metadata | ||
|---|---|---|---|---|
| feature-agent-skill-awareness-design | Design valide + decoupage de la feature « surfacer les skills assignes a un agent a la maniere MCP » (manifeste + idea_skill_read), a reprendre apres relance IdeA. |
|
Feature : skills connus de l'agent « a la MCP »
Demarree le 2026-06-17. Branche Git feature/agent-skill-awareness (basee sur develop @ 8452333, qui contient deja le fix context-guard).
ETAT 2026-06-17 (apres-midi) : slice backend T1->T5 FAIT, VERT, COMMITTE.
DevBackend a livre T1->T5, QA a couvert (23 tests, 1212 passed). Commits sur feature/agent-skill-awareness :
ab34363feat(skill-awareness): T1->T5 (manifeste # Skills disponibles + outil MCP idea_skill_read, description+effective_description, use case ReadSkill, cablage state.rs, dump legacy conserve en mode sans-MCP).1a10d67fix(test): compteur d'outils MCP 11->12 (une 2e assertion codee en dur danscrates/app-tauri/src/state.rs~l.2813 que QA avait ratee ; QA n'avait corrige queinfrastructure/tests/mcp_server.rs).e93a2c1= cherry-pick du fix cold-start (cf. Bug 8 dans mcp-bridge-and-delegation-runtime-notes) — present aussi sur la branche dediee.cargo test --workspaceVERT sur l'arbre combine. L'orchestrateur a committe lui-meme (l'agent Git etait injoignable a cause du Bug 8) — A FAIRE RELIRE/REBASER PAR GIT une fois le canal restaure.
RESTE : T6 (champ description dans creation/edition skill cote front) + T7 (e2e : rebuild AppImage avec le fix Bug 8, relance, agent neuf + skill assigne -> voit le manifeste + appelle idea_skill_read). Puis Git decide les merges (feature->develop ; fix cold-start->develop+main).
AJOUT 2026-06-17 (soir) : brief « capacites IdeA » INCONDITIONNEL — VERT, COMMITTE (566bff4)
Besoin utilisateur elargi : un agent neuf ignorait TOUT le perimetre IdeA (pas que les skills). Cas vecu : « agremente le contexte du projet » -> l'agent reinvente son propre systeme de contexte car le bloc # Orchestration IdeA ne parlait QUE de delegation. Fix (GO Architect, meme fonction pure compose_convention_file lifecycle.rs, zero port/entite) : ajout d'un brief « capacites IdeA » TOUJOURS present (decrit la CAPACITE, jamais le contenu -> survit a memoire/contexte vides), dans les 2 surfaces, AVANT le persona :
- mode MCP : nomme les outils contexte (
idea_context_read/idea_context_proposeavec semantique single-writer global HONNETE : proposition sans target = enregistree pour validation, PAS appliquee ;idea_update_contextpour le .md d'un agent), memoire partagee (idea_memory_read/idea_memory_write), skills (idea_skill_read/idea_create_skill). Martele « le contexte projet d'IdeA EST le contexte, n'improvise jamais ton propre fichier ». - mode non-MCP : MEMES concepts via fichiers
.ideai/UNIQUEMENT (CONTEXT.md, memory/+MEMORY.md, skills .md), AUCUN nom d'outilidea_*(cloisonnement strict des 2 surfaces — sinon cassemcp_prose_*/non_mcp_prose_*). QA : 5 tests dedies (brief inconditionnel des 3 capacites a zero contenu ; single-writer honnete ; non-MCP sans outil ; cloisonnement ; ordre avant persona).cargo test -p application= 0 failed (lib 52, agent_lifecycle 59). 1 assert existant adapte (mcp_mode_without_skills_omits_section). Commit atomique 566bff4 surfeature/agent-skill-awareness(Git a laisse les .ideai/ runtime hors commit). Merge feature->develop differe par Git jusqu'a T6+T7 (unite d'integration unique).
Historique
Cycle initialement stoppe avant le code : la delegation MCP a wedge (Bug 7, puis Bug 8 residuel cf. mcp-bridge-and-delegation-runtime-notes).
Besoin
Un agent neuf dans un projet neuf ignore les skills qui lui sont assignes (cas vecu : build-appimage assigne mais ignore, tout reinvente). Objectif : l'agent est automatiquement au courant de ses skills, comme il l'est des outils MCP, sans que l'utilisateur ait a le lui dire.
Decision produit (utilisateur, 2026-06-17) : approche « Manifeste + idea_skill_read »
Diagnostic Architect : les skills sont DEJA injectes, mais (A) en VRAC (corps complet) en fin de CLAUDE.md -> lus comme de la doc, ignores ; (B) seulement au (re)lancement. On recadre « a la MCP » : affordances nommees+decrites en tete de contexte + chargement du corps a la demande.
- Bloc « # Skills disponibles » injecte JUSTE APRES le bloc « # Orchestration IdeA » (haute altitude), listant
**<name>** — <description>; prose imperative + renvoi aidea_skill_read(name=…). Omis si zero skill. - Nouvel outil MCP
idea_skill_read(name)read-only, miroir exact deidea_context_read/idea_memory_read; resout par nom (scope projet puis global), renvoiecontent_mdinline ; erreur typee si introuvable/ambigu. - Champ
description: Option<String>sur l'entiteSkill+ helpereffective_description()(fallback : 1ere ligne non vide ducontent_md, nettoyee du#).#[serde(default)]sur l'index (retro-compatindex.jsonlegacy obligatoire). - Mode sans MCP (
profile.mcpabsent) : conserver l'ancien dump du corps complet (decision 4.2(b), zero regression).
Decoupage (commits atomiques par tache verte, decides par Git)
- T1 domaine
crates/domain/src/skill.rs: champdescription+effective_description(). - T2 store
crates/infrastructure/src/store/skill.rs(+ application/skill) :descriptiondans IndexEntry (serde(default)), propage viaCreateSkill. - T3 convention-file
crates/application/src/agent/lifecycle.rs: section « # Skills disponibles » danscompose_convention_file(~l.2568, juste apres bloc Orchestration ~l.2586) ; allegerresolve_skills(~l.1202) pour n'utiliser que name+description (index, pas le corps) ; garder dump corps si non-MCP. - T4 outil MCP
crates/infrastructure/src/orchestrator/mcp/tools.rs+ commandeOrchestratorCommand::ReadSkill { name, requester }+ methoderead_skilldansOrchestratorService+ petit use caseReadSkill(compose le portSkillStoreexistant, AUCUN nouveau port). - T5 cablage
crates/app-tauri/src/state.rs: injecterReadSkilldansOrchestratorService(builder additif, comme le fix context-guard) + re-exports application (orchestrator/mod.rs + lib.rs). - T6 front (differable)
frontend: champ description dans creation/edition de skill. - T7 e2e : rebuild AppImage + relance, agent neuf + skill assigne -> voit le manifeste + appelle
idea_skill_read.
Pieges (Architect)
Retro-compat index.json (serde default) ; resolution de nom ambigue (projet d'abord, erreur typee sinon) ; un skill assigne en cours de session reste invisible jusqu'au relaunch (limite inherente, comme MCP) ; pas de nouveau port, domaine = +1 champ, composition root seul point de cablage. GO Architect.