AI e agenti
Rebase fornisce quattro elementi distinti per gli assistenti IA, e ciascuno risolve problemi diversi. Vale la pena sapere a quale ci si sta rivolgendo:
| Cos’è | Chi lo utilizza | |
|---|---|---|
| Server MCP | Un server stdio Model Context Protocol con 42 strumenti per schema, dati, utenti, storage, cron e dev server | Un assistente, a runtime |
| Skill per agenti | 21 file di skill in Markdown inseriti nella tua repo da rebase skills install |
Un assistente, come materiale di riferimento |
| File di istruzioni | ai-instructions.md più file puntatore specifici per assistente, creati da rebase init |
Un assistente, come regole sempre attive |
| Chiavi API | Credenziali macchina che possiedono scope, per collezione e per operazione | Qualsiasi client che chiami l’API HTTP |
I primi tre servono a fornire a un assistente conoscenza e strumenti. Il quarto è l’unico che decide cosa esso possa effettivamente fare.
La parte fondamentale: cosa può toccare un agente
Sezione intitolata “La parte fondamentale: cosa può toccare un agente”Un agente dotato di strumenti sul tuo database è un normale client API che si dà il caso decida la propria richiesta successiva. Rebase non cerca di vincolarlo con le istruzioni: un prompt non è un meccanismo di controllo degli accessi, e un agente che legge le tue righe sta leggendo testo che qualcun altro potrebbe aver scritto. Il vincolo deve risiedere al di sotto dell’agente, nelle credenziali che possiede.
Rebase fornisce a tale credenziale due gate indipendenti:
- Gli scope della chiave. Dichiarati per operazione e, quando vuoi, per collezione:
data:read:articles,data:write:articles.data:deleteè separato dadata:write, ed è solitamente quello che si vuole negare a un agente a cui è altrimenti consentito modificare. - Row-Level Security (RLS). Le chiavi API non ignorano l’RLS. Una chiave si connette come ruolo Postgres
rebase_usercome qualsiasi altro chiamante, quindi i criteri stabiliti (policy) determinano comunque quali righe vengono restituite.
Entrambi devono autorizzare la richiesta. Nessuno dei due sostituisce l’altro, e il secondo è il motivo per cui una chiave che possiede data:read su ogni collezione può comunque restituire un set di risultati vuoto.
Un punto che spesso trae in inganno: l’impostazione access: "public" di una collezione estende quali righe un chiamante può vedere, non chi può effettuare chiamate. È una dichiarazione sulla visibilità delle righe, non sull’autenticazione. Concederla non dà uno scope a una chiave, e revocarla non ne blocca una.
Il funzionamento pratico — creazione delle chiavi, scelta degli scope, rotazione, scadenza, rate limit — è trattato in Chiavi API. Non tralasciare Regole di sicurezza (RLS); il secondo gate è efficace solo quanto le policy che hai scritto.
Ricerca vettoriale
Sezione intitolata “Ricerca vettoriale”Rebase include un tipo di proprietà vector di prima classe su Postgres e un metodo di query .vectorSearch() con distanza cosine, l2 e inner_product. È già documentato, in due punti diversi:
- Interrogazione dei dati → Ricerca vettoriale — il metodo dell’SDK, il campo
_distanceaggiunto a ogni riga e le avvertenze - API REST → Ricerca vettoriale — i parametri di query
vector_search,vector,vector_distanceevector_threshold
Tre cose da sapere prima di progettarvi attorno una soluzione. Rebase memorizza ed esegue ricerche sugli embedding; non li calcola — non c’è alcun provider di embedding, impostazione di modello o chiave API all’interno di Rebase, quindi generare i vettori è compito tuo. pgvector è un prerequisito e la sua installazione è facoltativa. database({ extensions: ["vector"] }) in config/resources.ts consente a rebase db push e alla verifica dello schema all’avvio di eseguire CREATE EXTENSION IF NOT EXISTS vector per te; in caso contrario, creano la colonna lasciando l’installazione dell’estensione a tuo carico. In entrambi i casi il server necessita di un’immagine che includa la libreria e di un ruolo autorizzato a installarla. Inoltre, ogni colonna vettoriale riceve un indice HNSW per la distanza del coseno, poiché il coseno è ciò che vectorSearch utilizza come misura predefinita se non viene specificato distance — un indice serve esattamente un solo operatore. Modificalo, o disattivalo, sulla proprietà: consulta L’indice.
Non è inoltre possibile sottoscrivere query vettoriali; .vectorSearch(...).listen() viene rifiutato con VECTOR_SEARCH_NOT_LIVE.
Per la ricerca lessicale — ricerca full-text con ranking sui campi specificati, inclusi contenuti JSONB e array — consulta Ricerca. Si tratta di un meccanismo diverso e i due non interagiscono.
Passaggi successivi
Sezione intitolata “Passaggi successivi”- Server MCP — connetti Claude Code, Cursor o qualsiasi client MCP
- Skill per agenti —
rebase skills installe le 21 skill - File di istruzioni IA — il pattern delle regole generate