Xây dựng plugin
Tạo, kiểm thử và phân phối plugin cho ChatGPT
Trang này dành cho tác giả plugin. Nếu bạn muốn duyệt, cài đặt và sử dụng plugin với ChatGPT Work trên web hoặc với ChatGPT Work hay Codex trong ứng dụng ChatGPT dành cho máy tính, hãy xem Plugin. Nếu bạn vẫn đang hoàn thiện một kho lưu trữ hoặc một quy trình cá nhân, hãy bắt đầu bằng một skill cục bộ. Hãy xây dựng plugin khi bạn muốn chia sẻ quy trình đó giữa các nhóm, đóng gói trình kết nối hoặc cấu hình MCP, đóng gói hook vòng đời hoặc phát hành một gói ổn định.
Một plugin có thể bao gồm skill, một ứng dụng được hỗ trợ bởi MCP hoặc cả hai. Nếu plugin của bạn cần kết nối với một dịch vụ hoặc cung cấp công cụ thông qua máy chủ MCP, hãy xem Xây dựng ứng dụng.
Để xem các ví dụ công khai hoàn chỉnh, hãy tham khảo Figma, Notion và Xây dựng ứng dụng web.
Tạo plugin bằng @plugin-creator
Để thiết lập nhanh nhất, hãy sử dụng skill @plugin-creator tích hợp sẵn.
Skill này tạo khung tệp kê khai .codex-plugin/plugin.json bắt buộc và cũng có thể
tạo một mục marketplace cục bộ để kiểm thử. Nếu đã có thư mục plugin,
bạn vẫn có thể sử dụng @plugin-creator để kết nối thư mục đó với một
marketplace cục bộ.
Tạo và kiểm thử cục bộ một plugin trỏ đến ứng dụng ở chế độ phát triển được hỗ trợ bởi máy chủ MCP
Bạn cũng có thể sử dụng skill plugin-creator nếu muốn kiểm thử cục bộ một plugin bao gồm ứng dụng được hỗ trợ bởi máy chủ MCP. Plugin vẫn cần một thư mục plugin và tệp kê khai cục bộ, nhưng bản thân ứng dụng sẽ khởi động trong chế độ nhà phát triển của ChatGPT.
Trước tiên, hãy bật chế độ nhà phát triển trong ChatGPT:
- Mở ChatGPT.
- Mở Cài đặt.
- Chọn Bảo mật và đăng nhập.
- Bật Chế độ nhà phát triển.
Sau đó, tạo ứng dụng trong chế độ nhà phát triển:
- Mở Cài đặt → Plugin hoặc trang Plugin.
- Chọn nút dấu cộng.
- Hoàn thành hộp thoại để tạo ứng dụng ở chế độ nhà phát triển cho máy chủ MCP của bạn.
- Sau khi ChatGPT tạo ứng dụng, hãy sao chép ID ứng dụng từ URL của trình duyệt. ID này bắt đầu
bằng
plugin_asdk_app.
Cung cấp ID plugin_asdk_app... đó cho @plugin-creator trong cuộc trò chuyện ChatGPT Work
hoặc $plugin-creator trong Codex. Ví dụ với ChatGPT Work:
Prompt cho Plugin Creator@plugin-creator create a Codex plugin for my ChatGPT app.
Use plugin_asdk_app_6a4c0062f3b88191855c0a80eac5d53d and name it Acme Support.
Include a personal marketplace entry so I can test it locally.Skill plugin-creator sẽ tạo thư mục plugin, tạo
.codex-plugin/plugin.json bắt buộc và thêm kết nối ứng dụng cho ứng dụng ChatGPT. Nếu bạn yêu cầu
skill tạo một mục marketplace cá nhân, plugin sẽ xuất hiện trong nguồn cục bộ của bạn
trong Thư mục Plugin để kiểm thử.
Sau khi skill plugin-creator tạo plugin:
- Xem lại
.app.jsonvà xác nhận rằng tệp này trỏ đến đúng IDplugin_asdk_app.... - Xem lại
.codex-plugin/plugin.jsonvà bảo đảm trườngappscủa tệp trỏ đến./.app.json. - Thêm mọi skill được đóng gói vào
skills/nếu plugin cần bao gồm các quy trình có thể lặp lại bên cạnh ứng dụng. - Nếu skill đã tạo một mục marketplace cá nhân, hãy làm mới ChatGPT, cài đặt plugin từ nguồn cục bộ trong Thư mục Plugin rồi kiểm thử plugin trong một cuộc trò chuyện mới.
Để biết cấu trúc tệp kê khai và bố cục tệp, hãy xem Cấu trúc plugin và Quy tắc đường dẫn.
Xây dựng danh sách plugin được tuyển chọn của riêng bạn
Marketplace là một danh mục plugin dạng JSON. @plugin-creator có thể tạo danh mục
cho một plugin và bạn có thể tiếp tục thêm các mục vào cùng marketplace đó
để xây dựng danh sách được tuyển chọn riêng cho một kho lưu trữ, nhóm hoặc quy trình cá nhân.
Trong ChatGPT Work hoặc Codex thuộc ứng dụng ChatGPT dành cho máy tính, mỗi marketplace xuất hiện dưới dạng
một nguồn có thể chọn trong Thư mục Plugin. Sử dụng
$REPO_ROOT/.agents/plugins/marketplace.json cho danh sách giới hạn trong kho lưu trữ hoặc
~/.agents/plugins/marketplace.json cho danh sách cá nhân. Thêm một mục cho mỗi
plugin trong plugins[], trỏ từng source.path đến thư mục plugin bằng một
đường dẫn có tiền tố ./ tương đối so với thư mục gốc của marketplace và đặt
interface.displayName thành nhãn bạn muốn ứng dụng hiển thị trong bộ chọn
marketplace. Sau đó, khởi động lại ứng dụng ChatGPT dành cho máy tính. Tiếp theo, mở Thư mục Plugin,
chọn marketplace của bạn rồi duyệt hoặc cài đặt các plugin trong
danh sách được tuyển chọn đó.
Bạn không cần tạo marketplace riêng cho từng plugin. Một marketplace có thể cung cấp một plugin duy nhất trong khi bạn kiểm thử, sau đó phát triển thành một danh mục được tuyển chọn lớn hơn khi bạn bổ sung thêm plugin.
Thêm marketplace từ CLI
Sử dụng codex plugin marketplace add để thêm và theo dõi một nguồn marketplace thay vì
chỉnh sửa config.toml theo cách thủ công. Các lệnh này hỗ trợ việc biên soạn plugin và
thiết lập danh mục. Sử dụng ứng dụng ChatGPT dành cho máy tính để cài đặt và kiểm thử plugin cục bộ.
codex plugin marketplace add owner/repo
codex plugin marketplace add owner/repo --ref main
codex plugin marketplace add https://github.com/example/plugins.git --sparse .agents/plugins
codex plugin marketplace add ./local-marketplace-rootNguồn marketplace có thể là ký hiệu viết tắt GitHub (owner/repo hoặc
owner/repo@ref), URL Git HTTP hoặc HTTPS, URL Git SSH hay thư mục gốc
marketplace cục bộ. Sử dụng --ref để ghim một Git ref và lặp lại --sparse PATH để sử dụng
sparse checkout cho các kho lưu trữ marketplace được Git quản lý. --sparse chỉ hợp lệ với
nguồn marketplace Git.
Để kiểm tra, làm mới hoặc xóa các marketplace đã cấu hình:
codex plugin marketplace list
codex plugin marketplace upgrade
codex plugin marketplace upgrade marketplace-name
codex plugin marketplace remove marketplace-namecodex plugin marketplace list in ra từng marketplace mà Codex đang xem xét
và đường dẫn gốc được phân giải, bao gồm các marketplace mặc định cục bộ và
các bản chụp marketplace đã cấu hình.
Tạo plugin theo cách thủ công
Bắt đầu bằng một plugin tối giản đóng gói một skill.
- Tạo một thư mục plugin có tệp kê khai tại
.codex-plugin/plugin.json.
mkdir -p my-first-plugin/.codex-pluginmy-first-plugin/.codex-plugin/plugin.json
{
"name": "my-first-plugin",
"version": "1.0.0",
"description": "Reusable greeting workflow",
"skills": "./skills/"
}Sử dụng name ổn định cho plugin theo kiểu kebab-case. Codex sử dụng giá trị này làm mã định danh plugin
và không gian tên thành phần.
- Thêm một skill vào
skills/<skill-name>/SKILL.md.
mkdir -p my-first-plugin/skills/hellomy-first-plugin/skills/hello/SKILL.md
---
name: hello
description: Greet the user with a friendly message.
---
Greet the user warmly and ask how you can help.- Thêm plugin vào marketplace. Sử dụng
@plugin-creatorđể tạo marketplace hoặc làm theo hướng dẫn Xây dựng danh sách plugin được tuyển chọn của riêng bạn để kết nối plugin với Codex theo cách thủ công.
Từ đó, bạn có thể thêm cấu hình MCP, trình kết nối hoặc siêu dữ liệu marketplace khi cần.
Cài đặt plugin cục bộ theo cách thủ công
Sử dụng marketplace của kho lưu trữ hoặc marketplace cá nhân, tùy theo đối tượng cần có quyền truy cập plugin hoặc danh sách được tuyển chọn.
Kho lưu trữ
Thêm tệp marketplace tại `$REPO_ROOT/.agents/plugins/marketplace.json`
và lưu plugin trong `$REPO_ROOT/plugins/`.
**Ví dụ về marketplace của kho lưu trữ**
Bước 1: Sao chép thư mục plugin vào `$REPO_ROOT/plugins/my-plugin`.mkdir -p ./plugins
cp -R /absolute/path/to/my-plugin ./plugins/my-pluginBước 2: Thêm hoặc cập nhật `$REPO_ROOT/.agents/plugins/marketplace.json` để
`source.path` trỏ đến thư mục plugin đó bằng một đường dẫn tương đối có tiền tố `./`:{
"name": "local-repo",
"plugins": [
{
"name": "my-plugin",
"source": {
"source": "local",
"path": "./plugins/my-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}
]
}Bước 3: Khởi động lại ứng dụng ChatGPT dành cho máy tính và xác minh rằng plugin xuất hiện.Cá nhân
Thêm tệp marketplace tại `~/.agents/plugins/marketplace.json` và lưu
plugin trong `~/.codex/plugins/`.
**Ví dụ về marketplace cá nhân**
Bước 1: Sao chép thư mục plugin vào `~/.codex/plugins/my-plugin`.mkdir -p ~/.codex/plugins
cp -R /absolute/path/to/my-plugin ~/.codex/plugins/my-pluginBước 2: Thêm hoặc cập nhật `~/.agents/plugins/marketplace.json` để
`source.path` của mục plugin trỏ đến thư mục đó.
Bước 3: Khởi động lại ứng dụng ChatGPT dành cho máy tính và xác minh rằng plugin xuất hiện.Tệp marketplace trỏ đến vị trí plugin, vì vậy các thư mục đó chỉ là
ví dụ chứ không phải yêu cầu cố định. Codex phân giải source.path tương đối
so với thư mục gốc của marketplace, không phải tương đối so với thư mục .agents/plugins/. Xem
Siêu dữ liệu marketplace để biết định dạng tệp.
Sau khi thay đổi plugin, hãy cập nhật thư mục plugin mà mục marketplace trỏ đến và khởi động lại ứng dụng ChatGPT dành cho máy tính để bản cài đặt cục bộ nhận các tệp mới.
Chia sẻ plugin cục bộ với không gian làm việc
Sau khi tạo plugin, hãy thêm plugin đó từ ứng dụng ChatGPT dành cho máy tính. Chọn ChatGPT và chuyển sang Work trong bộ chuyển đổi hoặc chọn Codex, sau đó mở Plugin. Tiếp theo, bạn có thể chia sẻ plugin với các thành viên khác trong không gian làm việc ChatGPT.
- Mở Plugin trong ứng dụng ChatGPT dành cho máy tính.
- Chuyển đến Do bạn tạo và mở trang chi tiết plugin.
- Chọn Chia sẻ.
- Thêm thành viên hoặc nhóm trong không gian làm việc, hoặc sao chép liên kết chia sẻ.
- Chọn người có quyền truy cập, sau đó gửi lời mời hoặc liên kết.
Những người được bạn chia sẻ có thể tìm thấy plugin trong mục Được chia sẻ với bạn thuộc Thư mục Plugin. Việc chia sẻ plugin cục bộ với không gian làm việc không đồng nghĩa với việc phát hành plugin lên Thư mục Plugin công khai. Plugin được chia sẻ vẫn nằm trong phạm vi không gian làm việc và tổ chức của bạn; các tài khoản không đăng nhập vào không gian làm việc đó không thể truy cập. Hãy dùng nhóm khi một nhóm hoặc vai trò cần dùng chung quyền truy cập plugin. Sử dụng marketplace khi bạn muốn phân phối qua kho lưu trữ hoặc CLI và sử dụng chức năng chia sẻ trong không gian làm việc khi bạn muốn một số đồng nghiệp được chọn cài đặt plugin từ ứng dụng ChatGPT dành cho máy tính.
Quản trị viên không gian làm việc có thể tắt chức năng chia sẻ plugin trong các yêu cầu được quản lý trên đám mây bằng cách
thêm features.plugin_sharing = false vào requirements.toml:
features.plugin_sharing = falseSiêu dữ liệu marketplace
Nếu bạn duy trì marketplace của kho lưu trữ, hãy định nghĩa marketplace đó trong
$REPO_ROOT/.agents/plugins/marketplace.json. Đối với marketplace cá nhân, hãy sử dụng
~/.agents/plugins/marketplace.json. Tệp marketplace kiểm soát thứ tự plugin
và chính sách cài đặt trong ứng dụng ChatGPT dành cho máy tính. Tệp có thể đại diện cho một
plugin trong khi bạn kiểm thử hoặc một danh sách plugin được tuyển chọn mà bạn muốn ứng dụng
hiển thị cùng nhau dưới một tên marketplace. Trước khi thêm plugin vào
marketplace, hãy bảo đảm version, siêu dữ liệu nhà phát hành và nội dung mô tả trên giao diện
cài đặt đã sẵn sàng để các nhà phát triển khác xem.
{
"name": "local-example-plugins",
"interface": {
"displayName": "Local Example Plugins"
},
"plugins": [
{
"name": "my-plugin",
"source": {
"source": "local",
"path": "./plugins/my-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
},
{
"name": "research-helper",
"source": {
"source": "local",
"path": "./plugins/research-helper"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}
]
}- Sử dụng
namecấp cao nhất để định danh marketplace. - Sử dụng
interface.displayNamecho tiêu đề marketplace được hiển thị trong ứng dụng ChatGPT dành cho máy tính. - Thêm một đối tượng cho mỗi plugin trong
pluginsđể xây dựng danh sách được tuyển chọn mà ứng dụng hiển thị dưới tiêu đề marketplace đó. - Trỏ
source.pathcủa từng mục plugin đến thư mục plugin bạn muốn Codex tải. Đối với bản cài đặt từ kho lưu trữ, thư mục này thường nằm trong./plugins/. Đối với bản cài đặt cá nhân, một mẫu phổ biến là./.codex/plugins/<plugin-name>. - Giữ
source.pathtương đối so với thư mục gốc của marketplace, bắt đầu bằng./và giữ đường dẫn bên trong thư mục gốc đó. - Đối với các mục cục bộ,
sourcecũng có thể là một đường dẫn chuỗi thuần túy, chẳng hạn như"./plugins/my-plugin". - Luôn bao gồm
policy.installation,policy.authenticationvàcategorytrong mỗi mục plugin. - Sử dụng các giá trị
policy.installationnhưAVAILABLE,INSTALLED_BY_DEFAULThoặcNOT_AVAILABLE. - Sử dụng
policy.authenticationđể quyết định việc xác thực diễn ra khi cài đặt hay trong lần sử dụng đầu tiên.
Marketplace kiểm soát nơi Codex tải plugin. Một
source.path cục bộ có thể trỏ đến nơi khác nếu plugin của bạn nằm ngoài các
thư mục ví dụ đó. Tệp marketplace có thể nằm trong kho lưu trữ nơi bạn đang
phát triển plugin hoặc trong một kho lưu trữ marketplace riêng, đồng thời một tệp marketplace
có thể trỏ đến một hoặc nhiều plugin.
Các mục marketplace cũng có thể trỏ đến nguồn plugin được Git quản lý. Sử dụng
"source": "url" khi plugin nằm ở thư mục gốc của kho lưu trữ hoặc
"source": "git-subdir" khi plugin nằm trong thư mục con:
{
"name": "remote-helper",
"source": {
"source": "git-subdir",
"url": "https://github.com/example/codex-plugins.git",
"path": "./plugins/remote-helper",
"ref": "main"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}Các mục được Git quản lý có thể sử dụng bộ chọn ref hoặc sha. Nếu Codex không thể phân giải
nguồn của một mục marketplace, Codex sẽ bỏ qua mục plugin đó thay vì làm hỏng
toàn bộ marketplace.
Các mục marketplace cũng có thể cài đặt plugin từ một kho đăng ký gói JavaScript:
{
"name": "npm-helper",
"source": {
"source": "npm",
"package": "@example/codex-plugin",
"version": "^1.2.0",
"registry": "https://registry.npmjs.org"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}package là bắt buộc và có thể bao gồm phạm vi kho đăng ký. version là tùy chọn
và chấp nhận phiên bản gói, thẻ phân phối và phạm vi phiên bản, nhưng không chấp nhận
bộ chọn đường dẫn hoặc URL.
registry là tùy chọn và phải là URL HTTPS không chứa thông tin xác thực nhúng,
truy vấn hoặc mảnh. Codex tải gói xuống mà không chạy tập lệnh vòng đời.
CLI npm phải được cài đặt và việc xác thực với kho đăng ký được lấy
từ cấu hình của CLI.
Cách ứng dụng ChatGPT dành cho máy tính sử dụng marketplace
Marketplace plugin là một danh mục plugin dạng JSON mà ứng dụng ChatGPT dành cho máy tính có thể đọc và cài đặt.
Ứng dụng có thể đọc các tệp marketplace từ:
- marketplace được tuyển chọn cung cấp nội dung cho Thư mục Plugin chính thức
- marketplace của kho lưu trữ tại
$REPO_ROOT/.agents/plugins/marketplace.json - marketplace tương thích với phiên bản cũ tại
$REPO_ROOT/.claude-plugin/marketplace.json - marketplace cá nhân tại
~/.agents/plugins/marketplace.json
Bạn có thể cài đặt mọi plugin được cung cấp thông qua marketplace. Ứng dụng cài đặt
plugin vào
~/.codex/plugins/cache/$MARKETPLACE_NAME/$PLUGIN_NAME/$VERSION/. Đối với plugin
cục bộ, $VERSION là local và ứng dụng tải bản sao đã cài đặt từ
đường dẫn bộ nhớ đệm đó thay vì trực tiếp từ mục marketplace.
Bạn có thể bật hoặc tắt riêng từng plugin. Ứng dụng lưu trạng thái bật
hoặc tắt của từng plugin trong ~/.codex/config.toml.
Đóng gói và phân phối plugin
Cấu trúc plugin
Mỗi plugin có một tệp kê khai tại .codex-plugin/plugin.json. Plugin cũng có thể bao gồm
thư mục skills/, thư mục hooks/ dành cho hook vòng đời, tệp .app.json
trỏ đến một hoặc nhiều trình kết nối, tệp .mcp.json
cấu hình máy chủ MCP và các tài nguyên dùng để trình bày plugin trên những
giao diện được hỗ trợ.
my-plugin/
├── .codex-plugin/
│ └── plugin.json # Required: plugin manifest
├── skills/
│ └── my-skill/
│ └── SKILL.md # Optional: skill instructions
├── hooks/
│ └── hooks.json # Optional: lifecycle hooks
├── .app.json # Optional: app or connector mappings
├── .mcp.json # Optional: MCP server configuration
└── assets/ # Optional: icons, logos, screenshotsChỉ plugin.json nằm trong .codex-plugin/. Giữ skills/, hooks/,
assets/, .mcp.json và .app.json tại thư mục gốc của plugin.
Plugin đã phát hành thường sử dụng tệp kê khai phong phú hơn ví dụ tối giản xuất hiện trong khung khởi động nhanh. Tệp kê khai có ba nhiệm vụ:
- Định danh plugin.
- Trỏ đến các thành phần được đóng gói như skill, trình kết nối, máy chủ MCP hoặc hook.
- Cung cấp siêu dữ liệu trên giao diện cài đặt như nội dung mô tả, biểu tượng và liên kết pháp lý.
Sau đây là một ví dụ đầy đủ về tệp kê khai:
{
"name": "my-plugin",
"version": "0.1.0",
"description": "Bundle reusable skills and connectors.",
"author": {
"name": "Your team",
"email": "team@example.com",
"url": "https://example.com"
},
"homepage": "https://example.com/plugins/my-plugin",
"repository": "https://github.com/example/my-plugin",
"license": "MIT",
"keywords": ["research", "crm"],
"skills": "./skills/",
"mcpServers": "./.mcp.json",
"apps": "./.app.json",
"hooks": "./hooks/hooks.json",
"interface": {
"displayName": "My Plugin",
"shortDescription": "Reusable skills and connectors",
"longDescription": "Distribute skills and connectors together.",
"developerName": "Your team",
"category": "Productivity",
"capabilities": ["Read", "Write"],
"websiteURL": "https://example.com",
"privacyPolicyURL": "https://example.com/privacy",
"termsOfServiceURL": "https://example.com/terms",
"defaultPrompt": [
"Use My Plugin to summarize new CRM notes.",
"Use My Plugin to triage new customer follow-ups."
],
"brandColor": "#10A37F",
"composerIcon": "./assets/icon.png",
"logo": "./assets/logo.png",
"screenshots": ["./assets/screenshot-1.png"]
}
}.codex-plugin/plugin.json là điểm vào bắt buộc. Các trường khác trong tệp kê khai
là tùy chọn, nhưng plugin đã phát hành thường sử dụng chúng.
Các trường trong tệp kê khai
Sử dụng các trường cấp cao nhất để định nghĩa siêu dữ liệu gói và trỏ đến các thành phần được đóng gói:
name,versionvàdescriptionđịnh danh plugin.author,homepage,repository,licensevàkeywordscung cấp siêu dữ liệu nhà phát hành và khám phá.skills,mcpServers,appsvàhookstrỏ đến các thành phần được đóng gói tương đối so với thư mục gốc của plugin.interfacekiểm soát cách các giao diện cài đặt trình bày plugin.
Sử dụng đối tượng interface cho siêu dữ liệu trên giao diện cài đặt:
displayName,shortDescriptionvàlongDescriptionkiểm soát tiêu đề và nội dung mô tả.developerName,categoryvàcapabilitiesthêm siêu dữ liệu về nhà phát hành và năng lực.websiteURL,privacyPolicyURLvàtermsOfServiceURLcung cấp các liên kết bên ngoài.defaultPrompt,brandColor,composerIcon,logovàscreenshotskiểm soát prompt khởi đầu và cách trình bày trực quan.
Quy tắc đường dẫn
- Giữ đường dẫn trong tệp kê khai tương đối so với thư mục gốc của plugin và bắt đầu bằng
./. - Lưu các tài nguyên trực quan như
composerIcon,logovàscreenshotstrong./assets/khi có thể. - Sử dụng
skillscho các thư mục skill được đóng gói,appscho.app.json,mcpServerscho.mcp.jsonvàhookscho hook vòng đời. - Plugin đã bật có thể bao gồm hook vòng đời cùng với skill, máy chủ MCP và trình kết nối.
- Nếu plugin lưu hook tại
./hooks/hooks.json, bạn không cần một mụchookstrong.codex-plugin/plugin.json; Codex tự động kiểm tra tệp mặc định đó.
Máy chủ MCP và hook vòng đời được đóng gói
mcpServers có thể trỏ đến tệp .mcp.json chứa ánh xạ máy chủ
trực tiếp hoặc một đối tượng mcp_servers được bao bọc.
Ánh xạ máy chủ trực tiếp:
{
"docs": {
"command": "docs-mcp",
"args": ["--stdio"]
}
}Ánh xạ máy chủ được bao bọc:
{
"mcp_servers": {
"docs": {
"command": "docs-mcp",
"args": ["--stdio"]
}
}
}Sau khi cài đặt, người dùng có thể bật hoặc tắt một máy chủ MCP được đóng gói và điều chỉnh
chính sách phê duyệt công cụ từ cấu hình Codex mà không cần chỉnh sửa plugin. Sử dụng
plugins.<plugin>.mcp_servers.<server> cho chính sách máy chủ MCP giới hạn trong plugin:
[plugins."my-plugin".mcp_servers.docs]
enabled = true
default_tools_approval_mode = "prompt"
enabled_tools = ["search"]
[plugins."my-plugin".mcp_servers.docs.tools.search]
approval_mode = "approve"Khi plugin được bật, Codex có thể tải hook vòng đời từ plugin cùng với hook của người dùng, dự án và hook được quản lý.
Việc cài đặt hoặc bật plugin không tự động đánh dấu hook của plugin là đáng tin cậy. Hook được đóng gói trong plugin là hook không được quản lý, vì vậy Codex bỏ qua chúng cho đến khi người dùng xem xét và tin cậy định nghĩa hook hiện tại.
Tệp hook mặc định của plugin là hooks/hooks.json:
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "python3 ${PLUGIN_ROOT}/hooks/session_start.py",
"statusMessage": "Loading plugin context"
}
]
}
]
}
}Nếu bạn định nghĩa hooks trong .codex-plugin/plugin.json, Codex sẽ sử dụng mục tệp kê khai đó
thay cho hooks/hooks.json mặc định. Trường trong tệp kê khai có thể là một
đường dẫn đơn, một mảng đường dẫn, một đối tượng hook nội tuyến hoặc một mảng
đối tượng hook nội tuyến.
{
"name": "repo-policy",
"hooks": ["./hooks/session.json", "./hooks/tools.json"]
}Đường dẫn hook tuân theo các quy tắc đường dẫn tệp kê khai giống như skills, apps và
mcpServers: bắt đầu bằng ./, được phân giải tương đối so với thư mục gốc của plugin và nằm
bên trong thư mục gốc của plugin.
Các lệnh hook của plugin nhận những biến môi trường dành riêng cho Codex là
PLUGIN_ROOT và PLUGIN_DATA. PLUGIN_ROOT trỏ đến thư mục gốc của plugin đã cài đặt,
còn PLUGIN_DATA trỏ đến thư mục dữ liệu có thể ghi của plugin. Codex
cũng đặt CLAUDE_PLUGIN_ROOT và CLAUDE_PLUGIN_DATA để tương thích với
các hook plugin hiện có.
Hook plugin sử dụng cùng lược đồ sự kiện như hook thông thường. Xem Hook để biết các sự kiện, đầu vào, đầu ra, quy trình xem xét độ tin cậy và các giới hạn hiện tại được hỗ trợ.
Phát hành plugin công khai chính thức
Để phát hành plugin cho mục đích sử dụng công khai, hãy gửi plugin qua cổng gửi plugin. Xem Gửi plugin để biết đầy đủ quy trình đánh giá và phát hành.