Sistec · adozione IA · proposta finale d'infrastruttura
Sintesi operativa e decisione d'infrastruttura: due fonti di verità indipendenti — la
wiki-LLM su SharePoint/OneDrive per i fatti e il marketplace di plugin su GitHub
per le competenze — configurate una volta a livello utente (~/.claude) e valide su ogni progetto.
Il repository resta solo codice più graphify; il metodo di lavoro con Claude Code chiude il
ciclo riportando nella wiki ciò che il lavoro sul repo produce.
Questo documento è la sintesi decisionale che chiude la serie. Approfondimenti dedicati:
CLAUDE.md, i due canali di condivisione.Qui non si ripete l'analisi: si fissa l'infrastruttura concreta — cosa vive dove, chi è fonte di verità di cosa, e il metodo di lavoro quotidiano con Claude Code.
L'infrastruttura si regge su due fonti di verità separate, ciascuna proprietaria di un tipo di contenuto diverso. Non si sovrappongono e non richiedono un orchestratore comune.
| sistec-wiki (fatti) | sistec plugin marketplace (competenze) | |
|---|---|---|
| Fonte di verità di | conoscenza aziendale: decisioni, progetti, analisi, documenti | skill installate su ogni ~/.claude |
| Dove vive | SharePoint — libreria SistecAM-AIStack | repository GitHub |
| Come si propaga | sync automatica del client OneDrive su ogni PC | installazione esplicita dal marketplace |
| Cosa contiene | testo, email, schemi elettrici, disegni meccanici, verbali, analisi | codice + istruzioni (SKILL.md) |
| Versionamento | cronologia file OneDrive + log.md append-only | git, PR su main protetto |
| Accesso da Claude Code | lettura diretta, autorizzata una volta in settings.json, + ricerca qmd su indice locale (§2.4) | skill già installate in ~/.claude/skills/ |
Ogni contenuto ha una sola casa: un comportamento/procedura è una skill (marketplace, GitHub); un fatto/decisione/documento è nella wiki che funge da second brain aziendale (SharePoint/OneDrive). Nessun contenuto vive in due posti contemporaneamente, quindi non c'è nulla da tenere sincronizzato tra le due fonti.
~/.claude, una volta per PCLe due fonti di verità si attivano a livello utente: due modifiche, fatte una volta su ogni PC, valide per qualunque progetto l'operatore apra dopo.
settings.json — autorizzare la lettura della wikiLa cartella della wiki sincronizzata è fuori dal repository: senza un'autorizzazione esplicita, Claude Code
chiederebbe conferma ad ogni lettura. Si risolve con un allow permanente nel
settings.json utente (C:\Users\<utente>\.claude\settings.json):
{
"permissions": {
"allow": [
"Read(C:\\Users\\Sistec 32\\Sistec srl\\Sistec AM-AI Stack - sistec-wiki\\**)",
"Bash(qmd:*)"
]
}
}
Il percorso è quello locale della sync SharePoint/OneDrive — dipende dall'account Windows, quindi va scritto
nel settings.json personale, non in quello di progetto. La seconda riga autorizza il motore di
ricerca della wiki (§2.4): senza, ogni singola ricerca chiede conferma — lo stesso attrito che la prima riga
elimina sulla lettura dei file.
CLAUDE.md — un paragrafo, non una skillPerché Claude Code consulti la wiki senza doverlo ricordare a ogni sessione, basta un rimando nel
CLAUDE.md utente. Un paragrafo, non una skill: la procedura di ingest/query/lint è già scritta
nel CLAUDE.md della wiki stessa, qui basta indicare dove trovarla.
In "C:\Users\Sistec 32\Sistec srl\Sistec AM-AI Stack - sistec-wiki" è presente una LLM wiki aziendale (fatti, decisioni, documenti). Consultala seguendo le regole nel suo CLAUDE.md per ottenere contesto sui progetti a cui stai lavorando, prima di chiedere all'operatore.
skills/ — installate dal marketplaceLe skill installate dal sistec plugin marketplace (GitHub) vivono in
~/.claude/skills/ (o registrate come plugin). Stessa logica: installazione una tantum per PC,
disponibili in ogni progetto senza configurazione per-repo.
qmd — l'indice di ricerca, locale e non sincronizzatoLa wiki non si consulta leggendo le cartelle a tentoni: il suo CLAUDE.md prescrive
qmd per ogni ricerca — BM25 su parole chiave, ricerca vettoriale semantica, reranking. qmd lavora su un
indice SQLite più i modelli di embedding, e né l'uno né gli altri vivono nella
cartella sincronizzata:
| Cosa | Dove | Perché lì |
|---|---|---|
| indice | ~\.cache\qmd\index.sqlite | percorso default di qmd — nessuna variabile d'ambiente da impostare |
| modelli | ~\.cache\qmd\models\ | ~1,6 GB di GGUF (embedding + reranker): mai su SharePoint |
| collection | ~\.config\qmd\index.yml | contiene il path assoluto del vault, che include il nome account Windows → macchina-specifico |
Setup una tantum per PC, dopo che la cartella wiki è sincronizzata:
npm i -g @tobilu/qmd cd "C:\Users\<utente>\Sistec srl\Sistec AM-AI Stack - sistec-wiki" qmd collection add wiki/ --name wiki qmd update && qmd embed
Il primo embed scarica i modelli (~1,6 GB): su rete aziendale non è istantaneo. Da lì in poi
tutti i comandi sono nudi — qmd search "..." — senza INDEX_PATH né altre variabili.
Le pagine della wiki arrivano su ogni PC da sole, via sync SharePoint. L'indice no. È un
artefatto derivato: si ricostruisce in locale con qmd update && qmd embed,
quindi non va sincronizzato, non va copiato tra PC e non va messo nei backup. Ogni operatore indicizza le
stesse pagine per conto proprio — è la condizione che tiene un database SQLite fuori da una cartella con
scritture concorrenti (§4).
Il percorso della wiki sincronizzata dipende dall'account Windows e cambia da PC a PC. Metterlo nel
CLAUDE.md/settings.json utente — non versionato in nessun repo — evita di
duplicare, o sbagliare, un path macchina-specifico in ogni repository. Vale identico per il
path: della collection in index.yml: se la cartella wiki viene spostata o
ri-sincronizzata, va corretto lì prima del successivo qmd update — altrimenti qmd non
trova più nessun file e svuota l'indice.
Claude Code viene eseguito nella cartella del repository, com'è pensato dalla documentazione ufficiale Anthropic. Dentro quella cartella non c'è nulla di condiviso tra progetti — niente skill, niente conoscenza aziendale: solo ciò che è specifico di questo repo.
~/.claude), installate dal
marketplace GitHub (§2.3)..claude/rules/ — le convenzioni di scrittura del codice (naming, pattern, cosa evitare)
restano nel repo, versionate con il codice che disciplinano: sono specifiche di quel progetto,
non trasferibili come le skill. Esempio concreto — le rule estratte dai progetti FAEL/LAG:
github.com/marc04AM/AiFormation/examples/rules.graphify-out/, così Claude Code può fare ricerche senza leggere ogni file del
repository per orientarsi.Competenza → marketplace (GitHub) → ~/.claude. Conoscenza → wiki
(SharePoint/OneDrive) → ~/.claude. Convenzioni di codice → .claude/rules/ →
dentro al repo, perché disciplinano solo quel codice. Struttura del codice → graphify → dentro al repo
stesso, perché è specifica di quel repo. Quattro nature diverse, quattro canali diversi, nessuna sovrapposizione.
Non tutte le skill restano solo a livello utente. openspec è l'eccezione: opera su file che devono
esistere dentro il repository (openspec/, openspec/changes/), quindi
le sue skill (openspec-propose, openspec-apply-change, openspec-archive-change,
ecc.) vanno installate anche in .claude/skills/ del progetto, non solo a livello utente. Stesso
discorso per graphify: la skill è a livello utente, ma va inizializzata per-progetto
(graphify-out/ nasce dentro il repo).
Guida passo-passo per inizializzare graphify e openspec su un nuovo progetto: «Iniziare un nuovo progetto con Claude Code» (OneNote, Claude AI).
La wiki non riceve solo testo: qualunque documento aziendale utile come fatto o conoscenza può finire in
raw/ — email, schemi elettrici, disegni meccanici, verbali, oltre ai prodotti di analisi
generati lavorando su un progetto.
openspec, l'output di graphify, e qualunque altro prodotto di analisi del
repository sono fatti: la conoscenza che serve per ricostruire perché e come è stata presa
una decisione. L'operatore li copia manualmente in raw/ della wiki e chiede
l'ingest — non c'è sincronizzazione automatica tra repository e wiki.
Nessun hook o watcher sincronizza il repo con la wiki a ogni sessione: sarebbe rumore, non conoscenza. Il punto di frizione minimo — copia-incolla del file più il prompt «fai ingest» — è il meccanismo di controllo: l'umano decide cosa, tra i documenti del progetto, merita di diventare conoscenza aziendale condivisa.
openspec/ e .claude/claude-archive/ vanno committati in git, non
messi in .gitignore: la copia in raw/ della wiki (sopra) è un'aggiunta, non un
trasferimento. Restando nel repo, quelle cartelle sono già fonte d'informazione lì dove serve
— chi clona o apre il repo trova subito perché e come, senza dover prima passare dalla wiki.
Durante l'ingest, la wiki produce da sola due file: log.md (registro cronologico
append-only di ogni ingest/query/lint) e index.md (catalogo aggiornato di tutte le pagine).
L'operatore non li mantiene: sono l'output dell'operazione di ingest definita nel CLAUDE.md
della wiki.
La cartella raw/ accetta qualunque formato: markdown, PDF, immagini di schemi elettrici o
disegni meccanici, export di scambi email. L'ingest li legge (testo e immagini) e produce il riassunto in
wiki/fonti/, aggiornando le pagine sintetiche toccate — la regola è la stessa qualunque sia il
formato d'origine: nella wiki finisce il risultato dell'analisi, non il racconto di come si è arrivati lì.
Regola generale: nella cartella wiki va solo testo. Nessun file binario a scrittura concorrente — né un repo git, né un database. OneDrive sincronizza file, non transazioni: non ha modo di sapere che due file vanno aggiornati insieme, o che uno è a metà scrittura. Due casi concreti, scartati per lo stesso motivo:
.git/ — oggetti e refs possono restare incoerenti se un commit è in corso su un PC
mentre la sync scrive sugli stessi file da un altro: repo corrotto, non solo conflitto
file. Fragile per un meccanismo pensato come rete di sicurezza.index.sqlite, §2.4) — SQLite tiene sidecar WAL/journal accanto al
database: se arrivano al sync in ordine diverso, l'indice è corrotto. In più Files
On-Demand può disidratare il file, e qmd si trova ad aprire un placeholder da 0 byte. Su una libreria
condivisa si aggiunge il resto: copie conflitto, e megabyte di binario ricaricati verso tutti i
colleghi a ogni re-indicizzazione.Nessuna delle due esclusioni costa qualcosa, perché in entrambi i casi il contenuto è
ricostruibile: il versionamento resta cronologia file OneDrive + log.md
append-only (§1, §4.2), e l'indice si rigenera con qmd update && qmd embed (§2.4).
Il ciclo quotidiano di lavoro è quello descritto dalla documentazione ufficiale Anthropic: si lavora dentro la cartella del repository. A questo si aggiungono due meccanismi che chiudono il ciclo verso la wiki.
claude-archive — il perché e il come, a fine modificaIl plugin marketplace/hmi-developer include la skill/hook archive: a fine di una
modifica al codice, scrive un riepilogo conciso — perché è stata fatta, come è stata fatta — in
.claude/claude-archive/<data>-<slug>.md, dentro al repository. È esattamente ciò
che serve sapere per ricostruire una decisione senza dover rileggere il diff: candidato naturale per la
copia manuale in raw/ (§4.1).
Per modifiche di maggiore portata si usa openspec direttamente dentro Claude Code (skill installate
anche nel progetto, §3.1): prima di implementare, produce in openspec/changes/<nome>/ gli
artefatti standard — proposal.md, specs/, design.md,
tasks.md. Questi file sono prodotti di analisi a tutti gli effetti (§4.1): si copiano in
raw/ e si indicizzano, cosicché la decisione progettuale sopravviva al repository in cui è
nata.
È prevista l'integrazione di un MCP server per Microsoft 365 per portare nella wiki, in modo meno manuale, ciò che oggi vive solo in Teams, OneNote e OneDrive. Il disegno completo è nel documento dedicato (sistec-wiki §8) — qui resta fuori scope: l'infrastruttura di questo documento funziona già senza.
Le due fonti di verità in alto, la configurazione a livello utente al centro, il repository in basso — con
il metodo di lavoro che chiude il ciclo copiando i prodotti di analisi in raw/.
wiki/ → qmd resta dentro il livello utente:
le pagine si propagano via sync, l'indice di ricerca si ricostruisce su ogni PC (§2.4).| Cosa | Azione | Dipendenza |
|---|---|---|
| Wiki | cartella già sincronizzata via SharePoint (SistecAM-AIStack); ogni operatore aggiunge il rimando nel proprio CLAUDE.md utente e l'allow in settings.json (§2) | nessuna — già disponibile |
| Marketplace | repository GitHub come unico canale d'installazione delle skill su ~/.claude — guida all'uso: OneNote HMI | repository esistente, criteri d'integrazione già definiti |
| Metodo di lavoro | abilitare l'hook claude-archive (marketplace/hmi-developer) su tutti i progetti attivi; usare openspec direttamente in Claude Code per le modifiche complesse (§5) | plugin hmi-developer installato, skill openspec installata (§3.1) |
| qmd | su ogni PC, dopo la sync della wiki: npm i -g @tobilu/qmd, registrare la collection e costruire l'indice con qmd update && qmd embed (§2.4); aggiungere Bash(qmd:*) all'allow (§2.1) | cartella wiki sincronizzata; Node.js; ~1,6 GB per i modelli al primo embed |
| graphify | eseguire graphify update . nei repository di progetto attivi | skill graphify installata |
| MS365 MCP | fuori scope di questa proposta — disegno completo in sistec-wiki §8 | Fase 1-2 della roadmap wiki completate |
Zero infrastruttura nuova da costruire: SharePoint/OneDrive e GitHub esistono già e fanno da sé la
sincronizzazione. Il lavoro è tutto di configurazione (due file per PC) e di
disciplina operativa (copiare i prodotti di analisi in raw/, lanciare
l'hook di archivio, usare openspec sulle modifiche complesse) — non di sviluppo software.
| Versione | Data | Revisionato da | Modifiche introdotte |
|---|---|---|---|
| 1.2 | 2026-08-13 | Marco Manfrin @Sistec | Aggiunto qmd — il motore di ricerca della wiki, prima assente dal documento. Nuova §2.4:
indice SQLite in ~\.cache\qmd\, collection in ~\.config\qmd\index.yml,
setup per PC, comandi senza INDEX_PATH. §2.1: aggiunto Bash(qmd:*)
all'allow, altrimenti ogni ricerca chiede conferma. §1: riga «Accesso da Claude Code»
completata con la ricerca qmd. §4: la callout «niente repo git nella cartella wiki» generalizzata a
niente database né repo git — .git/ e index.sqlite falliscono per lo
stesso motivo (binari a scrittura concorrente su cartella sync), entrambi ricostruibili. §6: quarto box
nel riquadro utente + freccia wiki/ → qmd; il riquadro non si chiama più
~\.claude, perché qmd scrive in ~\.config e ~\.cache. §7: riga
qmd nei prossimi passi. |
| 1.1 | 2026-08-06 | Marco Manfrin @Sistec | Scartata l'idea di repo git nella cartella wiki. §4.4 rimossa: versionare la wiki con un
repository git dentro la cartella sincronizzata OneDrive è fragile — rischio di oggetti/refs git
corrotti se la sync scrive durante un commit da un altro PC. Versionamento resta cronologia file
OneDrive + log.md (§1, §4.2). Rimossa anche la riga corrispondente in §7 (prossimi passi)
e il rimando in tabella §1. |
| 1.0 | 2026-08-06 | Marco Manfrin @Sistec | Emissione iniziale. Sintesi decisionale dell'infrastruttura: due fonti di verità (wiki
SharePoint/OneDrive, marketplace GitHub), configurazione a livello utente, repository solo codice +
graphify, metodo di lavoro con hook claude-archive e openspec. |