Download
Costruire un plugin

Da una cartella vuota
al catalogo

Tutto quello che serve, in ordine. Scrivi JavaScript semplice in un solo file, senza build e senza dipendenze.

Cosa ti serveNode.js 18 o successivoGit e un account GitHubUn’idea che stia in una sezione

Passo passo

  1. 1

    Scegli la sezione

    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.

  2. 2

    Scarica i modelli e apri il playground

    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.mjs
  3. 3

    Copia il modello della tua sezione

    Crea 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-plugin
  4. 4

    Dichiara nel manifest ciò che ti serve

    promptops-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"]
    }
  5. 5

    Scrivi src/plugin.js

    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 */ },
    });
  6. 6

    Provalo, prima senza rete

    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.

  7. 7

    Valida

    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-plugin
  8. 8

    Pubblica il tuo repository

    Carica 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.

  9. 9

    Invialo in revisione

    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

Le otto sezioni, una per una

Cosa scrivi in ognuna, il modello da cui partire e qualche idea che vale la pena costruire.

Pagine e strumenti

pagesFunziona nell’app

Uno strumento con la sua pagina: un modulo, un risultato, la tua logica.

Dove compare: Una voce sua nel menu laterale

Tu implementiQuando 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

  • Note di rilascio dai commit
  • Il riassunto dello standup dalle sessioni di ieri
  • Un report dei costi dai tuoi consumi

Parti da: Release Notes

Apri il modello

Task e progetti

tasksSchermata in collegamento

I task del tuo tracker come card sulla board, con lo stato allineato.

Dove compare: Teams › Board

Tu implementiQuando 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

  • Il tracker della tua azienda
  • Un foglio condiviso di richieste
  • I ticket di supporto con etichetta “bug”

Parti da: GitHub Issues

Apri il modello

Codice e repository

codeSchermata in collegamento

Pull request e controlli CI del tuo host di codice, accanto al repository su cui lavori.

Dove compare: Sessioni › Git Explorer

Tu implementiQuando 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

  • Il tuo Git in casa
  • Lo stato dei deploy per ramo
  • La coda delle revisioni del team

Parti da: GitHub Pull Requests

Apri il modello

Dati e infrastruttura

dataSchermata in collegamento

Tabelle da un’API o da un servizio di database, da guardare mentre un agente lavora.

Dove compare: Sessioni › pannello laterale

Tu implementiQuando gira
listResources()Le tabelle o le viste che esponi.
query({ resourceId, limit, filter })Righe e colonne di una risorsa.

Idee

  • Gli ultimi errori dal monitoraggio
  • I feature flag e chi li ha cambiati
  • Gli ordini fermi in uno stato

Parti da: REST Explorer

Apri il modello

Provider AI

providersSchermata in collegamento

Credito e quota di un provider AI, nello stesso posto degli altri.

Dove compare: Usage

Tu implementiQuando gira
getUsage()Piano, contatori con usato e limite, date di azzeramento.

Idee

  • Il gateway LLM interno
  • Il budget del team diviso per progetto
  • Avvisi di spesa

Parti da: OpenRouter Usage

Apri il modello

Contesto

contextFunziona nell’app

Cerca nei tuoi documenti e passane uno a un agente come contesto. Prima lo leggi tu.

Dove compare: Prompts › Project Brief

Tu implementiQuando gira
search(query)Titoli ed estratti.
get(id)Il documento come testo semplice, al massimo 50 000 caratteri.

Idee

  • Le decisioni di architettura
  • Il riferimento API di un servizio interno
  • Gli appunti delle interviste ai clienti

Parti da: Wikipedia Context

Apri il modello

Notifiche

notifySchermata in collegamento

Un messaggio dove il tuo team già parla, quando un agente finisce o ha bisogno di te.

Dove compare: Notifiche, eventi di sessione

Tu implementiQuando gira
events.on('turn.completed', handler)Un agente finisce un turno.
events.on('approval.requested', handler)Un agente aspetta la persona.

Idee

  • Un avviso solo per i lavori falliti
  • Un riepilogo giornaliero
  • Una luce sulla scrivania

Parti da: Discord Notifier

Apri il modello

Estensioni per gli agenti

agentPer ora solo nel playground

Skill e prompt rapidi per i tuoi agenti. Nessun codice, solo testo nel manifest.

Dove compare: Composer di spawn

Tu implementiQuando gira
contributes.skillsFile Markdown elencati nel manifest.
contributes.quickActionsPrompt completi, un clic ciascuno.

Idee

  • Checklist di revisione sicurezza
  • La routine di rilascio
  • Come scriviamo i test qui

Parti da: Code Review Pack

Apri il modello

Le regole con cui vive ogni plugin

Le impone l’app, non la fiducia. Conoscerle ti evita una revisione respinta.

Un plugin può

  • Chiamare host HTTPS che ha dichiarato, sulla porta 443.
  • Usare credenziali tramite segnaposto, senza leggerle.
  • Tenere un piccolo spazio dati privato.
  • Mostrare una notifica o proporre un prompt che la persona rivede.
  • Con la sezione pages: leggere i dati git di un repository scelto dalla persona, scrivere file di testo nella sua cartella docs/, eseguire un prompt su Claude senza strumenti, misurare la velocità dei modelli. Scrivere un file, eseguire un prompt e misurare chiedono sempre prima alla persona.

Un plugin non può mai

  • Eseguire codice nativo, un comando di shell o uno script di installazione.
  • Leggere prompt, risposte degli agenti, file o il terminale.
  • Raggiungere un indirizzo privato, localhost o un IP.
  • Scrivere a un agente di sua iniziativa.
  • Disegnare una propria interfaccia dentro l’app.
  • Parlare con i server di PromptOps o vedere il tuo account.

Cosa guarda la revisione

  1. 1Il manifest nel tuo repository è quello che hai inviato, a quel commit.
  2. 2Il file che gira ha l’hash che hai dichiarato.
  3. 3I permessi sono quelli ammessi dalla sezione, e ogni host citato nel codice è dichiarato.
  4. 4Il codice si legge: non minificato, non offuscato, senza codice dinamico.
  5. 5Leggere un repository insieme a un permesso di rete è ammesso, e viene guardato con attenzione.

Pronto a provare?

Clona i modelli, apri il playground e cambia una riga. Domande e idee sono benvenute su GitHub.

Shellonback

Preferenze cookie

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.

Cookie di profilazione

Utilizzati per creare profili relativi all'utente e inviare messaggi promozionali in linea con le preferenze espresse.

Cookie analitici

Ci permettono di capire come gli utenti navigano il sito per migliorare l'esperienza e i contenuti.

Cookie tecnici

Sempre attivo

Necessari per il funzionamento del sito. Non possono essere disattivati.

Cookie funzionali

Sempre attivo

Consentono funzionalità avanzate come la memorizzazione delle preferenze di navigazione.