Przejdź do treści

Chimera — Przewodnik użytkowania

Chimera to agent CLI-first podlegający nadzorowi, z rdzeniem rozumowania LLM-Fusion. Ten przewodnik pokrywa instalację, konfigurację i każdą komendę z przykładami.

Nowy w projekcie? Przeczytaj najpierw przegląd architektury.


Instalacja

Chimera używa 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

Każda komenda poniżej jest uruchamiana jako uv run chimera <command> (albo po prostu chimera …, gdy virtualenv projektu jest już na twojej ścieżce PATH).


Konfiguracja

Chimera jest niezależna od providera dzięki LiteLLM. Umieść swoje klucze i wybory modeli w lokalnym .env (jest ignorowany przez git — nigdy go nie commituj):

# 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

Inne przełączniki: CHIMERA_HOME (katalog stanu, domyślnie .chimera), CHIMERA_LOG_LEVEL (INFO / DEBUG), CHIMERA_CACHE (on/off, domyślnie off — cachuje identyczne dokończenia bez narzędzi, by pomijać powtórne wywołania API), oraz CHIMERA_AUTO_FUSE (on/off, domyślnie off — automatycznie fuzjonuje głębokie lub wrażliwe na błąd tury w solve/crew bez jawnego --fuse; router świadomy kosztów nadal utrzymuje tanie tury/tury narzędziowe jako pojedynczy model). Router rozpoznaje prompty o dokładnej odpowiedzi (arytmetyka, liczenie, operacje na cyfrach) w głównych językach projektu (en/pt/es/de/fr/zh/ja), więc krytyczny krótki krok dostaje ochronę fuzji nawet wtedy, gdy jest za krótki, by uruchomić bramkę długości.

