Tutto quello che serve, in ordine. Scrivi JavaScript semplice in un solo file, senza build e senza dipendenze.
Un plugin appartiene a una sola sezione, e la sezione decide dove compare e cosa può chiedere. Se colleghi un servizio, scegli in base a cosa porti dentro: task, pull request, tabelle, quote, documenti, messaggi. Se costruisci uno strumento con la sua schermata, scegli pages. Le sezioni sono descritte una per una più sotto.
Il repository contiene un plugin funzionante per ogni sezione e un playground che lo disegna come fa PromptOps. Ascolta solo sul tuo computer e non richiede installazioni.
git clone https://github.com/shellonback/promptops-plugin-templates
cd promptops-plugin-templates
node playground/server.mjsCrea la tua cartella, fuori dal repository dei modelli, con manifest, file sorgente, dati di esempio e README. Poi punta il playground su di lei. Il primo argomento è la sezione, il terzo è il tuo id: tuo-handle.nome-plugin, in minuscolo, permanente.
node tools/new-plugin.mjs tasks ../my-plugin your-handle.my-plugin "My Plugin"
node playground/server.mjs --plugin ../my-pluginpromptops-plugin.json dà un nome al plugin ed elenca i permessi. Chiedi solo ciò che usi: le persone leggono questo elenco prima di installare, e un permesso nuovo in un aggiornamento richiede di nuovo la loro approvazione. Gli host si nominano uno per uno, net:api.example.com. Se vuoi, elenca in providers i provider AI con cui l’hai provato: il catalogo mostra i primi tre come piccole icone.
{
"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"]
}Registri il contratto della tua sezione e restituisci dati. Li disegna PromptOps: da un plugin non arrivano mai HTML, CSS o script. L’unica via d’uscita è l’oggetto sdk. Per un token scrivi un segnaposto, {{secret:token}}, e PromptOps lo sostituisce quando la richiesta parte, solo verso un host che hai dichiarato.
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) { /* restituisci i task come dati */ },
});Il playground parte in modalità Fixtures: le risposte vengono da fixtures.json, quindi funziona anche in treno. Passa a Live per chiamare il servizio vero. Ogni chiamata del tuo plugin compare nel registro, e una negata è rossa con il motivo. Premi Reload plugin dopo ogni modifica.
Il validatore applica le stesse regole dell’app e del registro: manifest, permessi, codice leggibile. Stampa anche i tre valori che ti servono per l’invio.
node tools/validate.mjs ../my-pluginCarica la cartella in un repository GitHub pubblico sul tuo account. Tieni il codice in src/ e non minificato: quello che le persone leggono deve essere quello che gira. Se usi un bundler, committa i sorgenti accanto al suo output.
In PromptOps apri Plugins › Create plugin, scegli se pubblichi come persona o come team, e incolla versione, SHA del commit, SHA-256 del file e manifest. PromptOps scarica quel commit preciso, lo scansiona e una persona lo revisiona. Una volta approvato compare nel catalogo e qui. Per aggiornare invii una versione più alta: nessuno viene aggiornato in silenzio.
Sezioni
Cosa scrivi in ognuna, il modello da cui partire e qualche idea che vale la pena costruire.
pagesFunziona nell’appUno strumento con la sua pagina: un modulo, un risultato, la tua logica.
Dove compare: Una voce sua nel menu laterale
| Tu implementi | Quando gira |
|---|---|
open(pageId, context, sdk) | La persona apre la voce di menu. Restituisci la pagina. |
event(pageId, event, sdk) | Un clic o un campo cambiato. Restituisci la pagina dopo il tuo lavoro. |
Idee
Parti da: Release Notes
Apri il modellotasksSchermata in collegamentoI task del tuo tracker come card sulla board, con lo stato allineato.
Dove compare: Teams › Board
| Tu implementi | Quando gira |
|---|---|
validate() | Verifica le credenziali. |
listContainers(parentId) | Percorre il tuo albero: workspace, progetto, lista. |
listStatuses(containerId) | Costruisce le colonne della board. |
listTasks({ containerId, … }) | Una pagina di task, nella forma di PromptOps. |
setStatus(id, statusId) | Facoltativo. La card è stata spostata. |
Idee
Parti da: GitHub Issues
Apri il modellocodeSchermata in collegamentoPull request e controlli CI del tuo host di codice, accanto al repository su cui lavori.
Dove compare: Sessioni › Git Explorer
| Tu implementi | Quando gira |
|---|---|
listPullRequests({ repo, state }) | Le pull request del repository, con autore e revisori. |
listChecks({ repo, ref }) | I controlli CI di un ramo o di un commit, e il loro esito. |
Idee
Parti da: GitHub Pull Requests
Apri il modellodataSchermata in collegamentoTabelle da un’API o da un servizio di database, da guardare mentre un agente lavora.
Dove compare: Sessioni › pannello laterale
| Tu implementi | Quando gira |
|---|---|
listResources() | Le tabelle o le viste che esponi. |
query({ resourceId, limit, filter }) | Righe e colonne di una risorsa. |
Idee
Parti da: REST Explorer
Apri il modelloprovidersSchermata in collegamentoCredito e quota di un provider AI, nello stesso posto degli altri.
Dove compare: Usage
| Tu implementi | Quando gira |
|---|---|
getUsage() | Piano, contatori con usato e limite, date di azzeramento. |
Idee
Parti da: OpenRouter Usage
Apri il modellocontextFunziona nell’appCerca nei tuoi documenti e passane uno a un agente come contesto. Prima lo leggi tu.
Dove compare: Prompts › Project Brief
| Tu implementi | Quando gira |
|---|---|
search(query) | Titoli ed estratti. |
get(id) | Il documento come testo semplice, al massimo 50 000 caratteri. |
Idee
Parti da: Wikipedia Context
Apri il modellonotifySchermata in collegamentoUn messaggio dove il tuo team già parla, quando un agente finisce o ha bisogno di te.
Dove compare: Notifiche, eventi di sessione
| Tu implementi | Quando gira |
|---|---|
events.on('turn.completed', handler) | Un agente finisce un turno. |
events.on('approval.requested', handler) | Un agente aspetta la persona. |
Idee
Parti da: Discord Notifier
Apri il modelloagentPer ora solo nel playgroundSkill e prompt rapidi per i tuoi agenti. Nessun codice, solo testo nel manifest.
Dove compare: Composer di spawn
| Tu implementi | Quando gira |
|---|---|
contributes.skills | File Markdown elencati nel manifest. |
contributes.quickActions | Prompt completi, un clic ciascuno. |
Idee
Parti da: Code Review Pack
Apri il modelloLe impone l’app, non la fiducia. Conoscerle ti evita una revisione respinta.
Clona i modelli, apri il playground e cambia una riga. Domande e idee sono benvenute su 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.