Import a local plugin

Add a plugin ZIP to Coskey's local marketplace, then install, enable or upgrade it in ChatGPT.app.

When a plugin publisher gives you a ZIP, import it into Coskey’s local plugin marketplace first, then install or upgrade it in ChatGPT.app. This avoids waiting for a remote index update and still keeps ChatGPT.app’s installation confirmation in the loop.

← Back to the plugin manual

The local import entry in Plugins

1. Importing is not installing

Local import only validates the ZIP and adds it to the local marketplace. It does not install the plugin in ChatGPT.app:

Action Where Result
Local import Coskey → Plugins Validates the ZIP and adds it to the local marketplace; the card is marked Local
Install / enable / upgrade ChatGPT.app → Plugins Copies the plugin into the app cache and records its enabled state

Seeing Not installed in Coskey after an import is expected. Refreshing the marketplace also does not remove a local plugin.

2. Prepare the plugin ZIP

The plugin package must be a .zip file with plugin.json at its root:

my-plugin.zip
├── plugin.json
├── assets/
│   └── logo.svg          # optional display icon
├── skills/
│   └── example-skill/
│       └── SKILL.md
├── mcp.json              # optional
└── server/               # optional, for a local MCP

One wrapper directory is also accepted, for example my-plugin/plugin.json. Files cannot be split between the root and a subdirectory; Coskey removes at most one wrapper directory.

Before importing, make sure that:

  • the root or sole wrapper contains plugin.json, encoded as UTF-8 JSON;
  • name and a semver version are present, and name is not the reserved built-in plugin coskey-tools;
  • the package includes at least one skills/<skill>/SKILL.md or a valid mcp.json;
  • the ZIP contains no symbolic links, absolute paths, .. segments, backslash paths, case-insensitive duplicate paths or Windows reserved names;
  • the source is a regular .zip file rather than a symbolic link.

Current import limits:

Item Limit
ZIP size 2 GiB
ZIP entries 409,600
Total extracted size 10 GiB
plugin.json size 1 MiB

If you built the ZIP yourself, check its first entries:

unzip -Z1 my-plugin.zip | sed -n '1,20p'

plugin.json should appear near the start, either directly or inside one wrapper directory.

3. Import the ZIP

  1. Open Coskey → Plugins.
  2. Click Local import at the end of the plugin list.
  3. Choose the prepared .zip file.

Coskey checks the file type, size, paths and manifest before adding it to the local marketplace; a failed import leaves existing versions intact. A green confirmation appears and the list gains a plugin card marked Local:

The imported local plugin card

If the plugin has a display icon, include it in the ZIP and point extensions.com.openai.interface.logo at its relative path inside the package, for example ./assets/local-example-logo.svg. Do not use a local path such as ~/Downloads/...; after import, ChatGPT.app reads the icon from the plugin manifest.

Three details on the card are worth checking:

Detail Meaning
Version The version currently held in the local marketplace
Local The source is local-import; refreshing the marketplace keeps it
Not installed / Enabled Whether ChatGPT.app has installed and enabled it

Click the card to inspect its display name, plugin id, marketplace path, skills, MCP capabilities and installation state. A plugin with a local MCP clearly states that it runs commands on this machine; verify the source and MCP name before installing it.

4. Install or enable it in ChatGPT.app

  1. Click Open ChatGPT.app in Coskey.
  2. Open Plugins in ChatGPT.app.
  3. Select the Coskey plugin marketplace.
  4. Find the imported plugin and install it; reinstall or enable it if it was already installed.
  5. Return to Coskey and click Refresh if the installation status has not updated.

The top of the Plugins page is the Installed area; entries from Coskey’s local marketplace appear under Coskey plugin marketplace below it. The + on the right of each card is the install entry point:

The Plugins page: Installed area and Coskey plugin marketplace

Open a card to see its details: display name, author, description, plus skills and Information (developer, category, version, website). A plugin with a local MCP also gets an MCP servers section; check the name and source there before installing. The Install plugin button at the top right of the detail page does the same thing as the + on the list card:

Details of a locally imported plugin: skills and version

Both screenshots come from the manual’s isolated instance and show its demo Local Example plugin. Your own list and details show whichever plugins you installed or imported.

Coskey never writes ChatGPT.app’s plugin cache for you or bypasses the app’s installation confirmation. The plugin becomes available in ChatGPT.app after the card shows Installed and enabled.

5. Upgrade and roll back

To update a local plugin:

  1. Import the ZIP for the new version under the same plugin name.
  2. The new version becomes the active version in the local marketplace.
  3. Reinstall or upgrade the plugin in ChatGPT.app.
  4. Confirm in Coskey that the app cache now uses the expected version.

Importing a new version does not replace the old cache in ChatGPT.app automatically. If the detail page offers a previous generation, you can roll back the marketplace copy and reinstall in ChatGPT.app; the app continues to use whichever version was last installed from its Plugins page.

6. Troubleshooting

Symptom Fix
Nothing happens after choosing a ZIP Confirm the extension is .zip and that the source is not a symbolic link; Cancel makes no changes
plugin.json was not found Put plugin.json at the ZIP root, or use exactly one wrapper directory containing it
Name or version is invalid name cannot be coskey-tools; version must be semver such as 1.0.0
No skills or MCP were found Add at least one skills/<skill>/SKILL.md or a valid mcp.json
A ZIP entry is invalid Remove symbolic links, absolute paths, .. segments, backslash paths and duplicate paths, then repackage
The imported card says Not installed Expected: import only updates the local marketplace. Install it from ChatGPT.app’s Plugins page
A Local plugin survives a refresh Expected: refreshing the remote index does not delete local imports
ChatGPT.app cannot find the plugin Reopen ChatGPT.app and choose the Coskey plugin marketplace; if it is still missing, run Diagnostics from Coskey’s Plugins page
ChatGPT.app still uses the old version after an import Reinstall or upgrade it from ChatGPT.app’s Plugins page; refreshing Coskey alone is not enough

If the Plugins page is unavailable, the marketplace is missing, or the interface language is wrong, see ChatGPT.app checks and personalization.

7. Security boundary

Local import checks the package structure and paths; it does not audit the plugin’s code. A package with a local MCP may run commands on your computer after it is enabled, so import only trusted sources and review the permission details before installing.

Related: ChatGPT.app checks and personalization, FAQ.