Providerzy, fallback i self-hosted. Działa dowolny slug LiteLLM provider/model (openai/…, anthropic/…, gemini/…, ollama_chat/…, openrouter/…, …). Dla serwera self-hosted / zgodnego z OpenAI (Ollama, vLLM) ustaw CHIMERA_API_BASE (np. http://127.0.0.1:11434 z CHIMERA_DEFAULT_MODEL=ollama_chat/llama3). Używaj ollama_chat/ zamiast ollama/: prefiks ollama/ przechodzi przez endpoint generate Ollamy, który nie potrafi wywoływać narzędzi. Ustaw CHIMERA_FALLBACK_MODELS (rozdzielone przecinkami), by przełączyć się na inny model, gdy podstawowy zawiedzie. W chat/tui, /model <slug> przełącza model w trakcie sesji.

Lokalny model nie potrzebuje klucza. Z CHIMERA_DEFAULT_MODEL=ollama_chat/<model> lub lm_studio/<model> każde polecenie działa bez klucza API (LM Studio jest odpytywany pod CHIMERA_LM_STUDIO_BASE_URL, domyślnie http://localhost:1234/v1), a ekran pierwszego uruchomienia aplikacji desktopowej proponuje modele, które Ollama lub LM Studio już mają — jedno kliknięcie, bez klucza.

Pule poświadczeń. Daj providerowi kilka kluczy przez CHIMERA_<PROVIDER>_KEYS (np. CHIMERA_OPENROUTER_KEYS=key1,key2,key3). Brama rotuje je round-robin między wywołaniami (rozkładając obciążenie / limity), a wewnątrz pojedynczego wywołania przełącza się na następny klucz, jeśli któryś zawiedzie. Pula zastępuje pojedynczy *_API_KEY tego providera. (Logowania OAuth/subskrypcyjne — Copilot, Claude Max itp. — nie są jeszcze podpięte; klucze API i dowolny endpoint wspierany przez LiteLLM są.)

Sprawdź, czy wszystko jest podłączone:

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)

Opcjonalne funkcje. Widzenie (Vision), Deliverable Mode i Pet są wbudowane. Reszta (wyszukiwanie webowe, wyszukiwanie X, generowanie obrazów, TTS/głos, Spotify, przeglądarka) to gotowe do wypełnienia gniazda: wypełnij pasujące poświadczenie w .env (lub zainstaluj zależność), a zdolność się aktywuje. chimera features to żywa lista kontrolna. Narzędzie web_search (Tavily) rejestruje się automatycznie w momencie ustawienia TAVILY_API_KEY — i jest szablonem do dodawania pozostałych (albo użyj klienta MCP / importera OpenAPI->tool).

Modele darmowe vs płatne. Modele OpenRouter :free nic nie kosztują, ale są ograniczane limitami po stronie dostawcy (rate-limited) — dobre do szybkiego run, zawodne przy komendach wielowywołaniowych jak fuse/solve. Do prawdziwego użytku, tani płatny model (np. deepseek/deepseek-chat-v3.1, ułamki centa za wywołanie) jest dużo bardziej niezawodny.


Komendy

Status — version · doctor · models

uv run chimera version
uv run chimera doctor
uv run chimera models

chat — interaktywny asystent wieloturowy (twoja prawa ręka)

Interaktywny REPL z pamięcią konwersacji i użyciem narzędzi — codzienny sterownik. Przywołuje istotną pamięć długoterminową, wątkuje konwersację przez kolejne tury i zapisuje wątek po każdej turze w <home>/sessions, więc następne uruchomienie podejmuje tam, gdzie skończyłeś. chimera sessions wypisuje zapisane wątki; chimera sessions --delete <id> usuwa jeden.

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 osadza narzędzia i jest miejscem, z którego czytany jest AGENTS.md; --max-steps ogranicza kroki wywołań narzędzi w obrębie jednej wiadomości; --model/-m nadpisuje slug modelu — ale przeczytaj niżej uwagę o routingu.

Komendy: /help · /new (świeży wątek — bieżący zostaje na dysku) · /reset (to samo co /new) · /model <slug> (bez argumentu wraca do domyślnego) · /plan <task> (najpierw pokazuje plan; zadanie rusza dopiero po zatwierdzeniu, możesz go też poprawić) · /undo [N] (z N ostatnie N tur po podglądzie; bez N: przywraca pliki zmienione przez ostatnią turę; plik edytowany ponownie od tamtej pory zostaje, a komenda mówi który) · /cost (ile kosztował ten wątek, z jego paragonów w usage.jsonl) · /compact (składa wcześniejsze tury w notatkę dla modelu; transkrypt na dysku się nie zmienia) · /solve <zadanie> (przekazuje to pętli z weryfikacją) · /attach <plik> (dokument do następnej wiadomości; odpowiedź jest z nim sprawdzana) · /exit (także /quit, /q).

Jest zarządzany i pyta ciebie. chat i assist budują ten sam stos co ścieżka API: ledger skażenia, któremu podaje się twoją własną wiadomość, ogrodzenie <<external-data>> wokół niezaufanego wyjścia narzędzi, jądro zaufania, --write-region, podłogę zasięgu właściciela (CHIMERA_REACH) i jego instrukcje z agent.json. Zatwierdzający pyta na twoim terminalu — to jedyna powierzchnia, na której gwarantowanie ktoś jest, żeby odpowiedzieć. Zmierzone na korpusie wstrzyknięć (bench/right_hand_governance/RESULTS.md, 2026-09-08): zablokowane ataki poszły z 0 na 7 do 7 na 7, odczyty zewnętrzne wracające wewnątrz ogrodzenia z 0 na 12 do 12 na 12, a over-block przy odpowiadającym człowieku wynosi 0,000 — kosztem pięciu pytań na ośmiu legalnych wierszach. W potoku (chimera chat < script.txt) nie ma kogo pytać, więc pytanie staje się zapisaną odmową zamiast milczącą zgodą.

Uwagi o uczciwości:

  • Odrzucone wywołanie narzędzia jest drukowane pod odpowiedzią — ✗ run_shell did not succeed: …. Model opowiada wokół odmów: zmierzony przypadek odpowiedział "The command printed exactly: marker-42" o komendzie, którą bramka wykonania na hoście odrzuciła. Zatwierdzenie też dostaje swoją linię (governance: 1 approved this turn), żeby y wpisane w środku tury zostawiło ślad, gdy odpowiedź już przewinie się w górę.
  • --fuse nie fuzjonuje tury, która niesie narzędzia, a tura REPL zawsze je niesie. Router wysyła do pojedynczego modelu każdą turę z narzędziami, więc w praktyce tura z --fuse jest tu turą pojedynczego modelu. --cascade dodatkowo wygrywa z --fuse, gdy podano obie. Jedyna trasa w terminalu, która naprawdę fuzjonuje, to /task w assist.
  • Nazwanie modelu przypina go, a drabina tierów schodzi na bok. Pod --cascade to drabina wybiera model w każdej turze i dotąd połykała bez słowa slug, który podałeś. Teraz --model i /model <slug> wygrywają tak długo, jak długo któryś jest podany — osobna linia mówi, że drabina jest wyłączona — a /model bez argumentu oddaje jej tę robotę.
  • Każda tura drukuje swoje tokeny i cenę — cost: unavailable, gdy cena cennikowa modelu jest nieznana, nigdy zgadnięte zero — i dopisuje wiersz do <home>/usage.jsonl, który czyta ekran Kosztów aplikacji desktopowej.
  • --max-usd ogranicza wątek, a nie turę. Jeden licznik biegnie od pierwszej wiadomości do /exit; /solve czerpie z tych samych pieniędzy; a gdy się skończą, następna wiadomość jest odrzucana, zanim zostanie wysłana, zamiast płacić za wywołanie, żeby odkryć, że nic nie zostało. Odpowiedź ucięta — przez pułap, przez --max-steps albo przez kontekst, który przestał się mieścić — mówi o tym w osobnej linii, bo w przeciwnym razie ucięta odpowiedź czyta się dokładnie tak samo jak skończona.
  • Przywrócona tura mówi o tym. Gdy wątek wraca z dysku, przygaszona linia pod odpowiedzią liczy odtworzone tury, które zostały przywrócone, i ile z nich nigdy nie miało zapisanego pochodzenia. Są odtwarzane wewnątrz ogrodzenia danych, a nie jako własne słowa modelu, a do tej pory ogrodzenie było niewidoczne dla osoby, którą chroni.
  • /solve <zadanie> przekazuje konwersację pętli z weryfikacją — planuje, edytuje, weryfikuje i cofa próbę, gdy ta zawiedzie, co jest drugim z dwóch przycisków ekranu kodu w aplikacji desktopowej. Nigdy nie startuje sam, drukuje zadanie i pułap, zanim ruszy, a własna odpowiedź pętli jest zapisywana w wątku. Bez argumentu bierze ostatnią rzecz, o którą pytałeś.
  • Serwery MCP docierają do terminala. Z CHIMERA_MCP_AUTOLOAD=1 serwery z mcp.json są montowane przed ogrodzeniem, więc denylista, jądro i ledger skażenia je obejmują, a wyjście serwera trafia do wnętrza ogrodzenia danych jak każdy inny odczyt zewnętrzny. Są łączone raz na proces i współdzielone z aplikacją, więc nic nie jest uruchamiane dwa razy.
  • /reset zaczyna nowy wątek; nie kasuje bieżącego. Czyścił transkrypt w pamięci, gdy nic nie leżało na dysku; teraz, gdy wątek jest plikiem, czyszczenie go w miejscu zniszczyłoby pracę. (W assist, który nic nie utrwala, /reset nadal czyści kontekst. tui zapisuje do tego samego magazynu i przedefiniował /reset tak samo.)
  • chimera doctor mówi, gdzie działają komendy agenta i czy pyta wcześniej: skonfigurowany sandbox, czy sandbox systemu operacyjnego jest naprawdę dostępny, oraz postawę wykonania na hoście.

assist — ta sama prawa ręka, domyślnie tania

assist to chat z włączonymi domyślnymi ustawieniami drugiego mózgu: kaskada tierów wysyła pogawędki do tanich modeli i eskaluje trudne prośby, twój trwały profil (chimera profile) jest stabilną preambułą, a pamięć, podpowiedzi i konsolidacja na koniec sesji są aktywne. Przy wyjściu drukuje paragon sesji — rozkład tierów i zmierzone tokeny — żeby "domyślnie tanio" było liczbą.

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

Komendy: /help · /task <trudna prośba> (pełna moc przez fuzję, jeden strzał) · /solve <zadanie> (przekazuje to pętli z weryfikacją) · /profile <rodzaj>: <fakt> (zapamiętaj coś o tobie — rodzaje: preference, project, context, name) · /model <slug> · /plan <task> (najpierw pokazuje plan; zadanie rusza dopiero po zatwierdzeniu, możesz go też poprawić) · /undo [N] (z N ostatnie N tur po podglądzie; bez N: przywraca pliki zmienione przez ostatnią turę) · /cost (ile kosztowało to uruchomienie, z jego paragonów) · /compact (składa wcześniejsze tury w notatkę) · /new (to samo co /reset) · /reset (czyści kontekst konwersacji; nic nie jest kasowane) · /attach <plik> (dokument do następnej wiadomości; odpowiedź jest z nim sprawdzana) · /exit (także /quit, /q).

Zarządzany dokładnie tak jak chat — ten sam rejestr, ten sam pytający zatwierdzający, te same linie odmowy, zarządzania i kosztu, ten sam wiersz w usage.jsonl, te same serwery MCP, ten sam licznik --max-usd na całe uruchomienie i to samo /solve. Dwie różnice warte poznania: assist nie trzyma wątku (zapomina przy wyjściu — użyj chat do rozmowy, którą chcesz odzyskać); oraz nazwanie modelu przypina go, co wyłącza drabinę tierów na tak długo, jak długo pozostaje przypięty — to drabina wybiera model, a dotąd przyjmowała slug i go ignorowała.

/task uruchamia jedną wymuszoną fuzję na samej prośbie: konwersacja nie jest wysyłana do panelu, i to celowo, bo karmienie panelu plus sędziego plus syntetyzatora całym wątkiem zwielokrotnia koszt trasy, która istnieje po to, by używać jej oszczędnie. Jego odpowiedź jest teraz częścią kontekstu następnej tury, drukuje też cenę i zapisuje wiersz w usage.jsonl jak każda inna tura — najdroższa trasa w terminalu była tą, której ekran Kosztów nie mógł zobaczyć.

tui — pełnoekranowa aplikacja terminalowa

Pełnoekranowe UI Textual nad tym samym rdzeniem konwersacyjnym. Dwa panele: dziennik konwersacji, który renderuje odpowiedzi jako Markdown (kod w ogrodzeniach jest podświetlany składniowo), z tokenami modelu streamowanymi na żywo w miarę ich nadchodzenia; oraz panel aktywności pokazujący, co agent zrobił w tej turze — jakie narzędzia wywołał, liczbę tokenów i koszt, i ile faktów pamięci zostało przywołanych.

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

Nie te same flagi co w REPL-ach. tui ma --stream/--no-stream, których one nie mają, i --max-usd, które zatrzymuje sesję, gdy wyda już tyle. Ta flaga czekała na miejsce, w którym można ją pokazać: panel aktywności niesie teraz wiersz budget z tym, co zostało, bo pułap, którego nikt nie widzi, zamienia turę zatrzymaną przez pieniądze w turę zatrzymaną bez widocznego powodu.

chimera tui --session standup wznawia nazwany wątek, --new zaczyna zamiast tego świeży, a --write-region zawęża to, czego mogą dotknąć narzędzia zapisujące pliki. Wszystkie trzy znaczą tu dokładnie to, co sekcję wyżej, na tym samym magazynie sesji. Tylko --cascade z chimera chat nie ma tu odpowiednika.

Komendy: /model <slug> · /new (nowy wątek; /reset to alias) · /undo (przywraca pliki zmienione przez ostatnią turę) · /cost (ile kosztował ten wątek, z jego paragonów) · /compact (składa wcześniejsze tury w notatkę) · /clear (wyczyść ekran) · /stream (przełącz na żywo tokeny) · /help · /exit (także /quit, /q). Klawisze: Ctrl+R nowy wątek · Ctrl+L clear · Ctrl+P paleta komend · PgUp/PgDn przewijanie · Ctrl+C zatrzymuje trwającą turę na jej następnym kroku i wychodzi tylko wtedy, gdy żadna tura nie trwa. Wklejenie wielu linii to jedna wiadomość. Komendy ze slashem autouzupełniają się w trakcie pisania.

Uwagi o uczciwości:

  • Jest zarządzane, a jego pytania są rysowane zamiast wpisywane. Ten sam stos, który budują REPL-e: ledger skażenia, któremu podaje się twoją własną wiadomość, ogrodzenie <<external-data>> wokół niezaufanego wyjścia narzędzi, jądro zaufania, podłoga zasięgu właściciela i podłączone serwery MCP. Tym, co trzymało tę powierzchnię na zewnątrz do 2026-09-09, nie był stos, tylko pytanie — Textual jest właścicielem terminala, więc pytanie zapisane na stdin jest zapisane tam, gdzie nikt nie może zajrzeć. Zmierzone w pty: taka tura zablokowała się na 123,8 s przy limicie 120 s i wróciła jako ✗ run_shell bez wyjaśnienia (bench/right_hand_governance/RESULTS.md, część 2). Obie bramki otwierają teraz zamiast tego modal: potwierdzenie wykonania na hoście i zatwierdzający governance. y albo n, Escape odmawia, przycisk No trzyma fokus, więc Enter nie zatwierdzi przez przypadek, a odliczanie mówi, ile czasu zostało milczeniu — milczenie nadal odmawia i teraz to mówi. Na tym samym korpusie i tym samym instrumencie zablokowane ataki poszły z 0 na 7 do 7 na 7, a odczyty zewnętrzne wracające wewnątrz ogrodzenia z 0 na 15 do 12 na 15 (te trzy, które zostają na zewnątrz, to twoje własne repozytorium, które nie jest zewnętrzne).
  • Odrzucone wywołanie mówi teraz dlaczego, pod odpowiedzią. Panel aktywności już pokazywał własne zdanie narzędzia pod jego ✗; dziennik konwersacji pokazuje też ✗ run_shell did not succeed: …, a to jest miejsce, w którym jest również relacja modelu o komendzie, która nigdy nie ruszyła. Zatwierdzenie też dostaje linię (governance: 1 approved this turn), więc y kliknięte w środku tury zostawia ślad.
  • Rozmowa przeżywa okno. Każda tura jest zapisywana w <home>/sessions — tym samym magazynie, do którego pisze chat i który wypisuje chimera sessions, więc wątek zaczęty na jednej powierzchni trwa dalej na drugiej — a domyślnie wznawiany jest najnowszy wątek. Dlatego /reset zaczyna NOWY wątek zamiast czyścić ten: wyczyszczenie w miejscu wątku, który jest teraz plikiem, byłoby komendą, która go niszczy. Przy wznowieniu historia na ekranie nie jest rysowana od nowa, a wiersz pod banerem mówi, ile tur widzi model, a ekran nie. Resztę ma docs/commands.md.
  • Streamowanie tokenów działa tylko na ścieżce pojedynczego modelu — pod --fuse (tura panel→judge→syntetyzator) nie ma przyrostowych tokenów, więc panel pokazuje status "syntetyzowanie" zamiast fałszywego kursora. Ta etykieta idzie za flagą, a nie za trasą: jak w chat, tura niosąca narzędzia nie fuzjonuje, a tura REPL zawsze je niesie.
  • Koszt pokazuje "niedostępny", gdy cena cennikowa modelu jest nieznana (nigdy nie zgadywana), a każda tura jest dopisywana do <home>/usage.jsonl tak jak w REPL-ach.
  • Nie ma tu verify/revert ani /solve: te trafiły do chat i assist. Serwery MCP są zamontowane, czego wcześniej nie były, dokładnie z tego powodu, dla którego ich odmawiano — wyjście MCP jest z definicji niezaufaną treścią, a teraz jest gdzie je ogrodzić. Verify-or-revert działa też w chimera solve i chimera project.
  • Jeśli Textual nie jest zainstalowany, tui spada do zwykłego REPL chat, przekazując każdy argument jawnie, żeby ten odwrót przeżył swoją pierwszą turę. Streamowanie nic tam nie znaczy, a wątek jest zapisywany jak każdy inny wątek chat.

serve — brama mesagingowa (HTTP lub Discord)

Wystawia agenta z jedną konwersacją (i jej pamięcią) na czat. Rdzeń routingu jest niezależny od transportu; adaptery się podpinają.

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"}

Każdy chat_id utrzymuje własny kontekst, więc różni użytkownicy/wątki się nie mieszają.

Praca bez nadzoru (webhooki). Zarejestruj zadanie, które odpala się na przychodzące HTTP POST, tak by Chimera działała bez nikogo wpisującego cokolwiek — push do GitHuba, zdarzenie Stripe, ping 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"}'

Ciało POST-a jest przekazywane jako kontekst zadania, i każde zadanie zarejestrowane dla tego hooka jest uruchamiane. GET /health i POST /chat nadal działają obok tego.

Natywny Discord. Uruchom Chimerę jako bota Discord — każdy kanał to sesja, a agent może też wysyłać wiadomości przez narzędzie 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

Stwórz bota na https://discord.com/developers, włącz intent Message Content, i zaproś go na swój serwer. Odpowiada na każdym kanale, który widzi (odfiltrowując własne wiadomości i wiadomości innych botów). Token jest czytany ze środowiska — nigdy nie zaszyty na sztywno.

Natywny Telegram. Ten sam wzorzec adaptera, i nie potrzebuje dodatkowej zależności (Telegram Bot API to zwykłe HTTP):

export CHIMERA_TELEGRAM_BOT_TOKEN=...      # from @BotFather
uv run chimera serve --telegram

Natywny Slack. Odbiera przez Socket Mode (potrzebuje extra messaging) i wysyła przez Web API. Włącz Socket Mode w swojej aplikacji Slack, by dostać token na poziomie aplikacji:

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 (wysyłanie). WhatsApp jest push-based (wiadomości przychodzą na hostowany przez ciebie webhook Meta), więc w odróżnieniu od innych nie ma połączenia do otworzenia. Ustaw poświadczenia Cloud API, a agent może wysyłać wiadomości WhatsApp przez narzędzie send_message w dowolnym trybie 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 ✅")

Dwukierunkowy WhatsApp. Skieruj webhook swojej aplikacji Meta na https://<your-host>/whatsapp i ustaw CHIMERA_WHATSAPP_VERIFY_TOKEN (dowolny wybrany przez ciebie string, pasujący do konfiguracji aplikacji). chimera serve wtedy weryfikuje subskrypcję (GET /whatsapp) i kieruje wiadomości przychodzące (POST /whatsapp) przez bramę, odpowiadając przez Cloud API. WhatsApp nadal potrzebuje publicznego URL-a dla webhooka — to jedyna część spoza Chimery.

Natywny Signal (dwukierunkowy). Signal nie ma oficjalnego API, więc Chimera rozmawia z mostkiem signal-cli-rest-api, który uruchamiasz (Docker) i łączysz ze swoim numerem — zwykłe HTTP, bez zależności od Pythona:

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, pojedyncze dokończenie

Pojedyncze wywołanie modelu, bez narzędzi, bez fuzji. Najtańsza ścieżka.

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

Wklejanie obrazu / widzenie. Dołącz obrazy przez --image (ścieżka lub URL, można powtarzać) — wymaga modelu ze zdolnością widzenia:

uv run chimera run "What's in this chart?" --image chart.png -m openrouter/google/gemini-2.5-flash

deliver — Deliverable Mode (wyprodukuj artefakt)

Podczas gdy run/chat odpowiadają konwersacyjnie, deliver produkuje kompletny, samodzielny dokument (raport, plan, spec, README...) i zapisuje go do pliku.

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 — surowa pętla wywołań narzędzi ReAct

Myśl → Akcja (narzędzie) → Obserwacja, aż do finalnej odpowiedzi. Narzędzia są ograniczone do workspace'u.

uv run chimera agent "Create a file hello.txt containing 'Hello Chimera'" -w ./scratch

fuse — LLM-Fusion (wyróżnik)

Uruchamia panel modeli, sędzia (judge) analizuje ich odpowiedzi (konsensus / sprzeczności / martwe pola), a syntetyzator pisze finalną odpowiedź. Użyj --show-panel, by zobaczyć pełen ślad.

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

Fuzja kosztuje ~2-3× tyle co pojedyncze wywołanie, więc rezerwuj ją do trudnego rozumowania. fuse wypisuje też koszt tokenów per etap (panel / judge / synth), więc widać, gdzie faktycznie idą tokeny danego przebiegu.

Selektywna fuzja (domyślnie WŁĄCZONA, oszczędza tokeny). Silnik sonduje pierwsze CHIMERA_FUSION_PROBE_K modeli panelu (domyślnie 2) i, gdy ich odpowiedzi ściśle się zgadzają, pomija resztę panelu oraz sędziego — syntetyzując wprost ze zgadzających się odpowiedzi. Sprawdzenie zgodności to tanie lokalne porównanie tekstu (bez dodatkowego wywołania modelu), więc tura niezgadzająca się eskaluje do pełnego pipeline'u i kosztuje dokładnie tyle samo co pełna fuzja, podczas gdy tura zgadzająca się jest tańsza. Dostrój próg przez CHIMERA_FUSION_AGREEMENT (0–1, domyślnie 0.8), albo ustaw CHIMERA_FUSION_MODE=full (lub podaj --full), by zawsze uruchamiać cały panel + sędziego.

Dlaczego jest domyślna: w 3 przebiegach chimera fusion-bench --tasks hard (płatny panel 3-modelowy) obcięła tokeny o ~20–28% i była poprawna w każdej turze, którą faktycznie skróciła (16/16). Ogólna dokładność wahała się od 0 do −8,3pp między przebiegami, ale ta wariancja mieści się całkowicie w bucketcie eskalowanym — gdzie tryb selektywny uruchamia identyczny pipeline co pełny — więc to niedeterminizm modelu, nie koszt wczesnego zatrzymania. Uruchom benchmark na własnym obciążeniu, by zobaczyć kompromis dla własnego panelu i zadań:

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

Wybieraj niezawodne modele panelu. Fuzja opłaca się tylko wtedy, gdy każdy członek panelu faktycznie odpowiada. Unikaj slugów modeli OpenRouter :free w CHIMERA_FUSION_PANEL — są ograniczane limitami (HTTP 429) pod prawdziwym obciążeniem, a panel po cichu kurczy się do tego, co zostało z płatnych modeli. Tani, niezawodny tercet: openrouter/deepseek/deepseek-chat, openrouter/openai/gpt-4o-mini, openrouter/meta-llama/llama-3.3-70b-instruct.

Karty skilli (karty rozumowania TRS, eksperymentalne)

Agent destyluje to, czego się uczy, do kart rozumowania — pięciu pól Trigger / Do / Avoid / Check / Risk (plus słowa kluczowe do wyszukiwania) — zarówno z sukcesów (karta wzorca), jak i powtarzających się porażek (poradniana karta anty-wzorca). Gdy CHIMERA_SKILL_CARDS=on, solve przywołuje top-k istotnych kart (BM25 po nazwie + opisie + triggerach) i wstrzykuje je do kontekstu rozumowania workera, więc agent ponownie wykorzystuje to, co zadziałało, i unika znanych trybów porażki. To zamyka pętlę — wcześniej nauczone skille były zapisywane i nigdy odczytywane z powrotem.

Domyślnie wyłączone: wstrzykiwanie kart dodaje tokeny promptu, a tokenowe oszczędności TRS pochodzą ze skracania długich śladów rozumowania, więc na zadaniach z krótką odpowiedzią zysk to dokładność, nie koszt. To nie jest hipotetyczne — na zestawie krótkich odpowiedzi hard (płatny deepseek-v3.1), skillcard-bench zmierzył karty kosztujące +290% tokenów i −8pp dokładności wobec braku kart: przy modelu blisko sufitu i bez długiego śladu do skrócenia, generyczne karty to czysty narzut, który może rozpraszać. Włącz karty do obciążeń długiego rozumowania (matematyka/kodowanie z długimi śladami), gdzie matematyka tokenów się odwraca, i zawsze zmierz najpierw własny kompromis kontrolą wobec ziemi odniesienia:

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

Benchmark raportuje dokładność z kartami vs bez, deltę tokenów, wskaźnik trafień kart, i dokładność podzieloną na trafienie/pudło, z werdyktem PASS, gdy dokładność z kartami pozostaje w granicach 1pp od baseline'u bez kart.

Kompaktowe schematy narzędzi (eksperymentalne)

Schematy narzędzi — zwłaszcza te importowane z serwerów MCP lub specyfikacji OpenAPI — niosą szum adnotacji (przykłady, tytuły, wartości domyślne, wieloznaniowe opisy parametrów, zagnieżdżone ciała żądań), który jest ponownie wysyłany do modelu na każdym kroku ReAct. Z CHIMERA_COMPACT_SCHEMAS=on, ten szum jest usuwany, a opisy parametrów przycinane w momencie ogłaszania, bez dotykania niczego, co wpływa na wywołanie (nazwa i opis funkcji, oraz type / properties / required / enum każdego schematu są zachowane). Kanoniczne schematy pozostają nietknięte — kurczy się tylko kopia wysyłana do modelu.

Oszczędność jest największa na rozwlekłych zestawach narzędzi MCP/OpenAPI i kumuluje się przez każdy krok; natywne narzędzia są już zwięzłe, więc ich redukcja jest mała. Zmierz najpierw swój zestaw narzędzi (bez wywołań modelu — po prostu liczy tokeny):

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

Domyślnie wyłączone. Ponieważ kompaktowanie usuwa tylko szum adnotacji (nigdy strukturę), jedynym ryzykiem jest to, że model ma nieco mniej prozy, by wybrać narzędzie — więc pozostaje to konserwatywne, i powinieneś potwierdzić zachowanie wywołań narzędzi na własnym obciążeniu przed włączeniem.

solve — Tier-2 autonomiczny (plan + verify-or-revert)

Planuje zadanie, wykonuje je pętlą agenta, potem weryfikuje wykonywalną komendą. Jeśli weryfikacja zawiedzie, cofa workspace i ponawia próbę z informacją zwrotną. Weryfikator (kod wyjścia 0 = sukces) jest ziemią odniesienia.

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)\""

