Przedstawiamy Showboata i Rodneya, aby agenci mogli zaprezentować to, co zbudowali

Przedstawiamy Showboata i Rodneya, aby agenci mogli zaprezentować to, co zbudowali


Przedstawiamy Showboata i Rodneya, aby agenci mogli zaprezentować to, co zbudowali

10 lutego 2026 r

Kluczowym wyzwaniem w pracy z agentami zajmującymi się kodowaniem jest to, aby obaj przetestowali to, co zbudowali, i zademonstrowali to oprogramowanie Tobie, swojemu nadzorcy. Wykracza to poza testy automatyczne — potrzebujemy artefaktów, które pokazują ich postęp i pomagają nam dokładnie zobaczyć, co potrafi oprogramowanie stworzone przez agenta. Właśnie wypuściłem dwa nowe narzędzia mające na celu rozwiązanie tego problemu: Showboat i Rodney.

Sprawdzanie, czy kod faktycznie działa

Niedawno pisałem o tym, że zadaniem inżyniera oprogramowania nie jest pisanie kodu, lecz jego działanie dostarczyć kod, który działa. W dużej mierze polega to na udowadnianiu sobie i innym, że kod, za który jesteśmy odpowiedzialni, działa zgodnie z oczekiwaniami.

Staje się to jeszcze ważniejsze i trudniejsze, gdy traktujemy agentów kodujących jako kluczową część naszego procesu tworzenia oprogramowania.

Im więcej kodu tworzymy za pomocą agentów, tym cenniejsze są narzędzia, które zmniejszają ilość czasu potrzebnego na ręczną kontrolę jakości.

Jedną z najciekawszych rzeczy w modelu fabryki oprogramowania StrongDM jest to, w jaki sposób zapewniają, że ich oprogramowanie jest dobrze przetestowane i zapewnia wartość pomimo swojej polityki mówiącej, że „kod nie może być przeglądany przez ludzi”. Część ich rozwiązania obejmuje kosztowne roje agentów kontroli jakości realizujących „scenariusze” w celu wykorzystania swojego oprogramowania. To fascynujące, ale nie chcę wydawać tysięcy dolarów na roboty kontroli jakości, jeśli mogę tego uniknąć!

Potrzebuję narzędzi, które pozwolą agentom jasno zademonstrować mi swoją pracę, minimalizując jednocześnie możliwość oszukiwania w związku z tym, co zrobili.

Showboat: agenci tworzą dokumenty, aby zaprezentować swoją pracę

Łódź pokazowa to narzędzie, które zbudowałem, aby pomóc agentom zademonstrować mi swoją pracę.

Jest to narzędzie CLI (plik binarny Go, opcjonalnie opakowany w Python, aby ułatwić instalację), które pomaga agentowi utworzyć dokument Markdown demonstrujący dokładnie, co potrafi jego nowo opracowany kod.

Nie jest przeznaczony do uruchamiania przez ludzi, ale tak czy inaczej można go uruchomić:

showboat init demo.md 'How to use curl and jq'
showboat note demo.md "Here's how to use curl and jq together."
showboat exec demo.md bash 'curl -s https://api.github.com/repos/simonw/rodney | jq .description'
showboat note demo.md 'And the curl logo, to demonstrate the image command:'
showboat image demo.md 'curl -o curl-logo.png https://curl.se/logo/curl-logo.png && echo curl-logo.png'

Oto jak wygląda wynik, jeśli otworzysz go w VS Code i wyświetlisz podgląd Markdown:

Zrzut ekranu przedstawiający plik Markdown "demo.md" obok siebie z wyrenderowanym podglądem. Źródło Markdown (po lewej) pokazuje: "# Jak używać curl i jq"kursywa, znacznik czasu "2026-02-10T01:12:30Z"proza "Oto jak używać razem curl i jq."blok kodu bash z "curl -s https://api.github.com/repos/simonw/rodney | jq.opis"blok wyjściowy pokazujący „"Narzędzie CLI do interakcji z siecią"', tekst "I logo curl, aby zademonstrować polecenie obrazu:"blok kodu bash {image} z "curl -o curl-logo.png https://curl.se/logo/curl-logo.png && echo curl-logo.png"i odniesienie do obrazu Markdown "2056e48f-2026-02-10". Wyrenderowany podgląd (po prawej) wyświetla sformatowany nagłówek, sygnaturę czasową, prozę, stylizowane bloki kodu i obraz logo zawiniętego w kolorze ciemnoturkusowym "kędzior://" z elementami w stylu obwodów.

Oto plik demo.md w skrócie.

