Creuto is now an OpenAI Select Partner Read More

AI & Machine Learning

Postman Claude plugin: the hook that trusted itself

Postman 12.33.4 auto-installed the postman claude plugin, a Codex hook and a CLI, then reverted. What the evidence shows and how to remove it.

Postman Claude plugin: the hook that trusted itself

The Postman Claude plugin did not arrive because anyone asked for it. On 24 October 2026, Postman desktop 12.33.4 logged an auto-existing-upgrade that installed plugins into Claude Code and Codex, and its installer then tried to mark its own Codex startup hook as trusted. By the end of this post you will know what was written, what the evidence does not show, how to remove it, and how to stop the next desktop tool from doing the same.

That last part matters more than Postman, which has said it is reverting the change. Desktop apps editing your engineers' coding agents is a pattern that will return from someone else.

The key facts, with dates

WhatDetailSource
Install logged24 Oct 2026, 09:34 UTC, Postman 12.33.4, "results":["claude-code:installed","codex:installed"]Issue #14370 body
Issue opened25 Oct 2026, titled "[SEVERE] Desktop auto-installs Codex/Claude plugins; installer attempts to trust its own startup hook"GitHub
Hacker News3 Nov 2026, 1,525 points, headline says Postman "attempts to share all API data"HN
Postman's reply5 Nov 2026: "we are reverting this change"; issue closed and locked the same dayIssue #14370 comments

What the Postman Claude plugin install actually changed

The original report quotes Postman's own log at ~/Library/Application Support/Postman/logs/main.log: autoInstall.plugin.existing-user finished with outcome installed, source auto-existing-upgrade. The reporter had simply opened an existing, signed-in copy of the app.

Five things landed on that Mac, according to the report:

  • Codex: ~/.codex/config.toml gained a [marketplaces.postman] entry pointing at the postman-plugin Git repository, [plugins."postman@postman"] with enabled = true, and a [hooks.state] record holding a trusted_hash for Postman's session-start hook.
  • A SessionStart hook registered for startup|clear|compact, printing a block of instructions into every new Codex session.
  • A remote MCP server at https://mcp.postman.com/mcp, which in the reporter's Codex logs failed with "Auth required".
  • Claude Code: postman@claude-plugins-official enabled in ~/.claude/settings.json, recorded at user scope in ~/.claude/plugins/installed_plugins.json.
  • The Postman CLI: an executable and its lib directory in ~/.local/bin.

A second user reported the same path on 3 November, when the app updated from 12.31.3 to 12.35.1: the CLI, the Claude Code plugin and the Codex marketplace and plugin entries were written, but that machine's config.toml had no trusted_hash. Another commenter found a Postman marketplace and "postman@postman": true in ~/.copilot/settings.json.

"Share all API data" is the headline, not the finding

The Hacker News submission, which reached 1,525 points, said Postman "attempts to share all API data". The report it linked to says the opposite in plain words: it "establishes unwanted integration and instruction changes; it does not claim to establish data exfiltration." The second reporter closed the same way: "I do not have evidence that data was uploaded."

The source is consistent with that. The pinned mcp.codex.json wires a remote MCP server that, on the reporter's machine, never authenticated. A plugin that can call Postman's cloud is a reason to look closely, but nothing in the thread shows API data leaving a machine.

Postman deserves the fair reading on two more points. Its downloads page documents a manual route for Claude Code, claude plugin install postman@claude-plugins-official, from Anthropic's official marketplace. And the injected instructions end with "User instructions (project instruction files such as AGENTS.md or CLAUDE.md, and direct requests) take precedence over this mandate." Neither excuses the silent install, but both point to careless rather than hostile.

The Codex hook that trusted itself

Codex's documentation is direct about hooks: "Non-managed hooks must be reviewed and trusted before they run." Codex records trust against the hook's current hash, and new or changed hooks are skipped until someone trusts them through /hooks. That review is the consent step.

Postman's installer skipped it. In the pinned codex-hooks.ts, a function commented "Approves only Postman's current hook after installation" starts codex app-server, reads the hook's hash with hooks/list, and calls config/batchWrite to upsert hooks.state with that trusted_hash. The reporter is careful here too: the source proves the attempt, but "the trust record alone does not prove who created that specific record."

What the hook then says is the reason trust matters. The session-start text, wrapped in an <EXTREMELY_IMPORTANT> tag, tells the agent: "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." That covers most of what an API team does all day. The reporter noticed it as Codex "repeatedly routing API work through Postman skills".

The honest lesson is narrower than "Postman is malware" and more useful. A trust record that lives in a user-writable file, written through the host's own API, can be minted by any process running as that user. Consent that a vendor can grant on your behalf is not consent.

Has Postman reverted the automatic plugin install?

Yes, for future installs. On 5 November a Postman team member wrote that the change was meant "to simplify the setup for developers who use agents to build APIs", that Postman would be "re-designing the experience with the right level of control", and that "in the meantime, we are reverting this change." The issue was locked hours later.

The reply does not say whether the revert removes what was already written. A user asked exactly that in the thread before it was locked, and it went unanswered there. Treat any machine that ran an affected build as still carrying the plugins until you have checked.

How to remove the Postman plugin from Claude Code and Codex

Every path below comes from the issue thread; check each one rather than assuming.

  1. Confirm it ran. grep auto-existing-upgrade ~/Library/Application\ Support/Postman/logs/main.log shows whether the existing-user install fired, and which agents it touched.
  2. Claude Code. Run claude plugin uninstall postman@claude-plugins-official, which defaults to user scope, then confirm the entry is gone from ~/.claude/settings.json and ~/.claude/plugins/installed_plugins.json.
  3. Codex. Remove [marketplaces.postman], [plugins."postman@postman"] and any [hooks.state."postman@postman:hooks/codex-hooks.json:session_start:0:0"] block from ~/.codex/config.toml, then open /hooks in Codex to confirm nothing Postman remains trusted.
  4. The CLI. Delete the postman executable and its lib directory from ~/.local/bin if you did not install them yourself.
  5. Other hosts. Check ~/.copilot/settings.json and ~/.copilot/installed-plugins, and Cursor's plugin list if your team uses it.

Postman's app has an uninstall entry under Help, Postman CLI and Plugins. One commenter reported it did not remove the Copilot entry, so verify the files afterwards either way.

Coding agent hooks trust is a team setting, not a personal one

Cleaning one laptop fixes one laptop. If your engineers run Claude Code or Codex against your repositories, the controls that hold are the managed ones, because both tools let an administrator set them above anything in a user's own config.

ControlClaude Code (managed-settings.json)Codex (requirements.toml)
Block a specific plugin"enabledPlugins": {"postman@claude-plugins-official": false} blocks installation at every scopeNo plugin block in the hooks docs; remove the config entries
Only admin-approved hooks run"allowManagedHooksOnly": trueallow_managed_hooks_only = true
Block an MCP server"deniedMcpServers": [{"serverUrl": "https://mcp.postman.com/*"}]Not in the hooks docs; remove the plugin

Claude Code reads managed settings from /Library/Application Support/ClaudeCode/managed-settings.json on macOS and /etc/claude-code/managed-settings.json on Linux, and no user, project or local value overrides them. A managed false in enabledPlugins means the plugin is "blocked from installation at every scope and hidden from the marketplace". Under allowManagedHooksOnly, user, project and local hooks and hooks from plugins you have not force-enabled are blocked. Codex's equivalent, per its hooks documentation, "skips hooks from user, project, session, and plugin sources, but still loads managed hooks".

The counter-argument is real. Postman's stated reason, that developers struggled to wire these tools up, is plausible, and a locked-down hook policy also blocks the useful personal hooks your engineers wrote. This is the wrong choice for a small team where every engineer manages their own agent setup deliberately. For a team that has already had to decide on default-on AI features, though, the cost of one allowlist is lower than discovering an instruction in every session after the fact. We made a similar argument about an MCP setup that quietly opened a local port: agent tooling earns trust one explicit grant at a time.

Keep API tooling and agents under explicit control

The decision in front of you is not whether to keep Postman. It is who may write to your agents' configuration, and whether your own integrations would pass the test Postman failed. If you are building API tooling, MCP servers or agent integrations that other teams will install, design the consent step first: an explicit opt-in in the host, no self-approved hooks, and an uninstall path that removes everything it wrote.

That is how we approach API development and integrations at Creuto. If you want a second pair of eyes on how your API tooling reaches into coding agents, or help building an integration your security team will sign off, talk to us.

Frequently asked questions

Postman desktop 12.33.4 logged an auto-existing-upgrade on 24 October 2026 that installed the Postman plugin into Claude Code and Codex for an existing signed-in user who had only opened the app. The reporter describes no opt-in in either agent, and Postman later said it was reverting the change.

No evidence in GitHub issue 14370 shows the Postman Claude plugin uploading API data. The reporter states the report does not claim to establish data exfiltration, a second affected user said the same, and the Codex plugin's remote MCP connection failed authentication on the original machine.

Postman's SessionStart hook printed instructions into each new Codex session telling the agent to load the postman:api-engineer skill before any non-trivial API engineering task, from design to deployment. The instructions also say AGENTS.md, CLAUDE.md and direct user requests take precedence over that mandate.

Removing the Postman plugin means running claude plugin uninstall postman@claude-plugins-official, deleting the Postman marketplace, plugin and hooks.state entries from ~/.codex/config.toml, removing the postman executable and lib folder from ~/.local/bin, and checking ~/.copilot/settings.json if your team uses Copilot. Afterwards, open /hooks in Codex to confirm nothing remains trusted.

Postman said on 5 November 2026 that it is reverting the automatic plugin install and will redesign the experience with the right level of control. Its reply did not say whether plugins already written to existing machines will be removed, so affected machines should be checked and cleaned by hand.

Teams can use managed settings to stop desktop apps changing coding agent behaviour. In Claude Code, a managed enabledPlugins entry set to false blocks a plugin at every scope and allowManagedHooksOnly limits hooks to approved ones; in Codex, allow_managed_hooks_only in requirements.toml skips user and plugin hooks.

Written by

Akash Mohapatra

Akash Mohapatra

Co Founder & Director

9 Nov 2026

·

8 min read

Share

LET'S CONNECT

Connect with Creuto!

Ready to take the first step towards unlocking opportunities, realizing goals, and embracing innovation? We're here and eager to connect.