Przydatne flagi:

Flaga Znaczenie
--verify "<cmd>" komenda, która musi zwrócić kod wyjścia 0 (testy, build, linter)
--workspace, -w gdzie agent czyta/pisze (domyślnie .)
--max-attempts N budżet verify-or-revert (domyślnie 3)
--max-steps N kroki wywołań narzędzi na próbę (domyślnie 8)
--fuse wyprodukuj plan przez fuzję (głębokie rozumowanie)
--guard bramkuj każde wywołanie narzędzia przez jądro governance
--no-plan / --no-manager pomiń etap planowania / przeglądu
--no-thinking poproś model workera o odpowiedź bez fazy rozumowania (opt-in; ustawienie domyślne bez zmian)
--rubric Manager ocenia przez rubrykę kaskadową (przestrzeganie instrukcji → rzetelność faktyczna → racjonalność)
--no-remember nie zapisuj automatycznie faktu pamięci przy sukcesie
--no-evolve-skills nie proponuj automatycznie nauczonego skilla, gdy zadanie się powtarza
--isolate uruchom w jednorazowym git worktree; zmienione pliki kopiowane z powrotem tylko przy sukcesie
--require-diff próba, która nie zmieniła żadnego pliku, kończy się porażką i jest ponawiana — dla zadania kodowego wyjaśnienie nie jest poprawką
--keep-workspace przy porażce zostaw edycje ostatniej próby na dysku zamiast je cofać — gdy o pass/fail decyduje zewnętrzny oceniający
--diff-feedback pokaż nieudanej próbie jej własny cofnięty diff, oprawiony jako droga, której nie warto powtarzać
--stagnation-fuzzy dopasuj powtarzające się sygnatury porażek w przybliżeniu, tak by anty-stagnacyjny zwrot odpalał się na porażkach tej samej przyczyny, których sformułowanie się różni