Zatem sekwencja showboat init, showboat note, showboat exec I showboat image Commands tworzy dokument Markdown po jednej sekcji na raz, z wynikami tychże exec polecenia automatycznie dodawane do dokumentu bezpośrednio po uruchomionych poleceniach.

The image polecenie jest trochę specjalne — szuka ścieżki pliku do obrazu w wynikach polecenia, kopiuje ten obraz do bieżącego folderu i odwołuje się do niego w pliku.

To w zasadzie całość! Jest pop polecenie usunięcia ostatnio dodanej sekcji, jeśli coś pójdzie nie tak, a verify polecenie ponownego uruchomienia dokumentu i sprawdzenia, czy nic się nie zmieniło (nie jestem do końca przekonany co do projektu tego dokumentu) i extract polecenie, które odtwarza polecenia CLI użyte do utworzenia dokumentu.

To całkiem proste — tylko 172 linijki Go.

Spakowałem go za pomocą mojego narzędzia „przejdź do koła”, co oznacza, że ​​możesz go uruchomić nawet bez wcześniejszej instalacji, w ten sposób:

To --help polecenie jest naprawdę ważne: ma na celu zapewnienie agentowi kodującemu wszystko, co musi wiedzieć aby móc korzystać z narzędzia. Oto cały tekst pomocy.

Oznacza to, że możesz otworzyć Claude Code i powiedzieć mu:

Run "uvx showboat --help" and then use showboat to create a demo.md document describing the feature you just built

I tyle! The --help tekst działa trochę jak Umiejętność. Twój agent może przeczytać tekst pomocy i wykorzystać każdą funkcję Showboat, aby utworzyć dokument demonstrujący wszystko, czego potrzebujesz.

Oto zabawna sztuczka: jeśli ustawisz Claude’a na tworzenie dokumentu Showboat, możesz go otworzyć w VS Code i oglądać aktualizację okienka podglądu w czasie rzeczywistym, gdy agent przegląda wersję demonstracyjną. To trochę tak, jakby Twój współpracownik opowiadał Ci o swojej najnowszej pracy podczas sesji udostępniania ekranu.

I na koniec kilka przykładów. Oto dokumenty, które Claude stworzył za pomocą Showboat, aby pomóc zademonstrować funkcje, nad którymi pracowałem w innych projektach:

Używam Showboat na tyle często, że przekonałem się o jego użyteczności.

(Widziałem też, jak agenci oszukują! Ponieważ plik demonstracyjny to Markdown, agent czasami edytuje ten plik bezpośrednio, zamiast używać Showboat, co może skutkować wynikami poleceń, które nie odzwierciedlają tego, co faktycznie się wydarzyło. Oto problem z tym związany.)

Rodney: Automatyzacja przeglądarki CLI zaprojektowana do współpracy z Showboat

Wiele projektów, nad którymi pracuję, obejmuje interfejsy internetowe. Agenci często tworzą dla nich zupełnie nowe strony i chcę zobaczyć te reprezentowane w demonstracjach.

Funkcja obrazu Showboat została zaprojektowana, aby umożliwić agentom przechwytywanie zrzutów ekranu w ramach ich demonstracji, pierwotnie przy użyciu mojego narzędzia do skrobania ujęć lub Playwright.

Format Showboat korzysta z narzędzi CLI. Szukałem dobrych opcji zarządzania wieloobrotową sesją przeglądarki z poziomu CLI i nie udało mi się, więc zdecydowałem się spróbować zbudować coś nowego.

Claude Opus 4.6 wskazał mi bibliotekę Rod Go do interakcji z protokołem Chrome DevTools. To fantastyczne — zapewnia kompleksowe omówienie praktycznie wszystkiego, co można zrobić w zautomatyzowanej przeglądarce Chrome, a wszystko to w samodzielnej bibliotece, która kompiluje się do kilku MB.

Jedyne, czego Rodowi brakowało, to CLI.

Pierwszą wersję zbudowałem jako prototyp raportu asynchronicznego, co utwierdziło mnie w przekonaniu, że warto rozkręcić go pod własny projekt.

Nazwałem go Rodney jako ukłon w stronę biblioteki Rod, na której się opiera, oraz jako nawiązanie do Only Fools and Horses – a także dlatego, że nazwa pakietu była dostępna w PyPI.

Możesz uruchomić Rodneya za pomocą uvx rodney lub zainstaluj w ten sposób:

(Lub pobierz plik binarny Go ze strony wydań.)

Oto prosta przykładowa sesja:

rodney start # starts Chrome in the background
rodney open https://datasette.io/
rodney js 'Array.from(document.links).map(el => el.href).slice(0, 5)'
rodney click 'a(href="https://simonwillison.net/for")'
rodney js location.href
rodney js document.title
rodney screenshot datasette-for-page.png
rodney stop

Oto jak to wygląda w terminalu:

;~ % rodney start Chrome uruchomiono (PID 91462) Adres URL debugowania: ws://127.0.0.1:64623/devtools/browser/cac6988e-8153-483b-80b9-1b75c611868d ~ % rodney open https://datasette.io/ Datasette: narzędzie wielofunkcyjne typu open source do eksplorowania i publikowania danych ~ % rodney js 'Array.from(document.links).map(el => el.href).slice(0, 5)’ ( "https://datasette.io/for", "https://docs.datasette.io/en/stable/", "https://datasette.io/tutorials", "https://datasette.io/examples", "https://datasette.io/plugins" ) ~ % rodney kliknij „a(href="/Do")’ Kliknięto ~ % rodney jslocation.href https://datasette.io/for ~ % rodney js document.title Przypadki użycia Datasette ~ % rodney zrzut ekranu datasette-for-page.png datasette-for-page.png ~ % rodney stop Chrome zatrzymany” src=”https://static.simonwillison.net/static/2026/rodney-demo.jpg” style=”max-width: 100%;”/></p>
<p>Podobnie jak w przypadku Showboat, to narzędzie nie jest przeznaczone do użytku przez ludzi! Celem jest umożliwienie działania agentów kodujących <code>rodney --help</code> i zobacz wszystko, co muszą wiedzieć, aby rozpocząć korzystanie z narzędzia. Możesz zobaczyć wyniki pomocy w repozytorium GitHub.</p>
<p>Oto trzy demonstracje Rodneya, które stworzyłem za pomocą Showboat:</p>
<h4 id=Rozwój oparty na testach pomaga, ale nadal potrzebujemy testów ręcznych

Po tym, jak przez całą karierę byłem sceptyczny wobec szkoły tworzenia oprogramowania skupiającej się na pierwszym teście i maksymalnym pokryciu testami (lubię zamiast tego testy obejmujące tworzenie oprogramowania), ostatnio zacząłem skupiać się na procesach opartych na pierwszym testowaniu, aby zmusić agentów do napisania tylko kodu niezbędnego do rozwiązania danego problemu.

Wiele moich sesji agenta kodującego w Pythonie zaczyna się w ten sam sposób:

Run the existing tests with "uv run pytest". Build using red/green TDD.

Poinformowanie agentów, jak przeprowadzać testy, może również służyć jako wskaźnik, że testy w tym projekcie istnieją i mają znaczenie. Agenci będą czytać istniejące testy przed napisaniem własnych, zatem posiadanie czystego zestawu testów z dobrymi wzorcami zwiększa prawdopodobieństwo, że sami napiszą dobre testy.

Wszystkie modele pionierskie rozumieją, że „czerwony/zielony TDD” oznacza, że ​​powinni najpierw napisać test, uruchomić go i obserwować, jak się nie powiedzie, a następnie napisać kod, aby go zaliczyć — jest to wygodny skrót.

Uważam, że znacznie zwiększa to jakość kodu i prawdopodobieństwo, że agent wygeneruje właściwą rzecz przy najmniejszej liczbie podpowiedzi.

Ale każdy, kto pracował z testami, będzie wiedział, że to, że pomyślnie przeszły testy automatyczne, nie oznacza, że ​​oprogramowanie faktycznie działa! Taka jest motywacja stojąca za Showboat i Rodney – nigdy nie ufam żadnej funkcji, dopóki nie zobaczę jej na własne oczy.

Przed zbudowaniem Showboat często dodawałem „ręczny” etap testowania do sesji agenta, na przykład:

Once the tests pass, start a development server and exercise the new feature using curl

Obydwa narzędzia zbudowałem na swoim telefonie

Zarówno Showboat, jak i Rodney zaczynali jako Claude Code w projektach internetowych tworzonych za pośrednictwem aplikacji Claude na iPhone’a. Większość trwających dla nich prac fabularnych przebiegała w ten sam sposób.

Nadal jestem trochę zaskoczony, ile pracy związanej z kodowaniem wykonuję teraz na telefonie, ale szacuję, że większość kodu, który obecnie wysyłam do GitHuba, została napisana dla mnie przez agentów kodujących korzystających z tej aplikacji na iPhone’a.

Początkowo zaprojektowałem te dwa narzędzia do użytku w środowiskach asynchronicznych agentów kodowania, takich jak Claude Code dla Internetu. Jak na razie sprawdza się to naprawdę dobrze.



Source link

Postagens Similares

  • Elixir/Phoenix Liveview était une erreur

    J’ai pris une décision technique coûteuse concernant Phoenix Liveview pour l’application Web Smol Talk il y a environ un an, que je regrette maintenant, et je prends quelques notes pour expliquer pourquoi. Pour être clair, il s’agit certainement d’un problème de compétences, mais la courbe d’apprentissage n’en valait tout simplement pas la peine (pour quelqu’un…

  • Poza mądrością

    Październik 2021 Gdybyś zapytał ludzi, co jest specjalnego w Einsteinie, większość odpowiedziałaby, że był naprawdę mądry. Nawet ci, którzy próbowali udzielić Ci bardziej wyrafinowanej odpowiedzi, prawdopodobnie pomyśleliby o tym jako pierwsi. Jeszcze kilka lat temu sam udzieliłbym tej samej odpowiedzi. Ale nie to było wyjątkowe w Einsteinie. To, co go wyróżniało, to to, że miał…

  • Gracias por ser un amigo

    Ha sido uno de esos meses, y con eso me refiero a uno de los 663 meses desde que nací. Este no será un post largo porque sólo tengo dos cosas que decir. En primer lugar, me alegra mucho que hayamos reordenado los condados de estudio rural de GMI (Ingreso Mínimo Garantizado) para que el…

  • 2 つのこと…選挙と私たちの戦略について。

    二元論的思考を避ける私たちは皆、二元論を崇拝する罠にはまらないほうが良いことを知っています。もちろん、それが常に真実であるとは限りません。完全に優れたバイナリが存在します。しかし、多くの人が陥っている一種の二元論的思考があり、二元論的思考とは認識されていないものの、実際には二元論的思考であり、政治に対する私たちの集団的な理解を傷つける可能性があります。 ここでは、競合する 2 つの代替ステートメントを示します。 1 つは真ですが、もう 1 つは真ではありません (おい、バイナリの 1 つが存在する!): 2016 年の世論調査は最悪でしたが、2020 年の世論調査は良好でした。 2016年の世論調査はまあまあでしたが、2020年の世論調査は最悪でした。 ほとんどの人は2016年のトランプ勝利の衝撃と恐怖を覚えており、その年の世論調査が悪かったと主張する人は非常に多い。一方、2020年の世論調査はバイデンの勝利を示唆しているように見え、バイデンの勝利もあったため、2020年の世論調査は問題ありませんでした。 これは悪質な虚偽であり、この種の虚偽は誤った二元論的思考に基づいています。この場合の二項対立は、誰が選挙に勝って誰が負けるかです(私たちの候補者が勝ったか、私たちの候補者が負けたか)。このバイナリは、非常に重要な数字と、勝敗の基礎となる数字の変化を無視します。 ここにいくつかのデータがあります: 残りはここで読んでください。 今年の画期的な小説を読んだことがありますか?それが終わったら、次のことを試してください。 スングドゴを求めて グレッグ・ラディン著、現在は Kindle にあります またはペーパーバック *ご注意ください: このページや Greg Ladens のブログの他の場所にある書籍やその他のアイテムへのリンクからは、私が登録アフィリエイトである Amazon に移動する場合があります。 Amazon アソシエイトとして、私は対象商品を購入することで収入を得ており、このサイトの資金調達に役立っています。 このような: のように 読み込み中… Source link

  • Pengaturan Mac Baru 2025 Saya

    Saya menyiapkan Macbook Pro baru saya (14 inci, 2024 M4 Pro 24 GB RAM 500GB HD) hari ini (saya merekomendasikan lebih banyak memori tetapi ini bukan pilihan saya). Ini semua yang saya gunakan di Mac. Versi sebelumnya dari postingan ini: dari 2018-2020, 2021, 2022 dan 2023 dan 2024. Jika saya memperbarui postingan ini di masa…

  • Fasulye Makinesi Retrospektif, bölüm 9

    C#, F#, Scala ve benzerlerinden farklı olarak yerleşik herhangi bir kalıp eşleştirmesi olmayan bir dil olan Python’da kısa “örüntü eşleştirme” uygulamak istedim. Mantıksal olarak bir kalıp sadece bir yüklemdir: bir değer alan ve değer kalıpla “eşleşiyorsa” true, aksi takdirde false değerini döndüren bir işlev. Bu bölümün kodu burada. Bu işe başladığımda iki şeyin farkına vardım….

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *