OpenManus non impone alcun limite di token per impostazione predefinita. Il suo limite è max_input_tokens, che app/config.py dichiara come Optional con valore predefinito None e descrizione "Numero massimo di token di input da utilizzare per tutte le richieste (None per illimitato)" e che non compare in alcun esempio di configurazione distribuito. Pertanto un’installazione standard non genera mai un errore di limite dei token: qualsiasi errore riscontrato proveniva dal provider. Quando lo imposti, si comporta in due modi inattesi e un difetto presente nell’attuale main lo fa fallire lentamente anziché subito.
L’altro errore trattato in questa pagina, Error: Unknown tool 'BrowserUseTool', non è affatto un bug attivo. La classe a cui si riferisce è stata eliminata da OpenManus il 15 agosto 2026 e l’agente Manus predefinito nell’attuale main non registra localmente alcuno strumento browser. Nessuno dei due sintomi è un problema di chiave API, endpoint o provider, e reindirizzare base_url non risolve né l’uno né l’altro.
Una nota d’impostazione prima di tutto. Non esiste una versione di OpenManus da citare: gli unici tre tag, v0.1.0, v0.2.0 e v0.3.0, sono stati pubblicati tutti nell’arco di 34 secondi il 10 aprile 2025 e da allora non è stato creato alcun tag, quindi tutti eseguono il ramo main senza tag. Il repository canonico è FoundationAgents/OpenManus, non archiviato, con licenza MIT, 58.371 stelle e ultimo push il 22 agosto 2026 (API GitHub, 21 settembre 2026). Il vecchio percorso mannaandpoem/OpenManus ora contiene solo un README segnaposto che indica lo spostamento del progetto, quindi i percorsi dei file e i numeri di riga citati nei tutorial del 2025 rimandano a codice che non si trova più lì. Tutto ciò che segue è stato letto dal sorgente sul ramo main il 21 settembre 2026 e non è stato eseguito.
Quale dei quattro messaggi hai effettivamente ricevuto
| Cosa vedi | Chi lo stampa | Significato |
|---|---|---|
Maximum token limit reached, cannot continue execution: Request may exceed input token limit (Current: …, Needed: …, Max: …) | OpenManus, app/agent/toolcall.py | È stato raggiunto il limite max_input_tokens configurato per la tua esecuzione. Non è stata inviata alcuna richiesta |
| Un errore di lunghezza del contesto o dei token che indica il modello | Il tuo provider, esposto tramite OpenAIError | La richiesta ha superato la finestra di contesto del modello o il limite specifico dell’endpoint. Non è correlato al limite di OpenManus |
Error: Unknown tool 'X' | OpenManus, righe 179–181 di app/agent/toolcall.py | Il modello ha nominato uno strumento assente da available_tools.tool_map. Viene restituito come risultato dello strumento, quindi il ciclo continua e consuma un passaggio |
Failed to connect to Browser Use CLI 3.0: … | OpenManus, riga 99 di app/agent/manus.py | Il server MCP browser predefinito non è stato avviato. L’esecuzione continua: l’agente Manus mantiene i suoi quattro strumenti locali, oltre agli eventuali altri server MCP configurati |
Il dispatch che produce la terza riga occupa tre righe ed è invariato dalla riscrittura del browser del 2026: name = command.function.name, poi if name not in self.available_tools.tool_map: return f"Error: Unknown tool '{name}'". Non contiene nulla di specifico per i browser, quindi la stessa stringa compare per qualsiasi strumento inventato dal modello.
Il limite dei token è facoltativo, cumulativo e approssimativo
Tre numeri diversi vengono chiamati "il limite dei token" e il messaggio di errore riguarda sempre e solo uno di essi.
| Impostazione | Che cosa limita | Predefinito | Nell’esempio distribuito? |
|---|---|---|---|
max_tokens | Una risposta | 4096 nel codice | Sì — impostato su 8192 |
max_input_tokens | Input cumulativo nell’intera esecuzione | None, cioè illimitato | No. Devi aggiungerlo manualmente, altrimenti non si applica |
| La finestra di contesto del modello | Una richiesta, presso il provider | Quello del modello | Non è affatto un’impostazione di OpenManus |
La seconda riga è quella che sorprende. LLM.check_token_limit() in app/llm.py restituisce (self.total_input_tokens + input_tokens) <= self.max_input_tokens, cioè un totale progressivo per la sessione, non un controllo su una singola richiesta. Di conseguenza, un’esecuzione lunga dell’agente lo supera per accumulo anche quando ogni singola richiesta è piccola, e il testo dell’errore esplicita l’aritmetica: corrente, necessario, massimo. L’agente Manus predefinito imposta max_steps = 20 e a ogni passaggio reinvia la conversazione accumulata, quindi la cifra cumulativa cresce più rapidamente del numero di passaggi.
Il conteggio è inoltre una stima propria di OpenManus. LLM.__init__ chiama tiktoken.encoding_for_model(self.model) e, in caso di KeyError, ricade su cl100k_base, quindi per qualsiasi ID modello per cui tiktoken non ha un preset — un ID Claude o Gemini, oppure uno con namespace del gateway — il budget applicato è un’approssimazione anziché il conteggio del provider.
# config/config.toml
[llm]
model = "claude-sonnet-4-6"
base_url = "https://api.kunavo.com/v1"
api_key = "sk-kn-..."
# The RESPONSE cap. Ships as 8192 in config.example.toml; the code default is 4096.
max_tokens = 8192
# The CUMULATIVE INPUT budget for the whole run. Absent from every shipped
# example, and None in code — so a stock install enforces no ceiling at all.
max_input_tokens = 400000Quanto vale economicamente un limite
Poiché max_input_tokens limita l’input cumulativo, si converte direttamente in un tetto di costo per il lato input di una singola esecuzione. Le cifre seguenti sono aritmetica illustrativa dei token sul limite indicato, non il costo misurato di un’attività né un tetto di fatturazione: valorizzano i token di input che l’impostazione limita, alle tariffe correnti del catalogo Kunavo per milione. L’output non è coperto da questa impostazione: l’ultima colonna valorizza una risposta al max_tokens = 8192 distribuito nella configurazione di esempio, e un’esecuzione di venti passaggi può produrne venti.
| Modello | Input / output per 1M | Input con un limite 100.000 | Input con un limite 400.000 | Una risposta di 8.192 token |
|---|---|---|---|---|
| Claude Haiku 4.5 | $0,70 / $3,50 | $0,070 | $0,280 | $0,029 |
| GPT-5.6 Terra | $0,70 / $4,20 | $0,070 | $0,280 | $0,034 |
| Claude Sonnet 4.6 | $2,10 / $10,50 | $0,210 | $0,840 | $0,086 |
| Claude Opus 5 | $3,50 / $17,50 | $0,350 | $1,400 | $0,143 |
Due interpretazioni. Un limite è un arresto, non un budget: indica quanto può costare al massimo il lato input di un’esecuzione e non dice nulla sul completamento dell’attività. Inoltre, poiché OpenManus conta con tiktoken, il limite applicato e i token fatturati dal provider sono due misurazioni diverse: imposta il numero per contenere un ciclo fuori controllo, poi confrontalo con ciò che il tuo account ha effettivamente registrato. L’importo del catalogo Kunavo è un minimo di fatturazione, non un tetto: quando l’upstream comunica il proprio addebito, la fattura è il maggiore tra il costo di catalogo e il costo upstream moltiplicato per il markup applicabile. Il ricarico minimo Kunavo è $10 di credito prepagato, un minimo di finanziamento e non una tariffa per attività o un abbonamento: consulta i dettagli sulla fatturazione.
Perché l’errore dei token arriva in ritardo
Si tratta di un difetto leggibile nell’attuale main ed è il motivo per cui un errore di limite dei token sembra un blocco. Tutti e tre i decoratori @retry in app/llm.py — su ask, ask_with_images e ask_tool — sono scritti nello stesso modo:
| Che cosa dichiara il decoratore | Che cosa intercetta | Conseguenza |
|---|---|---|
Commento finale: # Don't retry TokenLimitExceeded | retry_if_exception_type((OpenAIError, Exception, ValueError)) | TokenLimitExceeded eredita da OpenManusError, che eredita da Exception: quindi la voce generica Exception lo intercetta |
Commento nel punto di sollevamento: # Raise a special exception that won't be retried | stop_after_attempt(6), wait_random_exponential(min=1, max=60) | Fino a sei tentativi con backoff esponenziale prima che l’errore emerga, ricalcolando ogni volta lo stesso totale che fallisce |
Il ciclo dell’agente a valle conferma questa struttura anziché contraddirla. app/agent/toolcall.py intercetta l’eccezione e verifica isinstance(e.__cause__, TokenLimitExceeded): questo scartamento tramite __cause__ è il modo in cui arriva un RetryError di tenacity, e la sua stessa riga di log recita "Token limit error (from RetryError)". Solo allora aggiunge il messaggio visibile all’utente "Maximum token limit reached, cannot continue execution" e imposta lo stato dell’agente su finished. In altre parole, il codice che consuma il risultato presuppone già il retry che il commento del decoratore dice di non eseguire.
Non esiste alcuna correzione integrata. La PR #1348, intitolata "fix: prevent needless retry of TokenLimitExceeded and fix search engine fallback", è stata chiusa senza merge il 10 agosto 2026; la sua ripresentazione #1407 era ancora aperta e senza merge il 21 settembre 2026. Una PR correlata sul superamento del contesto, #1391, "add tool description token budget to prevent context overflow", è stata chiusa senza merge il 18 agosto 2026. Qui non è stato verificato perché i manutentori le abbiano chiuse, ma solo che non sono state unite. La segnalazione storica, issue #779 "hitting token limit" del 17 marzo 2025, è stata chiusa il 17 settembre 2026 da un bot di inattività con state_reason: not_planned: un timeout, non una risoluzione. Finché una di queste modifiche non viene integrata, le mitigazioni pratiche sono lasciare max_input_tokens non impostato e lasciare che sia il provider a rifiutare le richieste troppo grandi, oppure impostarlo e accettare il ritardo.
Unknown tool 'BrowserUseTool' è un errore proveniente da una versione che non esiste più
Issue #789, "Result: Error: Unknown tool 'BrowserUseTool'", è stata aperta il 18 marzo 2025 ed era ancora aperta il 21 settembre 2026, contrassegnata come inactive. La causa non è mai stata un endpoint o una chiave. Il log del segnalatore mostra il modello emettere il nome della classe Python, BrowserUseTool, mentre il nome dello strumento registrato era browser_use; il passaggio immediatamente successivo della stessa esecuzione è stato eseguito correttamente quando ha chiamato browser_use. Il log riportato termina con "Activating tool: 'browser_use'" e la riga conclusiva contiene l’intera diagnosi: "BrowserUseTool seems not work, but browser_use can". L’unico consiglio dato da un commentatore è stato provare un modello più potente, che è il tipo di risposta corretto per un problema di fedeltà nel tool calling.
Questa diagnosi non si applica all’attuale main, perché non esiste più alcuno strumento denominato browser_use da chiamare correttamente. Il 15 agosto 2026 i commit ab8dfe43 ("feat(browser): use Browser Use CLI 3.0") e 05c5bbb1 ("refactor(browser): use CLI 3.0 MCP server") hanno eliminato lo strumento browser locale. Un elenco della directory app/tool/ su main non contiene browser_use_tool.py e l’unica occorrenza rimasta della stringa BrowserUseTool nell’albero è una riga commentata in app/agent/sandbox_agent.py.
| Codice di marzo 2025 (issue #789) | Attuale main, letto il 21 settembre 2026 | |
|---|---|---|
| Strumento browser | Classe locale in app/tool/browser_use_tool.py | Eliminato. Nell’agente Manus predefinito, un server MCP esterno avviato come uvx browser-use --cli-mcp |
| Nome registrato | browser_use | browser_exec e browser_screenshot, secondo il README |
| Strumenti registrati localmente sull’agente Manus | Includeva lo strumento browser | PythonExecute, StrReplaceEditor, AskHuman, Terminate — gli strumenti browser arrivano tramite MCP |
| Blocco della dipendenza | Bloccato in requirements.txt | Nessuna voce browser-use; viene recuperato in fase di esecuzione da uvx, quindi lo stack browser è indipendente dal tuo checkout |
| Credenziali | La chiave del tuo modello | La modalità locale non richiede una chiave. La modalità cloud è un account Browser Use separato, con proprie variabili d’ambiente |
| Interruttore di disattivazione | Rimuovere lo strumento | OPENMANUS_DISABLE_BROWSER_USE=1 |
Pertanto, per questa stringa specifica, oggi la soluzione è aggiornare il checkout e smettere di basarsi su tutorial scritti per il vecchio percorso del repository. È importante segnalare una precisazione anziché fare supposizioni: quando la connessione MCP fallisce, app/agent/manus.py registra Failed to connect to Browser Use CLI 3.0 e continua con i quattro strumenti locali, lasciando al modello la possibilità di nominare uno strumento browser non registrato. Se ciò produca in pratica un messaggio Unknown tool, e con quale nome, qui non è stato osservato: consideralo un punto da controllare, non un sintomo documentato. Nota inoltre che requirements.txt blocca uv>=0.6.0; non è stato verificato se un’installazione normale inserisca uvx nel tuo PATH.
Una cosa che la ricerca continuerà a mostrare e che i paragrafi precedenti deliberatamente non affermano: il repository contiene effettivamente codice browser che il percorso predefinito non carica mai. Il punto di ingresso separato del sandbox Daytona sandbox_main.py crea un agente SandboxManus che registra SandboxBrowserTool da app/tool/sandbox/sb_browser_tool.py come strumento locale, con il nome sandbox_browser, non browser_use. Quindi "nessuno strumento browser locale" è un’affermazione sull’agente Manus predefinito ottenuto da main.py, non sull’intero albero.
Un nome da tenere distinto durante la ricerca: OpenManus/OpenManus-RL è un repository separato in un’organizzazione separata, un progetto di ricerca sul reinforcement learning anziché una versione del runtime dell’agente, e la sua struttura dei file non dice nulla su nessuno dei due errori.
Che cosa cambia e che cosa non cambia un endpoint API diverso
Entrambi i sintomi descritti sopra vengono prodotti all’interno di OpenManus, quindi la risposta onesta a "un altro provider risolverà il problema?" è no. La scelta dell’endpoint influisce invece su un insieme vicino di errori che è facile interpretare erroneamente come uno di questi due.
| Errore | Dipende dall’endpoint? | Che cosa controllare per primo |
|---|---|---|
| Messaggio di limite dei token di OpenManus | No — viene sollevato prima dell’invio di qualsiasi richiesta | Il valore max_input_tokens configurato e se intendevi impostarne uno |
Unknown tool | No — il modello ha nominato qualcosa che non è registrato | Quali strumenti registra quell’agente e se il modello è abbastanza efficace nel tool calling |
| Rifiuto del provider per la lunghezza del contesto | Sì | La finestra di contesto del modello e max_tokens rispetto a essa |
| Un errore di autenticazione o modello non trovato alla prima esecuzione | Sì | L’esempio distribuito indica ancora un ID Claude che Anthropic ha ritirato il 19 febbraio 2026 — trattato in Prezzi e configurazione API di OpenManus |
Un 400 su temperature | Sì | OpenManus invia temperature a ogni richiesta al di fuori dei suoi due ID di ragionamento codificati e distribuisce temperature = 0.0 |
| Screenshot che non raggiungono mai il modello senza alcun avviso | Parzialmente | La visione è abilitata da una corrispondenza esatta della stringa con sei ID modello codificati, tutti quelli Anthropic ormai ritirati. È trattata anche nella pagina di configurazione |
Nella quinta riga c’è un dettaglio specifico di prima parte, relativo a questo endpoint e non a un consiglio generale. Il dispatcher di Kunavo elimina temperature, top_p e top_k prima dell’inoltro, per i modelli del catalogo che dichiarano tali parametri non supportati — attualmente Claude Fable 5.1, Claude Fable 5, Claude Opus 5.5, Claude Opus 5, Claude Opus 4.8, Claude Opus 4.7, Claude Sonnet 5 — e lo fa al cambio di protocollo, quindi anche ogni tentativo di retry vede il corpo già ripulito. Per ogni altro modello il campo viene inoltrato così come lo ha inviato OpenManus. Ciò elimina uno specifico 400 per quei modelli; non significa che OpenManus sia stato testato qui. Kunavo non ha testato OpenManus a runtime e nulla in questa pagina costituisce un risultato di compatibilità.
Se stai valutando i percorsi anziché eseguire il debug di uno specifico, API compatibile con OpenAI descrive ciò che il percorso generico trasporta e non trasporta, gateway LLM spiega quando vale la pena usare una sola chiave per più famiglie e ottimizzazione dei costi AI tratta la differenza tra la tariffa elencata più economica e il modo meno costoso di completare un’attività, distinzione decisiva per un ciclo dell’agente. Per la stessa categoria di diagnosi su un altro client, consulta provider OpenCode non trovato.
Stai configurando OpenManus anziché ripararlo? Il lato endpoint comprende tre campi in [llm]: model, base_url e api_key. Inizia dal quickstart, verifica la struttura della richiesta rispetto alle chat completions e crea un account Kunavo quando sei pronto a finanziare una chiave. Mantieni disponibile un percorso funzionante mentre esegui le prove e avvia un’attività con limiti definiti prima di modificare altro.
Domande frequenti
Qual è il limite di token di OpenManus?
Per impostazione predefinita non ce n'è alcuno. Il limite interno di OpenManus è il campo max_input_tokens, che app/config.py dichiara come Optional con un valore predefinito None descritto come "illimitato" e che non compare in nessun esempio di configurazione distribuito — quindi un'installazione standard non genera mai il proprio errore di limite dei token, e qualsiasi limite raggiunto proviene invece dal provider. Quando lo imposti, LLM.check_token_limit() confronta self.total_input_tokens + input_tokens con esso, rendendolo un budget cumulativo di input per l'intera esecuzione anziché un controllo del contesto per richiesta. Non è correlato alla finestra di contesto del modello, né a max_tokens, che limita una singola risposta ed è distribuito come 8192 in config/config.example.toml. Tutti e tre sono stati letti sul branch main il 21 settembre 2026.
Perché OpenManus si blocca prima di segnalare il limite di token?
Perché l'errore di limite viene ritentato, nonostante un commento affermi il contrario. Tutti e tre i decorator @retry in app/llm.py — su ask, ask_with_images e ask_tool — sono scritti come retry_if_exception_type((OpenAIError, Exception, ValueError)) con il commento finale "# Don't retry TokenLimitExceeded". TokenLimitExceeded è una sottoclasse di OpenManusError, che a sua volta è una sottoclasse di Exception, quindi la voce Exception generica lo intercetta e tenacity ritenta fino a stop_after_attempt(6), con backoff wait_random_exponential(min=1, max=60). Il gestore dell'agente conferma la struttura: app/agent/toolcall.py verifica isinstance(e.__cause__, TokenLimitExceeded), che è il modo in cui arriva un RetryError di tenacity, e solo allora stampa "Maximum token limit reached, cannot continue execution". Esiste una correzione, ma non è stata integrata: la PR #1348 è stata chiusa senza merge il 10 agosto 2026 e la sua ripresentazione #1407 era ancora aperta e senza merge il 21 settembre 2026. Questo è stato letto dal codice sorgente, non riprodotto eseguendolo.
Come posso correggere l’errore: strumento sconosciuto 'BrowserUseTool' in OpenManus?
Aggiorna il checkout, perché nel ramo main corrente di OpenManus quella classe non esiste. Lo strumento browser locale è stato rimosso il 15 agosto 2026 nei commit ab8dfe43 e 05c5bbb1; app/tool/ non contiene browser_use_tool.py e l’unica occorrenza della stringa BrowserUseTool nell’intero albero è una riga commentata in app/agent/sandbox_agent.py. Nell’agente Manus predefinito creato da main.py, le operazioni browser sono ora gestite da un server MCP esterno avviato come uvx browser-use --cli-mcp, che espone gli strumenti browser_exec e browser_screenshot; il punto di ingresso separato del sandbox Daytona, sandbox_main.py, registra ancora un proprio strumento browser locale denominato sandbox_browser. Nel codice di marzo 2025 eseguito dal segnalatore dell’issue #789, la causa era che il modello emetteva il nome della classe Python invece del nome dello strumento registrato: il suo log mostra che il passaggio immediatamente successivo veniva eseguito correttamente quando chiamava browser_use, e la riga conclusiva recita "BrowserUseTool seems not work, but browser_use can". La stringa in sé è generica: app/agent/toolcall.py restituisce f"Error: Unknown tool '{name}'" per qualsiasi nome assente da available_tools.tool_map, quindi oggi lo stesso messaggio compare per qualsiasi strumento inventato dal modello.
L’issue #789 è stata risolta? E quale versione di OpenManus contiene la correzione?
Non è stata risolta e non esiste una versione da citare. L’issue #789, "Result: Error: Unknown tool 'BrowserUseTool'", è stata aperta il 18 marzo 2025 ed era ancora aperta il 21 settembre 2026, contrassegnata come inattiva, con tre commenti: uno suggeriva un modello più potente, il segnalatore accettava di provarne uno e un bot segnalava l’inattività. La segnalazione correlata sul limite dei token, issue #779 "hitting token limit", è stata chiusa il 17 settembre 2026 dallo stesso bot di inattività con state_reason not_planned, cioè per timeout e non per una correzione. Inoltre OpenManus non ha una release corrente da nominare: i suoi unici tre tag, v0.1.0, v0.2.0 e v0.3.0, sono stati pubblicati tutti nell’arco di 34 secondi il 10 aprile 2025 e da allora non è stato creato alcun tag, quindi tutti eseguono il ramo main senza tag. Cita la data di un commit, non un numero di versione.
Cambiare provider API risolverà un errore di token o di strumenti in OpenManus?
No, ed è utile distinguere entrambe le modalità di errore da quelle che dipendono realmente dal provider. Il messaggio relativo al limite dei token indicato sopra viene prodotto dalla contabilizzazione interna di OpenManus rispetto al limite configurato dall’utente, prima dell’invio di qualsiasi richiesta, quindi nessun endpoint può modificarlo. Il messaggio Unknown tool viene prodotto dal dispatch degli strumenti di OpenManus quando il modello nomina qualcosa che non è registrato: è una proprietà della fedeltà del modello nel tool calling, e l’unico consiglio mai dato nell’issue #789 è stato provare un modello diverso proprio per questo motivo. Ciò che un endpoint diverso cambia: un rifiuto lato provider per la lunghezza del contesto arriva come OpenAIError anziché TokenLimitExceeded; una copia appena creata della configurazione di esempio fallisce con un errore del modello anziché con un errore di token, perché continua a indicare un ID Claude ritirato da Anthropic il 19 febbraio 2026; inoltre OpenManus invia sempre una temperature al di fuori dei suoi due ID di ragionamento codificati, producendo un errore assimilabile a 400 sui modelli i cui fornitori hanno deprecato quel parametro.
OpenManus conta i token nello stesso modo del mio provider?
No. OpenManus conta localmente con tiktoken e LLM.__init__ chiama tiktoken.encoding_for_model(self.model) all’interno di un try che, in caso di KeyError, ricade su cl100k_base. Per un ID Claude o Gemini, oppure per qualsiasi ID con namespace del gateway per cui tiktoken non dispone di un preset, il budget applicato da OpenManus è una stima cl100k_base anziché il conteggio del provider, e il suo TokenCounter aggiunge costanti fisse proprie: 4 token per messaggio, 2 token di formattazione, 85 per un’immagine a bassa definizione e 170 per ogni riquadro ad alta definizione. Confronta il risultato con l’utilizzo registrato dal tuo account provider, non con i totali mostrati nei log di OpenManus. Verificato sul ramo main il 21 settembre 2026, con tiktoken~=0.9.0 bloccato in requirements.txt.
Verificato il 21 settembre 2026 e non più ampiamente: app/llm.py, app/config.py, app/agent/toolcall.py, app/agent/manus.py, app/agent/base.py, app/agent/sandbox_agent.py, app/tool/sandbox/sb_browser_tool.py, sandbox_main.py, app/exceptions.py, requirements.txt, config/config.example.toml e il README sul ramo main; un elenco della directory app/tool/; la cronologia dei commit dello strumento browser eliminato; i record GitHub per le issue #779 e #789, i relativi commenti e le pull request #1348, #1391 e #1407; i metadati del repository e delle release; e la pagina di Anthropic sul ritiro dei modelli. Non è stato eseguito nulla: nessuna installazione, nessuna esecuzione di OpenManus, nessuna riproduzione di uno dei due errori e nessuna richiesta tramite OpenManus su alcun endpoint. Pertanto ogni affermazione comportamentale qui riportata deriva dalla lettura del sorgente e non da un errore osservato, e non viene riportata alcuna esecuzione minima riuscita perché non ne è stata effettuata nessuna. Le tariffe dei token Kunavo provengono dal catalogo corrente e ogni cifra in dollari è aritmetica illustrativa dei token, non il costo misurato di un’attività.