O --max-steps. Domyślne 8 jest dostrojone do małych workspace'ów. Na dużym repozytorium to właśnie to jest wiążącym ograniczeniem, nie model: uruchomienie 1 SWE-bench dało dokładne 0,0pp przy 8 krokach wobec checkoutu 250 MB, a ta sama konfiguracja przy 30 krokach podniosła wskaźnik patchy baseline'u z 47% do 74% (bench/swe_bench/RESULTS.md). Jeśli agent eksploruje, a potem kończy bez edycji, podnieś to jako pierwsze.

--require-diff i --keep-workspace są do oceny zewnętrznej. solve to verify-or-revert: gdy to on posiada decyzję pass/fail, cofnięcie nieudanej próby jest słuszne. Gdy posiada ją coś innego — zadanie CI, harness benchmarkowy, człowiek przeglądający diff — --keep-workspace powstrzymuje wycofanie pracy agenta, zanim ten sędzia w ogóle ją zobaczy, a --require-diff powstrzymuje pewne siebie wyjaśnienie przed ocenieniem go jako ukończonej zmiany. Oba są domyślnie wyłączone.

solve uczy się między przebiegami. Każdy przebieg zasila zamkniętą pętlę behawioralną, całą bramkowaną przez verify-or-revert, więc tylko zweryfikowana praca ma jakikolwiek efekt: (1) istotne lekcje z poprzednich prób (faworyzujące porażki) są wplatane w plan/prompt, a pierwszy błędny krok nieudanej próby jest lokalizowany i podawany do ponowienia; (2) przy zweryfikowanym sukcesie zapisywany jest zdeduplikowany fakt pamięci (przywoływany później przez chat/crew); i (3) gdy wzorzec zadania się powtarza (≥ 2 wcześniejsze sukcesy), proponowany jest wielokrotnego użytku skill — przepuszczony przez panel fuzji i zachowywany przez między-modelową transferowalność, gdy --fuse jest włączone — i zachowywany tylko wtedy, gdy przechodzi walidację governance i wykonywalny test dymny.

