Memoria retrospettiva per OpenCode, Cursor e altri agenti di coding
Memoria di progetto che persiste tra le sessioni.
Ogni sessione di un agente di coding parte da zero. La regola di denominazione della scorsa settimana e l’analisi del bug erano nella chat, e la chat non esiste più. La sessione successiva inizia in bianco e devi spiegarle di nuovo.
I comandi sottostanti corrispondono a @vectorize-io/hindsight-coding-agents 0.8.4, pubblicato il 30/10/2026, che dipende da @vectorize-io/hindsight-all ^0.10.2. Il comportamento del pacchetto, le tariffe Cloud e la Memory Defense in questa pagina sono stati verificati il 03/11/2026. Altri modi per conservare i fatti tra le sessioni si trovano nelle pagine su Sistemi di memoria per l’IA.

Un agente di coding può leggere il repository, eseguire i test e modificare il codice. Non riesce comunque a vedere una decisione che non è mai finita nel file che ha aperto. Supponiamo che il bug di esportazione sia stato indagato l’anno scorso: si era provata e poi annullata l’usuale quotazione CSV perché l’ERP ricevente elimina gli zeri iniziali, e l’unico formato che funziona è la forma di formula Excel.
La documentazione di coding-agents di Hindsight è pensata per quel tipo di decisione, che vive in un messaggio di commit o in una chat precedente. Il plugin copia i messaggi di commit recenti in una banca memoria, riscrive la sessione mentre lavori e mantiene cinque pagine in modo che la sessione successiva possa partire da lì. OpenCode, la CLI di Cursor, Claude Code e gli altri strumenti che il pacchetto elenca condividono quella banca per un singolo repository.
Cos’è il plugin coding-agents
Un’installazione precedente dovrebbe continuare a comunicare con il server che hai già scelto. hindsight-claude-code, hindsight-cursor-cli e hindsight-codex sono i pacchetti che questo sostituisce. Se ~/.hindsight/claude-code.json o ~/.hindsight/codex.json è ancora su disco, install copia l’URL API e il token di quel file, e un URL vuoto significa comunque il daemon locale. Lo strumento che stai installando viene letto per primo, quindi un’installazione di Codex mantiene il server di Codex anche se un vecchio file di Claude è accanto a esso. Cursor CLI, Copilot CLI, OpenCode e Cline non hanno mai scritto un file di endpoint, quindi quelle installazioni non hanno un server da copiare.
Le vecchie impostazioni di recall e retain, bankMission, retainMission e dynamicBankGranularity restano indietro. La documentazione di coding-agents afferma che descrivono una pipeline sostituita da questo pacchetto e che reinterpretarle sarebbe pura speculazione. Ciò che ottieni invece è una banca per repository, coding-agent::{gitProject}, condivisa da ogni strumento che apre quel checkout. Per dare di nuovo a ogni strumento la sua banca, imposta il template che la documentazione afferma corrispondere ai nomi vecchi:
{ "bankIdTemplate": "{harness}::{gitProject}" }
Eseguire npx @vectorize-io/hindsight-coding-agents install senza specificare lo strumento stampa l’elenco e non scrive nulla. install all è il comando che collega tutti gli strumenti rilevati. update sostituisce la copia sotto ~/.hindsight/coding-agents e lascia intatto il file di configurazione di ogni strumento. autoUpdate esegue quella sostituzione in background una volta al giorno; un rilascio che aggiunge un nuovo hook ha comunque bisogno di install, perché l’aggiornamento in background non modifica quei file di configurazione. Se Hindsight è un’opzione tra vari backend, il confronto dei provider di memoria per agenti lo mette a confronto con Honcho, Mem0 e Mnemosyne.
Scegli dove risiede la memoria
La banca deve avere una sede prima che una sessione possa archiviare una decisione. Su un terminale, install chiede una volta: Hindsight Cloud, un server che già gestisci, o un daemon sullo stesso computer dell’agente di coding. Uno script passa --server. Un install successivo non chiede di nuovo e lascia intatto un server già nominato, a meno che tu non passi --server per cambiarlo.
| Modalità | Cosa esegue | Cosa fornisci | Cosa lascia la macchina |
|---|---|---|---|
cloud |
Hindsight Cloud. API base di default https://api.hindsight.vectorize.io |
Un token API | Prompt, testo git conservato dal plugin e memorie estratte, inviati a quell’API |
self-hosted |
Un server Hindsight che già gestisci | Il suo URL, convenzionalmente http://localhost:8888 |
Inviato a quell’URL. Un URL localhost resta sulla macchina |
daemon |
Un locale hindsight-embed che il plugin avvia su 127.0.0.1:9077 |
uv su PATH, e un LLM per l’estrazione dei fatti |
I dati della banca restano sulla macchina. L’estrazione chiama comunque l’LLM dato al daemon |
npx @vectorize-io/hindsight-coding-agents install opencode --server daemon
npx @vectorize-io/hindsight-coding-agents install opencode --server self-hosted --api-url http://localhost:8888
npx @vectorize-io/hindsight-coding-agents install opencode --server cloud --api-token YOUR_TOKEN
Il daemon si lega a 127.0.0.1:9077 e lascia la porta 8888 per un server Hindsight che gestisci tu. Se qualcosa è già in ascolto sulla 9077, il plugin usa quel processo per ogni strumento di coding e ogni repository, e chiudere una sessione lo lascia in esecuzione. Il primo avvio scarica hindsight-embed e carica i modelli in background, perché un hook non può attendere così a lungo. Finché la porta non risponde, quella sessione non ha memoria per un giro o due, allo stesso modo in cui un server Cloud o self-hosted irraggiungibile lascia una sessione senza memoria.
Su Linux e Windows, litellm, che l’API richiede, viene installato dalle wheel. macOS lo compila, perché non esiste una wheel per macOS e la compilazione richiede una toolchain Rust attuale da rustup. Trasformare una trascrizione in memorie richiede comunque un modello di chat: HINDSIGHT_API_LLM_PROVIDER se lo imposti, altrimenti la prima chiave tra OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY e GROQ_API_KEY, altrimenti la CLI di Claude Code. Ogni variabile HINDSIGHT_API_* viene passata al daemon. Il modello di embedding, il reranker, un server locale compatibile con OpenAI e un backup della banca sono in Hindsight per Hermes Agent. Con serverMode impostato su self-hosted, --api-url è l’URL base di quel server.
La pagina dei prezzi di Vectorize descrive l’edizione self-hosted come con licenza MIT, senza costi di postazione né costi per token. La Cloud addebita ogni operazione. Le tariffe sono nell’ultima sezione.
Collega OpenCode
OpenCode deve essere installato prima che il plugin possa collegarvisi. Il quickstart di OpenCode copre quell’installazione. Poi punta il plugin verso il daemon:
npx @vectorize-io/hindsight-coding-agents install opencode --server daemon
L’installatore scrive un percorso del plugin nel file utente ~/.config/opencode/opencode.json, puntato a ~/.hindsight/coding-agents. Ciò è separato da un opencode.jsonc di progetto. OpenCode carica gli strumenti hindsight_* dal percorso e non ha bisogno di un server MCP. OpenCode 2 (npm @opencode/cli, target di installazione opencode2) legge lo stesso file. Installare una delle due CLI collega entrambe e disinstallarne una rimuove la voce. OpenCode v1 rifiuta il file se contiene la chiave plugins di v2, quindi l’installatore scrive un singolo percorso e ogni CLI carica il proprio punto di ingresso dal pacchetto.
Su OpenCode 2, la sondaggio in sola lettura del repository viene eseguito sotto uno strumento diverso installato, perché un plugin v2 non può definire l’agente in sola lettura necessario per quel sondaggio e la notifica “seeded” va al log del plugin perché un plugin v2 non può mostrare un toast. Il recall, gli strumenti hindsight_* e la riscrittura della sessione funzionano come in v1.
OpenCode legge ~/.hindsight/coding-agent.json quando il workspace viene caricato, quindi una modifica a quel file si applica dopo che riavvii OpenCode. Un nuovo apiToken è l’eccezione per ogni strumento: il client lo rilegge quando il server rifiuta una richiesta, quindi la rotazione della chiave non richiede quel riavvio.
Per verificare se la banca ha effettivamente conservato una decisione, usa due sessioni in un repository che sei disposto a archiviare:
- Avvia OpenCode lì e formula una decisione monouso, come un codice di errore pubblico che non vuoi venga modificato.
- Termina la sessione. OpenCode scrive la trascrizione durante la sessione e scarica l’ultima risposta quando va inattivo.
- Avvia una nuova sessione nella stessa directory e chiedi di quel codice e di dove sia stata presa la decisione.
- Chiedi all’agente di chiamare
hindsight_sync_status."synced": truesignifica che la memoria seminata può essere interrogata. Lo stesso risultato riporta quanto è recente la copia git e quante documentazioni di sondaggio sono atterrate (surveyDocs, da 0 a 4).
Se la seconda sessione non ha memoria del codice, cerca in ~/.hindsight/coding-agents-logs/. plugin.log è la traccia leggibile, diag.jsonl registra ogni reflect e fetch di pagina e usage.jsonl registra quali strumenti hindsight_* il giro ha chiamato. npx @vectorize-io/hindsight-coding-agents stats riassume quel file di utilizzo per agente. Quando un reflect va in timeout o restituisce un 5xx, diag.jsonl registra una ricerca delle pagine di conoscenza e, se nessuna pagina corrisponde, un recall semplice delle osservazioni. L’agente risponde comunque. Se anche quelle riserve falliscono, quel giro non ha nulla della banca davanti a sé.
Collega Cursor e altri agenti
Cursor si unisce alla stessa banca tramite la sua CLI. L’installatore scrive hook e MCP sotto ~/.cursor:
npx @vectorize-io/hindsight-coding-agents install cursor-cli --server daemon
Questo scrive hook in ~/.cursor/hooks.json, un server MCP in ~/.cursor/mcp.json e una skill compagna. Ogni hook è un processo a vita breve, quindi una modifica a coding-agent.json si applica al prossimo prompt. Il processo MCP legge il file all’avvio, quindi gli strumenti hindsight_* vedono la modifica nella sessione successiva.
Claude Code ottiene lo stesso collegamento hook-e-MCP nei file di Claude. install claude-code aggiunge tre hook a ~/.claude/settings.json, registra MCP per il tuo utente tramite claude mcp add e installa ~/.claude/skills/hindsight-coding-agent. Quella skill è ciò che Claude legge quando gli dici di archiviare qualcosa in Hindsight. Codex CLI (install codex) scrive tre hook in ~/.codex/hooks.json e un blocco [mcp_servers] in config.toml, e quegli hook vengono eseguiti solo quando codex_hooks è true.
| Strumento | Target di installazione | Collegamento | Come l’agente raggiunge la memoria |
|---|---|---|---|
| OpenCode | opencode |
~/.config/opencode/opencode.json |
Strumenti nativi, nessun MCP |
| OpenCode 2 | opencode2 |
Stesso file di OpenCode | Strumenti nativi, nessun MCP |
| Cursor CLI | cursor-cli |
~/.cursor/hooks.json, ~/.cursor/mcp.json, skill compagna |
Hook più MCP |
| Claude Code | claude-code |
Tre hook in ~/.claude/settings.json, MCP a livello utente, skill sotto ~/.claude/skills/ |
Hook più MCP |
| Codex CLI | codex |
~/.codex/hooks.json, [mcp_servers] in config.toml |
Hook più MCP |
| pi | pi |
Estensione in ~/.pi/agent/settings.json, skill sotto ~/.pi/agent/skills |
Strumenti nativi, nessun MCP |
Kilo, Copilot CLI, Cline, Devin CLI e gli altri nomi nella pagina di coding-agents usano lo stesso comando install <nome> e condividono la banca del repository che apri. Devin CLI non verrà installato su Node più vecchio di 22.5, perché i suoi hook leggono il database di sessione tramite node:sqlite. Anche pi e Prime Agent devono usare quel comando install. pi install npm:@vectorize-io/hindsight-coding-agents è lasciato scollegato: entrambi gli strumenti leggono una singola chiave pi in package.json e quella chiave può puntare a un solo ingresso.
Per impedire a Claude Code di scrivere nella banca mentre OpenCode continua a farlo, imposta disabled per quello strumento:
{
"serverMode": "daemon",
"harnesses": {
"claude-code": { "disabled": true }
}
}
Claude Code non archivia nulla, non recupera nulla e non riceve strumenti Hindsight. retainSessions impostato su false, per ogni strumento o per uno di essi, ferma il salvataggio delle trascrizioni e ferma l’importazione di quelle vecchie. Il recall, la cronologia git e gli strumenti di memoria continuano a funzionare, quindi puoi ancora chiedere su ciò che è già archiviato.
Banche per repository e pagine di conoscenza
OpenCode e la CLI di Cursor su un singolo checkout dovrebbero ricordare lo stesso progetto. Il nome della banca che lo fa è coding-agent::{gitProject}. {gitProject} è il nome della directory del checkout git principale, da git rev-parse --git-common-dir, quindi un worktree collegato usa la stessa banca di quel checkout. Una cartella che non è un repository git prende il nome della directory in cui la sessione è iniziata.
Una cartella che dovrebbe usare una banca diversa va in mapPathToBank. Fornisci un percorso assoluto, il percorso corrispondente più lungo vince e l’elenco della radice del repository copre ogni sotto-cartella sotto di essa. Quella mappa sostituisce tutto il resto, incluso un bankId fisso. Imposta bankId quando ogni directory che apri dovrebbe scrivere in una banca che hai nominato. dynamicBankId impostato su false mantiene la risoluzione su quella banca statica invece di bankIdTemplate.
Se l’agente cd in una directory che appartiene a un’altra banca, i giri da quel momento in poi vengono archiviati nella nuova banca. I giri già salvati restano dove erano stati scritti. Ogni movimento è un avviso in plugin.log.
La prima volta che apri un repository, quella banca non ha alcuna delle passate decisioni del progetto. La sessione copia i messaggi di commit recenti, ed è così che una scelta che esiste solo in git diventa qualcosa che la sessione successiva può recuperare. La copia è attiva di default (autoSeed). Una scrittura completa di quel documento mantiene i commit più recenti, tra la metà di seedLimit e seedLimit (300). La finestra si sposta a passi di metà e il log dice quanti commit più vecchi ha scartato.
gitIngest sceglie quanta di quella cronologia git viene archiviata, sia per la prima copia che per i commit che fai dopo. "message" archivia i messaggi di commit e aggiorna il documento quando HEAD contiene un commit che il documento manca. "full" archivia anche la diff di ogni commit, dal più recente. "none" lascia il git fuori. Un commit successivo aggiunge il suo messaggio. L’intero documento viene riscritto di nuovo, sempre dentro quella finestra seedLimit, quando il commit salvato non è più un antenato di HEAD, quando ci sono più di seedLimit commit nuovi, o quando il server non può aggiungere in sicurezza.
I messaggi di commit non mostrano come è organizzato il codice ora, quindi la stessa prima sessione può anche percorrere l’albero. Quel percorso è codebaseSurvey, attivo di default. Lo strumento di coding che stai usando lo esegue quando la sua CLI può ospitare un agente in sola lettura; altrimenti lo esegue un altro strumento installato.
Su Claude Code il percorso è claude -p e surveyBudgetUsd (default 2) ferma la spesa. Gli altri strumenti usano il modello a cui sono già puntati, dentro il loro sandbox in sola lettura. Dopo 20 commit nuovi (surveyRefreshCommits) il percorso viene eseguito di nuovo. Impostalo su 0 e viene eseguito solo su una banca che non è mai stata sondata.
Nota: Il percorso avvia un agente di coding separato, come un OpenCode headless. Quelle chiamate vanno al modello di quell’agente, quindi
HINDSIGHT_API_LLM_MAX_CONCURRENTimpostato su"1"non li rallenta. Quando il modello è un server self-hosted che sta già rispondendo alla tua sessione, il sondaggio è una seconda passata completa sullo stesso server. ImpostacodebaseSurveysufalsequando il server non può sostenerlo.
La sessione successiva parte da cinque pagine invece di rileggere ogni fatto archiviato. Ogni pagina è sintetizzata da un livello di conoscenza, quindi legge solo i fatti che l’estrattore ha instradato a quel livello.
| Pagina | Cosa risponde | Tag |
|---|---|---|
| Mappa dei componenti | Componenti principali, le loro responsabilità e come dipendono l’uno dall’altro | knowledge:component |
| Concetti chiave | Astrazioni di dominio e il vocabolario che uno sviluppatore deve conoscere | knowledge:concept |
| Convenzioni e pattern | Come questo progetto testa, gestisce gli errori, denomina, struttura il codice e fa modifiche | knowledge:convention |
| Decisioni chiave e rationale | Decisioni tecniche significative e perché il progetto lo fa in quel modo | knowledge:decision |
| Iniziative e miglioramenti | Principali iniziative nel tempo, con link alle pagine di iniziativa catturate | knowledge:feature-work |
Un minuto condiviso farebbe partire tutte e cinque le pagine insieme, sulla stessa pool di worker che archivia nuove memorie, e una sessione di ingestione attenderebbe dietro quel mucchio. L’orario di default le distribuisce. pageTriggerCron è H * * * *: ogni pagina ottiene il suo minuto, hashtato dall’id della banca e dal nome della pagina, e un tick senza novità viene saltato. pageTriggerType impostato su auto-refresh riscrive una pagina dopo ogni consolidamento che ha prodotto nuovo materiale. La documentazione chiama quell’orario il più attuale e il più costoso, una sintesi di modello per pagina per consolidamento. manual lascia una pagina com’è finché non la aggiorni.
Una pagina incorporata che non vuoi venga aggiornata è false sotto pages. La copia già archiviata resta finché non la elimini nel control plane. source_query sostituisce la domanda che quella pagina fa e il plugin aggiunge ancora la clausola che tiene le decisioni di una dipendenza fuori dalla pagina. Una pagina tua va sotto customPages e ha bisogno della sua source_query. Un nome sconosciuto sotto pages viene ignorato, con un avviso in plugin.log, quindi un refuso non crea una seconda pagina vuota. Chiedere all’agente di catturare un’initiative scrive una pagina separata, una per iniziativa, tramite hindsight_capture_initiative.
Eliminare la banca sul server cancella la memoria di quel repository. La sessione successiva copia la cronologia git e percorre l’albero di nuovo. Disinstallare il plugin lascia la banca com’è.
Controlli di ambito e privacy
Aprire un repository crea una banca per esso, ed è così che un albero di client può essere archiviato senza che tu lo chieda. optInOnly limita la memoria alle directory che nomini. Ovunque altro il plugin non crea una banca, non archivia nulla e non copia cronologia git, e lo strumento di coding si comporta come se il plugin non fosse installato.
{
"optInOnly": true,
"optInPaths": ["~/prj", "~/oss"]
}
Ogni voce è un prefisso di directory, ~ viene espanso e ogni repository sotto di essa ottiene comunque la sua banca coding-agent::{gitProject}. Un percorso in mapPathToBank è anche consentito, perché hai già nominato quella cartella. Un bankId da solo non consente nulla: nomina una banca, non una cartella, quindi con optInOnly attivo, le directory non nominate restano fuori. Il plugin non legge nessuna configurazione dal repository. Il motivo nella documentazione è che un repository clonato non deve poter attivare la memoria. Quale cartella usa quale banca resta in mapPathToBank. Quale strumento è attivo o disattivato resta in harnesses. Una volta noto l’id della banca, regole ulteriori per quel singolo repository vanno in banks:
{
"banks": {
"coding-agent::secret-client": { "disabled": true }
}
}
npx @vectorize-io/hindsight-coding-agents uninstall cursor-cli rimuove gli hook di Cursor, la voce MCP e la skill che l’installatore ha aggiunto. uninstall all fa lo stesso per ogni strumento che ha collegato. Un file che esisteva già viene copiato in un .hindsight-backup accanto a esso prima che l’installatore lo modifichi. La banca, il database del daemon e ~/.hindsight/coding-agent.json restano.
Un token incollato in una chat non dovrebbe diventare una memoria. Memory Defense è una scansione a 45 pattern del testo prima che venga archiviato e resta disattivata finché quella banca non ha una policy. redact sostituisce una corrispondenza con un marcatore come [REDACTED:github_token] e archivia il resto. block scarta l’elemento corrispondente e restituisce 422 quando ogni elemento nella richiesta corrispondeva. La policy si applica agli archiviamenti successivi su quella banca. Le memorie già archiviate restano com’è. Quei due azioni sono la regola open-source sensitive_data.
Chi è autorizzato a attivare la scansione è scritto diversamente in due luoghi. Il post enterprise del 03/09/2026 afferma che lo scanner di base è attivo su tutti i piani e che i detector extra — un catalogo di 220 o più pattern, ri-scansione base64, controlli di prompt-injection e uno screen LLM — sono Enterprise. Il confronto dei prezzi marca Memory Defense come solo Enterprise, con le celle self-hosted e Cloud vuote. Verifica quella riga sulla pagina dei prezzi attuale prima di contare su una banca Cloud per eliminare i segreti.
manageBankConfig è true di default, il che permette al plugin di scrivere le impostazioni della banca di cui l’ingestione ha bisogno e qualsiasi campo che metti in defaultBankConfig. Scrive un campo solo dove la banca non ne definisce già uno, quindi un valore che imposti nel control plane resta. La modalità di estrazione sulle strategie proprie del plugin è l’eccezione: segue retainExtractionMode su ogni sessione. retainContext, inviato con ogni riscrittura di sessione, dice all’estrazione chi ha detto la frase. Il default nomina entrambi i parlanti e chiede che i propri “fissi” o “passa” dell’agente vengano archiviati come affermazione dell’agente piuttosto che come fatto. Quando una conclusione viene archiviata come se qualcuno l’avesse osservata, i modi che alimentano la sessione successiva sono in Cicli di memoria auto-rinforzanti.
Impostazioni per lo sviluppo quotidiano
Ogni strumento di coding legge lo stesso file, ~/.hindsight/coding-agent.json, quindi un limite che imposti una volta si applica a OpenCode e a Cursor. HINDSIGHT_CONFIG sposta quel file. Non ne crea un secondo. Per ogni impostazione, un default incorporato perde rispetto a una variabile d’ambiente (HINDSIGHT_API_URL, HINDSIGHT_API_TOKEN o HINDSIGHT_<CAMPO> per altri valori singoli), che perde rispetto alla cima del file, poi a harnesses.<nome>, poi a paths.<prefisso>, poi a banks.<id>. Un valore scritto nel file resta quando imposti successivamente la stessa variabile d’ambiente. retainTags e optInPaths possono essere una variabile separata da virgole. mapPathToBank, harnesses, paths, banks, retainMetadata e recallOptions vengono letti solo dal file.
Quando una sessione è lenta, costosa o ricorda il repository sbagliato, la modifica è uno di questi campi. I default sono dal riferimento di coding-agents.
| Campo | Default | Quando modificarlo |
|---|---|---|
serverMode |
cloud |
daemon per una banca locale, self-hosted per un server che gestisci |
autoInject |
"reflect" |
"pages" o "recall" saltano la sintesi all’avvio della sessione. "none" non inietta nulla; l’agente cerca nelle pagine e riflette quando sono troppo superficiali |
reflectTimeoutMs |
20000 |
Il reflect automatico di sessione. Su strumenti che usano hook, l’installatore imposta un timeout di 30 secondi per l’hook di prompt, quindi un valore oltre circa 20 secondi richiede anche di alzare il timeout di quell’hook |
reflectBudget |
"high" |
Budget per lo strumento hindsight_reflect chiamato dall’agente. Il reflect automatico di sessione usa sempre "low" e ignora questo |
recallOptions |
osservazioni, budget basso, max_tokens 2000 |
Fuso chiave per chiave. Una banca con consolidamento disattivato non cresce osservazioni e il recall di default torna vuoto — imposta "types": ["world", "experience"] lì |
retainExtractionMode |
"concise" |
"verbose" estrae più dettaglio. Il riferimento dice che costa diversi volte i token, perché ogni Stop riscrive la sessione. "chunks" archivia testo senza estrazione |
retainTags / retainMetadata |
non impostato | Su una banca condivisa, timbra project:{gitProject} così i recall possono filtrare. L’id della banca risponde già a “quale repo” quando ogni repo ha la sua banca |
bankIdTemplate |
coding-agent::{gitProject} |
{harness}::{gitProject} separa gli agenti. mapPathToBank invia un albero di directory in una banca nominata |
codebaseSurvey |
true |
false quando il sondaggio e la tua sessione condividono un modello self-hosted. surveyBudgetUsd (default 2) limita solo la ricetta Claude |
pageTriggerType |
"cron" |
"auto-refresh" segue ogni consolidamento. "manual" lascia le pagine com’è |
maxParallelRetains |
10 |
Abbassalo se l’API restituisce 429. Il riferimento dice che l’API limita le burst |
Un daemon locale che ricorda solo repository sotto ~/prj, archivia messaggi di commit, lascia fuori il sondaggio del repository e chiede alle nuove banche di censurare i segreti sembra così:
{
"serverMode": "daemon",
"optInOnly": true,
"optInPaths": ["~/prj"],
"gitIngest": "message",
// codebaseSurvey avvia un altro agente di coding. HINDSIGHT_API_LLM_MAX_CONCURRENT non lo limita.
"codebaseSurvey": false,
"retainExtractionMode": "concise",
"autoInject": "reflect",
"defaultBankConfig": {
"memory_defense": {
"enabled": true,
"rules": [{ "on": "sensitive_data", "action": "redact" }]
}
}
}
defaultBankConfig compila memory_defense solo su una banca che non ce l’ha già e non fa nulla quando manageBankConfig è false. hindsight_diagnose mostra il file com’è ora e i valori che il client in esecuzione ha effettivamente caricato.
Quanto costa e quando un file basta
Una sessione può spendere tre cose all’avvio: un reflect a budget basso sul primo prompt, una copia dei messaggi di commit recenti limitata da seedLimit e il percorso dell’albero. Con retainSessions lasciato attivo, la trascrizione viene archiviata man mano che la sessione procede. Le cinque pagine si aggiornano nel loro minuto dell’ora quando qualcosa è cambiato. gitIngest impostato su "full" archivia diff insieme ai messaggi.
La domande frequenti sui prezzi di Vectorize elenca le tariffe Cloud senza un canone mensile fisso né un prezzo per postazione. Le FAQ dicono che i nuovi account ricevono crediti gratuiti e non pubblicano l’importo dei crediti.
| Operazione | Prezzo |
|---|---|
| Retain | $10,00 per milione di token |
| Recall | $0,75 per milione di token |
| Reflect | $0,05 per chiamata |
| Iris Extract | $7,50 per milione di token |
| Mental Model Retrieve | $0,25 per milione di token |
| Mental Model Refresh | $0,05 per chiamata |
| Archiviazione dopo 30 giorni | $0,25 per milione di token al mese |
Le memorie sono gratuite da archiviare per i primi 30 giorni. La panoramica Cloud dice che la creazione o l’aggiornamento delle pagine di conoscenza è addebitata per chiamata e le FAQ non pubblicano una riga separata per le pagine di conoscenza. Un daemon o un server self-hosted non incorre in queste tariffe Cloud. L’estrazione spende comunque quanto costa l’LLM del daemon, inclusa una chiave API cloud se quella è la chiave che install ha trovato.
La stessa pagina di documentazione riporta un run di sdebench di AMB: 61 task di repository, tre run ciascuno, con e senza memoria. Ogni run ha risolto 60–61 dei 61 in entrambi i casi. Ciò che è cambiato sono le correzioni per task e il costo per task. La pagina dice che le cifre di correzione riproducono le etichette che AMB stampa sul suo stesso grafico e che il costo è derivato dalla stessa tabella per run.
| Agente | Correzioni per task | Costo per task |
|---|---|---|
| Claude Code | 0,85 → 0,36 | $0,445 → $0,338 |
| Codex CLI | 1,34 → 0,47 | $0,577 → $0,276 |
| opencode | 1,20 → 0,80 | $0,634 → $0,553 |
Senza memoria è il numero a sinistra. Quei tre agenti sono l’intera tabella che la pagina stampa.
Una regola che vuoi rivista accanto al codice appartiene a AGENTS.md o CLAUDE.md. Quel file è nel repository quando il daemon è in ginocchio e salvarlo non archivia la chat. La banca porta una decisione che non è mai stata scritta lì e che la sessione successiva continua a sbagliare. Su Hermes, un archivio SQLite locale con i suoi interruttori di ritenzione è Mnemosyne.
Fonti
- Coding Agents — target di installazione, campi di
coding-agent.json, denominazione delle banche, pagine di conoscenza, modalità daemon e la tabella sdebench. Pacco npm@vectorize-io/hindsight-coding-agents0.8.4, pubblicato il 30/10/2026. - Prezzi — tariffe delle operazioni Cloud, l’affermazione di gratuità per l’auto-ospitalità e la riga della matrice dei piani per Memory Defense.
- Memory Defense — policy
sensitive_dataper banca, redact e block, 45 pattern, disattivata finché non viene impostata una policy di banca. Le memorie esistenti restano non scansionate. - Funzionalità Enterprise, 03/09/2026 — scanner di base descritto come per tutti i piani; detector extra descritti come Enterprise.