Everything you need, in order. You write plain JavaScript in one file, with no build step and no dependencies.
A plugin belongs to exactly one section, and the section decides where it appears and what it may ask for. If you connect a service, choose by what you bring in: tasks, pull requests, tables, quotas, documents, messages. If you build a tool with its own screen, choose pages. The sections are described one by one below.
The repository holds one working plugin per section and a playground that draws it the way PromptOps does. It binds to your machine only and needs nothing installed.
git clone https://github.com/shellonback/promptops-plugin-templates
cd promptops-plugin-templates
node playground/server.mjsThis creates your own folder, outside the templates repository, with a manifest, the source file, sample data and a README. Then point the playground at it. The first argument is the section, the third is your id: your-handle.plugin-slug, lowercase, permanent.
node tools/new-plugin.mjs tasks ../my-plugin your-handle.my-plugin "My Plugin"
node playground/server.mjs --plugin ../my-pluginpromptops-plugin.json names your plugin and lists its permissions. Ask only for what you use: people read this list before installing, and a new permission in an update needs their approval again. Hosts are named one by one, net:api.example.com. Optionally list the AI providers you tried it with under providers: the catalog shows the first three as small icons.
{
"schemaVersion": 1,
"id": "your-handle.my-plugin",
"name": "My Plugin",
"version": "0.1.0",
"category": "tasks",
"entry": "src/plugin.js",
"permissions": ["net:api.example.com", "secrets", "tasks:read"],
"providers": ["claude-code-cli"]
}You register the contract of your section and return data. PromptOps draws it: no HTML, CSS or script ever comes from a plugin. The only way out is the sdk object. For a token you write a placeholder, {{secret:token}}, and PromptOps fills it in when the request leaves, only towards a host you declared.
promptops.tasks.registerSource({
async validate(sdk) {
const res = await sdk.http.fetch('https://api.example.com/me', {
headers: { Authorization: 'Bearer {{secret:token}}' },
});
return { ok: res.ok };
},
async listTasks({ containerId }, sdk) { /* return tasks as data */ },
});The playground starts in Fixtures mode: answers come from fixtures.json, so it works on a train. Switch to Live to call the real service. Every call your plugin makes shows in the activity log, and a denied one is red with the reason. Press Reload plugin after each change.
The validator applies the same rules as the app and the registry: manifest, permissions, readable code. It also prints the three values you need to submit.
node tools/validate.mjs ../my-pluginPush your folder to a public GitHub repository under your account. Keep the code in src/ and unminified: what people read must be what runs. If you use a bundler, commit your sources next to its output.
In PromptOps open Plugins › Create plugin, choose whether you publish as yourself or as your team, and paste the version, the commit SHA, the SHA-256 of your file and the manifest. PromptOps downloads that exact commit, scans it and a person reviews it. Once approved it appears in the catalog and here. To update, submit a higher version: people are never updated silently.
Sections
What you write in each one, the template to start from, and a few ideas worth building.
pagesWorks in the appA tool with its own page: a form, a result, your logic.
Where it appears: Its own entry in the sidebar menu
| You implement | When it runs |
|---|---|
open(pageId, context, sdk) | The person opens the menu entry. You return the page. |
event(pageId, event, sdk) | A click or a changed field. You return the page after your work. |
Ideas
Start from: Release Notes
Open the templatetasksScreen being connectedThe tasks of your tracker as cards on the board, with their status in sync.
Where it appears: Teams › Board
| You implement | When it runs |
|---|---|
validate() | Checks the credentials. |
listContainers(parentId) | Walks your tree: workspace, project, list. |
listStatuses(containerId) | Builds the board columns. |
listTasks({ containerId, … }) | One page of tasks, in the PromptOps shape. |
setStatus(id, statusId) | Optional. The card was moved. |
Ideas
Start from: GitHub Issues
Open the templatecodeScreen being connectedPull requests and CI checks of your code host, next to the repository you are working on.
Where it appears: Sessions › Git Explorer
| You implement | When it runs |
|---|---|
listPullRequests({ repo, state }) | Pull requests of the repository, with author and reviewers. |
listChecks({ repo, ref }) | CI checks of a branch or commit, and their outcome. |
Ideas
Start from: GitHub Pull Requests
Open the templatedataScreen being connectedTables from an API or a database service, to look at while an agent works.
Where it appears: Sessions › side panel
| You implement | When it runs |
|---|---|
listResources() | The tables or views you expose. |
query({ resourceId, limit, filter }) | Rows and columns of one resource. |
Ideas
Start from: REST Explorer
Open the templateprovidersScreen being connectedCredit and quota of an AI provider, in the same place as the others.
Where it appears: Usage
| You implement | When it runs |
|---|---|
getUsage() | Plan, meters with used and limit, reset dates. |
Ideas
Start from: OpenRouter Usage
Open the templatecontextWorks in the appSearch your documents and hand one to an agent as context. You read it first.
Where it appears: Prompts › Project Brief
| You implement | When it runs |
|---|---|
search(query) | Titles and snippets. |
get(id) | The document as plain text, 50 000 characters at most. |
Ideas
Start from: Wikipedia Context
Open the templatenotifyScreen being connectedA message where your team already talks, when an agent finishes or needs you.
Where it appears: Notifications, session events
| You implement | When it runs |
|---|---|
events.on('turn.completed', handler) | An agent finishes a turn. |
events.on('approval.requested', handler) | An agent waits for the person. |
Ideas
Start from: Discord Notifier
Open the templateagentPlayground only for nowSkills and quick prompts for your agents. No code at all, only text in the manifest.
Where it appears: Spawn composer
| You implement | When it runs |
|---|---|
contributes.skills | Markdown files listed in the manifest. |
contributes.quickActions | Complete prompts, one click each. |
Ideas
Start from: Code Review Pack
Open the templateThey are enforced by the app, not by trust. Knowing them saves you a rejected review.
Clone the templates, open the playground and change one line. Questions and ideas are welcome on GitHub.
Scegli quali categorie di cookie accettare. I cookie tecnici e funzionali sono sempre attivi.
Per maggiori informazioni, consulta la nostra Cookie Policy e la Privacy Policy.
Utilizzati per creare profili relativi all'utente e inviare messaggi promozionali in linea con le preferenze espresse.
Ci permettono di capire come gli utenti navigano il sito per migliorare l'esperienza e i contenuti.
Necessari per il funzionamento del sito. Non possono essere disattivati.
Consentono funzionalità avanzate come la memorizzazione delle preferenze di navigazione.