crew — Tier-3 wieloagentowy

Zespół agentów-ról współpracuje nad jednym zadaniem, a supervisor syntetyzuje finalną odpowiedź.

uv run chimera crew "Propose a minimal architecture for a URL shortener service."

lifecycle — zespół SDLC (plan → build → test → review)

Wcześniej złożony pipeline cyklu życia oprogramowania z verify-or-revert na etapie testów: plan dekomponuje zadanie, build je implementuje, test uruchamia weryfikator (cofając i ponawiając build przy porażce), a recenzent krytykuje wynik.

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\""

Każdy etap drukuje się z ✓/✗; przebieg jest success tylko wtedy, gdy weryfikator etapu testów przeszedł.

meta — agenty budujące agenty

Projektuje plan (blueprint) wyspecjalizowanego agenta (nazwa, narzędzia, prompt roli) dla zadania.

uv run chimera meta "an agent that triages GitHub issues and routes them to teams"

guard — werdykt governance

Pokazuje decyzję jądra zaufania (allow / warn / review / block) dla działania.

uv run chimera guard "rm -rf /"                       # BLOCK
uv run chimera guard "list the files in this folder"  # ALLOW

decisions — który model odpowiada na decyzję typowaną

Na decyzję typowaną (tak/nie, wybór, ocena) odpowiada jeden z trzech backendów: local_logprob (mały model przez Ollama, domyślny, darmowy), hosted_verbalized (sędzia fuzji) albo openrouter_decisions (model System One na OpenRouter). W domyślnej instalacji pyta go samo tylko jedno miejsce — zweryfikowane odpowiedzi, niżej — a poza tym odpowiada, gdy włączysz pasmo REVIEW governance albo tool decide, lub wywołasz chimera decide.

