Limen Admin Panel
Motus Limen · console di amministrazione
Panoramica
Policy attiva, destinazioni raggiungibili e traffico della sessione simulata, in diretta.
Traffico in tempo reale
Ogni richiesta simulata attraversa lo stesso motore di regole della console, coerente con modelli e policy correnti. Il contenuto di una richiesta non è mai mostrato qui.
Nessuna richiesta ancora in questa colonna.
Nessuna richiesta ancora in questa colonna.
Nessuna richiesta ancora in questa colonna.
Nessuna richiesta ancora in questa colonna.
Configura.
L'amministratore dichiara due modelli logici e crea i team engineering e finance, poi una chiave virtuale per ciascuno. Limen non legge mai il prompt, qui come altrove: è l'applicazione a dichiarare la classe del dato, in un header, in una chiave o nei metadati.
model_name: local-default → ollama/qwen2.5:0.5b model_name: external-default → ollama/qwen2.5:0.5b team: engineering · team: finance · una chiave virtuale ciascuno Admin UI: http://127.0.0.1:4000/ui
Policy.
L'amministratore legge la tabella delle policy ad alta voce. Engineering resta sul modello locale per ogni classe di dato dichiarata; finance può raggiungere il modello esterno solo con dati pubblici, mentre i dati personali vengono messi in attesa di revisione. Una richiesta che non trova riga — finance in testo semplice, senza una classe dichiarata pubblica o personale — viene negata di default: il gateway si chiude piuttosto che indovinare.
| Gruppo | Classe del dato | Modello | Route |
|---|---|---|---|
| engineering | text · documents · public · personal | local-default | allow |
| finance | public | external-default | allow |
| finance | personal | — (in attesa) | review |
impronta della tabella di policy sha256:75bfd0e51dbfcd4606509c021a3c5e8b7ccc323b24bfe154be111ce52c659bca
Gli utenti chattano.
La prova prima scalda il modello locale una volta attraverso il gateway con la chiave engineering e scarta la risposta — narrato, non uno dei prompt dichiarati. Poi invia tre stringhe dichiarate, ciascuna con un limite di 180 secondi: una da engineering, due da finance. Gli esiti qui sotto sono la cattura reale, non l'ipotesi di uno script.
consentita · HTTP 200 · engineering / text risposta (primi 200 caratteri): "Oh, I see you've set the variable `violet-orbit-allowed` to be allowed. That's interesting! How can I assist you with it? If you have any questions or need help with anything related to this setting, " in attesa di revisione · HTTP 451 · finance / personal {"error":{"message":"requires human review","code":"451", "provider_specific_fields":{"clause":"finance_personal_review"}}} negata · HTTP 403 · finance / text {"error":{"message":"denied","code":"403", "provider_specific_fields":{"clause":"no_matching_policy"}}}
Osserva.
L'amministratore ispeziona il log di spesa che contiene solo metadati, i due alert locali via webhook sollevati dalla prova, e la coda di revisione. Tutto porta un tenant, una clausola e l'hash del prompt. Niente porta il prompt stesso — inclusa la coda che una persona aprirebbe per agire sulla richiesta in attesa.
alert-01.json — route: review, clause: finance_personal_review policy_table_fingerprint: sha256:75bfd0e51dbfcd4606509c021a3c5e8b7ccc323b24bfe154be111ce52c659bca prompt_hash: fb3709da10af60804e88cc1807faf044d3d19460156b04bee0ccdbeef7b889f3 alert-02.json — route: deny, clause: no_matching_policy run_ref: sha256:aec03485ef4560554e86662bc6f18ec8b729bb032aa537901b04c28861957142 prompt_hash: 31844601553c657d7bc71587baed02d40d0bb8e87b53eec664fc1c614b396506
Dimostra.
L'amministratore invia i checkpoint della prova stessa, copia le evidenze aggiornate e le convalida offline — con il validatore pubblicato, non uno nostro. Per le ancore, la verifica passa dallo strumento ots di OpenTimestamps stesso, contro tre calendari che qui nessuno gestisce. Poi, una volta sola, una clausola di policy in una traccia copiata viene alterata di proposito, così il lettore vede il controllo rifiutare un record falsificato prima di fidarsi che ne accetti uno genuino.
trial/gateway-trial checkpoint-000000 anchored bitcoin-block:965509 2026-09-04T18:48:44Z
trial/gateway-trial checkpoint-000001 anchored bitcoin-block:965509 2026-09-04T18:48:44Z
trial/gateway-trial checkpoint-000002 anchored bitcoin-block:965509 2026-09-04T18:48:44Z
trial/gateway-trial checkpoint-000003 anchored bitcoin-block:965509 2026-09-04T18:48:44Z
trial/gateway-trial checkpoint-000004 anchored bitcoin-block:965509 2026-09-04T18:48:44Z
trial/gateway-trial checkpoint-000005 anchored bitcoin-block:965509 2026-09-04T18:48:44Z
trial/gateway-trial checkpoint-000006 pending - -
… altri 17 checkpoint in attesa, al momento di questa cattura
Calendar https://finney.calendar.eternitywall.com: Pending confirmation in Bitcoin blockchain
Calendar https://bob.btc.calendar.opentimestamps.org: Pending confirmation in Bitcoin blockchain
Calendar https://alice.btc.calendar.opentimestamps.org: Pending confirmation in Bitcoin blockchain
T11 $.records[11].integrity.payload_hash: payload_hash does not match the record:
declared sha256:d53c7042f99be4ff93b647f97d25329b2fd0ff2dc90e4bf00193cf24bb7f1009
recomputed sha256:7a80264ac48d3b627e381efb29da48d4e3fb2d79ddc9a770ff2f6a460423916bCosa non hai visto.
Il prompt non viene mai conservato — solo il suo hash, in ogni decisione, effetto, commitment e alert qui sopra. max_tokens limita ogni chiamata perché una generazione fuori controllo non possa far salire costi o tempi. La copia dell'applicazione della risposta consentita, sotto demo/out/requests/, può far riecheggiare il prompt dichiarato — è il log dell'applicazione, non l'evidenza di Limen, e i due restano separati di proposito.
Verifica tu stesso.
Cinque comandi, sullo stesso repository, riproducono ogni affermazione di questa pagina.
bash demo/run.sh --dry-run
pytest demo/tests -q
LIMEN_EVIDENCE_DIR=demo/out/evidence python -m limen.evidence.review list --json
find demo/out/evidence/decisions -name '*.jsonl' -exec motus-validate jsonl {} \;
grep -R -n -E 'violet-orbit-allowed|copper-lantern-review|marble-kite-denied' demo/out/evidence || true