Zaplanowane automatyzacje Codex, którym możesz zaufać bez nadzoru
Automatyzacje Codex to cykliczne prompty, na przykład codzienna kontrola jakości, które aplikacja desktopowa Codex uruchamia według harmonogramu w lokalnym projekcie albo w worktree Git, a wyniki odkłada do skrzynki. Uruchomienie bez nadzoru jest bezpieczne, gdy prompt przetestowano ręcznie, sandbox jest najwęższy z działających, a wynik spełnia sprawdzalny kontrakt.
Poniedziałek rano. W weekend opublikowano ostrzeżenie o podatności w zależności, ktoś zmergował commit z zabłąkanym console.log, a pokrycie testami modułu płatności spadło. O wszystkich trzech rzeczach dowiadujesz się na standupie. Gdybyś w piątek ustawił trzy automatyzacje, zamiast tego otworzyłbyś krótki raport: każdy znaleziony problem z poleceniem, które go dowodzi, a bezpieczne poprawki już gotowe w worktree do twojego przeglądu.
Ta strona jest dla programistów, którzy codziennie pracują z Codeksem, i dla tech leadów, którzy chcą tych samych cyklicznych kontroli w całym zespole. Zakłada, że znasz już aplikację desktopową albo CLI Codex; jeśli nie, zacznij od przeglądu automatyzacji Codex.
Co daje ten przewodnik po automatyzacjach Codex
Dział zatytułowany „Co daje ten przewodnik po automatyzacjach Codex”- Tabelę decyzyjną: gdzie powinno działać cykliczne zadanie Codex — w aplikacji desktopowej, w automatyzacji wątku czy w harmonogramie CI.
- Pięciokrokową procedurę, która prowadzi prompt od ręcznego uruchomienia do zaufanego harmonogramu.
- Sześć promptów do skopiowania, każdy z kontraktem wyniku, który da się sprawdzić.
- Konfigurację sandboksa i reguł dla uruchomień bez nadzoru, przetestowaną poleceniem
codex execpolicy check. - Workflow GitHub Actions, który wykonuje to samo zadanie, gdy twój laptop śpi.
- Listę awarii z procedurą naprawy dla każdej z nich.
Gdzie powinno działać cykliczne zadanie Codex?
Dział zatytułowany „Gdzie powinno działać cykliczne zadanie Codex?”Przygotowana przez OpenAI mapa powierzchni Codex opisuje automatyzację jako „scheduled checks, reminders, monitors, or follow-ups; use an existing-thread heartbeat when continuity matters”. To daje dwie opcje w aplikacji, a CLI dokłada kolejne dwie. Wybieraj według tego, do czego zadanie musi mieć dostęp i czy ma działać, gdy twój komputer jest wyłączony.
| Gdzie działa | Do czego ma dostęp | Działa, gdy laptop śpi? | Najlepsze do |
|---|---|---|---|
| Aplikacja desktopowa, lokalny projekt lub worktree | Twoje repozytorium, lokalne narzędzia i dane logowania | Nie | Osobistych kontroli wymagających lokalnego stanu: twoich gałęzi, lokalnych usług, niewypchniętej pracy |
| Aplikacja desktopowa, automatyzacja wątku | Za każdym razem ten sam wątek, więc wcześniejsze ustalenia zostają w kontekście | Nie | Działań następczych, które muszą pamiętać wczoraj: „sprawdź ponownie to, co zgłosiłeś ostatnio” |
codex exec z crona lub launchd na stale włączonej maszynie | To, co ta maszyna ma w repozytorium | Tak | Zadania zespołowego na kontrolowanej przez ciebie maszynie buildowej; zobacz Codex bez interfejsu: codex exec |
GitHub Actions schedule z openai/codex-action@v1 | Świeży checkout domyślnej gałęzi, tylko z sekretami, które przekażesz | Tak | Wspólnych raportów zespołu, które nie mogą zależeć od niczyjego laptopa; zużycie obciąża klucz API, a nie limit twojego planu |
Aplikacja desktopowa Codex działa na macOS i Windows, a codex app otwiera ją z terminala. Od 2026-07-09 jest dostarczana jako tryb Codex aplikacji desktopowej ChatGPT (źródło wtórne: Neowin); na macOS codex app uruchamia każdą z nich. Automatyzacje w aplikacji są oznaczone jako stabilne w CLI 0.157.1 (in_app_local_automation w codex features list). Według stanu na 2026-08-28 strona automatyzacji OpenAI wymieniała obok harmonogramów także źródła zdarzeń: nowe wiadomości Gmail, wiadomości na kanałach Slacka i aktywność w pull requestach GitHub.
Jak przeprowadzić automatyzację od promptu do harmonogramu?
Dział zatytułowany „Jak przeprowadzić automatyzację od promptu do harmonogramu?”Automatyzacja zaplanowana po jednym ręcznym uruchomieniu często okazuje się hałaśliwa. Poniższa procedura kosztuje jedno dodatkowe ręczne uruchomienie i oszczędza ci tygodnia zaśmieconej skrzynki.
-
Napisz prompt z kontraktem wyniku. Określ zakres (katalogi, okno czasowe), co liczy się jako ustalenie, jakie dowody musi mieć każde ustalenie i jaką dokładnie linię wypisać, gdy nie ma nic do zgłoszenia. Każdy prompt na tej stronie kończy się takim kontraktem.
-
Uruchom go ręcznie w zwykłym wątku w tym samym projekcie. Jeśli zadanie edytuje pliki, zacznij wątek w worktree, żeby główne repozytorium zostało czyste; konfigurację opisuje przewodnik po worktree w Codeksie. Sprawdź trzy rzeczy: czy znalazł prawdziwe problemy, czy został w zakresie i czy każde ustalenie ma dowód.
-
Uruchom go drugi raz, niczego nie zmieniając. Dobra automatyzacja daje tę samą odpowiedź albo wypisuje
NO FINDINGS. Jeśli drugie uruchomienie powtarza zgłoszenia albo wymyśla nowe problemy, zawęź zakres lub dodaj plik ignorowanych ustaleń (patrz sekcja o awariach), zanim ustawisz harmonogram. -
Utwórz automatyzację z przetestowanego promptu. W widoku Automations aplikacji desktopowej wybierz projekt, wskaż wykonanie lokalne albo w worktree, ustaw harmonogram i wklej prompt bez zmian. Wybierz automatyzację wątku, gdy zadanie musi pamiętać wcześniejsze uruchomienia.
-
Oceń pierwsze trzy uruchomienia względem kontraktu, potem przejdź na próbkowanie. W każdym uruchomieniu sprawdź jedno ustalenie od początku do końca, wykonując jego polecenie odtwarzające. Po trzech czystych uruchomieniach wystarczy wyrywkowa kontrola jednego ustalenia w tygodniu; przejrzane uruchomienia archiwizuj.
Jaki sandbox powinno dostać uruchomienie bez nadzoru?
Dział zatytułowany „Jaki sandbox powinno dostać uruchomienie bez nadzoru?”Podczas zaplanowanego uruchomienia nikt nie odpowie na prośbę o zgodę, więc projektuj każde zadanie tak, żeby nigdy jej nie potrzebowało. Wszystko, co wychodzi poza granicę, ma się nie udać i pojawić w raporcie, a nie czekać ani eskalować.
| Dostęp | Nazwa starszego sandboksa | Profil uprawnień (beta) | Do czego |
|---|---|---|---|
| Czyta pliki, nic nie zapisuje | read-only | :read-only | Raportów, briefingów, audytów i wszystkiego, co czyta treści ze Slacka, Gmaila lub PR-ów |
| Edytuje pliki w obszarze roboczym | workspace-write | :workspace | Zadań, które naprawiają coś w worktree do twojego przeglądu |
| Bez ograniczeń | danger-full-access | :danger-full-access | Nigdy w zaplanowanym zadaniu na twojej maszynie |
OpenAI preferuje teraz profile uprawnień (Codex CLI 0.138.0 i nowsze) zamiast starszych wartości --sandbox i zaznacza, że „the profile and legacy sandbox systems do not compose”, więc wybierz jeden system na zadanie. Profil wybierasz kluczem default_permissions w ~/.codex/config.toml albo dla pojedynczego uruchomienia przez -c default_permissions=":read-only"; osobnej flagi CLI do tego nie ma. Ani workspace-write, ani :workspace nie daje dostępu do sieci. Gdy jedno polecenie naprawdę potrzebuje sieci, na przykład npm audit, dopuść prefiks tego polecenia regułą, zamiast poszerzać cały sandbox.
Reguły to pliki Starlark w ~/.codex/rules/. Ten plik pozwala uruchomić poza sandboksem dokładnie trzy polecenia potrzebne opisanemu niżej cotygodniowemu zadaniu zależności (npm outdated, npm audit i npm install) i nic więcej:
prefix_rule( pattern = ["npm", "outdated"], decision = "allow", justification = "npm outdated reads the registry to compare versions",)prefix_rule( pattern = ["npm", "audit"], decision = "allow", justification = "npm audit needs network access for vulnerability checks",)prefix_rule( pattern = ["npm", "install"], decision = "allow", justification = "npm install downloads the patched package versions",)Przetestuj każdą regułę, zanim zaplanowane uruchomienie zacznie na niej polegać. Uruchom te polecenia w terminalu; każdy wynik JSON powinien kończyć się "decision": "allow", a polecenie, którego nie dopuściłeś, na przykład npm publish, powinno zwrócić pustą listę matchedRules (sprawdzone w CLI 0.157.1):
codex execpolicy check --pretty --rules ~/.codex/rules/default.rules -- npm outdatedcodex execpolicy check --pretty --rules ~/.codex/rules/default.rules -- npm auditcodex execpolicy check --pretty --rules ~/.codex/rules/default.rules -- npm install lodash@4.17.21npm install jest z tych trzech najszersze: poza sandboksem uruchamia też skrypty cyklu życia instalowanych pakietów z uprawnieniami twojego użytkownika. Jeśli to więcej, niż chcesz dopuścić na własnej maszynie, uruchamiaj zadanie zależności z harmonogramu CI.
Opisane niżej zadania raportujące działają w read-only, gdzie git fetch nie ma sieci i nie może zapisywać w .git, a gh nie łączy się z GitHubem. Ich prompty korzystają więc z origin/main w stanie z ostatniego pobrania i podają, jak stary jest ten stan. Żeby odświeżać repozytorium przy każdym uruchomieniu, dodaj do tego samego pliku jeszcze dwie reguły. Lista w drugim wzorcu dopuszcza gh pr list i gh pr view, ale nie gh pr merge:
prefix_rule( pattern = ["git", "fetch"], decision = "allow", justification = "git fetch needs the network and writes to .git",)prefix_rule( pattern = ["gh", "pr", ["list", "view"]], decision = "allow", justification = "the daily briefing reads merged pull requests",)codex execpolicy check --pretty --rules ~/.codex/rules/default.rules -- git fetch origincodex execpolicy check --pretty --rules ~/.codex/rules/default.rules -- gh pr view 123codex execpolicy check --pretty --rules ~/.codex/rules/default.rules -- gh pr merge 123Dwa pierwsze zwracają "decision": "allow"; gh pr merge zwraca pustą listę matchedRules (sprawdzone w CLI 0.157.1).
Jeśli nowa reguła nie działa, zrestartuj aplikację. Sekcja o testowaniu sandboksa w przewodniku po zaawansowanych konfiguracjach pokazuje, jak udowodnić, że granica trzyma dla poleceń, których nie dopuściłeś.
Prompty do skopiowania dla cyklicznych zadań Codex
Dział zatytułowany „Prompty do skopiowania dla cyklicznych zadań Codex”Każdy prompt testujesz w zwykłym wątku, zanim trafi do harmonogramu, i każdy kończy się kontraktem wyniku. Zastąp skrypty npm poleceniami swojego projektu; reszta działa bez zmian.
Codzienna kontrola jakości kodu
Dział zatytułowany „Codzienna kontrola jakości kodu”Cotygodniowa kondycja zależności
Dział zatytułowany „Cotygodniowa kondycja zależności”To zadanie edytuje pliki i potrzebuje sieci dla trzech poleceń, więc zaplanuj je w worktree z workspace-write i wszystkimi trzema regułami opisanymi wyżej. Z samą regułą dla npm audit kroki 1 i 3 zawodzą przy każdym zaplanowanym uruchomieniu.
Nocne polowanie na błędy w ostatnich commitach
Dział zatytułowany „Nocne polowanie na błędy w ostatnich commitach”To zadanie zapisuje testy, więc zaplanuj je w worktree z workspace-write.
Codzienny briefing zespołu
Dział zatytułowany „Codzienny briefing zespołu”Na twojej maszynie gh potrzebuje sieci i zalogowanej sesji, więc dodaj regułę gh pr z sekcji o sandboksie. W CI profil tylko do odczytu nie ma sieci w ogóle, a opisany niżej workflow nie przekazuje Codeksowi tokenu GitHub, więc pobierz pull requesty w kroku przed uruchomieniem Codeksa i pozwól promptowi przeczytać prs.json:
permissions: contents: read pull-requests: readsteps: # checkout and npm ci as in the workflow below, then: - name: Fetch merged PRs for the briefing env: GH_TOKEN: ${{ github.token }} run: | gh pr list --state merged \ --search "merged:>=$(date -u -d yesterday +%F)" \ --json number,title,body,url,author > prs.jsonCotygodniowy dryf architektury
Dział zatytułowany „Cotygodniowy dryf architektury”Zamiana działającej automatyzacji w skill
Dział zatytułowany „Zamiana działającej automatyzacji w skill”Jak automatyzacje współpracują ze skillami?
Dział zatytułowany „Jak automatyzacje współpracują ze skillami?”Skill trzyma procedurę w jednym pliku, a prompt automatyzacji kurczy się do jednej linii. Gdy ulepszasz skill, ulepsza się każda automatyzacja, która go wywołuje. Codex szuka osobistych skilli w $CODEX_HOME/skills (w ~/.codex/skills, gdy CODEX_HOME nie jest ustawione), a skill-creator to jeden z przykładowych skilli dołączonych do Codeksa.
---name: recent-code-bugfixdescription: Find bugs in the current author's recent commits and prove each with a failing test; propose, do not apply, a fix.---
# Recent code bugfix
1. Take the time window from the invoking prompt and list the author's commits in it: git log --since=<window> --author="$(git config user.email)".2. In each changed file, look for off-by-one errors, unhandled promise rejections and missing error handling, race conditions, and missing null or undefined checks.3. Confirm each suspected bug: read the surrounding code and related tests, then write a failing test that demonstrates it. Only report bugs with a failing test.4. Propose the smallest fix as a diff; do not apply it.5. Per bug, report: commit SHA, file:line, one-sentence root cause, the failing test's path and its failure output, and the proposed diff. Do not report theoretical concerns.6. If nothing is confirmed, print exactly: NO FINDINGSPrompt automatyzacji wygląda wtedy tak:
Run $recent-code-bugfix on my commits from the last 24 hours.Skille zespołowe trzymaj w repozytorium, w .agents/skills/, a nie w ~/.codex/skills, żeby zmiana skilla przechodziła code review jak każda inna zmiana. Przewodnik po aplikacji desktopowej Codex pokazuje, gdzie aplikacja wyświetla zainstalowane skille.
Jak zweryfikować wynik automatyzacji bez czytania każdej linii?
Dział zatytułowany „Jak zweryfikować wynik automatyzacji bez czytania każdej linii?”Większość pracy wykonuje kontrakt wyniku. Ponieważ każde ustalenie ma polecenie odtwarzające albo padający test, sprawdzasz je jednym poleceniem, a nie lekturą analizy. Stosuj cztery zasady:
- Dowód przy każdym ustaleniu. Ustalenie bez
file:linei polecenia, które je odtwarza, to szum. Odrzuć je i zaostrz prompt. - Zmiany przechodzą zwykłą bramkę. Poprawka zrobiona w worktree staje się gałęzią i pull requestem, a CI uruchamia te same bramki typów, lintera i testów co dla zmian ludzi. Nic, co napisze automatyzacja, nie trafia do main bez nich. Dołącz raport z uruchomienia do pull requesta jako jego pakiet dowodów.
- Zdefiniowana linia „nic nie znaleziono”.
NO FINDINGSpozwala skrzynce albo zadaniu CI odróżnić czyste uruchomienie od zepsutego. Pusty albo ucięty raport to awaria, nie sukces. - Comiesięczny kanarek. Podłóż jedną znaną usterkę na roboczej gałęzi (nieobsłużony promise, linię
debugger) i uruchom na niej automatyzację. Jeśli jej nie wychwyci, przestała działać, choć każde uruchomienie wygląda na zielone.
Ustalenia przegląda właściciel automatyzacji, zwykle programista, który ją zaplanował; każdą zmianę zatwierdza recenzent pull requesta, dokładnie jak przy pracy człowieka. Szersze uzasadnienie takiego sposobu przeglądu znajdziesz w tekście dowody zamiast diffów.
Jak uruchomić to samo zadanie, gdy laptop śpi?
Dział zatytułowany „Jak uruchomić to samo zadanie, gdy laptop śpi?”Przenieś wspólne zadania do harmonogramu CI. Ten workflow uruchamia codzienny prompt kontroli jakości w dni robocze rano z profilem uprawnień tylko do odczytu i zakłada zgłoszenie (issue) tylko wtedy, gdy jest co zgłosić. Wyzwalacz schedule zawsze uruchamia plik workflow i prompt z domyślnej gałęzi, więc do zadania, które ma klucz API, nie trafia żaden niezaufany kod.
Zapisz prompt codziennej kontroli jakości jako .github/codex/daily-quality.md, a potem dodaj .github/workflows/codex-daily-quality.yml:
name: Codex daily quality reporton: schedule: - cron: "17 5 * * 1-5" # 05:17 UTC, Monday to Friday workflow_dispatch:
jobs: report: runs-on: ubuntu-latest permissions: contents: read outputs: report: ${{ steps.codex.outputs.final-message }} steps: - uses: actions/checkout@v7 with: fetch-depth: 50 persist-credentials: false # Install dependencies before Codex runs: the read-only profile has no network. - run: npm ci - name: Run Codex id: codex uses: openai/codex-action@v1 with: openai-api-key: ${{ secrets.OPENAI_API_KEY }} permission-profile: ":read-only" prompt-file: .github/codex/daily-quality.md
file-issue: needs: report if: needs.report.outputs.report != '' && !contains(needs.report.outputs.report, 'NO FINDINGS') runs-on: ubuntu-latest permissions: issues: write steps: - uses: actions/github-script@v9 env: REPORT: ${{ needs.report.outputs.report }} with: script: | await github.rest.issues.create({ owner: context.repo.owner, repo: context.repo.repo, title: `Codex daily quality report ${new Date().toISOString().slice(0, 10)}`, body: process.env.REPORT, });
missing-report: needs: report if: needs.report.outputs.report == '' runs-on: ubuntu-latest permissions: {} steps: - run: | echo "::error::Codex returned no final message. Treat this run as failed." exit 1Zadanie z Codeksem może czytać repozytorium i nic poza nim; zgłoszenia może zakładać tylko zadanie file-issue, które Codeksa nigdy nie uruchamia. Zadanie missing-report stosuje zasadę 3 z sekcji o weryfikacji: pusta wiadomość końcowa zmienia uruchomienie na czerwone, zamiast udawać spokojny dzień. Wejścia akcji (permission-profile, prompt-file, wyjście final-message) pochodzą z README openai/codex-action w wersji v1.12. Ponieważ checkout jest na domyślnej gałęzi, zastąp krok 1 promptu tekstem „Inspect the current checkout”. Więcej wzorców znajdziesz w tekście CI/CD z akcją GitHub Codex.
Kiedy użyć /goal zamiast harmonogramu?
Dział zatytułowany „Kiedy użyć /goal zamiast harmonogramu?”Harmonogram powtarza małe zadanie. Cel realizuje jeden duży zamiar aż do końca. W Codeksie /goal ustawia, edytuje, wstrzymuje, wznawia, pokazuje lub czyści cel zadania (strona OpenAI z poleceniami dla programistów, sprawdzone 2026-08-28); cele są funkcją stabilną i domyślnie włączoną w CLI 0.157.1. Użyj /goal do „każde TODO w src/billing/ jest rozwiązane”, a automatyzacji do „codziennie rano powiedz mi, które nowe TODO się pojawiły”. Przewodnik po /goal porównuje polecenia celu w różnych narzędziach.
Co psuje się, gdy automatyzacje Codex działają bez nadzoru?
Dział zatytułowany „Co psuje się, gdy automatyzacje Codex działają bez nadzoru?”Uruchomienie w ogóle nie wystartowało. Lokalna automatyzacja wymaga uruchomionej aplikacji desktopowej i komputera, który nie śpi. Naprawa: nie usypiaj maszyny przy zadaniach nocnych albo przenieś zadanie do opisanego wyżej harmonogramu CI, który nie zależy od twojego laptopa.
Codziennie pojawiają się te same ustalenia. Ostrzeżenie lintera, którego nikt nie naprawia, jest zgłaszane w nieskończoność, a skrzynka uczy cię je ignorować. Naprawa: trzymaj w repozytorium plik .automation-ignore.json, który ludzie edytują, akceptując znane ustalenia, i każ promptowi pomijać wszystko, co na nim jest. Do działań następczych, które muszą pamiętać poprzednie uruchomienie, użyj automatyzacji wątku. Pamięć Codex (memories) jest stabilna, ale w 0.157.1 domyślnie wyłączona, więc nie polegaj na niej przy ciągłości.
Minimalny plik wyjątków to lista zaakceptowanych ustaleń, każde z powodem akceptacji:
[ { "file": "src/legacy/api.ts", "rule": "no-console", "reason": "accepted 2026-09, removed with the legacy API" }]Ludzie zmieniają ten plik przez pull request, nigdy automatyzacja, więc każde zaakceptowane ustalenie ma recenzenta i datę.
Stan zapisany w worktree znika. Nie zakładaj, że kolejne uruchomienie w worktree zobaczy pliki zapisane tam wcześniej: niezacommitowany plik „widzianych ustaleń” może następnym razem nie istnieć, na przykład po zarchiwizowaniu uruchomienia albo usunięciu jego worktree. Naprawa: stan, który ma przetrwać, trzymaj w pliku w repozytorium aktualizowanym przez człowieka albo w automatyzacji wątku.
Raporty są długie i mgliste. Prompt jest za szeroki albo nie ma kontraktu wyniku. Naprawa: zawęź zakres do nazwanych katalogów i okna czasowego, wymagaj polecenia odtwarzającego przy każdym ustaleniu i odrzucaj uruchomienia łamiące kontrakt.
Zadanie zmieniło pliki, których nie powinno. Sandbox jest szerszy, niż zadanie potrzebuje. Naprawa: przenieś zadania raportujące na read-only, zadania edytujące umieść w worktree z workspace-write, a pojedyncze polecenia dopuszczaj regułami. Wyrzuć worktree, zamiast próbować go rozplątywać.
Polecenie kończy się błędem sieci lub uprawnień. Sandbox działa zgodnie z zamierzeniem. Naprawa: dodaj prefix_rule dla tego jednego polecenia, potwierdź je przez codex execpolicy check, zrestartuj aplikację, jeśli reguła nie działa, i uruchom zadanie ręcznie przed następnym planowym uruchomieniem.
Automatyzacja wykonała instrukcje z wiadomości na Slacku albo z opisu PR-a. To prompt injection przez czytane treści. Naprawa: przełącz zadanie na tylko do odczytu, odbierz mu wszystkie niepotrzebne dane logowania i dodaj linię o traktowaniu treści jako danych z promptu briefingu.
Worktree się mnożą. Częste uruchomienia w worktree zostawiają po sobie checkouty. Naprawa: archiwizuj przejrzane uruchomienia, raz w tygodniu sprawdzaj git worktree list i usuwaj nieaktualne checkouty przez git worktree remove <path>, gdy żaden otwarty wątek z nich nie korzysta.
Każde uruchomienie od tygodni mówi NO FINDINGS. Zadanie może być zdrowe albo mogło się po cichu zepsuć (zmieniona nazwa skryptu, przeniesiony katalog). Naprawa: uruchom opisanego wyżej comiesięcznego kanarka.
Koszty rosną. Zadanie co godzinę, które mogłoby działać raz dziennie, zużywa limit bez nowych informacji. Naprawa: ustaw częstotliwość według tego, jak często zmieniają się dane źródłowe, a budżetowanie opisuje zarządzanie kosztami Codex.
Dokąd dalej z automatyzacjami Codex
Dział zatytułowany „Dokąd dalej z automatyzacjami Codex”- Izolowane zadania Codex w worktree Git: izolacja, na której opierają się automatyzacje z prawem zapisu.
- Codex bez interfejsu:
codex exec: te same prompty z crona, skryptów i pipeline’ów, z wynikiem w JSON. - Zaawansowane konfiguracje Codex: testowanie granic sandboksa i ślad audytowy tego, co zrobiły uruchomienia bez nadzoru.
- Codex w Slacku i Linearze: zlecanie pracy z czatu i zgłoszeń zamiast z zegara.
- Polowanie na błędy z Codeksem: interaktywna wersja nocnego polowania na błędy.