uv run chimera decisions models                                   # co listuje OpenRouter; * = aktywny
uv run chimera decisions use openrouter_decisions typesafe/jev-1.13
uv run chimera decisions use local_logprob                        # powrót do domyślnego

Ten sam wybór to karta System One w Ustawieniach aplikacji desktopowej. Wybrać można tylko modele mówiące kontraktem Jev (tak/nie, wybór, ocena); model oceniający zachowania albo ruchomy alias jest na liście i zostaje odrzucony. Model bez mapy kalibracji odczytuje pewność surowo.

Zweryfikowane odpowiedzi

Odpowiedź napisaną na podstawie dołączonych dokumentów (spinacz na ekranie Code, /attach w chat i assist), w turze, która nie wywołała żadnego toola, ten backend czyta przed wysłaniem: czy jest poparta dokumentami, niepoparta, czy jest odmową? Poparta z pewnością 0,8 lub wyższą wychodzi bez zmian. Odmowa wychodzi bez zmian. Reszta trafia do silnego modelu z dokumentami i pytaniem, jest czytana ponownie i wychodzi, jeśli przejdzie; jeśli nie, wychodzi „dostarczone źródła tego nie obejmują", a wstrzymana odpowiedź zostaje na paragonie. Zmierzone w badaniu 26 (bench/verified_cascade/RESULTS.md, 400 sparowanych pytań): wysłanych błędnych odpowiedzi było 21 zamiast 33 — 11 poprawionych, 0 pogorszonych — przy 1,87× kosztu z lokalnym weryfikatorem; stary bramkowy filtr leksykalny wypadł tak samo jak brak bramki.

  • Który weryfikator. Backend wybrany wyżej. Z lokalnym (domyślnym) i bez Ollamy lub bez qwen3:4b przełącza się na typesafe/jev-1.13, gdy ustawiony jest klucz OpenRouter, a w przeciwnym razie na stary filtr leksykalny; backend wybrany przez ciebie nie ma zastępstwa. Paragon podaje weryfikator, który zadziałał, i te pominięte.
  • Tylko pytania. Sprawdzana jest wiadomość, która pyta o informację zawartą w dokumentach. Taka, która prosi o pracę z nimi — streszczenie, krytykę, tłumaczenie, przepisanie, wyciągnięcie danych, napisanie czegoś na ich podstawie, ocenę — przechodzi bez sprawdzania i bez notatki o źródłach; tak samo to, czego klasyfikator nie jest pewien, i każdy język poza portugalskim i angielskim (chimera/fusion/grounded_question.py; reguły oraz precyzja/czułość w bench/grounded_question_classifier/). Jak często prawdziwe zadanie wciąż zostałoby odrzucone, jeszcze nie zmierzono.
  • Odmowa jest w twoim języku: tym z tożsamości agenta, a jeśli go nie ma, w języku pytania, a w ostateczności po angielsku.
  • Zmierzone z gpt-6-luna piszącym szkic. Inny model też jest sprawdzany, ale jego wynik nie był mierzony; paragon podaje autora szkicu.
  • Gdzie nie działa. Tura, która użyła toola (router przed pętlą agenta pogorszył wszystkich wykonawców w benchu B4), edycja kodu i solve, fakty przywołane z pamięci (przychodzą w każdej turze, niezależnie od tego, czy pytanie ich dotyczy) oraz dokumenty dłuższe niż największy zestaw, jaki przeczytał bench (14 000 znaków). Paragon mówi, co wykluczyło turę.
  • Gdy weryfikator zawiedzie, odpowiedź wychodzi oznaczona jako niezweryfikowana, z powodem — nigdy wstrzymana i nigdy pokazana jako zweryfikowana.
  • Model eskalacji to openrouter/openai/gpt-6-sol, ten zmierzony, gdy sięga do niego klucz OpenRouter; w przeciwnym razie szczyt drabiny tierów. CHIMERA_VERIFIED_ANSWERS_ESCALATE_MODEL go zastępuje.
  • Wyłączenie: CHIMERA_VERIFIED_ANSWERS=false albo przełącznik na karcie System One. CHIMERA_VERIFIED_ANSWERS_THRESHOLD (0,8, wartość zarejestrowana) przesuwa próg.

