{
  "language": "en",
  "demonstration": {
    "id": "mcp-reach",
    "caption": "Same probe, same machine. Only the confinement changes.",
    "runs": [
      {
        "id": "open",
        "label": "Without confinement",
        "results": [
          {
            "attempt": "Open a connection to the internet",
            "result": "reached",
            "state": "reached"
          },
          {
            "attempt": "Read the agent’s API keys",
            "result": "read",
            "state": "reached"
          },
          {
            "attempt": "Write outside its scope",
            "result": "succeeded",
            "state": "reached"
          }
        ]
      },
      {
        "id": "confined",
        "label": "Under real confinement",
        "results": [
          {
            "attempt": "Open a connection to the internet",
            "result": "unreachable",
            "state": "blocked"
          },
          {
            "attempt": "Read the agent’s API keys",
            "result": "nonexistent for this process",
            "state": "blocked"
          },
          {
            "attempt": "Write outside its scope",
            "result": "denied",
            "state": "blocked"
          }
        ]
      }
    ],
    "repository": "https://github.com/NoaMatout/mcp-reach"
  },
  "person": {
    "id": "person:noa-matout",
    "fullName": "Noa Matout",
    "declaredAge": 23,
    "declaredAgeOn": "2026-09-21",
    "city": "Reims",
    "localized": {
      "fr": {
        "jobTitle": "Ingénieur systèmes, réseaux et sécurité",
        "knowsAbout": [
          "Exploitation des systèmes et des réseaux",
          "Automatisation de procédures par l’IA",
          "Sécurité appliquée aux automatisations"
        ]
      },
      "en": {
        "jobTitle": "Systems, network and security engineer",
        "knowsAbout": [
          "Systems and network operations",
          "Automating procedures with AI",
          "Security applied to automation"
        ]
      }
    },
    "availability": {
      "status": "available",
      "engagements": [
        "employment",
        "freelance"
      ]
    },
    "socialLinks": [
      "linkedin",
      "malt",
      "github"
    ],
    "contactLink": "email",
    "experience": [
      {
        "id": "freelance",
        "organization": "Supplay",
        "start": "2026-10",
        "localized": {
          "fr": {
            "title": "Ingénieur systèmes, réseaux et sécurité, en freelance"
          },
          "en": {
            "title": "Systems, network and security engineer, freelance"
          }
        }
      },
      {
        "id": "engineering",
        "organization": "Supplay",
        "start": "2024-10",
        "end": "2026-10",
        "localized": {
          "fr": {
            "title": "Ingénieur réseau et systèmes"
          },
          "en": {
            "title": "Network and systems engineer"
          }
        }
      },
      {
        "id": "zon",
        "organization": "ZON",
        "start": "2026-01",
        "localized": {
          "fr": {
            "title": "Cofondateur"
          },
          "en": {
            "title": "Co-founder"
          }
        }
      },
      {
        "id": "administration",
        "organization": "Supplay",
        "start": "2023-10",
        "end": "2024-10",
        "localized": {
          "fr": {
            "title": "Administrateur réseau et systèmes"
          },
          "en": {
            "title": "Network and systems administrator"
          }
        }
      },
      {
        "id": "support",
        "organization": "Supplay",
        "start": "2021-09",
        "end": "2023-09",
        "localized": {
          "fr": {
            "title": "Gestionnaire maintenance et support informatique"
          },
          "en": {
            "title": "IT maintenance and support officer"
          }
        }
      }
    ],
    "earlierCareer": {
      "fr": "Avant 2021, j’ai effectué un service civique en médiation numérique et trois ans d’apprentissage en viticulture. Je me suis reconverti vers l’informatique en 2021.",
      "en": "Before 2021, I did a civic service in digital inclusion and a three-year apprenticeship in winegrowing. I retrained in IT in 2021."
    },
    "estate": {
      "virtualMachines": [
        {
          "operatingSystem": "Linux",
          "count": 150
        },
        {
          "operatingSystem": "Windows",
          "count": 30
        }
      ],
      "virtualization": "vsphere",
      "linuxAutomation": "ansible",
      "windowsDeclarativeAutomation": false
    },
    "education": [
      {
        "id": "mastere-securite",
        "institution": "ESGI",
        "startYear": 2024,
        "endYear": 2026,
        "status": "pending-validation",
        "localized": {
          "fr": {
            "title": "Mastère Sécurité informatique",
            "certification": "Titre RNCP de niveau 7 : Expert en ingénierie informatique"
          },
          "en": {
            "title": "Master’s degree in IT security (Mastère)",
            "certification": "French level 7 certification: IT Engineering Expert"
          }
        }
      },
      {
        "id": "bachelor",
        "institution": "ESGI",
        "startYear": 2023,
        "endYear": 2024,
        "localized": {
          "fr": {
            "title": "Bachelor Sécurité informatique",
            "certification": "Titre RNCP de niveau 6 : Chef de projet systèmes, réseaux et sécurité"
          },
          "en": {
            "title": "Bachelor’s degree in IT security",
            "certification": "French level 6 certification: Systems, Network and Security Project Manager"
          }
        }
      },
      {
        "id": "cesi-systems",
        "institution": "CESI",
        "startYear": 2021,
        "endYear": 2023,
        "localized": {
          "fr": {
            "title": "Formation systèmes et réseaux"
          },
          "en": {
            "title": "Systems and networks training"
          }
        }
      },
      {
        "id": "viticulture",
        "institution": "CFA d’Avize",
        "startYear": 2017,
        "endYear": 2020,
        "localized": {
          "fr": {
            "title": "Baccalauréat professionnel Conduite et gestion d’une exploitation viti-vinicole"
          },
          "en": {
            "title": "Vocational baccalaureate in vineyard and winery management"
          }
        }
      }
    ],
    "credentials": [
      {
        "id": "toeic",
        "name": "TOEIC",
        "takenAt": "2026-01-10",
        "score": 800,
        "evidence": "self-reported"
      }
    ],
    "email": "noamatout@gmail.com",
    "sameAs": [
      "https://linkedin.com/in/noa-matout",
      "https://www.malt.fr/profile/noamatout",
      "https://github.com/NoaMatout"
    ]
  },
  "projects": [
    {
      "id": "projet-contractor-bastion",
      "entity": "project:bastion-prestataires",
      "title": "I bound contractor access",
      "url": "/en/#projet-contractor-bastion",
      "schemaType": "CreativeWork",
      "fields": {
        "problem": {
          "key": "project:bastion-prestataires:/localized/en/problem",
          "value": "I had to replace contractors’ VPN access with access limited to their intervention."
        },
        "role": {
          "key": "project:bastion-prestataires:/localized/en/role",
          "value": "I led the project alone, from the study to maintenance."
        },
        "choice": {
          "key": "project:bastion-prestataires:/localized/en/choice",
          "value": "I chose Apache Guacamole for browser-based access with session recording."
        },
        "coverage": {
          "key": "project:bastion-prestataires:/localized/en/coverage",
          "value": "100% of contractor access goes through the bastion."
        },
        "limit": {
          "key": "project:bastion-prestataires:/localized/en/limit",
          "value": "I have neither the commercial support nor the secret discovery and rotation features of paid privileged access management products."
        }
      },
      "evidence": {
        "state": "missing"
      },
      "providerAccessCoveragePercent": 100
    },
    {
      "id": "projet-remote-access",
      "entity": "project:acces-distance",
      "title": "I take back control of an inherited access",
      "url": "/en/#projet-remote-access",
      "schemaType": "CreativeWork",
      "fields": {
        "problem": {
          "key": "project:acces-distance:/localized/en/problem",
          "value": "I had to replace an unsecured VNC access, deployed long ago by an old script."
        },
        "role": {
          "key": "project:acces-distance:/localized/en/role",
          "value": "I replaced that access with centralised remote control."
        },
        "choice": {
          "key": "project:acces-distance:/localized/en/choice",
          "value": "I chose MeshCentral, with named accounts and multi-factor authentication."
        },
        "scale": {
          "key": "project:acces-distance:/localized/en/scale",
          "value": "I migrated about 1,300 workstations, with one month of coexistence and a deployment through group policy."
        },
        "limit": {
          "key": "project:acces-distance:/localized/en/limit",
          "value": "I also have to maintain the agent installed on the workstations, and check how it behaves when it loses contact with the console."
        }
      },
      "evidence": {
        "state": "missing"
      },
      "scale": {
        "migratedWorkstations": {
          "value": 1300,
          "approximate": true
        },
        "coexistenceMonths": 1
      }
    }
  ],
  "articles": [
    {
      "id": "article:agent-personnel-deux-profils",
      "title": "I split my assistant in two",
      "url": "/en/articles/personal-agent-two-profiles/",
      "measurements": {
        "profiles": {
          "value": 2,
          "unit": {
            "fr": "profils",
            "en": "profiles"
          },
          "scope": {
            "fr": "Profils de mon agent personnel, chacun sous un compte distinct.",
            "en": "Profiles of my personal agent, each under a separate account."
          }
        },
        "agentSetupFailures": {
          "value": 6,
          "unit": {
            "fr": "pannes",
            "en": "failures"
          },
          "scope": {
            "fr": "Pannes constatées après la séparation de mon agent personnel.",
            "en": "Failures found after splitting my personal agent."
          }
        },
        "silentFailures": {
          "value": 5,
          "unit": {
            "fr": "pannes silencieuses",
            "en": "silent failures"
          },
          "scope": {
            "fr": "Sous-ensemble des pannes constatées sans erreur visible dans l'usage courant de mon agent.",
            "en": "Subset of the failures found with no visible error in the everyday use of my agent."
          }
        },
        "serviceRestarts": {
          "value": 6000,
          "unit": {
            "fr": "redémarrages",
            "en": "restarts"
          },
          "scope": {
            "fr": "Boucle des unités ajoutées par erreur, pendant que le service fourni fonctionnait.",
            "en": "Loop of the units added by mistake, while the shipped service was working."
          }
        },
        "monitorDays": {
          "value": 2,
          "unit": {
            "fr": "jours",
            "en": "days"
          },
          "scope": {
            "fr": "Durée pendant laquelle la surveillance échouait à chaque passage.",
            "en": "How long the monitoring failed on every run."
          }
        },
        "auditInterval": {
          "value": 1,
          "unit": {
            "fr": "heure",
            "en": "hour"
          },
          "scope": {
            "fr": "Intervalle prévu entre les sauvegardes de configuration par le compte d'audit.",
            "en": "Planned interval between configuration backups by the audit account."
          }
        },
        "wakeups": {
          "value": 288,
          "unit": {
            "fr": "réveils par jour",
            "en": "wakeups per day"
          },
          "scope": {
            "fr": "Boucle de surveillance avant remplacement du sondage par un déclenchement au changement.",
            "en": "Monitoring loop before polling was replaced by a trigger on change."
          }
        },
        "pollMinutes": {
          "value": 5,
          "unit": {
            "fr": "minutes",
            "en": "minutes"
          },
          "scope": {
            "fr": "Intervalle du sondage du répertoire avant sa correction.",
            "en": "Directory polling interval before the fix."
          }
        },
        "backupBefore": {
          "value": 2,
          "unit": {
            "fr": "Go",
            "en": "GB"
          },
          "scope": {
            "fr": "Environnement d'exécution réinstallable inclus à tort dans la sauvegarde.",
            "en": "Reinstallable runtime wrongly included in the backup."
          }
        },
        "backupAfter": {
          "value": 85,
          "unit": {
            "fr": "Mo",
            "en": "MB"
          },
          "scope": {
            "fr": "Taille de la sauvegarde après exclusions, planifications comprises.",
            "en": "Size of the backup after exclusions, schedules included."
          }
        }
      }
    },
    {
      "id": "article:auditer-ses-propres-mcp",
      "title": "I scored my own MCP server",
      "url": "/en/articles/auditing-my-own-mcp-server/",
      "measurements": {
        "exposureBefore": {
          "value": 9.2,
          "unit": {
            "fr": "sur 10",
            "en": "out of 10"
          },
          "scope": {
            "fr": "Note d'exposition de mon serveur MCP avant durcissement, relevée par l'outil d'analyse de systemd. Plus elle est basse, mieux c'est.",
            "en": "Exposure score of my MCP server before hardening, as reported by systemd's analysis tool. The lower, the better."
          }
        },
        "meterExposure": {
          "value": 8.1,
          "unit": {
            "fr": "sur 10",
            "en": "out of 10"
          },
          "scope": {
            "fr": "Note d'exposition d'un autre de mes services, écrit avec les bonnes pratiques habituelles, relevée au même moment.",
            "en": "Exposure score of another of my services, written with the usual good practice, recorded at the same time."
          }
        },
        "exposureFirstPass": {
          "value": 1.6,
          "unit": {
            "fr": "sur 10",
            "en": "out of 10"
          },
          "scope": {
            "fr": "Note de la première version durcie, qui lisait encore les clés de l'agent.",
            "en": "Score of the first hardened version, which could still read the agent's keys."
          }
        },
        "exposureAfter": {
          "value": 1.5,
          "unit": {
            "fr": "sur 10",
            "en": "out of 10"
          },
          "scope": {
            "fr": "Note de la version finale, où les clés et la mémoire de l'agent sont hors d'atteinte.",
            "en": "Score of the final version, where the agent's keys and memory are out of reach."
          }
        }
      }
    },
    {
      "id": "article:controle-negatif",
      "title": "A protection I never saw refuse anything does not exist",
      "url": "/en/articles/negative-control/",
      "measurements": {
        "controls": {
          "value": 2,
          "unit": {
            "fr": "contrôles",
            "en": "controls"
          },
          "scope": {
            "fr": "Contrôles essayés sur mon site privé, chacun ayant révélé un défaut réel.",
            "en": "Controls tried on my private site, each of which revealed a real flaw."
          }
        },
        "windowWords": {
          "value": 6,
          "unit": {
            "fr": "mots consécutifs",
            "en": "consecutive words"
          },
          "scope": {
            "fr": "Taille des fenêtres glissantes utilisées dans ma recherche de fuites de texte.",
            "en": "Size of the sliding windows used in my search for text leaks."
          }
        }
      }
    },
    {
      "id": "article:serveur-mcp-garmin",
      "title": "My watch talks to Claude, on conditions",
      "url": "/en/articles/garmin-mcp-server/",
      "measurements": {
        "tools": {
          "value": 16,
          "unit": {
            "fr": "outils typés",
            "en": "typed tools"
          },
          "scope": {
            "fr": "Outils exposés par le serveur MCP, sans aucun accès SQL libre.",
            "en": "Tools exposed by the MCP server, with no free-form SQL access."
          }
        },
        "testsPassed": {
          "value": 214,
          "unit": {
            "fr": "tests réussis",
            "en": "passing tests"
          },
          "scope": {
            "fr": "Suite hermétique, sans données réelles ni réseau, relancée le 2 octobre 2026.",
            "en": "Hermetic suite, with no real data and no network, rerun on October 2, 2026."
          }
        },
        "corpusFiles": {
          "value": 42,
          "unit": {
            "fr": "enregistrements réels",
            "en": "real recordings"
          },
          "scope": {
            "fr": "Fichiers FIT réels utilisés pour valider le lecteur, hors de la suite hermétique.",
            "en": "Real FIT files used to validate the reader, outside the hermetic suite."
          }
        },
        "corpusDevices": {
          "value": 19,
          "unit": {
            "fr": "appareils",
            "en": "devices"
          },
          "scope": {
            "fr": "Appareils différents représentés dans le corpus de validation.",
            "en": "Different devices represented in the validation corpus."
          }
        },
        "corpusMakers": {
          "value": 8,
          "unit": {
            "fr": "fabricants",
            "en": "manufacturers"
          },
          "scope": {
            "fr": "Fabricants représentés dans le corpus de validation.",
            "en": "Manufacturers represented in the validation corpus."
          }
        },
        "corpusParsed": {
          "value": 30,
          "unit": {
            "fr": "fichiers lus",
            "en": "files read"
          },
          "scope": {
            "fr": "Fichiers du corpus lus comme des activités.",
            "en": "Corpus files read as activities."
          }
        },
        "corpusRejected": {
          "value": 12,
          "unit": {
            "fr": "rejets corrects",
            "en": "correct rejections"
          },
          "scope": {
            "fr": "Fichiers du corpus qui ne sont pas des activités ou sont tronqués, et que le lecteur refuse à raison.",
            "en": "Corpus files that are not activities or are truncated, and that the reader rightly refuses."
          }
        },
        "streamSamples": {
          "value": 1513,
          "unit": {
            "fr": "échantillons",
            "en": "samples"
          },
          "scope": {
            "fr": "Points de fréquence cardiaque d'une sortie réelle, utilisés pour mesurer l'effet du sous-échantillonnage.",
            "en": "Heart rate points from a real ride, used to measure the effect of downsampling."
          }
        },
        "overviewPoints": {
          "value": 10,
          "unit": {
            "fr": "points",
            "en": "points"
          },
          "scope": {
            "fr": "Résolution d'un aperçu grossier de la même sortie.",
            "en": "Resolution of a coarse overview of the same ride."
          }
        },
        "hrMaxRead": {
          "value": 160.2,
          "unit": {
            "fr": "battements par minute",
            "en": "beats per minute"
          },
          "scope": {
            "fr": "Fréquence cardiaque maximale lue dans l'aperçu à dix points, avant correction.",
            "en": "Maximum heart rate read from the ten-point overview, before the fix."
          }
        },
        "hrMaxTrue": {
          "value": 174,
          "unit": {
            "fr": "battements par minute",
            "en": "beats per minute"
          },
          "scope": {
            "fr": "Fréquence cardiaque maximale réelle de la même sortie.",
            "en": "Actual maximum heart rate of the same ride."
          }
        },
        "hrMinRead": {
          "value": 138,
          "unit": {
            "fr": "battements par minute",
            "en": "beats per minute"
          },
          "scope": {
            "fr": "Fréquence cardiaque minimale lue dans l'aperçu à dix points, avant correction.",
            "en": "Minimum heart rate read from the ten-point overview, before the fix."
          }
        },
        "hrMinTrue": {
          "value": 111,
          "unit": {
            "fr": "battements par minute",
            "en": "beats per minute"
          },
          "scope": {
            "fr": "Fréquence cardiaque minimale réelle de la même sortie.",
            "en": "Actual minimum heart rate of the same ride."
          }
        },
        "loadSessions": {
          "value": 6,
          "unit": {
            "fr": "séances",
            "en": "sessions"
          },
          "scope": {
            "fr": "Séances d'une semaine réelle additionnées par l'ancien résumé hebdomadaire.",
            "en": "Sessions of a real week added up by the old weekly summary."
          }
        },
        "loadSports": {
          "value": 4,
          "unit": {
            "fr": "sports",
            "en": "sports"
          },
          "scope": {
            "fr": "Sports représentés dans cette semaine.",
            "en": "Sports represented in that week."
          }
        },
        "loadValue": {
          "value": 17,
          "unit": {
            "fr": "points de charge",
            "en": "load points"
          },
          "scope": {
            "fr": "Somme sans signification produite par l'ancien résumé, affichée comme une charge d'entraînement.",
            "en": "Meaningless sum produced by the old summary, displayed as a training load."
          }
        },
        "titledActivities": {
          "value": 66,
          "unit": {
            "fr": "activités",
            "en": "activities"
          },
          "scope": {
            "fr": "Activités Garmin présentes dans ma base au moment où j'ai remarqué la perte des titres.",
            "en": "Garmin activities in my database when I noticed the titles were lost."
          }
        },
        "survivingTitles": {
          "value": 1,
          "unit": {
            "fr": "titre",
            "en": "title"
          },
          "scope": {
            "fr": "Titre encore présent après la relecture complète des fichiers.",
            "en": "Title still present after the full reread of the files."
          }
        },
        "recoveredTitles": {
          "value": 91,
          "unit": {
            "fr": "titres",
            "en": "titles"
          },
          "scope": {
            "fr": "Titres récupérés après correction, en élargissant la liste lue chez Garmin.",
            "en": "Titles recovered after the fix, by widening the list read from Garmin."
          }
        },
        "missedActivities": {
          "value": 25,
          "unit": {
            "fr": "activités",
            "en": "activities"
          },
          "scope": {
            "fr": "Activités plus anciennes jamais importées, découvertes pendant la même correction.",
            "en": "Older activities never imported, discovered during the same fix."
          }
        },
        "exposureBefore": {
          "value": 9.2,
          "unit": {
            "fr": "sur 10",
            "en": "out of 10"
          },
          "scope": {
            "fr": "Note d'exposition de mon serveur MCP avant durcissement, relevée par l'outil d'analyse de systemd. Plus elle est basse, mieux c'est.",
            "en": "Exposure score of my MCP server before hardening, as reported by systemd's analysis tool. The lower, the better."
          }
        }
      }
    }
  ],
  "facts": {
    "person:noa-matout:/fullName": "Noa Matout",
    "person:noa-matout:/localized/en/jobTitle": "Systems, network and security engineer",
    "person:noa-matout:/city": "Reims",
    "person:noa-matout:/declaredAge": "23",
    "person:noa-matout:/declaredAgeOn": "September 21, 2026",
    "person:noa-matout:/estate/virtualMachines/0/count": "150",
    "person:noa-matout:/estate/virtualMachines/1/count": "30",
    "person:noa-matout:/estate/virtualMachines/0/operatingSystem": "Linux",
    "person:noa-matout:/estate/virtualMachines/1/operatingSystem": "Windows",
    "person:noa-matout:/earlierCareer/en": "Before 2021, I did a civic service in digital inclusion and a three-year apprenticeship in winegrowing. I retrained in IT in 2021.",
    "person:noa-matout:/availability/status": "I am available",
    "person:noa-matout:/availability/engagements/0": "a job",
    "person:noa-matout:/availability/engagements/1": "a freelance mission",
    "person:noa-matout:/estate/virtualization": "VMware vSphere",
    "person:noa-matout:/estate/linuxAutomation": "Ansible",
    "person:noa-matout:/estate/windowsDeclarativeAutomation": "I do not use declarative management on the Windows side.",
    "person:noa-matout:/education/0/localized/en/title": "Master’s degree in IT security (Mastère)",
    "person:noa-matout:/education/0/localized/en/certification": "French level 7 certification: IT Engineering Expert",
    "person:noa-matout:/education/0/institution": "ESGI",
    "person:noa-matout:/education/0/status": "Awaiting validation",
    "person:noa-matout:/education/0/startYear": "2024",
    "person:noa-matout:/education/0/endYear": "2026",
    "person:noa-matout:/education/1/localized/en/title": "Bachelor’s degree in IT security",
    "person:noa-matout:/education/1/localized/en/certification": "French level 6 certification: Systems, Network and Security Project Manager",
    "person:noa-matout:/education/1/institution": "ESGI",
    "person:noa-matout:/education/1/startYear": "2023",
    "person:noa-matout:/education/1/endYear": "2024",
    "person:noa-matout:/education/2/localized/en/title": "Systems and networks training",
    "person:noa-matout:/education/2/institution": "CESI",
    "person:noa-matout:/education/2/startYear": "2021",
    "person:noa-matout:/education/2/endYear": "2023",
    "person:noa-matout:/education/3/localized/en/title": "Vocational baccalaureate in vineyard and winery management",
    "person:noa-matout:/education/3/institution": "CFA d’Avize",
    "person:noa-matout:/education/3/startYear": "2017",
    "person:noa-matout:/education/3/endYear": "2020",
    "person:noa-matout:/experience/0/localized/en/title": "Systems, network and security engineer, freelance",
    "person:noa-matout:/experience/0/organization": "Supplay",
    "person:noa-matout:/experience/0/start": "October 2026",
    "person:noa-matout:/experience/1/localized/en/title": "Network and systems engineer",
    "person:noa-matout:/experience/1/organization": "Supplay",
    "person:noa-matout:/experience/1/start": "October 2024",
    "person:noa-matout:/experience/1/end": "October 2026",
    "person:noa-matout:/experience/2/localized/en/title": "Co-founder",
    "person:noa-matout:/experience/2/organization": "ZON",
    "person:noa-matout:/experience/2/start": "January 2026",
    "person:noa-matout:/experience/3/localized/en/title": "Network and systems administrator",
    "person:noa-matout:/experience/3/organization": "Supplay",
    "person:noa-matout:/experience/3/start": "October 2023",
    "person:noa-matout:/experience/3/end": "October 2024",
    "person:noa-matout:/experience/4/localized/en/title": "IT maintenance and support officer",
    "person:noa-matout:/experience/4/organization": "Supplay",
    "person:noa-matout:/experience/4/start": "September 2021",
    "person:noa-matout:/experience/4/end": "September 2023",
    "person:noa-matout:/credentials/0/score": "800",
    "person:noa-matout:/credentials/0/takenAt": "January 10, 2026",
    "project:bastion-prestataires:/localized/en/problem": "I had to replace contractors’ VPN access with access limited to their intervention.",
    "project:bastion-prestataires:/localized/en/role": "I led the project alone, from the study to maintenance.",
    "project:bastion-prestataires:/localized/en/choice": "I chose Apache Guacamole for browser-based access with session recording.",
    "project:bastion-prestataires:/localized/en/coverage": "100% of contractor access goes through the bastion.",
    "project:bastion-prestataires:/localized/en/limit": "I have neither the commercial support nor the secret discovery and rotation features of paid privileged access management products.",
    "project:acces-distance:/localized/en/problem": "I had to replace an unsecured VNC access, deployed long ago by an old script.",
    "project:acces-distance:/localized/en/role": "I replaced that access with centralised remote control.",
    "project:acces-distance:/localized/en/choice": "I chose MeshCentral, with named accounts and multi-factor authentication.",
    "project:acces-distance:/localized/en/scale": "I migrated about 1,300 workstations, with one month of coexistence and a deployment through group policy.",
    "project:acces-distance:/localized/en/limit": "I also have to maintain the agent installed on the workstations, and check how it behaves when it loses contact with the console.",
    "graph:sentinelle:/flows/serveur": "5,486,961",
    "graph:sentinelle:/flows/base": "185,232",
    "graph:sentinelle:/flows/regles": "1,111",
    "graph:sentinelle:/flows/bruit": "5",
    "graph:sentinelle:/remaining": "5",
    "graph:sentinelle:/caption": "Detection decides, AI explains.",
    "graph:mcp-reach:/caption": "Same probe, same machine. Only the confinement changes.",
    "graph:mcp-reach:/runs/open/internet": "reached",
    "graph:mcp-reach:/runs/open/keys": "read",
    "graph:mcp-reach:/runs/open/write": "succeeded",
    "graph:mcp-reach:/runs/confined/internet": "unreachable",
    "graph:mcp-reach:/runs/confined/keys": "nonexistent for this process",
    "graph:mcp-reach:/runs/confined/write": "denied",
    "article:agent-personnel-deux-profils:/measurements/profiles/value": "2",
    "article:agent-personnel-deux-profils:/measurements/agentSetupFailures/value": "6",
    "article:agent-personnel-deux-profils:/measurements/silentFailures/value": "5",
    "article:agent-personnel-deux-profils:/measurements/serviceRestarts/value": "6,000",
    "article:agent-personnel-deux-profils:/measurements/monitorDays/value": "2",
    "article:agent-personnel-deux-profils:/measurements/auditInterval/value": "1",
    "article:agent-personnel-deux-profils:/measurements/wakeups/value": "288",
    "article:agent-personnel-deux-profils:/measurements/pollMinutes/value": "5",
    "article:agent-personnel-deux-profils:/measurements/backupBefore/value": "2",
    "article:agent-personnel-deux-profils:/measurements/backupAfter/value": "85",
    "article:auditer-ses-propres-mcp:/measurements/exposureBefore/value": "9.2",
    "article:auditer-ses-propres-mcp:/measurements/meterExposure/value": "8.1",
    "article:auditer-ses-propres-mcp:/measurements/exposureFirstPass/value": "1.6",
    "article:auditer-ses-propres-mcp:/measurements/exposureAfter/value": "1.5",
    "article:controle-negatif:/measurements/controls/value": "2",
    "article:controle-negatif:/measurements/windowWords/value": "6",
    "article:serveur-mcp-garmin:/measurements/tools/value": "16",
    "article:serveur-mcp-garmin:/measurements/testsPassed/value": "214",
    "article:serveur-mcp-garmin:/measurements/corpusFiles/value": "42",
    "article:serveur-mcp-garmin:/measurements/corpusDevices/value": "19",
    "article:serveur-mcp-garmin:/measurements/corpusMakers/value": "8",
    "article:serveur-mcp-garmin:/measurements/corpusParsed/value": "30",
    "article:serveur-mcp-garmin:/measurements/corpusRejected/value": "12",
    "article:serveur-mcp-garmin:/measurements/streamSamples/value": "1,513",
    "article:serveur-mcp-garmin:/measurements/overviewPoints/value": "10",
    "article:serveur-mcp-garmin:/measurements/hrMaxRead/value": "160.2",
    "article:serveur-mcp-garmin:/measurements/hrMaxTrue/value": "174",
    "article:serveur-mcp-garmin:/measurements/hrMinRead/value": "138",
    "article:serveur-mcp-garmin:/measurements/hrMinTrue/value": "111",
    "article:serveur-mcp-garmin:/measurements/loadSessions/value": "6",
    "article:serveur-mcp-garmin:/measurements/loadSports/value": "4",
    "article:serveur-mcp-garmin:/measurements/loadValue/value": "17",
    "article:serveur-mcp-garmin:/measurements/titledActivities/value": "66",
    "article:serveur-mcp-garmin:/measurements/survivingTitles/value": "1",
    "article:serveur-mcp-garmin:/measurements/recoveredTitles/value": "91",
    "article:serveur-mcp-garmin:/measurements/missedActivities/value": "25",
    "article:serveur-mcp-garmin:/measurements/exposureBefore/value": "9.2"
  }
}
