docs(agents): update AGENTS.md as sole session-context reference#12
Merged
Conversation
GoldenFarFR
commented
Jul 6, 2026
Owner
- retire la mention de Grok comme arbitre technique
- ajoute la raison obligatoire quand une donnée est jugée insuffisante
- précise qu'Invest_Prompt_v4.txt peut être amélioré
- ajoute une limite stricte de ~100 tokens par réponse et un seuil d'alerte 20 messages / 50k tokens
- retire la mention de Grok comme arbitre technique - ajoute la raison obligatoire quand une donnée est jugée insuffisante - précise qu'Invest_Prompt_v4.txt peut être amélioré - ajoute une limite stricte de ~100 tokens par réponse et un seuil d'alerte 20 messages / 50k tokens
Analyse les top holders d'un token via BlockscoutClient selon les 4 criteres croises documentes dans AGENTS.md (coherence temporelle, entree precoce + controlee, sortie disciplinee, concentration multi-wallets). Exclut les faux signaux evidents (wash-trading, wallets contrat). Signal purement additif au security_score existant, jamais un declencheur de trade. Desactive par defaut dans scan_base_token (cout API par wallet) ; activable via /scan <adresse> smart cote Telegram. Met a jour AGENTS.md : la brique Blockscout + wallet-tracker est marquee faite, la "prochaine brique prioritaire" est ouverte a validation.
Nouveau services/coingecko.py, meme patron que blockscout.py : throttle
~2.2s (tier public), politique d'erreurs 429/timeout identique, jamais de
supposition sur donnee absente. Recupere market cap, FDV, supply,
categories, whitepaper via /coins/base/contract/{adresse}.
Integration additive et opt-in dans scan_base_token (include_fundamentals) :
seul un ratio FDV/market cap >= 3x (dilution future significative) degrade
le score ; l'absence de donnee ne penalise jamais. Active cote Telegram via
/scan <adresse> fond.
…tat -> lecon) Nouveau investment_memory.py : table SQLite investment_thesis dans aria.db (CREATE TABLE IF NOT EXISTS, ajout pur sans migration). Journal local du raisonnement d'ARIA sur ses paris — aucune action financiere, aucun appel reseau. Cycle open -> closed avec transition atomique (un resultat n'est attribue qu'une fois, l'historique n'est jamais reecrit). Commandes Telegram admin (lecture/ecriture locale) : - /these <adresse> <BUY|WATCH|SELL|AVOID> <these> : journalise un pari - /issue <id> <resultat/P&L> | <lecon> : cloture et attribue l'issue - /theses : liste les theses ouvertes Prerequis d'un scoring VC qui apprend de ses erreurs (regle "auto-critique honnete" d'AGENTS.md). 19 tests, tous verts.
Nouveau skills/vc_analysis.py : produit une analyse VC (Invest_Prompt_v4 : Potentiel 0-10, Risque, These, Recommandation) + une proposition d'ordre, a partir des briques deja construites (scan on-chain, fondamentaux, smart-money, historique des theses). Dome de securite (toutes les defenses testees) : - entree hostile encapsulee <donnees_non_fiables>, system prompt anti-injection - code source contrat jamais transmis (seuls les booleens d'audit) - sortie LLM en JSON strict, parsing defensif, clamp score 0-10, allowlist recommandation, plafond dur taille 10%/position, troncatures - anti-hallucination : tout critere non sourcable = "donnee insuffisante" - zero chemin financier (test AST verifie l'absence d'import wallet/execution) - degradation sure : LLM off/erreur/non-parsable => fallback deterministe conservateur (jamais de BUY sans analyse qualitative) Modele retenu : tier "develop" = anthropic-claude-opus-4-8 via Spark (deepseek -v4-pro etant banni comme primaire Virtuals). 28 tests, tous verts.
/vc <adresse> lance analyze_vc et renvoie un ordre concis (reco, potentiel, risque, taille suggeree en % du capital, entree/invalidation/cible, these). format_telegram_order testable independamment. L'ordre est toujours une PROPOSITION : disclaimer "validation et execution manuelle sur Tangem, aucune execution automatique" present sur chaque reco. Fallback LLM signale explicitement. 7 tests, tous verts.
Nouveau skills/vc_report.py : render_html_report() produit un document HTML autonome (CSS inline, aucun asset externe) pret pour l'email et le futur site — en-tete ARIA Vanguard ZHC, badges Potentiel/Risque/Reco, encart ordre propose, section "donnees insuffisantes", corps mini-markdown, disclaimer. Securite (extension du dome au rendu) : tout champ dynamique est HTML-echappe avant injection ; le mini-markdown n'emet que des balises controlees. Une sortie LLM hostile (issue de donnees non fiables) est neutralisee — testes d'echappement XSS inclus. 8 tests, tous verts. L'envoi SMTP reste a faire (Etape C-envoi, en attente de l'App Password Gmail).
…arde-fous Nouveau services/mailer.py : transport SMTP+STARTTLS (ou SSL 465), config lue uniquement depuis l'environnement (ARIA_SMTP_*), TLS avec verification de certificat. Le mot de passe n'apparait dans aucun log ni aucune erreur (redaction + messages nettoyes). send_email ne leve jamais, smtplib synchrone passe par asyncio.to_thread. Nouveau skills/vc_delivery.py : orchestration rendu + envoi, sous kill-switch fail-closed (is_paused strict=True) verifie AVANT tout envoi. Degradation sure si SMTP non configure. Destinataire ARIA_VC_REPORT_TO (defaut ARIA_SMTP_USER). /vc envoie desormais l'ordre court sur Telegram puis le rapport detaille par email, en signalant le statut d'envoi. Aucun secret requis cote code : les variables ARIA_SMTP_* sont posees sur le VPS par l'operateur. 22 tests, verts.
… (audit HIGH) Faille (confirmee par audit adversarial) : _sanitize() ne neutralisait pas la chaine litterale </donnees_non_fiables>. Un token hostile dont le symbole (controle par le deployeur, renvoye brut par DexScreener puis injecte dans un risk_flag) contient cette balise de fermeture pouvait terminer prematurement la zone non fiable, faisant apparaitre son texte HORS des balises, au niveau des instructions du prompt — contournant la regle 1 du system prompt. Correctif au point d'etranglement unique (_sanitize, par lequel passent TOUTES les donnees non fiables) : neutralisation des chevrons < > (remplaces par ‹ ›), rendant toute forge de balise impossible. Les chevrons n'ont aucun usage legitime dans des metadonnees on-chain. + durcissement du system prompt (defense en profondeur : tout ce qui suit la 1re balise est traite comme donnee inerte). 3 tests de regression reproduisant l'attaque exacte. 23 tests vc_analysis verts.
…aj prochaines pistes
…inte SHA-256 Ajoute au pied du rapport HTML : - mention de copyright et de confidentialite (© Aria Vanguard ZHC, reproduction /rediffusion/revente interdites) — dissuasion legale ; - filigrane d'edition personnelle (destinataire + horodatage) rendant toute fuite tracable a qui a recu le rapport — cle pour le futur abonnement ; - empreinte SHA-256 deterministe du contenu (reference courte + hash complet), anti-falsification, variant par destinataire. render_html_report accepte desormais recipient (transmis par vc_delivery). Tout champ dynamique reste HTML-echappe (filigrane inclus). Note d'honnetete : un texte lisible n'est jamais 100% incopiable (capture/retape) ; ces mesures protegent la valeur et tracent les fuites, elles ne rendent pas la copie techniquement impossible. 7 tests ajoutes.
Nouveau vc_predictions.py : table vc_prediction (aria.db). Chaque /vc est auto-loggue comme prediction datee (meme sans trade = shadow), ce qui accelere l'accumulation d'un echantillon exploitable (a ~2 trades/mois, se limiter aux positions reelles serait trop lent pour mesurer quoi que ce soit). Metriques (fonction pure compute_metrics, testee) : hit-rate des BUY, P&L moyen, et courbe de CALIBRATION (le P&L moyen croit-il avec le Potentiel ? le vrai test d'un analyste). Commandes Telegram : /vcresult <id> <pnl%> [note] cloture une prediction avec son resultat reel ; /track affiche le track record. Transition open->closed atomique (jamais de reecriture d'un resultat). 7 tests + handlers.
Integre la nouvelle section "Politique de modeles, subagents & consommation" (Sonnet 5 xhigh par defaut, exception Opus zone rouge, code couleur simplifie, subagents researcher/security-auditor). Preserve les statuts FAIT du jour (memoire d'investissement + scoring VC + track record) que la version optimisee, basee sur une copie anterieure, marquait encore "a construire".
Design institutionnel navy+or : - embleme Aria Vanguard ZHC (PNG embarque en base64, aucun asset externe) - jauge de Potentiel (0-10) = point focal visuel (grand chiffre + barre segmentee or) - resume executif (TL;DR) en accroche, badge de confiance globale - scenarios chiffres bull/base/bear (cible, probabilite, confiance) - annexe methodologie & sources (transparence verifie vs suppose) - titres en serif Georgia, filets or Le moteur (vc_analysis) produit resume_executif, confiance_globale et scenarios ; ces champs passent le dome (allowlists, clamps, troncatures, neutralisation des chevrons). Tout champ dynamique reste HTML-echappe au rendu (tests XSS scenarios inclus). 64 tests VC verts.
Ajoute des media queries (max-width 480px) qui empilent les colonnes de scenarios et les KPI, replacent le badge de confiance sous le titre, et reduisent les marges sur petit ecran. Classes .wrap/.pad/.sc-col/.kpi/.hdr -badge + viewport + x-apple-disable-message-reformatting. Technique email robuste (Apple Mail, Gmail app iOS/Android). Le style est statique, aucun risque d'injection. Test responsive ajoute.
…d) sur tout livrable visuel
L'ombre portée à fort flou (10px) sur la carte pleine hauteur forçait un re-rendu à chaque frame de scroll sur mobile (à-coups). Remplacée par un liseré fin + ombre légère (3px), et ajout de -webkit-text-size-adjust. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
Ajoute upside_pct / downside_pct (bornés 0-2000 / 0-100) au schéma LLM et à VCResult, d'où une propriété rr = récompense/risque calculée uniquement quand les deux sont sourçables (sinon None — pas de ratio inventé, cohérent avec la règle anti-hallucination). R/R affiché aussi dans l'ordre Telegram. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
… qualité ») Grave la boussole produit : peu de capacités mais excellentes et vendables ; toute feature qui n'approfondit pas l'intelligence on-chain ou la qualité des rapports n'est pas construite. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
…lien site - email_subject/render_html_report affichent désormais la date en plus visible (13px, contraste renforcé) : un abonné doit pouvoir trier ses rapports. - Nouveau numéro « Rapport n°N » par token (vc_predictions.count_predictions_ for_contract) : distingue plusieurs analyses suivies du même token. - Nouveau « Série 00.0NN » : compteur global toutes analyses ARIA confondues (vc_predictions.total_predictions_count), format édition numérotée. - Lien ariavanguardzhc.com en haut à gauche du rapport (site en ligne, confirmé). - Tests : compteurs par contrat / globaux, format du numéro de série, ordre d'affichage série→rapport→date, câblage bout-en-bout dans /vc. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
- DexScreener expose déjà info.websites/socials par paire (site, X, Telegram, Discord...) : extraits sans nouvelle intégration ni clé (_extract_project_links). LinkedIn n'existe dans aucune source disponible — non câblé (pas d'invention via recherche floue, risque de lier la mauvaise entreprise). - Ces liens ne transitent JAMAIS par le LLM : dérivés directement du scan brut (_extract_verified_links), donc jamais générés/halluciné. Revalidation stricte du schéma http(s) à deux points (extraction DexScreener + juste avant le rendu HTML <a href>) — défense en profondeur contre une URL javascript:/data: glissée par un token hostile. - Nouvelle section « Références — vérifiez par vous-même » dans le rapport, clairement étiquetée « non vérifiées par ARIA ». - format_telegram_order accepte capital_usd (env ARIA_CAPITAL_USD) et calcule le montant réel de la position en $ — l'opérateur exécute manuellement sur Tangem, un montant net évite le calcul mental avant signature. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
Les scripts d'analyse ad-hoc lancés sans bootstrap.configure() retombent sur un chemin relatif data/.aria-test-data/GoldenFar — purs artefacts de test local, jamais du travail réel. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
…piloté par les données Réécriture complète de render_html_report : la maquette validée « B4 » (hero sombre goutte+wordmark ARIA, corps ivoire, pied certificat) est désormais produite par le VRAI code, chaque valeur pilotée par un champ de VCResult au lieu d'être codée en dur. Sécurité (dôme, double couche) : tout champ dynamique HTML-échappé via _esc au rendu (titre/symbole aux 4 points d'injection, pastilles, en-têtes, montants, scénarios, liens) ET sanitizé en amont (symbol via _project_symbol/_sanitize, neutralise les chevrons). Couleurs/libellés de structure = allowlists indexées par une valeur déjà clampée, jamais une chaîne LLM. rapport_detaille rendu uniquement via _render_markdown_body. Liens revalidés http(s). Honnêteté (facts-only) : bloc R/R masqué si ratio non estimable ; section « Potentiel en $ » seulement si capital fourni ; projection temporelle OMISE (moteur #5 pas construit — pas de montants inventés, TODO en place) ; qualificatif R/R dérivé du vrai ratio ; réf = vrai hash SHA-256. - vc_analysis : champ symbol (depuis ctx.best_pair.base_symbol, sanitizé) - vc_delivery/telegram_bot : capital_usd threadé jusqu'au rendu - tests : réécrits pour le nouveau markup, mêmes garanties d'échappement + cas R/R absent, capital_usd, pas de projection Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
… sans motif répété Le scroll saccadait sur mobile (« dessine ligne par ligne ») : le hero empilait 7 dégradés (4 rais de lumière + 2 halos radiaux + fond nuit) re-rastérisés à chaque frame, et les 2 bandes guilloché utilisaient repeating-linear-gradient (motif hachuré très coûteux). Hero réduit à 2 couches (fond nuit + un halo doré), repeating-linear-gradient retirés (bande dégradée lisse conservée). Look sombre premium préservé, coût de rendu très réduit. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
… scroll mobile Deux éditions du rapport pilotées par un paramètre `tier` : - premium (navy/or/émeraude) : rapport complet. - standard (rose/vert/or) : sections Analyse détaillée / Méthodologie / Références masquées, remplacées par une ligne d'incitation ; bandeau de tier affiché en haut à gauche sous le lien du site. Thème sélectionné via une allowlist fermée `_TIER_THEMES` / `_theme(tier)` — tout tier invalide retombe sur premium (dégradation sûre). Correctif performance scroll mobile (Gmail WebView « dessine ligne par ligne ») : suppression des 3 `radial-gradient` (hero premium, hero standard, wrapper externe), remplacés par un `linear-gradient` simple ou une couleur plate. Les filets 1px (dividers/guilloché) et les dégradés des pastilles/barres sont conservés (surfaces faibles, sans coût de re-rastérisation). Un test vérifie qu'aucun `radial-gradient` ne subsiste dans le HTML final. Escaping du dôme (titres/liens/LLM) intact dans les deux thèmes, couvert par un test hostile en édition standard. `send_vc_report` et `_handle_vc` (`ARIA_REPORT_TIER`, défaut premium) threadent le tier de bout en bout. 74 tests VC verts (report + delivery + telegram/format). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
Synthèse factuelle (6 agents) : sur Base, la thèse pré-bonding ne s'applique proprement qu'à Virtuals (seule vraie courbe, API gratuite sans clé) ; Flaunch en second (Fair Launch 30 min) ; Clanker/Zora sautent le bonding (liquides dès t=0). Reco : rester Base-first, Solana en monitoring lecture-seule. Toutes les adresses/endpoints marqués « à revérifier sur VPS/BaseScan » (aucun testé en direct côté recherche). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
…uration VISION.md : bloc daté (07/07) « ARIA investisseuse VC — gamme luxe » — moat = l'analyse (pas l'exécution), abonnement boutique ~500$/mois × 4-5 clients, éditions premium/standard, funnel échelle de risque (web2 → BTC/ETH → risque), overlay macro obligatoire, niche pré-bonding = Virtuals, proof engine = pilier qualité, conformité avant facturation. docs/conformite-dossier-avocat.md : dossier préparatoire (NON un avis juridique) pour un avocat crypto/finance — questions sur la qualification « conseil en investissement » (AMF/MiFID/MiCA), valeur du disclaimer, MAR/conflits d'intérêts, KYC-AML, CGV/responsabilité. Prudence : aucun encaissement avant validation d'un professionnel. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
…Virtuals Briques construites et testées hors-ligne (non encore câblées dans le rapport/flux — le stitching viendra après). 73 tests verts, zéro fichier garde-fou touché. - #6 Mode test `/vc <adresse> test` (admin) : affiche le raisonnement complet, n'envoie PAS d'email et n'enregistre PAS la prédiction (aucune pollution du track-record, compteurs inchangés). Flag détecté en fin d'args, insensible à la casse ; mode normal strictement préservé. - #2 Proof engine `vc_judge.py` : LLM-juge adverse qui audite une analyse VC (verdict solide/fragile/rejeté, score, points forts/faibles, claims non étayés = chasse aux données inventées, cohérence R/R). Fallback déterministe si LLM indisponible ; sortie sanitisée (dôme) ; jamais d'exécution. - #9 `ta_levels.py` (+ `chart_render.py`) : niveaux support/résistance/tendance déterministes et factuels depuis OHLCV ; graphique PNG email-safe (Pillow, data-URI inline, pas de SVG) avec lignes entrée/invalidation/cible. - #10 `services/virtuals.py` : client api.virtuals.io + parsing statut UNDERGRAD/AVAILABLE, is_in_bonding, progression graduation ; dégradation gracieuse (offline-safe), chaînes externes sanitisées. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
Suite à l'audit anti-bot du site. Durcissement bénin, sans CSP (éviter de casser l'app sans test) : - robots.txt explicite (crawl autorisé — vitrine publique par nature) + sitemap. - _headers : ajout d'un bloc /* avec X-Content-Type-Options: nosniff, Referrer-Policy, X-Frame-Options: SAMEORIGIN, HSTS (6 mois), Permissions-Policy. Cache-Control existant préservé. Note : ces en-têtes durcissent mais ne « bloquent » pas les bots — un vrai anti-bot se fait au niveau hébergeur (Cloudflare + Bot Fight/Turnstile). Les correctifs sensibles (mur Privy off par défaut, ancrage du rate-limit, coût LLM /api/aria/chat public) relèvent du modèle d'accès → décision humaine. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
Le LLM-juge (#2) tourne désormais en MODE TEST admin, sur les MÊMES faits on-chain que l'analyse (aucun re-scan) : - vc_analysis : analyze_vc_with_context() renvoie (VCResult, ctx) ; analyze_vc reste le wrapper public inchangé — aucun appelant existant impacté. - telegram : en mode test, après le raisonnement, judge_analysis(result, ctx) affiche verdict/score/points faibles/claims non étayés (wrappé try/except, ne casse jamais le handler). Le flux CLIENT est inchangé : le juge n'ajoute ni coût ni latence aux rapports — sa promotion sur chaque analyse est une décision produit (coût/latence) laissée à l'opérateur. - tests : mode test câblé sur analyze_vc_with_context + juge mocké, nouveau test dédié (verdict affiché, juge appelé avec le VCResult). 36 tests verts. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
État livré (rapport premium/standard, proof engine branché en mode test, 4 moteurs testés, durcissement vitrine), prochaines étapes priorisées (#14 macro / #9 graphique / #10 Virtuals / #12 backend), décisions sécu à trancher (modèle d'accès), et note sur l'échec de test pré-existant test_llm_fallback (sans rapport avec cette session). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
Lance pytest à chaque push/PR touchant packages/aria-core (Python 3.12, deps mockées, hors-ligne). Scope ASSUMÉ sur le cœur VC (rapport, analyse, juge, Telegram, Virtuals, TA) = 187 tests verts → le vert/rouge de la CI a enfin un sens et attrape une régression AVANT le VPS. Non inclus volontairement : ~17 tests en échec pré-existants (réseau + dette technique hors périmètre VC : llm_fallback, holding_site, web_verify…). Leur triage est un chantier séparé (voir handoff) ; on élargira la CI au fur et à mesure de leur stabilisation. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
La CI a attrapé un défaut latent : aria_core/public_mode.py importe fastapi au niveau module (chaîne telegram_bot → brain → public_mode), mais fastapi n'était pas dans les dépendances. En local il était présent (via le backend) → masqué ; sur une install propre (CI) → ModuleNotFoundError. Fix : ajout de fastapi aux dépendances d'aria-core. Vérifié dans un venv neuf (`pip install -e .[dev]`) : fastapi tiré automatiquement, 187 tests VC verts. Aucun impact VPS (le backend FastAPI l'a déjà). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Htwan6DUgJV1xBE1fJQvG1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.