How to Specify the Path Format for OpenAI Plugins: Syntax and Examples

OpenAI plugins require POSIX-style relative paths starting with ./ and using forward slashes for every file reference in the .codex-plugin/plugin.json manifest to ensure cross-platform compatibility and security sandboxing.

The openai/plugins repository enforces a strict path format for OpenAI plugins that governs how the runtime loader resolves file references. Every path declared in the plugin manifest must be relative to the plugin root, use forward slashes exclusively, and begin with an explicit ./ prefix. Following these conventions ensures your plugin functions correctly across Windows, macOS, and Linux environments without resolution errors.

Manifest Path Requirements

In the .codex-plugin/plugin.json manifest, the runtime loader resolves all file references from the plugin's root directory—the folder containing the .codex-plugin subdirectory. Any deviation from the relative path format causes the loader to fail to locate the target files.

Apps and Interface Assets

The optional apps field must reference its configuration using a relative path such as "./.app.json". Asset fields including interface.logo and interface.composerIcon must point to bundled files using repository-relative paths like "./assets/logo.png".

Skills and Hooks Arrays

For skills and hooks that reference external configuration files, the same relative path rules apply. Any JSON or YAML file referenced in these arrays must be reachable via a relative URL starting with ./ and using forward slashes exclusively.

Architectural Design of Path Resolution

The OpenAI plugin loader uses Node.js's path API to normalize all file references. This architecture ensures consistent behavior across operating systems while maintaining strict security boundaries.

Repository-Relative Resolution

The loader constructs absolute paths by joining the plugin root directory with the manifest-provided relative string. This design allows the same plugin to be checked out at any disk location or deployed in a container without rewriting absolute paths.

Cross-Platform Normalization

By enforcing forward-slash separators, the runtime works uniformly on all platforms. The underlying Node.js path library handles normalization, but the manifest must provide the POSIX-style format to avoid platform-specific interpretation errors.

Security Sandboxing

The loader explicitly rejects any path attempting to escape the plugin root, such as "../some/secret.txt". This prevents malicious manifests from accessing files outside the plugin sandbox, ensuring that all file operations remain confined to the plugin directory.

Valid Path Format Examples

The Attio plugin in plugins/attio/.codex-plugin/plugin.json demonstrates the canonical format:

{
  "apps": "./.app.json",
  "interface": {
    "composerIcon": "./assets/logo.png",
    "logo": "./assets/logo.png"
  }
}

When defining agents or skills in YAML files, maintain the same relative format:

agents:
  - name: "example-agent"
    file: "./agents/example-agent.yaml"

The runtime loads these manifests by joining the plugin root with the relative path:

const path = require('path');
const pluginRoot = __dirname; // e.g., /repo/plugins/example
const manifestPath = path.join(pluginRoot, './.codex-plugin/plugin.json');
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));

Key Reference Files

Several files in the repository establish these path conventions:

Summary

  • Use forward slashes (/) exclusively; never use backslashes.
  • Start every path with ./ to denote repository-relative references explicitly.
  • Keep all file references inside the plugin directory; escaping via ../ is blocked for security.
  • Reference the Attio plugin implementation at plugins/attio/.codex-plugin/plugin.json for canonical examples.

Frequently Asked Questions

Can I use absolute paths in OpenAI plugin manifests?

No. The runtime loader rejects absolute paths and requires all file references to be relative to the plugin root directory using the ./ prefix. Absolute paths would break portability across different environments and deployment locations.

Why does my plugin fail to load on Windows?

If you use backslashes (\) or omit the ./ prefix, the Node.js path normalization may fail to resolve the file correctly on Windows systems. Always use forward slashes and explicit relative prefixes to ensure cross-platform compatibility as implemented in the openai/plugins repository.

Can I reference files outside the plugin directory using ../?

No. The loader explicitly rejects paths containing ../ or any traversal sequences that would escape the plugin root. This security measure prevents unauthorized file access outside the plugin sandbox.

Is the ./ prefix mandatory for all paths?

While the loader may resolve simple filenames in some contexts, the specification requires the explicit ./ prefix for readability and to avoid ambiguity with built-in module names. All official plugins in the repository consistently use this format for every file reference.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →