Agent Plugins for ChatGPT and Codex. 中文
Four plugins, published by RetiredPhysicist. Two talk to a remote MCP endpoint. Two run a local stdio server on the machine where Codex is open. None of them ship a hosted backend of their own.
flowchart LR
Client["Codex or ChatGPT"] --> Plugin["plugin"]
Plugin --> Remote["remote MCP"]
Plugin --> Local["local stdio server"]
Remote --> AnySearch["all-search: api.anysearch.com"]
Remote --> DejaVu["dejavu-memory: your DejaVu server"]
Local --> MarkWire["markwire"]
Local --> Things["things: Things 3 on macOS"]
| Plugin | Version | Setup | Client |
|---|---|---|---|
| all-search | 0.1.0 | none | Codex, ChatGPT |
| dejavu-memory | 0.3.1 | one config block | Codex |
| markwire | 1.0.0 | none | Codex |
| things | 1.0.0 | Things 3 | Codex |
Codex with plugin support. node on PATH for markwire and things.
codex plugin marketplace add RetiredPhysicist/openai-plugins
codex plugin add markwire@retiredphysicistReplace markwire with all-search, dejavu-memory, or things. A local checkout uses the same second command after:
codex plugin marketplace add /absolute/path/to/openai-pluginsIn ChatGPT, open the Plugins Directory, choose the RetiredPhysicist source, and install from there. MarkWire and Things are local-only, so their editors are available in Codex, not ChatGPT. all-search needs nothing else after install. DejaVu needs the config block below.
The plugin bundles https://api.anysearch.com/mcp. That endpoint answers without a key, at a shared rate limit. To use your own quota, add this to the Codex config:
[mcp_servers.anysearch]
url = "https://api.anysearch.com/mcp"
http_headers = { Authorization = "Bearer as_sk_..." }The bundled research skill routes by question shape.
| Tool | Effect |
|---|---|
search |
one query; ranked titles, URLs, and snippets |
batch_search |
two to five queries in one call |
get_sub_domains |
list structured verticals and the parameters each one requires |
extract |
turn a URL into Markdown (HTML, text, JSON, Markdown; not PDF or media) |
Call get_sub_domains before a vertical query. A general search over a domain-specific question returns worse results. Page text from extract is data to read, not instructions.
The plugin ships no MCP server. You use it through the plugin surface; the MCP connection is configuration, not an end-user API. The memory graph is an MCP App served by your own DejaVu worker. Add that worker under the name dejavu:
[mcp_servers.dejavu]
url = "https://your-dejavu.example.com/mcp"
http_headers = { CF-Access-Client-Id = "your-client-id", CF-Access-Client-Secret = "your-client-secret" }Keep the name dejavu. The header pair is only for a deployment behind Cloudflare Access. A server without Access needs url alone.
Open DejaVu Memory from the sidebar. Search highlights matching nodes. Click a node to read it. Double-click to expand its children. Drag to rearrange. Scroll to zoom. The plugin provides the graph and the model-facing experience; read_memory, search_memory, create_memory, update_memory, and delete_memory stay on the server behind it.
Server setup follows the DejaVu deployment guide. The graph is an OpenAI/Codex plugin surface. The same server, without the graph, is packaged for Pi and dsh.
The config step is manual for three reasons:
- Each deployment has its own hostname, and the plugin format does not expand variables in MCP URLs.
- A service-token secret cannot sit in a public plugin package.
- ChatGPT sends OAuth 2.1 only. It cannot send a Cloudflare Access service token, so that header pair works in Codex and not in ChatGPT.
A local stdio server (node ${PLUGIN_ROOT}/server/server.mjs) plus a self-contained editor. Ask for a wireframe, or call open_wireframe. Pass shapes when the layout is known, and a session token to edit the previous drawing. Coordinates start at row 0, column 0.
| Shape | Fields |
|---|---|
| box | row, col, height, width |
| h, v | row, col, length |
| text | row, col, text |
| stroke | row, col, char |
| cells | cells: [{ row, col, char }] |
The editor has select, text, box, line, arrow, pencil, eraser, button, input, card, table, modal, dropdown, toggle, tabs, layers, properties, undo, redo, clear, grid toggle, dark mode, canvas sizes, and copy Markdown. MCP App entrypoints: thread opens a content tab beside the conversation; global opens fullscreen from the primary sidebar.
Independent implementation of the product idea in Mockdown. No Mockdown source is included. Toolbar icons are inlined from Phosphor Icons (MIT).
From plugins/markwire:
npm install
npm run build
npm testA local stdio server (node ${PLUGIN_ROOT}/server/things.mjs) that reads the Things 3 database on this Mac and writes back through the Things URL scheme. Every write is read back before the tool reports success. No account, no cloud service, no background helper.
codex plugin marketplace add RetiredPhysicist/openai-plugins
codex plugin add things@retiredphysicistThen open Things in the Codex sidebar.
Requirements:
- macOS, with Things 3 installed and opened at least once.
- Node.js 22.5 or later (
node:sqlite). - For edits and completion: Things → Settings → General → Enable Things URLs, then Manage to turn on authentication. Adding and reading to-dos works without it.
Creating or renaming an area uses AppleScript, so macOS asks for automation permission the first time. Reads and to-do writes do not.
| Tool | Effect |
|---|---|
open_workspace |
open the workspace (model-visible; thread and global entrypoints, no sidebar quick action) |
get_tasks |
one view: inbox, today, upcoming, anytime, someday, logbook, trash |
get_task / get_project |
one item, with notes, tags, checklist, headings |
get_sidebar / get_tagged |
sidebar counts, projects, areas, tags; open tasks for one tag |
search_things |
search to-dos and projects by title and notes |
add_todo / update_todo / complete_todo |
create, edit, complete, or reopen a to-do |
add_project / update_project |
create or edit a project |
move_todos |
move many to-dos into a project or area |
create_area / update_area |
create an area, or rename it (AppleScript) |
show_in_things |
bring Things to the front on one item |
Things cannot create repeat rules, cannot create standalone headings, and cannot delete items through this surface. Do those in the Things app.
From plugins/things: npm install, npm run build, npm test.
Each plugin declares its own version in plugin.json: a plugin may include skills under skills/, mcp.json when it bundles a server, and OpenAI metadata under extensions.com.openai. The marketplace catalog is .agents/plugins/marketplace.json (name retiredphysicist).
openai-plugins/
├── .agents/plugins/marketplace.json
└── plugins/
├── all-search/
│ ├── plugin.json
│ ├── mcp.json
│ └── skills/research/SKILL.md
├── dejavu-memory/
│ ├── plugin.json
│ ├── assets/
│ └── skills/remember/SKILL.md
├── markwire/
│ ├── plugin.json
│ ├── mcp.json
│ ├── assets/
│ ├── server/
│ ├── skills/wireframe/SKILL.md
│ └── ui/
└── things/
├── plugin.json
├── mcp.json
├── assets/
├── server/
├── skills/things/SKILL.md
└── ui/
dejavu-memory has no mcp.json. The server URL is the config block above, not a file in this repo.
MIT. Each plugin.json sets "license": "MIT". This repository has no separate LICENSE file.



