En bref : si vous utilisez l'application de bureau Postman sur Mac ainsi que Claude Code, Codex ou Cursor, prenez deux minutes pour vérifier la configuration de vos agents.
- Selon l'issue GitHub #14370, Postman 12.33.4 a journalisé
auto-existing-upgradeà l'ouverture chez un utilisateur existant, puis Claude Code et Codex avaient tous deux le plugin Postman. Le fichier~/.codex/config.tomlcontenait aussi un enregistrementtrusted_hashpour le hook de démarrage de Postman. Un autre utilisateur signale le même comportement en 12.35.1 dans la même issue. - Un employé de Postman a répondu dans l'issue que le regroupement visait à simplifier l'installation du CLI et des plugins, que Postman rendra l'opt-in (consentement explicite) plus clair et qu'il réexamine l'approbation du hook et le comportement au démarrage de session.
- Le 4 novembre, nous avons reproduit les mêmes entrées avec l'installateur npx officiel de Postman dans un répertoire isolé : le
trusted_hashest identique, caractère pour caractère, à celui de l'issue, et le hook de démarrage a injecté les instructions de Postman dans les sessions Claude Code et Codex. - La commande officielle
npx @postman/postman-plugin removedésinstalle le plugin des deux agents, mais dans notre test l'entrée marketplace de Codex et l'enregistrementtrusted_hashsont restés dans config.toml. Il faut les retirer à la main.
Vérification la plus rapide :
grep -n -i postman ~/.codex/config.toml ~/.claude/settings.json ~/.claude.json 2>/dev/null
claude plugin list
codex plugin list
Si des entrées Postman apparaissent, suivez les 3 étapes ci-dessous.
Créer une API Key et connecter des modèles dans Claude Code, Codex et Cursor →
Ce qui s'est passé
Selon l'issue #14370 (ouverte le 25 octobre, marquée [SEVERE]), l'auteur a ouvert Postman 12.33.4 sur macOS après une période sans l'utiliser. Codex signalait ensuite sans cesse qu'un serveur MCP demandait une connexion et chargeait des skills Postman pour les tâches d'API. Le journal de Postman, ~/Library/Application Support/Postman/logs/main.log, contenait ces deux lignes :
PostmanAgentPluginService~install: script completed
{"source":"auto-existing-upgrade","results":["claude-code:installed","codex:installed"],"installer":"script"}
Main: autoInstall.plugin.existing-user finished
{"outcome":"installed","platform":"darwin","exposed":true,"signedIn":true,...}
Modifications listées dans le rapport :
| Emplacement | Ce que le rapport a trouvé |
|---|---|
| Codex ~/.codex/config.toml | [marketplaces.postman] (vers postmanlabs/postman-plugin), [plugins."postman@postman"] enabled = true et un trusted_hash sous [hooks.state."postman@postman:..."] |
| Hook du plugin Codex | Un hook SessionStart (au démarrage, après clear et compact) qui injecte « charger la skill postman:api-engineer avant toute tâche d'ingénierie API non triviale » dans chaque session |
| MCP distant | https://mcp.postman.com/mcp ; sans connexion, le journal de Codex affiche Auth required |
| Claude Code | postman@claude-plugins-official activé dans ~/.claude/settings.json, version 2.0.1, portée user |
| CLI | Le CLI Postman et son dossier lib dans ~/.local/bin |
Le code source de l'installateur cité dans le rapport contient une fonction approvePostmanHook qui, après l'installation du plugin, utilise hooks/list et config/batchWrite de Codex pour marquer le hook de Postman comme approuvé. L'auteur précise que le rapport montre des modifications d'autres outils sans consentement et ne montre aucun envoi de données. The New Stack note aussi que l'issue ne contient aucune preuve que Postman ait collecté ou transmis des données d'API.
Ensuite :
- Selon un commentaire de l'issue, un autre utilisateur macOS a vu Postman passer de 12.31.3 à 12.35.1 ; le journal montrait de nouveau
auto-existing-upgrade, puis l'installation du CLI et des plugins Claude Code et Codex, etcursor:already-installedpour Cursor. Le config.toml de cette machine n'avait pas detrusted_hash. - Selon un autre commentaire, le fichier
~/.copilot/settings.jsonde GitHub Copilot CLI contenait aussi la marketplace et le plugin Postman, et l'entrée de désinstallation du menu Postman ne les a pas retirés de Copilot. - Selon @daniiie7, le paquet Mac 12.35.1 décompressé montre qu'un feature flag décide si l'installation automatique s'exécute, y compris pour les nouveaux téléchargements.
- Les publications de @szchan111 et @Curingieul ont diffusé l'affaire chez les développeurs anglophones et sinophones, et X l'affiche comme actualité tendance.
Réponse de Postman : le 3 novembre (heure des États-Unis), l'employé de Postman zecoquit a répondu dans l'issue que l'application regroupe le CLI Postman et les plugins d'agent parce que beaucoup d'utilisateurs avaient du mal à les installer et à les relier séparément, que c'est indiqué sur la page de téléchargement et dans le flux de mise à jour, et que ces composants peuvent être désinstallés depuis l'application. Il ajoute « we've heard you » : Postman rendra l'opt-in plus clair, surtout pour les utilisateurs existants, réexamine l'approbation du hook et le comportement au démarrage de session, et publiera les changements dans l'issue.
Qui doit vérifier
- Vous utilisez l'application Postman sur macOS, connecté à votre compte, et l'avez ouverte ou mise à jour récemment (les rapports concernent 12.33.4 et 12.35.1).
- Claude Code, Codex, Cursor ou GitHub Copilot CLI est installé sur la même machine.
- Codex vous demande sans cesse de vous connecter à un serveur MCP Postman ou mentionne des skills Postman pour les tâches d'API.
Même sans Postman, ces vérifications montrent ce qu'un outil tiers a ajouté à vos agents.
Notre reproduction
Environnement : 4 novembre 2026, 17:20–17:25 heure de Pékin, Linux, Claude Code 2.1.318, codex-cli 0.166.0, @postman/postman-plugin 0.6.0 (le paquet npm maintenu par Postman), une clé aicodewith, et HOME et CODEX_HOME pointant vers un répertoire isolé neuf, sans toucher à aucune configuration réelle.
Nous n'avons pas de version Mac de Postman, nous n'avons donc pas reproduit l'étape « ouvrir l'application ». Le journal de l'issue indique "installer":"script". Nous avons utilisé l'installateur multi-agents de la documentation de Postman, npx @postman/postman-plugin install --agent claude-code,codex --yes. Nous ne pouvons pas confirmer que l'application exécute le même script, mais les entrées écrites correspondent à celles du rapport.
| Étape | Résultat | Durée |
|---|---|---|
| npx @postman/postman-plugin install (Claude Code + Codex) | Installé des deux côtés ; affiche Approved Postman's Codex session-start hook. | 11,6 s |
| Un codex exec après l'installation | hook: SessionStart se déclenche, l'historique de session contient le texte <EXTREMELY_IMPORTANT> de Postman, le MCP Postman demande une connexion | 3,0 s |
| Un claude -p après l'installation | La transcription contient un résultat de hook SessionStart:startup avec le même texte | 2,7 s |
| npx @postman/postman-plugin remove --dry-run | Aperçu seulement, config.toml inchangé | 1,3 s |
| npx @postman/postman-plugin remove | Plugin retiré des deux ; l'entrée marketplace Codex et le trusted_hash restent | 2,2 s |
| Tâche codex exec après nettoyage manuel | Affiche clean-ok, pas de hook, pas de texte Postman | 11,8 s |
| Tâche claude -p après nettoyage manuel | Affiche clean-ok-cc | 9,4 s |
Nous avons aussi installé le plugin une fois avec les commandes Codex natives de la documentation par agent. config.toml contenait alors le plugin et la marketplace mais aucun trusted_hash, codex exec n'a pas exécuté le hook et l'historique de session ne contenait pas le texte Postman. Cela correspond à la documentation : installé par Codex lui-même, le hook commence non approuvé et Codex vous demande de l'examiner. Que le hook s'exécute à chaque session dépend donc de cet unique enregistrement trusted_hash.
Étape 1 : vérifier Claude Code
# 1) Installed plugins (user and project scope)
claude plugin list
# 2) Plugins and marketplaces turned on in your user settings
grep -n -i -E 'postman|enabledPlugins|extraKnownMarketplaces|"hooks"' ~/.claude/settings.json
# 3) MCP servers, including the ones a plugin brings in
claude mcp list
grep -n -i postman ~/.claude.json
# 4) Install records with timestamps
cat ~/.claude/plugins/installed_plugins.json
Notre sortie avec le plugin Postman installé :
$ claude plugin list
Installed plugins:
❯ postman@claude-plugins-official
Version: 2.0.1
Scope: user
Status: ✔ enabled
$ claude mcp list
plugin:postman:postman: https://mcp.postman.com/mcp (HTTP) - ! Needs authentication
Les deux blocs ajoutés à ~/.claude/settings.json :
"extraKnownMarketplaces": {
"claude-plugins-official": {
"source": {
"source": "github",
"repo": "anthropics/claude-plugins-official"
}
}
},
"enabledPlugins": {
"postman@claude-plugins-official": true
}
claude-plugins-official est la marketplace officielle d'Anthropic et ne pose pas de problème en soi ; ce qui compte, c'est de savoir si enabledPlugins contient un plugin que vous n'avez pas installé vous-même. Le hook SessionStart de Postman se trouve dans le fichier hooks/hooks.json du plugin, pas dans la clé hooks de settings.json : regarder seulement settings.json ne le montre pas. Fiez-vous à claude plugin list.
Étape 2 : vérifier config.toml de Codex
codex plugin list
codex plugin marketplace list
codex mcp list
# Section names only (no keys are printed)
grep -n -E '^\[(marketplaces|plugins|hooks|mcp_servers)' ~/.codex/config.toml
# Hook trust records
grep -n -A2 'hooks.state' ~/.codex/config.toml
Avec le plugin Postman installé :
$ codex plugin list
PLUGIN STATUS VERSION SOURCE
postman@postman installed, enabled 1.3.0 ~/.codex/.tmp/marketplaces/postman
$ codex plugin marketplace list
MARKETPLACE ROOT
postman ~/.codex/.tmp/marketplaces/postman
$ codex mcp list
Name Url Bearer Token Env Var Status Auth
postman-mcp https://mcp.postman.com/mcp - enabled Not logged in
Ce qui a été ajouté à config.toml dans notre reproduction (le trusted_hash correspond à l'issue) :
[marketplaces.postman]
source_type = "git"
source = "https://github.com/postmanlabs/postman-plugin.git"
ref = "main"
[plugins."postman@postman"]
enabled = true
[hooks.state]
[hooks.state."postman@postman:hooks/codex-hooks.json:session_start:0:0"]
trusted_hash = "sha256:b67ddd1ece328f5a6f9103ce011bb58adb8411daea644f284732cff85d15cbb3"
trusted_content_hash = "sha256:30a87cda8b01827030f3a7572a88bef9e2ff199d95bd50915b4dd5bb9d5e0023"
Lisez les trois parties séparément :
[marketplaces.xxx]: la source des plugins, un dépôt Git.[plugins."xxx@xxx"] enabled = true: le plugin est actif, ses skills et son serveur MCP se chargent.[hooks.state."...:session_start:..."]avectrusted_hash: le hook est approuvé et s'exécute à chaque session. Untrusted_hashpour un hook que vous n'avez jamais approuvé dans Codex est la première chose à supprimer.
Journal de codex exec avec le plugin installé :
$ codex exec --skip-git-repo-check "<prompt>"
ERROR rmcp::transport::worker: worker quit with fatal: Transport channel closed,
when AuthRequired(... "https://mcp.postman.com/.well-known/oauth-protected-resource/mcp" ...)
hook: SessionStart
hook: SessionStart Completed
Le début du texte injecté par le hook (fichier hooks/session-start-context.md du dépôt du plugin Postman) :
<EXTREMELY_IMPORTANT>
You have the Postman plugin.
Before responding to any non-trivial API engineering task — designing, implementing,
mocking, testing, monitoring, documenting, or deploying an API or Postman Flow — load
the `postman:api-engineer` skill and follow it. ...
Pour savoir si des sessions passées l'ont reçu, cherchez dans les historiques :
# Codex: sessions whose context received the hook text
grep -l 'EXTREMELY_IMPORTANT' ~/.codex/sessions/*/*/*/*.jsonl
# Claude Code: transcripts with a SessionStart hook result carrying that text
grep -l 'EXTREMELY_IMPORTANT' ~/.claude/projects/*/*.jsonl
Dans notre reproduction, les sessions des deux agents après l'installation correspondaient, aucune après le nettoyage.
Étape 3 : vérifier Cursor, Copilot CLI et le CLI Postman
# Cursor (paths used by Postman's installer source)
ls -d ~/.cursor/plugins/local/postman ~/.cursor/plugins/cache/cursor-public/postman 2>/dev/null
# GitHub Copilot CLI
grep -n -i postman ~/.copilot/settings.json 2>/dev/null
# Postman CLI dropped next to the desktop app
ls -l ~/.local/bin | grep -i postman
Les deux chemins Cursor viennent du code source de l'installateur Postman : un clone local dans ~/.cursor/plugins/local/postman et la copie de la marketplace Cursor dans ~/.cursor/plugins/cache/cursor-public/postman. Le chemin de Copilot CLI vient d'un commentaire de l'issue.
Comment le supprimer
Option 1 : la commande officielle de Postman
Selon la documentation de Postman, l'installateur accepte status, remove (alias uninstall) et --dry-run :
# What is installed, per agent
npx @postman/postman-plugin status
# Preview the removal, nothing is changed
npx @postman/postman-plugin remove --dry-run
# Remove from every detected agent (alias: uninstall)
npx @postman/postman-plugin remove
# Or only some agents
npx @postman/postman-plugin remove --agent claude-code,codex
Notre sortie de remove :
Found 2 coding agents. Postman in each:
Claude Code installed postman@claude-plugins-official 2.0.1
Codex installed postman@postman 1.3.0
Claude Code
$ claude plugin uninstall postman@claude-plugins-official --scope user --json
done: uninstalled postman@claude-plugins-official
Codex
$ codex plugin remove postman@postman --json
done: removed postman@postman
Summary:
Claude Code done uninstalled postman@claude-plugins-official
Codex done removed postman@postman
L'employé de Postman a aussi indiqué que les composants peuvent être retirés depuis l'application ; selon un commentaire de l'issue, le menu est Help → Postman CLI and Plugins → Uninstall Postman Coding Agent Plugin.
Option 2 : nettoyer ce qui reste
Après le remove officiel, notre config.toml contenait encore :
# ~/.codex/config.toml after "npx @postman/postman-plugin remove"
[marketplaces.postman]
source_type = "git"
source = "https://github.com/postmanlabs/postman-plugin.git"
ref = "main"
[hooks.state]
[hooks.state."postman@postman:hooks/codex-hooks.json:session_start:0:0"]
trusted_hash = "sha256:b67ddd1ece328f5a6f9103ce011bb58adb8411daea644f284732cff85d15cbb3"
trusted_content_hash = "sha256:30a87cda8b01827030f3a7572a88bef9e2ff199d95bd50915b4dd5bb9d5e0023"
Les dossiers ~/.claude/plugins/cache/claude-plugins-official/postman et ~/.codex/plugins/cache/postman étaient aussi toujours là. Nettoyez dans cet ordre :
# --- Codex ---
codex plugin remove postman@postman # if codex plugin list still shows it
codex plugin marketplace remove postman
cp ~/.codex/config.toml ~/.codex/config.toml.bak
# Open ~/.codex/config.toml and delete the whole table
# [hooks.state."postman@postman:hooks/codex-hooks.json:session_start:0:0"]
# (the header line plus trusted_hash and trusted_content_hash)
rm -rf ~/.codex/plugins/cache/postman
# --- Claude Code ---
claude plugin uninstall postman@claude-plugins-official --scope user # if still listed
rm -rf ~/.claude/plugins/cache/claude-plugins-official/postman
# --- Cursor ---
rm -rf ~/.cursor/plugins/local/postman
# then uninstall Postman from Cursor's own plugin marketplace view
# --- Postman CLI, only if you do not use it ---
ls -l ~/.local/bin | grep -i postman
Vérifiez ensuite et lancez une vraie tâche pour confirmer que les deux agents fonctionnent :
$ grep -n -i -E 'postman@|marketplaces\.postman|trusted_hash' ~/.codex/config.toml ~/.claude/settings.json
(no output, exit 1)
$ codex plugin list | grep -i 'postman@'
(no output, exit 1)
$ codex mcp list
No MCP servers configured yet. Try `codex mcp add my-tool -- my-command`.
$ claude plugin list
No plugins installed. Use `claude plugin install` to install a plugin.
$ codex exec --skip-git-repo-check "Create hello.py that prints 'clean-ok', run it with python3, and report its output."
exec
/bin/bash -lc 'python3 hello.py' in <test-dir>/ws
succeeded in 0ms:
clean-ok
[exit 0, 11.8 s]
$ claude -p "Create hello2.py that prints 'clean-ok-cc', run it with python3, and report its output." \
--allowedTools "Write,Bash(python3:*)"
Output: `clean-ok-cc`
[exit 0, 9.4 s]
extraKnownMarketplaces.claude-plugins-official dans ~/.claude/settings.json est la marketplace officielle et peut rester ; si vous n'utilisez jamais de plugins Claude Code, vous pouvez aussi supprimer ce bloc.
Éviter que cela se reproduise
- Comparez votre configuration après chaque mise à jour d'application, d'IDE ou de CLI. Cet instantané ne garde que les noms de sections et de plugins, jamais votre clé :
# Snapshot without secrets: Codex section names, Claude Code plugin/marketplace/hook names
mkdir -p ~/.agent-audit
grep -E '^\[' ~/.codex/config.toml > ~/.agent-audit/codex.txt
python3 - > ~/.agent-audit/claude.txt <<'EOF'
import json, os
d = json.load(open(os.path.expanduser('~/.claude/settings.json')))
for k in ('enabledPlugins', 'extraKnownMarketplaces', 'hooks'):
print(k, sorted(d.get(k, {})))
EOF
# After updating a desktop app, IDE or CLI, compare with the snapshot
diff ~/.agent-audit/codex.txt <(grep -E '^\[' ~/.codex/config.toml)
La comparaison avant et après l'installation donnait :
$ diff ~/.agent-audit/codex.txt <(grep -E '^\[' ~/.codex/config.toml)
2a3,6
> [marketplaces.postman]
> [plugins."postman@postman"]
> [hooks.state]
> [hooks.state."postman@postman:hooks/codex-hooks.json:session_start:0:0"]
# Claude Code, before and after
enabledPlugins [] -> ['postman@claude-plugins-official']
extraKnownMarketplaces [] -> ['claude-plugins-official']
- N'approuvez que les hooks que vous avez validés. Si Codex contient un
trusted_hashinconnu, supprimez-le ; Codex vous demandera d'examiner le hook au prochain démarrage. - Désactivez les serveurs MCP inutilisés. Un MCP distant qui demande sans cesse une connexion est contacté à chaque démarrage.
- Vérifiez aussi les fichiers du projet.
AGENTS.mdet.claude/settings.jsondans un dépôt modifient aussi le comportement des agents ; voir Un AGENTS.md dans Téléchargements peut-il détourner Codex et Claude Code ?. - Donnez des limites claires à l'agent. Si un hook indésirable se glisse, le sandbox et la politique d'approbation bloquent toujours les actions hors limites ; voir Sandbox Codex et /permissions.
Garder une configuration propre avec une clé aicodewith
Un hook est une commande exécutée sous votre utilisateur : il peut lire les fichiers accessibles à cet utilisateur, y compris la configuration qui contient votre clé. Ne gardez dans ces fichiers que ce que vous reconnaissez. Après nettoyage, une configuration Codex propre se limite à ceci (Codex utilise experimental_bearer_token dans le config.toml global) :
# ~/.codex/config.toml
model = "gpt-6.1-sol"
model_provider = "aicodewith"
[model_providers.aicodewith]
name = "aicodewith"
base_url = "https://api.aicodewith.ai/chatgpt/v1"
wire_api = "responses"
experimental_bearer_token = "VOTRE_API_KEY"
[projects."/path/to/your/repo"]
trust_level = "trusted"
~/.claude/settings.json de Claude Code :
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.aicodewith.ai",
"ANTHROPIC_AUTH_TOKEN": "VOTRE_API_KEY"
}
}
Si le nettoyage a révélé un hook ou un plugin inconnu, supprimez-le, créez une nouvelle clé dans la console et mettez à jour les deux fichiers.
Créer une API Key pour Claude Code, Codex et Cursor →
Toutes les options sont dans le guide config.toml de Codex et Connecter Claude Code à une API tierce.
FAQ
Le plugin Postman envoie-t-il mes données quelque part ?
Selon l'auteur du rapport et The New Stack, l'issue ne contient aucune preuve de collecte ou de transmission de données. Le rapport porte sur des plugins, un hook et un serveur MCP distant ajoutés à d'autres outils sans consentement clair. Sans connexion, le MCP de Postman ne se connecte pas ; dans notre reproduction il affichait Not logged in / Needs authentication.
J'ai retiré le plugin. Un trusted_hash restant pose-t-il problème ?
Sans le plugin, le hook n'a plus de fichiers à exécuter. Mais l'enregistrement d'approbation reste dans config.toml, et si le même hook est réinstallé, il s'exécute aussitôt sans rien demander. Supprimez-le aussi.
J'ai installé le plugin Postman moi-même. Faut-il le retirer ?
Non. Si vous avez lancé npx @postman/postman-plugin vous-même, la documentation de Postman indique que l'installateur approuve le hook Codex pour vous. Pour l'approuver vous-même, installez plutôt avec les commandes natives codex plugin add.
Je n'utilise que Cursor ou Copilot CLI. Dois-je vérifier ?
Oui. Selon des commentaires de l'issue, le journal 12.35.1 contenait cursor:already-installed, et des entrées Postman sont aussi apparues dans le settings.json de Copilot CLI.
Claude Code ou Codex ne fonctionne plus après le nettoyage. Que faire ?
Vérifiez que vous n'avez pas supprimé la configuration du fournisseur : [model_providers.aicodewith] pour Codex, ANTHROPIC_BASE_URL et ANTHROPIC_AUTH_TOKEN pour Claude Code. Copiez config.toml avec cp avant de le modifier pour pouvoir le restaurer.