bench — benchmark ciągłej ewolucji

Mierzy, czy wydajność się utrzymuje na łańcuchu zadań (dowód anty-degradacji): ogólny wskaźnik zdawalności, pierwsza vs. druga połowa, najdłuższa seria.

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

Raport niesie też statystycznie uczciwą flagę degradacji: zamiast ufać gołemu odejmowaniu pierwsza-minus-druga-połowa (na krótkim łańcuchu wahnięcie 0,2 to zwykle szum), degraded_significant wynosi 1.0 tylko wtedy, gdy przedział ufności Wilsona na spadku wyklucza zero, -1.0, gdy próbka jest za mała, by cokolwiek stwierdzić, i 0.0 w przeciwnym razie — plus granice degradation_ci_low/high. Osobno, CHIMERA_SKILL_ACCEPT_MODE=wilson bramkuje decyzję o akceptacji skilla między modelami na dolnej granicy ufności wskaźnika transferu (więc szczęśliwe 2-z-3 zdanych już się nie liczy); domyślne point zachowuje surowy wskaźnik, bo granica Wilsona jest surowa na małych panelach.

sandbox-bench — ocena stanu i efektów ubocznych

Testy tekstowe oceniają odpowiedź modelu; ten ocenia, co agent zrobił. Każde zadanie działa w izolowanym katalogu sandboksa, a harness porównuje finalny stan plików z celem (dowolna ścieżka dozwolona, styl wynikowy) i osobno liczy szkodliwe efekty uboczne — mutacje poza deklarowanym zbiorem dozwolonym zadania. Więc agent, który produkuje właściwy wynik, jednocześnie niszcząc niepowiązany plik, jest wychwytywany, nie zaliczany jako czysty sukces.

uv run chimera sandbox-bench            # runs the demo stateful tasks (real models + file tools)

Raportuje pass_rate i side_effect_rate. Dostarcza metodologię (StatefulTask z goal_check + zbiorem allowed mutacji), nie duży zestaw zadań — autoryzuj zadania dla własnych narzędzi. Istniejące gradery tekstowe pozostają poprawne dla czystej pracy Q&A.

memory — kuratorowana pamięć długoterminowa

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)

