Chimera — Guida all'uso
Chimera è un agente CLI-first, governato, con un nucleo di ragionamento LLM-Fusion. Questa guida copre installazione, configurazione, e ogni comando con esempi.
Nuovo al progetto? Leggi prima la panoramica sull'architettura.
Installazione
Chimera usa uv.
git clone https://github.com/brcampidelli/chimera-agent
cd chimera-agent
uv sync --extra dev # install runtime + dev deps
uv run chimera --help # verify the CLI
Ogni comando qui sotto viene eseguito come uv run chimera <command> (o semplicemente
chimera … una volta che il virtualenv del progetto è nel tuo PATH).
Configurazione
Chimera è agnostico rispetto al provider tramite LiteLLM. Metti
le tue chiavi e le scelte di modello in un .env locale (è ignorato da git — non
committarlo mai):
# At least one provider key. OpenRouter unlocks 100+ models behind one key.
OPENROUTER_API_KEY=sk-or-...
# OPENAI_API_KEY=...
# ANTHROPIC_API_KEY=...
# Tier-1/2 default model (single, cheap, must support tool-calling for Tier-2)
CHIMERA_DEFAULT_MODEL=openrouter/deepseek/deepseek-chat-v3.1
# LLM-Fusion: a diverse panel -> judge -> synthesizer
CHIMERA_FUSION_PANEL=openrouter/deepseek/deepseek-chat-v3.1,openrouter/openai/gpt-4o-mini,openrouter/meta-llama/llama-3.3-70b-instruct
CHIMERA_FUSION_JUDGE=openrouter/deepseek/deepseek-chat-v3.1
CHIMERA_FUSION_SYNTHESIZER=openrouter/openai/gpt-4o-mini
Altre manopole: CHIMERA_HOME (directory di stato, default .chimera),
CHIMERA_LOG_LEVEL (INFO / DEBUG), CHIMERA_CACHE (on/off, default off — mette in
cache completion identiche senza tool per saltare chiamate API ripetute), e
CHIMERA_AUTO_FUSE (on/off, default off — fonde automaticamente i turni profondi o
sensibili all'errore in solve/crew senza un --fuse esplicito; il router
consapevole dei costi continua a mantenere in modello singolo i turni economici/con tool).
Il router riconosce prompt a risposta esatta (aritmetica, conteggio, operazioni con cifre)
nelle lingue principali del progetto (en/pt/es/de/fr/zh/ja), così un passo breve e critico
ottiene la protezione della fusione anche quando è troppo corto per far scattare il gate di
lunghezza.
Provider, fallback & self-hosted. Qualsiasi slug provider/model di LiteLLM funziona
(openai/…, anthropic/…, gemini/…, ollama_chat/…, openrouter/…, …). Per un server
self-hosted / compatibile con OpenAI (Ollama, vLLM) imposta CHIMERA_API_BASE (es.
http://127.0.0.1:11434 con CHIMERA_DEFAULT_MODEL=ollama_chat/llama3). Usa ollama_chat/
invece di ollama/: il prefisso ollama/ passa dall'endpoint generate di Ollama, che non può
chiamare strumenti. Imposta
CHIMERA_FALLBACK_MODELS (separati da virgola) per passare a un altro modello se il
principale dà errore. In chat/tui, /model <slug> cambia il modello a metà sessione.
Un modello locale non ha bisogno di chiave. Con CHIMERA_DEFAULT_MODEL=ollama_chat/<modello> o lm_studio/<modello> ogni comando gira senza chiave API (LM Studio viene interrogato su CHIMERA_LM_STUDIO_BASE_URL, predefinito http://localhost:1234/v1), e la schermata di primo avvio del desktop propone i modelli che Ollama o LM Studio hanno già — un clic, nessuna chiave.
Pool di credenziali. Dai a un provider più chiavi con CHIMERA_<PROVIDER>_KEYS (es.
CHIMERA_OPENROUTER_KEYS=key1,key2,key3). Il gateway le ruota round-robin tra le chiamate
(distribuendo carico / limiti di frequenza) e, all'interno di una singola chiamata, passa
alla chiave successiva se una dà errore. Un pool sostituisce l'unica *_API_KEY di quel
provider. (I login OAuth/abbonamento — Copilot, Claude Max, ecc. — non sono ancora
collegati; le chiavi API e qualsiasi endpoint supportato da LiteLLM sì.)
Verifica che tutto sia collegato:
uv run chimera doctor # shows version, default model, configured providers
uv run chimera models # shows the fusion panel / judge / synthesizer
uv run chimera features # optional capabilities + what each needs (key/dep)
Funzionalità opzionali. Visione, la Modalità Consegnabile e il Cucciolo sono integrati.
Il resto (ricerca web, ricerca su X, generazione immagini, TTS/voce, Spotify, browser) sono
slot preconfigurati: riempi la credenziale corrispondente in .env (o installa la
dipendenza) e la capacità si attiva. chimera features è la checklist dal vivo. Il tool
web_search (Tavily) si auto-registra nel momento in cui TAVILY_API_KEY viene impostata
— ed è il modello per aggiungere gli altri (o usa il client MCP / l'importatore
OpenAPI→tool).
Modelli gratuiti vs a pagamento. I modelli
:freedi OpenRouter non costano nulla ma hanno un limite di frequenza a monte — vanno bene per unrunrapido, sono instabili per comandi a più chiamate comefuse/solve. Per un uso reale, un modello economico a pagamento (es.deepseek/deepseek-chat-v3.1, frazioni di centesimo a chiamata) è molto più affidabile.
Comandi
Status — version · doctor · models
uv run chimera version
uv run chimera doctor
uv run chimera models
chat — assistente interattivo multi-turno (il tuo braccio destro)
Un REPL interattivo con memoria di conversazione e uso di tool — il pilota quotidiano.
Richiama la memoria a lungo termine rilevante, collega la conversazione tra i turni e salva
il thread dopo ogni turno sotto <home>/sessions, così l'esecuzione successiva riprende da
dove ti eri fermato. chimera sessions elenca i thread salvati;
chimera sessions --delete <id> ne cancella uno.
uv run chimera chat # resume the newest thread; /exit to quit
uv run chimera chat --new # start a fresh thread instead of resuming
uv run chimera chat --session standup # -s: resume, or name, one thread by id
uv run chimera chat --no-memory # don't recall long-term memory
uv run chimera chat --cascade # tiered routing: weak -> gate -> mid -> gate -> fusion
uv run chimera chat --fuse # fusion routing for tool-free turns (read the note)
uv run chimera chat --max-usd 0.50 # ceiling for the WHOLE thread, not for one turn
uv run chimera chat --write-region 'src/**,*.py' # the only paths the file-writers may touch
uv run chimera chat --no-compact # --compact (default) folds older turns near the window
uv run chimera chat --model MODEL --workspace DIR --max-steps 8
--workspace/-w radica i tool ed è il posto da cui viene letto AGENTS.md; --max-steps
limita i passi di chiamata ai tool dentro un messaggio; --model/-m sovrascrive lo slug del
modello — ma leggi la nota sul routing più sotto.
Comandi: /help · /new (thread nuovo — quello attuale resta su disco) · /reset (come
/new) · /model <slug> (senza argomento torna al predefinito) · /plan <task> (mostra prima un piano; il compito parte solo dopo la tua approvazione, oppure puoi rivederlo) · /undo [N] (con N, gli ultimi N turni dopo un'anteprima; senza N: rimette i file che l'ultimo turno ha cambiato; un file modificato di nuovo da allora viene tenuto, e il comando dice quale) · /cost (quanto è costato questo thread, dalle sue ricevute in usage.jsonl) · /compact (ripiega i turni precedenti in una nota per il modello; la trascrizione su disco non cambia) · /solve <compito> (lo passa
al ciclo verificato) · /attach <file> (un documento per il prossimo messaggio; la risposta viene verificata su di esso) · /exit (anche /quit, /q).
È governato, e te lo chiede. chat e assist costruiscono lo stesso stack del percorso
API: un ledger di taint a cui viene detto il tuo stesso messaggio, il recinto
<<external-data>> attorno all'output non fidato dei tool, il kernel di fiducia, la
--write-region, il pavimento di portata del proprietario (CHIMERA_REACH) e le sue
istruzioni da agent.json. L'approvatore chiede al tuo terminale — questa è l'unica
superficie dove c'è garantito qualcuno che possa rispondere. Misurato sul corpus di injection
(bench/right_hand_governance/RESULTS.md, 2026-09-08): gli attacchi bloccati sono passati da
0 su 7 a 7 su 7, le letture esterne tornate dentro il recinto da 0 su 12 a 12 su 12, e
l'over-block con una persona che risponde è 0,000 — al costo di cinque domande sulle otto
righe legittime. In pipe (chimera chat < script.txt) non c'è nessuno a cui chiedere, quindi
una domanda diventa un rifiuto registrato invece di un consenso silenzioso.
Note di onestà:
- Una chiamata a tool rifiutata viene stampata sotto la risposta —
✗ run_shell did not succeed: …. Il modello racconta attorno ai rifiuti: il caso misurato rispondeva "The command printed exactly: marker-42" riguardo a un comando che il gate di esecuzione sull'host aveva rifiutato. Anche un'approvazione ha la sua riga (governance: 1 approved this turn), così unaybattuta a metà turno lascia una traccia una volta che la risposta è scorsa via. --fusenon fonde un turno che porta tool, e un turno di REPL ne porta sempre. Il router manda a un modello singolo qualsiasi turno con tool, quindi in pratica un turno--fusequi è un turno a modello singolo.--cascadeinoltre vince su--fusequando ci sono entrambi. L'unica rotta del terminale che fonde davvero è/taskdiassist.- Nominare un modello lo fissa, e la scala dei tier si fa da parte. Sotto
--cascadeè la scala a scegliere un modello a ogni turno, e prima si inghiottiva senza una parola lo slug che avevi nominato. Ora--modele/model <slug>vincono finché uno dei due è nominato — una riga dice che la scala è spenta — e/modelsenza argomento le restituisce il lavoro. - Ogni turno stampa i suoi token e il suo prezzo —
cost: unavailablequando il prezzo di listino del modello è sconosciuto, mai uno zero indovinato — e aggiunge una riga a<home>/usage.jsonl, che è ciò che legge la schermata Costo dell'app desktop. --max-usdlimita il thread, non il turno. Un solo contatore corre dal primo messaggio fino a/exit;/solveattinge agli stessi soldi; e una volta esaurito, il messaggio successivo viene rifiutato prima di partire, invece di pagare una chiamata per scoprire che non era rimasto niente. Una risposta tagliata corta — dal tetto, da--max-stepso da un contesto che ha smesso di starci — lo dice su una riga sua, perché altrimenti una risposta troncata si legge esattamente come una finita.- Un turno ripristinato lo dice. Quando un thread torna dal disco, una riga smorzata sotto la risposta conta i turni riprodotti che sono stati ripristinati e quanti di quelli non avevano mai avuto la provenienza registrata. Quelli vengono riprodotti dentro il recinto dei dati invece che come parole del modello, e finora il recinto era invisibile alla persona che protegge.
/solve <compito>passa la conversazione al ciclo verificato — pianifica, modifica, verifica e ripristina il tentativo quando fallisce, che è il secondo dei due pulsanti della schermata di codice del desktop. Non parte mai da solo, stampa il task e il tetto prima di girare, e la risposta del ciclo viene registrata nel thread. Senza argomento prende l'ultima cosa che hai chiesto.- I server MCP arrivano al terminale. Con
CHIMERA_MCP_AUTOLOAD=1i server dimcp.jsonvengono montati prima del recinto, così la denylist, il kernel e il ledger di taint li coprono e l'output di un server arriva dentro il recinto dei dati come qualunque altra lettura esterna. Sono connessi una volta per processo e condivisi con l'app, quindi niente viene lanciato due volte. /resetavvia un thread nuovo; non cancella quello corrente. Puliva una trascrizione in memoria quando niente stava su disco; ora che il thread è un file, pulirlo sul posto distruggerebbe lavoro. (Inassist, che non persiste nulla,/resetpulisce ancora il contesto.tuiscrive in questo stesso archivio e ha ridefinito/resetallo stesso modo.)chimera doctorriporta dove girano i comandi dell'agente e se chiede prima: la sandbox configurata, se una sandbox del sistema operativo è davvero disponibile, e la postura di esecuzione sull'host.
assist — lo stesso braccio destro, economico di default
assist è chat con i default da secondo cervello accesi: la cascata di tier manda le
chiacchiere a modelli economici e fa salire le richieste difficili, il tuo profilo persistente
(chimera profile) è il preambolo stabile, e memoria, suggerimenti e consolidamento di fine
sessione sono attivi. All'uscita stampa una ricevuta di sessione — distribuzione dei tier e
token misurati — perché "economico di default" sia un numero.
uv run chimera assist # cascade, profile and memory on
uv run chimera assist --no-cascade # one default model instead of the ladder
uv run chimera assist --no-memory # don't recall long-term memory
uv run chimera assist --max-usd 0.25 # ceiling for the WHOLE run, not for one turn
uv run chimera assist --write-region 'src/**' # the only paths the file-writers may touch
uv run chimera assist --no-compact # --compact (default) folds older turns near the window
uv run chimera assist --model MODEL --workspace DIR --max-steps 8
Comandi: /help · /task <richiesta difficile> (fusione a piena potenza, un colpo solo) ·
/solve <compito> (lo passa al ciclo verificato) · /profile <tipo>: <fatto> (ricordare
qualcosa su di te — tipi: preference, project, context, name) · /model <slug> ·
/plan <task> (mostra prima un piano; il compito parte solo dopo la tua approvazione, oppure puoi rivederlo) · /undo [N] (con N, gli ultimi N turni dopo un'anteprima; senza N: rimette i file che l'ultimo turno ha cambiato) · /cost (quanto è costata questa esecuzione, dalle sue ricevute) · /compact (ripiega i turni precedenti in una nota) · /new (come /reset) · /reset (pulisce il contesto della conversazione; niente viene cancellato) · /attach <file> (un documento per il prossimo messaggio; la risposta viene verificata su di esso) · /exit (anche
/quit, /q).
Governato esattamente come chat — stesso registry, stesso approvatore che chiede, stesse
righe di rifiuto, governance e costo, stessa riga in usage.jsonl, stessi server MCP, stesso
contatore --max-usd su tutta l'esecuzione e lo stesso /solve. Due differenze da sapere:
assist non tiene thread (dimentica all'uscita — usa chat per una conversazione che
vuoi indietro); e nominare un modello lo fissa, il che spegne la scala dei tier finché resta
fissato — è la scala a scegliere il modello, e prima accettava lo slug e lo ignorava.
/task fa una sola fusione forzata sulla sola richiesta: la conversazione non viene mandata
al panel, di proposito, perché dare in pasto il thread a un panel più un giudice più un
sintetizzatore moltiplica il costo della rotta che esiste per essere usata con parsimonia. Ora
la sua risposta fa parte del contesto del turno successivo, e stampa un prezzo e scrive una
riga in usage.jsonl come ogni altro turno — la rotta più cara del terminale era quella che
la schermata Costo non poteva vedere.
tui — app da terminale a schermo intero
Una UI Textual a schermo intero sullo stesso nucleo conversazionale. Due pannelli: un log di conversazione che renderizza le risposte come Markdown (il codice tra backtick è evidenziato per sintassi), con i token del modello che si trasmettono dal vivo man mano che arrivano; e un pannello di attività che mostra cosa ha fatto l'agente in quel turno — i tool che ha chiamato, il conteggio dei token e il costo, e quanti fatti di memoria sono stati richiamati.
uv run chimera tui
uv run chimera tui --no-stream # answers render at the end instead of streaming
uv run chimera tui --fuse --no-memory # fusion routing (no token stream — the panel says so)
uv run chimera tui --model MODEL --workspace DIR --max-steps 8
uv run chimera tui --max-usd 2.00 # a ceiling for the whole session, shown in the panel
uv run chimera tui -s standup # resume a named thread (--new starts a fresh one)
uv run chimera tui --write-region 'src/**' # the file-writers may touch nothing else
Non gli stessi flag dei REPL. tui ha --stream/--no-stream, che loro non hanno, e
--max-usd, che ferma la sessione una volta speso quel tanto. Quel flag aspettava un posto
dove mostrarsi: il pannello di attività ora porta una riga budget con quel che resta, perché
un tetto che nessuno vede trasforma un turno fermato dai soldi in un turno fermato senza un
motivo visibile.
chimera tui --session standup riprende un thread con un nome, --new ne avvia uno nuovo al suo
posto, e --write-region restringe ciò che gli scrittori di file possono toccare. Tutte e tre qui
significano esattamente quello che significano una sezione più sopra, sullo stesso archivio di
sessioni. Solo il --cascade di chimera chat non ha equivalente qui.
Comandi: /model <slug> · /new (thread nuovo; /reset è un alias) · /undo (rimette i file che l'ultimo turno ha cambiato) · /cost (quanto è costato questo thread, dalle sue ricevute) · /compact (ripiega i turni precedenti in una nota) · /clear (pulisce lo schermo) ·
/stream (attiva/disattiva i token dal vivo) · /help · /exit (anche /quit, /q).
Tasti: Ctrl+R thread nuovo · Ctrl+L pulisci · Ctrl+P palette dei comandi · PgUp/PgDn
scorri · Ctrl+C ferma un turno in corso al passo successivo, ed esce solo quando nessun turno è in corso. Un incolla su più righe è un solo messaggio. I comandi con slash si autocompletano mentre digiti.
Note di onestà:
- È governata, e le sue domande vengono disegnate invece che digitate. Lo stesso stack che
costruiscono i REPL: un ledger di taint a cui viene detto il tuo stesso messaggio, il
recinto
<<external-data>>attorno all'output non fidato dei tool, il kernel di fiducia, il pavimento di portata del proprietario e i server MCP connessi. A tenere fuori questa superficie fino al 2026-09-09 non era lo stack ma la domanda — Textual possiede il terminale, quindi una domanda scritta su stdin è scritta dove nessuno può guardare. Misurato in un pty, un turno così si è bloccato per 123,8 s contro un timeout di 120 s ed è tornato come✗ run_shellsenza spiegazione (bench/right_hand_governance/RESULTS.md, Parte 2). Ora entrambi i gate aprono invece un modale: la conferma di esecuzione sull'host e l'approvatore di governance.yon, Escape rifiuta, il pulsante No tiene il fuoco così che Invio non possa approvare per sbaglio, e un conto alla rovescia dice quanto tempo resta al silenzio — il silenzio rifiuta ancora, e ora lo dice. Sullo stesso corpus e con lo stesso strumento, gli attacchi bloccati sono passati da 0 su 7 a 7 su 7 e le letture esterne tornate dentro il recinto da 0 su 15 a 12 su 15 (le tre che restano fuori sono il tuo stesso repository, che non è esterno). - Una chiamata rifiutata ora dice perché, sotto la risposta. Il pannello di attività
mostrava già la frase del tool sotto la sua
✗; ora anche il log di conversazione mostra✗ run_shell did not succeed: …, che è dove sta pure il racconto del modello su un comando che non è mai girato. Anche un'approvazione ha una riga (governance: 1 approved this turn), così unaycliccata a metà turno lascia una traccia. - La conversazione sopravvive alla finestra. Ogni turno viene salvato sotto
<home>/sessions— lo stesso archivio chechatscrive e chechimera sessionselenca, così un thread iniziato su una superficie prosegue sull'altra — e per default riprende il thread più recente. Per questo/resetavvia un thread NUOVO invece di pulire questo: pulire sul posto un thread che ora è un file sarebbe il comando che lo distrugge. Lo storico non viene ridisegnato alla ripresa, e la riga sotto il banner dice quanti turni il modello vede che lo schermo non mostra.docs/commands.mdha il resto. - La trasmissione dei token esiste solo nel percorso a modello singolo — sotto
--fuse(un turno panel→giudice→sintetizzatore) non ci sono token incrementali, quindi il pannello mostra uno stato "sintetizzando" invece di un cursore finto. Quell'etichetta segue il flag e non la rotta: come inchat, un turno che porta tool non fonde, e un turno di REPL ne porta sempre. - Il costo appare come "non disponibile" quando il prezzo di listino del modello è sconosciuto
(mai indovinato), e ogni turno viene aggiunto a
<home>/usage.jsonlcome nei REPL. - Qui non c'è verifica/ripristino e non c'è
/solve: quelli sono andati achateassist. I server MCP sono montati, cosa che prima non erano, esattamente per il motivo per cui erano stati negati — l'output MCP è contenuto non fidato per definizione, e ora c'è dove recintarlo. Verifica-o-ripristina gira anche inchimera solveechimera project. - Se Textual non è installato,
tuiricade sul semplice REPLchat, passando ogni argomento esplicitamente perché quel ripiego sopravviva al primo turno. Lì la trasmissione non significa niente, e il thread viene salvato come qualunque altro thread dichat.
serve — gateway di messaggistica (HTTP o Discord)
Espone l'agente con una conversazione (e la sua memoria) per chat. Il nucleo di routing è agnostico rispetto al trasporto; gli adattatori si collegano ad esso.
uv run chimera serve --port 8765 # HTTP transport
# GET /health -> {"status":"ok","active_chats":N}
# POST /chat {"text":"...", "chat_id":"alice"} -> {"reply":"...","chat_id":"alice"}
Ogni chat_id mantiene il proprio contesto, così utenti/thread diversi non si mescolano.
Operazione non presidiata (webhook). Registra un job che scatta su un POST HTTP in entrata, così Chimera gira senza che nessuno digiti — un push GitHub, un evento Stripe, un ping di cron-as-a-service:
chimera cron add "on push" gh-push "Summarize the pushed commits" --webhook
chimera serve # then POST to the hook:
# curl -X POST localhost:8765/webhook/gh-push -d '{"ref":"refs/heads/main"}'
Il corpo del POST viene passato al task del job come contesto, e ogni job registrato per
quell'hook gira. GET /health e POST /chat continuano a funzionare accanto ad esso.
Discord nativo. Esegui Chimera come bot Discord — ogni canale è una sessione, e
l'agente può anche inviare messaggi tramite il tool send_message:
uv sync --extra messaging # installs discord.py
export CHIMERA_DISCORD_BOT_TOKEN=... # bot token (Message Content intent enabled)
uv run chimera serve --discord
Crea il bot su https://discord.com/developers, abilita l'intent Message Content, e invitalo sul tuo server. Risponde in qualsiasi canale che riesce a vedere (filtrato per ignorare i propri messaggi e quelli di altri bot). Il token viene letto dall'ambiente — mai scritto direttamente nel codice.
Telegram nativo. Stesso pattern di adattatore, e non richiede alcuna dipendenza extra (la Telegram Bot API è puro HTTP):
export CHIMERA_TELEGRAM_BOT_TOKEN=... # from @BotFather
uv run chimera serve --telegram
Slack nativo. Riceve via Socket Mode (richiede l'extra messaging) e invia via la Web
API. Abilita Socket Mode sulla tua app Slack per ottenere un token a livello di app:
uv sync --extra messaging
export CHIMERA_SLACK_BOT_TOKEN=xoxb-... # bot token
export CHIMERA_SLACK_APP_TOKEN=xapp-... # app-level token (Socket Mode)
uv run chimera serve --slack
WhatsApp (invio). WhatsApp è basato su push (i messaggi arrivano a un webhook Meta
che ospiti tu), quindi a differenza degli altri non c'è una connessione da aprire. Imposta
le credenziali della Cloud API e l'agente può inviare messaggi WhatsApp tramite il tool
send_message in qualsiasi modalità di serve:
export CHIMERA_WHATSAPP_ACCESS_TOKEN=...
export CHIMERA_WHATSAPP_PHONE_NUMBER_ID=...
# in a chat: send_message(platform="whatsapp", chat_id="<E.164 number>", text="done ✅")
WhatsApp bidirezionale. Punta il webhook della tua app Meta verso
https://<your-host>/whatsapp e imposta CHIMERA_WHATSAPP_VERIFY_TOKEN (qualsiasi stringa
tu scelga, corrispondente alla config dell'app). chimera serve verifica quindi
l'iscrizione (GET /whatsapp) e instrada i messaggi in entrata (POST /whatsapp)
attraverso il gateway, rispondendo tramite la Cloud API. WhatsApp richiede comunque un URL
pubblico per il webhook — quella è l'unica parte fuori da Chimera.
Signal nativo (bidirezionale). Signal non ha un'API ufficiale, quindi Chimera parla con
un bridge signal-cli-rest-api che
esegui tu (Docker) e colleghi al tuo numero — puro HTTP, nessuna dipendenza Python:
docker run -d -p 8080:8080 -v signal-cli:/home/.local/share/signal-cli bbernhard/signal-cli-rest-api
export CHIMERA_SIGNAL_API_URL=http://localhost:8080
export CHIMERA_SIGNAL_NUMBER=+15550000000 # this bot's registered number
uv run chimera serve --signal
run — Tier-1, completion in un colpo solo
Una singola chiamata al modello, senza tool, senza fusione. Il percorso più economico.
uv run chimera run "In one sentence, what is an AI agent?"
uv run chimera run "Summarize this error" --model openrouter/openai/gpt-4o-mini
Visione / incollare immagine. Allega immagini con --image (un percorso o URL,
ripetibile) — richiede un modello capace di visione:
uv run chimera run "What's in this chart?" --image chart.png -m openrouter/google/gemini-2.5-flash
deliver — Modalità Consegnabile (produce un artefatto)
Dove run/chat rispondono in modo conversazionale, deliver produce un documento
completo e autonomo (report, piano, spec, README...) e lo scrive su un file.
uv run chimera deliver "A one-page launch plan for a URL shortener" --out plan.md
uv run chimera deliver "An HTML status page" --format html -o status.html --fuse
agent — il loop grezzo di tool-calling ReAct
Pensiero → Azione (tool) → Osservazione, fino a una risposta finale. I tool sono limitati al workspace.
uv run chimera agent "Create a file hello.txt containing 'Hello Chimera'" -w ./scratch
fuse — LLM-Fusion (il differenziatore)
Esegue un panel di modelli, un giudice analizza le loro risposte
(consenso / contraddizioni / punti ciechi), e un sintetizzatore scrive la risposta
finale. Usa --show-panel per vedere la traccia completa.
uv run chimera fuse "Name three concrete ways to prevent SQL injection in Python."
uv run chimera fuse "Compare REST vs gRPC for a mobile backend." --show-panel
La fusione costa ~2-3× una chiamata singola, quindi riservala per il ragionamento
difficile. fuse stampa anche il costo in token per fase (panel / giudice / sintesi) così
puoi vedere dove vanno davvero i token di un'esecuzione.
Fusione selettiva (ATTIVA per default, risparmia token). Il motore sonda i primi
CHIMERA_FUSION_PROBE_K modelli del panel (default 2) e, quando le loro risposte
concordano da vicino, salta il resto del panel e il giudice — sintetizzando
direttamente dalle risposte concordanti. Il controllo di accordo è un confronto di testo
locale economico (nessuna chiamata a modello extra), quindi un turno discordante fa
escalation alla pipeline completa e costa esattamente come la fusione completa, mentre un
turno concordante è più economico. Regola la soglia con CHIMERA_FUSION_AGREEMENT (0–1,
default 0.8), oppure imposta CHIMERA_FUSION_MODE=full (o passa --full) per eseguire
sempre l'intero panel + giudice.
Perché è il default: su 3 esecuzioni di chimera fusion-bench --tasks hard (un panel a
pagamento di 3 modelli) ha tagliato i token del ~20–28% ed è stato corretto in
ogni turno in cui ha effettivamente interrotto in anticipo (16/16). L'accuratezza
complessiva ha oscillato da 0 a −8,3pp tra le esecuzioni, ma quella varianza cade
interamente nel bucket escalato — dove la modalità selettiva esegue la pipeline identica
a quella completa — quindi è non-determinismo del modello, non un costo dell'interruzione
anticipata. Esegui il bench sul tuo carico di lavoro per vedere il trade-off per il tuo
panel e i tuoi task:
uv run chimera fuse "What is 12 * 12?" --show-panel # likely early-stops
uv run chimera fusion-bench --tasks hard # full vs selective, tokens + accuracy
Scegli modelli di panel affidabili. La fusione paga solo se ogni membro del panel risponde davvero. Evita gli slug di modello
:freedi OpenRouter inCHIMERA_FUSION_PANEL— hanno limiti di frequenza (HTTP 429) sotto carico reale, e il panel si restringe silenziosamente a qualunque modello a pagamento rimanga. Un trio economico e affidabile:openrouter/deepseek/deepseek-chat,openrouter/openai/gpt-4o-mini,openrouter/meta-llama/llama-3.3-70b-instruct.
Skill card (carte di ragionamento TRS, sperimentale)
L'agente distilla ciò che apprende in carte di ragionamento — i cinque campi
Trigger / Do / Avoid / Check / Risk (più parole chiave di recupero) — sia dai successi
(una carta di pattern) sia dai fallimenti ricorrenti (una carta consultiva di
anti-pattern). Quando CHIMERA_SKILL_CARDS=on, solve recupera le top-k carte
rilevanti (BM25 su nome + descrizione + trigger) e le inietta nel contesto di ragionamento
del worker, così l'agente riusa ciò che ha funzionato ed evita modalità di fallimento
note. Questo chiude il ciclo — prima, le skill apprese venivano memorizzate e mai rilette.
Disattivato per default: iniettare carte aggiunge token di prompt, e i risparmi di token
del TRS derivano dall'accorciare tracce di ragionamento lunghe, quindi su task a risposta
breve il guadagno è in accuratezza, non in costo. Questo non è ipotetico — sulla suite a
risposta breve hard (deepseek-v3.1 a pagamento), skillcard-bench ha misurato carte che
costano +290% di token e −8pp di accuratezza rispetto a nessuna carta: con un
modello vicino al soffitto e senza una traccia lunga da accorciare, le carte generiche sono
puro overhead che può distrarre. Abilita le carte per carichi di lavoro a
ragionamento lungo (matematica/codice con tracce estese) dove la matematica dei token
si inverte, e misura sempre prima il tuo trade-off con un controllo di ground-truth:
uv run chimera skillcard-bench --tasks hard # demo cards vs no cards
uv run chimera skillcard-bench --use-store --tasks hard # bench your own learned cards
export CHIMERA_SKILL_CARDS=on CHIMERA_SKILL_CARDS_K=3 # enable, once it earns its place
Il bench riporta l'accuratezza con vs senza carte, il delta di token, il tasso di hit delle carte, e l'accuratezza suddivisa per hit/miss, con un verdetto PASS quando l'accuratezza con carte resta entro 1pp dalla baseline senza carte.
Schema di tool compatti (sperimentale)
Gli schema dei tool — specialmente quelli importati da server MCP o spec OpenAPI —
portano rumore di annotazione (esempi, titoli, default, prosa di parametro multi-frase,
corpi di richiesta annidati) che viene reinviato al modello a ogni passo ReAct. Con
CHIMERA_COMPACT_SCHEMAS=on, quel rumore viene rimosso e le descrizioni dei parametri
tagliate al momento della pubblicizzazione, senza toccare nulla che influisca su una
chiamata (il nome e la descrizione della funzione, e ogni type / properties /
required / enum dello schema sono preservati). Gli schema canonici restano intatti —
solo la copia inviata al modello si riduce.
Il risparmio è maggiore su toolset MCP/OpenAPI verbosi e si accumula a ogni passo; i tool nativi sono già concisi, quindi la loro riduzione è piccola. Misura prima il tuo toolset (nessuna chiamata al modello — conta solo i token):
uv run chimera schema-bench --demo # synthetic verbose tools, to see the effect
uv run chimera schema-bench --openapi ./openapi.json # your real spec's tools
Disattivato per default. Poiché la compattazione rimuove solo rumore di annotazione (mai la struttura), l'unico rischio è che il modello abbia leggermente meno prosa per scegliere un tool — quindi resta conservativa, e dovresti confermare il comportamento di tool-calling sul tuo carico di lavoro prima di abilitarla.
solve — Tier-2 autonomo (piano + verifica-o-ripristina)
Pianifica il task, esegue con il loop dell'agente, poi verifica con un comando eseguibile. Se la verifica fallisce, ripristina il workspace e riprova con feedback. Il verificatore (exit code 0 = successo) è la verità di riferimento.
uv run chimera solve \
"Create solution.py with add(a,b) and is_prime(n)." \
--workspace ./work \
--verify "python -c \"import solution; assert solution.is_prime(7)\""
Flag utili:
| Flag | Significato |
|---|---|
--verify "<cmd>" |
comando che deve uscire con 0 (test, una build, un linter) |
--workspace, -w |
dove l'agente legge/scrive (default .) |
--max-attempts N |
budget di verifica-o-ripristina (default 3) |
--max-steps N |
passi di tool-calling per tentativo (default 8) |
--fuse |
produce il piano via fusione (ragionamento profondo) |
--guard |
regola ogni chiamata di tool attraverso il kernel di governance |
--no-plan / --no-manager |
salta la fase di pianificazione / review |
--no-thinking |
chiede al modello worker di rispondere senza una fase di ragionamento (opt-in; il comportamento predefinito non cambia) |
--rubric |
il Manager giudica tramite la rubrica a cascata (seguire l'istruzione → fattualità → razionalità) |
--no-remember |
non scrive automaticamente un fatto di memoria al successo |
--no-evolve-skills |
non propone automaticamente una skill appresa quando un task si ripete |
--isolate |
gira in un git worktree usa-e-getta; i file modificati vengono copiati indietro solo al successo |
--require-diff |
un tentativo che non ha modificato nessun file fallisce e viene riprovato — per un task di codice, una spiegazione non è una correzione |
--keep-workspace |
al fallimento, lascia su disco le modifiche dell'ultimo tentativo invece di ripristinare — per quando un valutatore esterno decide passa/fallisce |
--diff-feedback |
mostra a un tentativo fallito il proprio diff ripristinato, inquadrato come un percorso da non ripercorrere |
--stagnation-fuzzy |
fa corrispondere le firme di fallimento ripetuto in modo approssimativo, così il pivot anti-stallo scatta su fallimenti della stessa causa la cui formulazione differisce |
Su
--max-steps. Il default di 8 è calibrato per workspace piccoli. Su un repository grande è il vincolo determinante, non il modello: la run 1 di SWE-bench ha segnato uno 0,0pp esatto con 8 passi contro un checkout di 250 MB, e la stessa configurazione a 30 passi ha alzato il tasso di patch della baseline dal 47% al 74% (bench/swe_bench/RESULTS.md). Se l'agente esplora e poi finisce senza modificare nulla, alza prima questo.
--require-diffe--keep-workspacesono per la valutazione esterna.solveè verifica-o-ripristina: quando è lui a possedere la decisione passa/fallisce, ripristinare un tentativo fallito è corretto. Quando è qualcos'altro a possederla — un job CI, un harness di benchmark, un umano che rivede il diff —--keep-workspaceimpedisce che il lavoro dell'agente venga annullato prima che quel giudice lo veda mai, e--require-diffimpedisce che una spiegazione sicura di sé venga valutata come una modifica completata. Entrambi sono disattivati per default.
solve impara tra le esecuzioni. Ogni esecuzione alimenta un ciclo comportamentale
chiuso, tutto regolato da verifica-o-ripristina così che solo il lavoro verificato abbia
effetto: (1) le lezioni rilevanti dai tentativi passati (i fallimenti sono favoriti)
vengono incorporate nel piano/prompt, e il primo passo difettoso di un tentativo
fallito viene localizzato e passato al nuovo tentativo; (2) a un successo verificato viene
scritto un fatto di memoria deduplicato (richiamato più tardi da chat/crew); e (3)
quando un pattern di task si ripete (≥ 2 successi precedenti), viene proposta una skill
riutilizzabile — attraverso il panel di fusione e mantenuta per trasferibilità
cross-model quando --fuse è attivo — e viene mantenuta solo se supera la validazione di
governance e uno smoke test eseguibile.
crew — multi-agente Tier-3
Un team di agenti con ruoli collabora su un task e un supervisor sintetizza la risposta finale.
uv run chimera crew "Propose a minimal architecture for a URL shortener service."
lifecycle — crew SDLC (pianifica → costruisci → testa → rivedi)
Una pipeline di ciclo di vita del software pre-assemblata con verifica-o-ripristina
nella fase di test: plan decompone il task, build lo implementa, test esegue il
verificatore (ripristinando e riprovando la build al fallimento), e un revisore critica il
risultato.
uv run chimera lifecycle "Add an add(a,b) function to solution.py" \
--workspace ./scratch --verify "python -c \"import solution; assert solution.add(2,3)==5\""
Ogni fase stampa con un ✓/✗; l'esecuzione è success solo se il verificatore della fase
di test è passato.
meta — agenti che costruiscono agenti
Progetta il blueprint di un agente specializzato (nome, tool, prompt di ruolo) per un task.
uv run chimera meta "an agent that triages GitHub issues and routes them to teams"
guard — verdetto di governance
Mostra la decisione del kernel di fiducia (allow / warn / review / block) per un'azione.
uv run chimera guard "rm -rf /" # BLOCK
uv run chimera guard "list the files in this folder" # ALLOW
decisions — quale modello risponde a una decisione tipizzata
Una decisione tipizzata (sì/no, una scelta, un punteggio) riceve risposta da uno di tre backend:
local_logprob (un modello piccolo tramite Ollama, il predefinito, gratuito), hosted_verbalized
(il giudice della fusione) o openrouter_decisions (un modello System One su OpenRouter). In
un'installazione predefinita viene interrogato da solo in un unico punto — le risposte verificate,
sotto — e per il resto quando attivi la banda REVIEW della governance o la tool decide, o chiami
chimera decide.
uv run chimera decisions models # cosa elenca OpenRouter; * = attivo
uv run chimera decisions use openrouter_decisions typesafe/jev-1.13
uv run chimera decisions use local_logprob # torna al predefinito
La stessa scelta è la scheda System One nelle Impostazioni dell'app desktop. Si possono scegliere solo modelli che parlano il contratto di Jev (sì/no, scelta, punteggio); un modello di punteggio dei comportamenti o un alias mobile è elencato e rifiutato. Un modello senza mappa di calibrazione legge la sua confidenza grezza.
Risposte verificate
Una risposta scritta a partire da documenti che hai allegato (la graffetta nella schermata Code,
/attach in chat e assist), in un turno che non ha chiamato nessuna tool, viene letta da
quel backend prima di uscire: è supportata dai documenti, non supportata o un rifiuto?
Supportata con una confidenza di 0,8 o più esce così com'è. Un rifiuto esce così com'è. Il resto va
a un modello forte con i documenti e la domanda, viene riletto ed esce se passa; altrimenti esce "le
fonti fornite non coprono questo", e la risposta trattenuta resta sulla ricevuta. Misurato nello
studio 26 (bench/verified_cascade/RESULTS.md, 400 domande appaiate): le risposte sbagliate
consegnate sono scese da 33 a 21 — 11 corrette, 0 peggiorate — a 1,87× il costo con il verificatore
locale; il vecchio gate lessicale valeva quanto nessun gate.
- Quale verificatore. Il backend scelto sopra. Con quello locale (il predefinito) e senza Ollama
o senza
qwen3:4b, ripiega sutypesafe/jev-1.13se è impostata una chiave OpenRouter, altrimenti sul vecchio gate lessicale; un backend scelto da te non ha ripiego. La ricevuta nomina il verificatore che ha girato e quelli saltati. - Solo domande. Un messaggio che chiede un'informazione contenuta nei documenti viene
verificato. Uno che chiede un lavoro su di essi — riassumere, criticare, tradurre, riscrivere,
estrarre, scrivere a partire da esso, valutarlo — passa direttamente, senza verifica e senza la
nota di ancoraggio; lo stesso vale per ciò di cui il classificatore non è sicuro e per ogni lingua
che non sia portoghese o inglese (
chimera/fusion/grounded_question.py; regole e precisione/richiamo inbench/grounded_question_classifier/). Quanto spesso un vero compito verrebbe ancora rifiutato non è ancora misurato. - Il rifiuto parla la tua lingua: quella dell'identità dell'agente, altrimenti quella della domanda, altrimenti l'inglese.
- Misurato con
gpt-6-lunacome redattore. Anche un altro modello viene verificato, ma il suo risultato non è misurato; la ricevuta nomina il redattore. - Dove non si applica. Un turno che ha usato una tool (un router davanti al loop dell'agente ha
peggiorato tutti gli esecutori nel bench B4), la modifica del codice e
solve, i fatti richiamati dalla memoria (arrivano a ogni turno, che la domanda li riguardi o no) e documenti più lunghi del più grande insieme letto dal bench (14.000 caratteri). La ricevuta dice quale di questi ha escluso il turno. - Se il verificatore fallisce, la risposta esce marcata come non verificata, con il motivo — mai trattenuta e mai mostrata come verificata.
- Il modello di escalation è
openrouter/openai/gpt-6-sol, quello misurato, quando una chiave OpenRouter lo raggiunge, altrimenti la cima della scala dei tier;CHIMERA_VERIFIED_ANSWERS_ESCALATE_MODELlo sostituisce. - Spegnere:
CHIMERA_VERIFIED_ANSWERS=false, o l'interruttore sulla scheda System One.CHIMERA_VERIFIED_ANSWERS_THRESHOLD(0,8, il valore registrato) sposta la soglia.
bench — benchmark di evoluzione continua
Misura se le prestazioni reggono lungo una catena di task (la prova anti-degradazione): tasso di successo complessivo, prima metà vs seconda metà, striscia più lunga.
uv run chimera bench --limit 6 # single-shot task set
uv run chimera bench --chain --limit 6 # stateful chain (error propagation)
uv run chimera bench --fuse # use fusion as the solver
Il report porta anche una flag di degradazione statisticamente onesta: invece di
fidarsi di una semplice sottrazione prima-meno-seconda-metà (su una catena corta
un'oscillazione di 0,2 è di solito rumore), degraded_significant è 1.0 solo quando un
intervallo di confidenza di Wilson sul calo esclude lo zero, -1.0 quando il campione è
troppo piccolo per dirlo, e 0.0 altrimenti — più i limiti degradation_ci_low/high.
Separatamente, CHIMERA_SKILL_ACCEPT_MODE=wilson condiziona la decisione di accettazione
skill cross-model al limite di confidenza inferiore del tasso di trasferimento (così un
2-su-3 fortunato non conta più); il default point mantiene il tasso grezzo, dato che il
limite di Wilson è rigoroso su panel minuscoli.
sandbox-bench — valutazione di stato + effetto collaterale
I bench testuali valutano la risposta del modello; questo valuta ciò che l'agente ha fatto. Ogni task gira in una directory sandbox isolata, e l'harness confronta lo stato finale dei file con l'obiettivo (qualsiasi percorso consentito, stile risultato) e separatamente conta gli effetti collaterali dannosi — mutazioni fuori dall'insieme consentito dichiarato per il task. Così un agente che produce il risultato giusto mentre distrugge un file non correlato viene beccato, non valutato come un successo pulito.
uv run chimera sandbox-bench # runs the demo stateful tasks (real models + file tools)
Riporta pass_rate e side_effect_rate. Include la metodologia (uno StatefulTask con
goal_check + insieme allowed di mutazione), non una grande suite di task — scrivi task
per i tuoi stessi tool. I valutatori testuali esistenti restano corretti per lavoro
puramente di domanda-risposta.
memory — memoria a lungo termine curata
uv run chimera memory add "Alex prefers TypeScript strict and absolute imports"
uv run chimera memory search "imports"
uv run chimera memory list
uv run chimera memory graph # entity-relation graph from memory
uv run chimera memory graph --entity PassaPro # one entity's relations
uv run chimera memory prune --max 50 # keep the N highest-value memories (multi-factor)
Il richiamo passa attraverso un gate di ammissione (un confine di fiducia): una memoria
richiamata entra nel prompt solo se è rilevante e priva di testo di override/injection
(difesa da jailbreak basato sulla memoria). memory prune dimentica sotto un budget
tramite un modello di valore multifattoriale (recenza, specificità, tipo, curatela,
affidabilità) — non un singolo criterio.
Il livello a grafo estrae triple (fonte, relazione, target) dalle tue memorie
(PassaPro uses Supabase, Alex prefers TypeScript), così i fatti possono essere
richiamati per entità, non solo per parola chiave.
La cronologia delle conversazioni è un archivio a parte. Ogni turno di codice che termina
nella schermata Code viene indicizzato — il messaggio, la risposta, i file letti o modificati,
quando — in <home>/history.db (SQLite, FTS5 quando il tuo Python lo ha), e resta lì dopo che la
trascrizione della conversazione ha tagliato i turni più vecchi. L'agente lo cerca con lo strumento
recall_history ("cosa abbiamo deciso sulla funzione di login due settimane fa?"), limitato al
progetto corrente salvo richiesta per tutti i progetti. Un turno eseguito su contenuto non
attendibile viene etichettato al richiamo, una credenziale incollata viene oscurata prima della
scrittura, ed eliminare una conversazione elimina le sue righe.
cron — job pianificati & SOP di evento
uv run chimera cron add daily-report "0 9 * * *" "generate the daily report"
uv run chimera cron list
kanban — bacheca dei task con corsie per worker
Una bacheca (backlog → doing → review → done) dove ogni card nomina una corsia che la
dispaccia allo stack dell'agente: solve (autonomo Tier-2, verifica-o-ripristina) o
crew (pipeline di ruoli Tier-3). La vista operativa del loop che l'agente già esegue.
uv run chimera kanban add "Fix the flaky test" -a "make test_login deterministic" \
--lane solve --verify "pytest -q tests/test_login.py"
uv run chimera kanban add "Compare REST vs gRPC" --lane crew
uv run chimera kanban board # show the columns
uv run chimera kanban run -w ./scratch # dispatch backlog cards through their lanes
uv run chimera kanban move <id> done # manual move
uv run chimera kanban learn --min 3 --yes # recurring tasks (experience) -> cards
run percorre ogni card backlog → doing → done (successo) oppure → review (richiede
attenzione). learn riusa il rilevatore di ricorrenza del cron-learner per accodare i
task che l'agente ripete (deduplicati contro la bacheca) — pianificalo per riempire
automaticamente il backlog.
workflow — loop progettati (Loop Engineering)
Scrivi un loop autonomo come YAML invece di un prompt improvvisato. Ogni passo uses una
capacità (run / shell / solve / crew / lifecycle), può essere condizionato al
passo precedente (when: prev_succeeded | prev_failed), e può ripetersi (repeat, until: success).
# examples/workflow.yaml
name: build-and-report
steps:
- name: build
uses: solve
with: { task: "Create greeting.py with greet(name)", verify: "python -c \"import greeting\"" }
repeat: 2
until: success
- name: report
uses: run
when: prev_succeeded
with: { prompt: "One-line changelog for greet()" }
uv run chimera workflow examples/workflow.yaml --workspace ./scratch
drift — gate di drift spec↔codice
Mantiene allineati una spec e il codice. Una spec è un piccolo YAML di requisiti (defines
un simbolo / contains una regex / absent una regex / command esce con 0). Il gate
esce con codice diverso da zero in caso di drift, quindi funge anche da verificatore.
uv run chimera drift examples/spec.yaml --workspace ./scratch
# as a verifier inside solve:
uv run chimera solve "..." --verify "chimera drift examples/spec.yaml -w ."
migrate — importare da un altro agente
Porta config + skill da Hermes o OpenClaw, e con --apply fa anche il merge della
memoria a lungo termine (deduplicata, non distruttiva). Il default è un'anteprima
dry-run.
uv run chimera migrate hermes /path/to/hermes/home # preview
uv run chimera migrate hermes /path/to/hermes/home --apply # write + merge memory
uv run chimera migrate openclaw /path/to/openclaw/home --apply
Il merge della memoria riporta i conteggi {ADD, UPDATE, NOOP} — i duplicati diventano
NOOP, quindi rieseguire è sicuro.
evolve — evoluzione del modello opt-in (avanzato)
chimera solve --collect (attivo per default) registra ogni esecuzione come traiettoria.
I comandi evolve la trasformano in dataset pronti per il training e una recipe LoRA
eseguibile. Il training è esterno e opt-in — cambia i pesi del modello, quindi non
avviene mai automaticamente; Chimera prepara i dati e uno script e si ferma.
chimera evolve status # is there enough signal to train?
chimera evolve export --format sft --out d.jsonl --min-steps 5 --diverse # long-horizon, one example per task
chimera evolve export --format dpo --out d.jsonl # preference pairs (success vs failure)
chimera evolve recipe --out ./recipe --format dpo # train.py + README + requirements
chimera evolve tune --rounds 2 # self-optimize the agent spec (no weights changed)
export accetta manopole di recipe: --min-steps N mantiene solo tracce a lungo
orizzonte, --diverse mantiene al massimo un esempio per task (la diversità dei task è il
collo di bottiglia della curatela), e --min-process P (SkillCoach) mantiene solo tracce
il cui punteggio di aderenza al processo ≥ P — la frazione di passi di tool che ha
prodotto un risultato riuscito e visibile — così un successo fortunato che si è dibattuto
tra chiamate di tool fallite non entra nel training. Gli eventi per singolo passo dietro
quel punteggio sono catturati automaticamente a ogni esecuzione di solve; il filtro è
disattivato per default (CHIMERA_SFT_MIN_PROCESS imposta un default globale).
evolve tune è diverso dal training — esegue una meta-ricerca sulla spec
dell'agente (modello, prompt di sistema, budget di passi, panel, profondità di memoria),
valutando ogni candidato sugli scenari giornalieri e mantenendo una modifica solo in caso
di non-regressione. Chiama modelli ma non cambia mai i pesi, quindi è sicuro da
eseguire in qualsiasi momento.
Poi, per addestrare davvero, su una GPU (o Colab): pip install chimera-agent[train] (o
il requirements.txt della recipe) e python recipe/train.py. Punta
CHIMERA_DEFAULT_MODEL verso il modello base + adapter quando servi.
pet — un compagno virtuale
Un piccolo compagno persistente le cui statistiche cambiano mentre sei via. Non serve alcuna chiave.
chimera pet new --name Chimi # adopt one
chimera pet status # check in (fullness / happiness / energy / mood)
chimera pet feed | play | rest # interact
Consigli
- Tool vs ragionamento. I turni di tool-calling usano sempre un singolo modello (la fusione non può chiamare tool); la fusione è riservata al ragionamento profondo senza tool.
- Ispeziona cosa è successo.
CHIMERA_LOG_LEVEL=DEBUGmostra i log di routing e di attivazione della fusione. - Mantieni i test onesti. Un buon comando
--verify(una vera suite di test) rendesolveaffidabile — è la verità di riferimento eseguibile a cui l'agente è sottoposto.