sintropi-bootstrap
Bootstrap pubblico per la CLI sintropi-code — l'engine multi-agent di Sintropi.
Permette a uno sviluppatore di installare, autenticare e mantenere allineata la versione di sintropi-code corretta per ogni tenant Sintropi (dev, qa, prod, cliente).
Installazione
pip install sintropi-bootstrap
Upgrade
pip install --upgrade sintropi-bootstrap
sintropi-bootstrap si aggiorna da solo: scarica automaticamente la versione aggiornata dell'engine sintropi-code a ogni rilascio del tenant. Di norma non è necessario reinstallarlo manualmente.
Uso
# Primo setup o switch tenant (idempotente)
sintropi-bootstrap https://mcp.acme.eight20.com
# Comando principale — auto-detect versione, auto-download se cambiata
sintropi-code generate "App per la gestione ordini"
sintropi-code bootstrap my-app -o ./output/my-app
Come funziona
1. sintropi-bootstrap <mcp_url>
sintropi-bootstrap https://mcp.acme.eight20.com
→ Leggo config del server MCP
→ Autenticazione Keycloak — Device Authorization
[apre il browser sulla pagina Keycloak standard]
[attende che l'utente inserisca il codice]
→ MCP configurato in ~/.claude/settings.json
→ Scarico engine wheel...
→ Installo engine in venv isolato...
✓ Server attivo: https://mcp.acme.eight20.com
Usa: sintropi-code [args]
Passi dettagliati:
GET {mcp_url}/api/bootstrap/config(pubblico) →{ keycloak_url, realm, client_id, current_sha, current_version }- Avvia Device Authorization Grant (RFC 8628) — apre il browser sulla pagina Keycloak, mostra un codice da inserire, nessuna porta localhost richiesta
- Configura automaticamente Claude Code scrivendo il server MCP in
~/.claude/settings.jsoncon il Bearer JWT - Verifica che l'utente abbia il ruolo realm Keycloak
sintropi-code - Scarica il wheel via
GET {mcp_url}/api/bootstrap/download(Bearer JWT) - Crea un venv isolato in
~/.sintropi/versions/{sha}/.venv/e ci installasintropi-code - Registra il server in
~/.sintropi/config.json
2. sintropi-code [args]
- Legge il server MCP corrente da
~/.sintropi/config.json - Verifica (con cache TTL 5 min) il SHA dell'engine corrente del server
- Se diverso o assente → re-auth + download + install (trasparente) + aggiorna
~/.claude/settings.json execin~/.sintropi/versions/{sha}/.venv/bin/python -m sintropi_code.main <args>
Architettura MCP
sintropi-bootstrap configura Claude Code come client del server MCP del tenant Sintropi. Ogni tenant espone un server MCP all'URL https://mcp.<tenant>.eight20.com.
┌────────────────────────────────────────────────────────────┐
│ Claude Code (IDE / Claude Desktop / Cowork) │
│ ~/.claude/settings.json → mcpServers.sintropi │
└───────────────────────┬────────────────────────────────────┘
│ HTTP Bearer JWT
▼
┌────────────────────────────────────────────────────────────┐
│ Sintropi MCP Server (https://mcp.<tenant>.eight20.com) │
│ • Tools: genera, lista, pubblica artefatti │
│ • Auth: Keycloak JWT (realm per tenant) │
│ • Engine: scarica sintropi-code wheel │
└───────────────────────┬────────────────────────────────────┘
│ GraphQL / REST
▼
┌────────────────────────────────────────────────────────────┐
│ Sintropi Platform (gateway + DB + storage) │
└────────────────────────────────────────────────────────────┘
sintropi-bootstrap esegue lo scaffolding iniziale una volta sola (o al cambio di tenant/versione):
- ottiene il JWT con Device Grant (senza porte localhost)
- scrive il JWT in
~/.claude/settings.jsonsottomcpServers.sintropi - installa la versione corretta dell'engine in un venv isolato
Dopo il bootstrap Claude Code comunica direttamente con il server MCP tramite HTTP, aggiornando il token quando scade.
Autenticazione: Device Authorization Grant (RFC 8628)
Il flow predefinito non richiede una porta localhost. Funziona da qualsiasi ambiente: desktop, container remoto, sandbox cloud (Cowork), CI/CD interattivo.
CLI Keycloak Browser utente
| | |
|-- POST /auth/device --> | |
|<-- device_code, -------| |
| user_code, | |
| verification_uri | |
| | |
|-- stampa user_code --> terminale |
|-- apre browser ------> verification_uri ----------> |
| |<-- utente inserisce -------|
| | user_code + login |
| | |
|-- POST /token (poll) ->| |
|<-- access_token -------| |
Il CLI stampa il codice sul terminale e lo apre nel browser automaticamente. L'utente lo inserisce nella pagina Keycloak standard. Il CLI ottiene il token senza mai aprire una porta.
Autenticazione: PKCE loopback (legacy)
Il flow PKCE su loopback (http://localhost:PORT) è ancora disponibile nel modulo keycloak.login_pkce() per ambienti locali che preferiscono il redirect automatico. Non è più il flow predefinito.
Layout filesystem
~/.sintropi/
├── credentials.json # token per-server (chmod 600)
├── config.json # server noti + current + ultimo check
└── versions/
├── {sha-abc123}/
│ ├── .venv/ # venv isolato con sintropi-code installato
│ └── manifest.json
└── {sha-def456}/
├── .venv/
└── manifest.json
~/.claude/
└── settings.json # configurazione MCP aggiornata da sintropi-bootstrap
Ogni server MCP può avere una versione diversa dell'engine. La cache locale supporta più tenant simultaneamente: switchare è istantaneo se la versione è già scaricata.
Switch tenant
sintropi-bootstrap è idempotente. Rilanciarlo con un URL diverso fa lo switch:
sintropi-bootstrap https://mcp.dev.acme.eight20.com # tenant dev
sintropi-code generate "..."
sintropi-bootstrap https://mcp.prod.acme.eight20.com # switch a prod
sintropi-code generate "..." # ora usa l'engine di prod
Override puntuale senza cambiare il default:
sintropi-code --mcp https://mcp.qa.acme.eight20.com generate "..."
Permesso negato (ruolo mancante)
Per scaricare l'engine serve il ruolo realm Keycloak sintropi-code. Se sei loggato ma il ruolo non è assegnato, sintropi-bootstrap (e sintropi-code) stampano un riquadro con le istruzioni:
────────────────────────────────────────────────────────────────────────
Permesso negato: ruolo mancante
────────────────────────────────────────────────────────────────────────
Utente: mario.rossi@eight-twenty.com
Realm: acme
Ruolo serve: sintropi-code
Come richiedere l'accesso:
1. Contatta l'amministratore Keycloak del realm 'acme' e chiedi
di assegnarti il ruolo realm 'sintropi-code'.
2. L'admin può farlo dalla console Keycloak:
https://auth.acme.eight20.com/admin/acme/console/
→ Users → mario.rossi@eight-twenty.com → Role mapping → Assign role → sintropi-code
3. Una volta assegnato il ruolo, rilancia lo stesso comando:
il token verrà rinnovato automaticamente e il download partirà.
L'errore esce con exit code 2.
Uso da Claude Cowork e ambienti sandbox
sintropi-bootstrap usa il Device Authorization Grant come flow predefinito, quindi non apre mai una porta localhost. Funziona nativamente in:
- Claude Desktop / Cowork locale — browser di sistema aperto automaticamente
- Claude Code web / Cowork cloud — il link viene aperto fuori dalla sandbox tramite il meccanismo "Apri in Chrome" di Cowork; l'utente inserisce il codice nella pagina Keycloak
- Container / VM remota — il link viene stampato sul terminale; l'utente lo apre sul browser locale
- CI/CD interattivo — identico al caso container
Dopo il bootstrap il token JWT è in ~/.claude/settings.json. Claude Code lo usa direttamente per le chiamate al server MCP — non passa per localhost.
Sicurezza
- Device Grant: nessun secret nel pacchetto, nessuna porta esposta
- PKCE loopback (legacy): nessun secret, redirect su
http://localhost:PORTrandom con state CSRF - Token scope:
openid profile email offline_access - Role check server-side: il server MCP nega il download senza ruolo
sintropi-code - SHA-256 verificato sul wheel scaricato (oltre al TLS)
- credentials.json salvato con permessi
0600 - MCP Bearer JWT scritto solo in
~/.claude/settings.json(file locale utente)
Licenza
Proprietary — © Eight20.
Metadata
Release files for sintropi-bootstrap 2608.25.1953
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| sintropi_bootstrap-2608.25.1953.tar.gz | 13.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sintropi_bootstrap-2608.25.1953-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 31.9 kB
Release files / sintropi_bootstrap-2608.25.1953.tar.gz
| Download URL | sintropi_bootstrap-2608.25.1953.tar.gz |
|---|---|
| Size | 13.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
eafe550da725c5deb95088aeaf4b0358ddf6001cfec6d4aa1b32ecfadfa0215f
|
|
BLAKE2b-256 checksum How to use checksums |
dce1d52aba5f680d22bfdf453d4df57d0b1622f4b6584f393a8cfa349f17e6f0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.1
|
Release files / sintropi_bootstrap-2608.25.1953-py3-none-any.whl
| Download URL | sintropi_bootstrap-2608.25.1953-py3-none-any.whl |
|---|---|
| Size | 18.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
adeabd43256f9c61fc2269c5593d66007f7ea0c29f4f26f676ba33a927703742
|
|
BLAKE2b-256 checksum How to use checksums |
fb32b08f16dda98a4bd1500320b8f8c1c4da3e5c0f89b721ef361812f9965bd7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.1
|
Security for sintropi-bootstrap 2608.25.1953
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.