JFrog plugin for OpenAI Codex: artifact management, security scanning, supply-chain best practices, and Agent Guard.
The JFrog plugin provides the following capabilities, grouped by component:
| Component | Feature | Description |
|---|---|---|
| MCP | JFrog MCP server | Bundled jfrog MCP server (.mcp.json) at https://<JFROG_PLATFORM_URL>/mcp; this server signs in via OAuth (codex mcp login jfrog), so it needs no API key. |
| Skill | JFrog Platform | Interact with Artifactory repositories, builds, permissions, users, access tokens, projects, release bundles, and platform administration via the JFrog CLI and REST/GraphQL APIs. Also covers security audits, CVE lookups, and Advanced Security exposure queries. |
| Skill | Package curation | Check whether npm, Maven, PyPI, Go, and other packages are safe, curated, or allowed, then download them through Artifactory remote caches or curation-aware package managers. |
| Hook + Skill | Agent Package Resolution (Preview) | Automatically route packages installed by the AI agent through your organization's JFrog Artifactory, keeping agent-driven installs inside your Curation, Xray, and governance perimeter. |
| Skill | Agent Guard | Codex manages MCPs through the JFrog Agent Guard. Through the Agent Guard you can discover, install, configure, update, and remove MCP servers from the JFrog AI Catalog approved for your project, and authenticate to remote HTTP MCPs via OAuth, API key, or bearer token. |
Before installing, make sure you have:
- JFrog host URL and access token — Your JFrog platform URL and a valid access token.
- OpenAI Codex — Installed, with plugin support (
codex pluginCLI commands available). - Node.js (≥ 18) — with
npxon yourPATH(used by the Agent Guard). - Skill runtime requirements —
jfCLI,jq, andcurlonPATH, plus a configured JFrog instance. For the minimum versions, see the upstream skillsRequirements. Configure the CLI withjf config add— see Authentication. - JFrog AI Catalog (optional) — If you want to use the Agent Guard feature, your JFrog subscription needs to include the AI Catalog entitlement. Contact your JFrog account team if you're unsure whether it's enabled.
- JFrog CLI ≥ 2.105.0 (optional) — If you want the Agent Guard to auto-resolve the credentials/server ID from the JFrog CLI configuration.
- JFrog project (optional) — If you want to use the Agent Guard feature.
Add the JFrog marketplace and install the plugin with the Codex CLI:
codex plugin marketplace add jfrog/codex-plugin
codex plugin add jfrog@codex-pluginBrowse installed plugins in the Codex TUI with /plugins. Installing the plugin
does not trust the SessionStart hook — restart Codex, run /hooks, and
trust the JFrog Package Resolution command. ChatGPT web does not run hook
scripts.
Test an uncommitted checkout without publishing. From (or pointing at) your clone
— the repo root is the marketplace root; .agents/plugins/marketplace.json
registers the jfrog plugin:
codex plugin marketplace add /path/to/codex-plugin
codex plugin add jfrog@codex-pluginConfigure the JFrog CLI so the skills and Agent Guard can reach your platform. Run
jf login for browser-based setup, or if you have never configured the JFrog CLI
on this machine:
-
Open your terminal.
-
Run:
jf config add
-
Follow the interactive prompts to enter your JFrog platform URL and access token.
The plugin bundles the jfrog MCP server (.mcp.json). After
installing, do two things:
- Set your host. Outside Codex, in your terminal, find the install path with
codex plugin list | grep jfrog@codex-plugin; thePATHcolumn is your<PATH>. Edit<PATH>/.mcp.jsonand replace<JFROG_PLATFORM_URL>in theurlwith your full JFrog Platform host — e.g.mycompany.jfrog.io(or your self-hosted / custom domain). - Log in (OAuth). Run
codex mcp login jfrogand finish the browser sign-in.
Restart Codex; the jfrog MCP server and its tools are now available (verify with
codex mcp list).
Verify your installation right after setup. Run the codex … commands below in
your terminal, outside Codex; / commands are typed inside the Codex TUI. After
restarting Codex, confirm:
-
Plugin is installed and enabled:
codex plugin list | grep jfrog@codex-pluginYou should see the
jfrog@codex-pluginrow reportinginstalled, enabled, with its version and install path:jfrog@codex-plugin installed, enabled <VERSION> <PATH>If the row is missing or shows
not installed, see Recovery. -
Skills are discoverable — in the Codex TUI, type
/skillsand confirm the JFrog skills appear. See Discovering and invoking skills. -
MCP server is connected — run
codex mcp listand confirmjfrogis connected (aftercodex mcp login jfrog). -
SessionStart hook is trusted —
/hookslists the JFrog Package Resolution command as trusted. Without that, Agent Package Resolution does not inject. -
jf rt ping— succeeds against your configured server.
If any check fails, see Recovery. Setting MCP environment variables
by hand does not repair a failed MCP initialization — re-run jfrog-init
instead. An untrusted SessionStart hook is a /hooks step, not an init failure.
| Symptom | Do this | Do not do this |
|---|---|---|
| MCP missing after install | Run jfrog-init, edit the plugin .mcp.json host if needed, run codex mcp login jfrog, restart Codex, then codex mcp list. |
Assume exporting JFROG_PLATFORM_URL will register MCP. Codex reads the host from .mcp.json. |
jfrog-init stopped at CLI/auth |
Follow the skill prompt (jf config add, web login, or token path), then re-run jfrog-init. |
Skip init and only export env vars. |
Placeholder still in .mcp.json |
Set the host in <install-path>/.mcp.json, run codex mcp login jfrog, restart Codex. |
Reinstall the plugin when only the host placeholder is wrong. |
| Plugin not listed | Re-run codex plugin add jfrog@codex-plugin outside Codex, then restart Codex. |
Run install commands from inside the Codex TUI. |
/hooks shows the Package Resolution command as untrusted, or no Artifactory routing in a new session |
Restart Codex, open /hooks, and trust the exact command. A later change to the hook definition requires trust again. |
Assume codex plugin add approved the hook. Do not use --dangerously-bypass-hook-trust as the normal path. |
| ChatGPT web never routes installs | Use Codex CLI or the ChatGPT desktop Codex surface. | Expect hook scripts to run on ChatGPT web. |
Preview Notice: This feature is in preview and licensed under the Apache License 2.0. For clarity: This software is provided "as-is" without warranty of any kind, and without support obligations or service level commitments. Behavior, APIs, conventions, and structure may change without notice between releases. JFrog makes no guarantees of backward compatibility during the preview release cycle. Use in production environments is at your own risk.
The plugin can now automatically route the packages your AI agent installs (npm, PyPI, Maven, Go, Docker, Helm, and NuGet) through your organization's JFrog Artifactory instead of public registries. This keeps agent-driven dependency installs inside your organization's governance perimeter.
Agent Package Resolution is in preview. The shipped template enables it with empty repository bindings (nothing is routed until Consent Enable or an admin adds defaultGlobalRepos). To get started:
- Users: see the User Guide.
- Admins: see the Admin Guide.
Installing the plugin does not skip /hooks trust. ChatGPT web does not run the SessionStart hook.
Once configured, interact with the JFrog plugin through natural language. Examples are grouped by capability.
Reach the JFrog skills three ways:
/skills— opens the Skills menu; choose List skills to browse and run one. Tip: press@to open the skills list directly.@— type@followed by a skill name to mention it inline (e.g.@jfrog,@jfrog-package-curation).- Natural language — just describe your task; Codex picks a matching skill by
its
description(the examples below work this way).
If a newly installed skill doesn't show up, restart Codex so it re-scans plugins.
| Ask the agent… | What happens |
|---|---|
| "List my Artifactory repositories." | Returns repositories via the JFrog CLI. |
| "Upload this build to Artifactory." | Publishes build artifacts and metadata. |
| "Run a security audit on this project." | Runs an Xray / Advanced Security audit and summarizes findings. |
| "Show me details on CVE-2021-23337." | Looks up CVE details in JFrog Advanced Security. |
| "Create a scoped access token for CI." | Creates an access token with the requested scope. |
| "Promote this release bundle to production." | Uses Lifecycle / Distribution APIs to promote the bundle. |
| Ask the agent… | What happens |
|---|---|
"Is lodash@4.17.21 safe to install?" |
Checks JFrog Public Catalog signals and curation policy for the package. |
| "Is this Maven package approved for use?" | Checks curation entitlement and policy for the requested package. |
"Download requests via JFrog." |
Resolves the package through an Artifactory remote cache or curation-aware package manager. |
When Agent Package Resolution is enabled and configured, no special prompt syntax is required. Ask the agent to install or use a package as you normally would, and the plugin routes supported package operations through your organization's Artifactory.
| Ask the agent… | What happens |
|---|---|
"Add lodash to this project." |
Resolves the npm package through the configured Artifactory repository. |
| "Add Excel file import to this app." | The agent selects a suitable package and resolves it through the configured Artifactory repository. |
"Pull the alpine Docker image." |
Pulls the image through the configured Artifactory Docker repository. |
| Ask the agent… | What happens |
|---|---|
| "Which MCP servers can I install?" | Returns all MCP servers approved for your current project that you can install. |
| "What MCP servers do I already have?" | Returns only the MCP servers already installed on your machine. |
| "Show me the details for the filesystem MCP server." | Returns detailed metadata, required configuration (environment variables, runtime arguments), and active tool policies for a given server. |
| "Add the GitHub MCP server." | Installs an approved MCP server and syncs its tool policies locally. Secrets are requested via a CLI command — never in chat. |
| "Update the environment variables for the Slack MCP." | Replaces the configuration for an already-installed server without removing and reinstalling it. |
| "Remove the Slack MCP server." | Removes the server and its stored credentials from your local setup. Changes apply immediately. |
| "Log in to the remote Jira MCP server using OAuth." | Authenticates with a remote HTTP-based MCP server (OAuth, API key, or bearer token). |
When an MCP server requires a sensitive configuration value, the agent cannot set it directly. Instead, it returns a CLI command for you to copy and run in your terminal. Secrets such as API keys, tokens, and connection strings are never exposed in the agent chat history.
See the JFrog MCP Registry troubleshooting guide.
The skills/ tree is vendored from
jfrog/jfrog-skills at the version
pinned in scripts/sync-skills-vendor.json.
To pull a newer upstream release into this repo:
-
Bump
pininscripts/sync-skills-vendor.jsonto the new upstream tag. -
Re-sync and commit the refreshed tree:
node scripts/sync-skills.mjs
It downloads the pinned tarball from
codeload.github.comand replaces the directories listed inpaths(today:skills/). -
Bump
versionin both.codex-plugin/plugin.jsonandpackage.json(they must match — CI enforces this) so the published plugin reflects the new skills bundle. -
Commit the pin bump, the regenerated
skills/tree, and the version bump together, and open a PR (see Releasing).
See VENDOR.md for the full picture.
The modules/ tree is vendored from GHE jfrog-agent-hooks at the pin in
.github/scripts/sync-modules-vendor.json.
Automated chore/sync-modules-v* PRs replace that tree. To refresh locally:
JFROG_AGENT_HOOKS_PATH=/path/to/jfrog-agent-hooks node .github/scripts/sync-modules.mjsDo not hand-edit files under modules/. hooks/hooks.json is owned by this
repo and is not part of the vendor slice.
Releases are cut automatically by .github/workflows/release.yml
when a commit lands on main with a version in .codex-plugin/plugin.json that is newer than
the latest release tag (cross-checked against package.json). The workflow publishes a GitHub
Release v<version> with a zipped artifact. Every merge to main must bump both manifests —
a commit that lands without a bump fails the workflow instead of releasing. See
CONTRIBUTING.md for the full flow.
npm test # unit tests for the validator
npm run validate # lint manifests + skill frontmatter
See CONTRIBUTING.md for development workflow and
pull-request expectations.
See SECURITY.md for how to report vulnerabilities.
Licensed under the Apache License 2.0.