Przywołanie przechodzi przez bramkę dopuszczania (granicę zaufania): przywołana pamięć wchodzi do promptu tylko wtedy, gdy jest istotna i wolna od tekstu nadpisania/injection (obrona przed jailbreakiem opartym na pamięci). memory prune zapomina pod budżetem wg wielo-czynnikowego modelu wartości (świeżość, specyficzność, rodzaj, kuratorstwo, niezawodność) — nie pojedynczej wskazówki.

Warstwa grafu wyciąga trójki (source, relation, target) z twoich pamięci (PassaPro uses Supabase, Alex prefers TypeScript), więc fakty można przywoływać wg encji, nie tylko wg słowa kluczowego.

Historia rozmów to osobny magazyn. Każda tura kodowania zakończona na ekranie Code jest indeksowana — wiadomość, odpowiedź, pliki odczytane lub edytowane, kiedy — w <home>/history.db (SQLite, FTS5 gdy Twój Python je ma) i zostaje tam po tym, jak zapis rozmowy przytnie najstarsze tury. Agent przeszukuje ją narzędziem recall_history („co ustaliliśmy o funkcji logowania dwa tygodnie temu?"), w obrębie bieżącego projektu, chyba że poprosi o wszystkie projekty. Tura wykonana na niezaufanej treści jest oznaczana przy przywołaniu, wklejone poświadczenie jest zaczerniane przed zapisem, a usunięcie rozmowy usuwa jej wiersze.

cron — zaplanowane zadania i SOP zdarzeniowe

uv run chimera cron add daily-report "0 9 * * *" "generate the daily report"
uv run chimera cron list

kanban — tablica zadań z torami workerów

Tablica (backlog → doing → review → done), gdzie każda karta nazywa tor, który kieruje ją do stosu agenta: solve (Tier-2 autonomiczny, verify-or-revert) lub crew (Tier-3 pipeline ról). Operacyjny widok pętli, którą agent już uruchamia.

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 przeprowadza każdą kartę backlog → doing → done (sukces) lub → review (wymaga uwagi). learn ponownie wykorzystuje detektor powtarzalności cron-learnera, by kolejkować zadania, które agent powtarza (zdeduplikowane wobec tablicy) — zaplanuj to, by automatycznie zapełniać backlog.

workflow — zaprojektowane pętle (Loop Engineering)

Autoryzuj autonomiczną pętlę jako YAML zamiast doraźnego promptu. Każdy krok uses (używa) zdolności (run / shell / solve / crew / lifecycle), może być bramkowany na poprzednim kroku (when: prev_succeeded | prev_failed), i może się zapętlać (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 — bramka dryfu spec↔kod

Utrzymuj spec i kod w zgodzie. Spec to mały YAML wymagań (defines symbol / contains regex / absent regex / command zwraca kod wyjścia 0). Bramka zwraca kod niezerowy przy dryfie, więc pełni podwójną rolę jako weryfikator.

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 — import z innego agenta

Przynosi konfigurację + skille z Hermesa lub OpenClaw, a z --apply też scala pamięć długoterminową (zdeduplikowaną, bez destrukcji). Domyślnie jest to podgląd na sucho (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

Scalanie pamięci raportuje liczby {ADD, UPDATE, NOOP} — duplikaty stają się NOOP, więc ponowne uruchomienie jest bezpieczne.

evolve — opcjonalna ewolucja modelu (zaawansowane)

chimera solve --collect (domyślnie włączone) loguje każdy przebieg jako trajektorię. Komendy evolve zamieniają je w zbiory danych gotowe do treningu i uruchamialny przepis LoRA. Trening jest zewnętrzny i opcjonalny — zmienia wagi modelu, więc nigdy nie dzieje się automatycznie; Chimera przygotowuje dane i skrypt i się zatrzymuje.

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 przyjmuje przełączniki przepisu: --min-steps N zachowuje tylko ślady długiego horyzontu, --diverse zachowuje co najwyżej jeden przykład na zadanie (różnorodność zadań jest wąskim gardłem kuratorstwa), a --min-process P (SkillCoach) zachowuje tylko ślady, których wskaźnik podążania za krokami ≥ P — frakcja kroków narzędzia, które wyprodukowały udany, widoczny wynik — więc szczęśliwy sukces, który przebrnął przez nieudane wywołania narzędzi, nie jest używany do treningu. Zdarzenia per-krok stojące za tym wskaźnikiem są przechwytywane automatycznie przy każdym przebiegu solve; filtr jest domyślnie wyłączony (CHIMERA_SFT_MIN_PROCESS ustawia globalną wartość domyślną). evolve tune jest inne niż trening — uruchamia meta-przeszukiwanie nad spec agenta (model, prompt systemowy, budżet kroków, panel, głębokość pamięci), oceniając każdego kandydata na codziennych scenariuszach i zachowując edycję tylko przy braku regresji. Wywołuje modele, ale nigdy nie zmienia wag, więc jest bezpieczne do uruchamiania w dowolnym momencie.

Następnie, by faktycznie trenować, na GPU (lub w Colab): pip install chimera-agent[train] (albo requirements.txt przepisu) i python recipe/train.py. Skieruj CHIMERA_DEFAULT_MODEL na model bazowy + adapter przy serwowaniu.

pet — wirtualny towarzysz

Trwały mały towarzysz, którego statystyki dryfują, gdy cię nie ma. Bez potrzeby klucza.

chimera pet new --name Chimi      # adopt one
chimera pet status                # check in (fullness / happiness / energy / mood)
chimera pet feed | play | rest    # interact

Wskazówki

  • Narzędzia vs rozumowanie. Tury wywołujące narzędzia zawsze używają pojedynczego modelu (fuzja nie może wywoływać narzędzi); fuzja jest zarezerwowana dla głębokiego rozumowania bez narzędzi.
  • Sprawdzaj, co się stało. CHIMERA_LOG_LEVEL=DEBUG ujawnia logi routingu i zaangażowania fuzji.
  • Utrzymuj testy uczciwe. Dobra komenda --verify (prawdziwy zestaw testów) czyni solve niezawodnym — jest to wykonywalna ziemia odniesienia, przed którą agent odpowiada.

Edytuj tę stronę na GitHubie