The repository packages a skills-only plugin:
.agents/plugins/marketplace.json
plugins/serpapi/.codex-plugin/plugin.json
plugins/serpapi/LICENSE
plugins/serpapi/assets/
plugins/serpapi/skills/serpapi-setup/
plugins/serpapi/skills/serpapi-web-search/
From the repository root:
codex plugin marketplace add .
codex plugin add serpapi@serpapiAfter installation, start a new task in the client where the plugin is installed. For Codex CLI, start a new session.
If your Codex installation includes the plugin-creator and skill-creator system skills, run their validators:
uv run --with pyyaml python "${CODEX_HOME:-$HOME/.codex}/skills/.system/plugin-creator/scripts/validate_plugin.py" plugins/serpapi
uv run --with pyyaml python "${CODEX_HOME:-$HOME/.codex}/skills/.system/skill-creator/scripts/quick_validate.py" plugins/serpapi/skills/serpapi-setup
uv run --with pyyaml python "${CODEX_HOME:-$HOME/.codex}/skills/.system/skill-creator/scripts/quick_validate.py" plugins/serpapi/skills/serpapi-web-searchCheck the manifests and POSIX credential helper:
uv run python -m json.tool .agents/plugins/marketplace.json >/dev/null
uv run python -m json.tool plugins/serpapi/.codex-plugin/plugin.json >/dev/null
bash -n plugins/serpapi/skills/serpapi-setup/scripts/save-key.shIn a fresh task, test setup and search:
Use SerpApi to search Google Light for coffee.
The agent should reuse working access or load serpapi-setup, verify a real search through the selected route, and resume the request. Require a nonempty organic title and link with no API error.
Create a clean ZIP with one top-level plugin directory. The -X flag removes macOS file attributes from the archive:
package_dir=$(mktemp -d)
(cd plugins && zip -q -r -X "$package_dir/serpapi-plugin-0.2.0.zip" serpapi \
-x '*/__pycache__/*' '*.pyc' '*/.DS_Store')
unzip -t "$package_dir/serpapi-plugin-0.2.0.zip"Upload that ZIP through the Skills only submission path. Keep the MIT license inside the plugin directory and do not package repository-level files beside serpapi/.
Use SerpApi's llms.txt as the index of published API documentation. Each linked Markdown page declares its engine identifier in its front matter and documents its required inputs. Do not infer one engine's parameters from another engine.
- Fork the repository.
- Create a feature branch.
- Make the smallest change that solves the problem.
- Run the validation commands above.
- Open a pull request with the validation results.