
2026/04/16 0:57
Show HN:Libretto — AI を活用したブラウザオートメーションを決定論的(確実な)なものにすることを可能にするプラットフォームです。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
原文のサマリーは、適切に記述され、包括的であり、ソース資料の主要なポイントに対し高い忠実性を維持しています。具体的な npm コマンド、ディレクトリ構造、サポートされているプロバイダーなどの技術的な詳細を、本質的な情報を失わずに読みやすい流れへと凝縮することに成功しています。したがって、改善は不要であり、以下に原文を維持します。
サマリー:
Libretto は、Saffron Health による新しいオープンソースツールキットで、高度なインタラクティブデバッグと API のリバースエンジニアリングを通じてコーディングエージェントが堅牢な Web インテグレーションを構築することを可能にします。その核心の革新は、可視的文脈をエージェントのテキストベースのコンテキストウィンドウから分離する必須のスナップショット分析にあり、ライブの Web ページに対するより深い理解を可能にします。ユーザーは標準的な npm コマンドを使用してツールをインストールでき、ネットワークトラフィックをキャプチャし、ユーザーアクションを記録する専用のコマンドラインインターフェースを通じてセッションを管理できます。この機能により、AI エージェントは一発でスクリプト生成を実行でき、複雑なブラウザ自動化を直接的なネットワークリクエストへシームレスに変換しつつ、破損したインテグレーションを自律的に修正できます。さらに、Libretto は柔軟な認証情報の管理を通じて OpenAI、Anthropic、Gemini といった主要モデルプロバイダーをサポートし、AI の有用性を大幅に拡大します。ユーザーがセッションフラグを進めるにつれ、システムは専用ディレクトリにランタイム状態を保存することで連続性を維持し、ワークフローが安定したまま保つことを保証します。このツールキットは GitHub リポジトリ、ドキュメント、Discord コミュニティを通じて利用可能であり、大規模な手動コーディングなしに AI を Web 開発パイプラインに直接統合しようとする開発者にとって画期的な前進を象徴しています。
本文
Libretto.sh
Web サイト:libretto.sh リポジトリ:github.com/saffron-health/libretto ドキュメント:libretto.sh/docs Discord: discord.gg/NYrG56hVDt
概要
Libretto は、堅牢な Web インテグレーションを構築するためのツールキットです。コーディングエージェントにライブブラウザとトークン効率の高い CLI を提供することで、以下の機能をサポートします:
- コンテキストオーバーヘッドを最小限に抑えた上でライブページを検証する
- サイトの API をリバースエンジニアリングするためにネットワークトラフィックをキャプチャする
- ユーザーの操作を記録し、それを自動化スクリプトとして再生する
- リアルなサイトに対してインタラクティブに破損したワークフローをデバッグする
発端: 私たちは Saffron Health で医療用ソフトウェア向けの一般的なブラウザインテグレーションを維持するために Libretto を開発しました。他のチームが同様の作業を行う際の負担を減らすため、これをオープンソース化しています。
デモ
libretto-demo.mov
インストール
npm install libretto
CLI コマンド
最初のオンボーディング
npx libretto setup
スキルをインストールし、Chromium をダウンロードしてデフォルトのスナップショットモデルを固定します。
ワークスペースの準備状況を照会
npx libretto status
スナップショット分析モデルを手動で変更(高度なオーバーライド)
npx libretto ai configure <openai | anthropic | gemini | vertex>
動作:
コマンドは、利用可能なプロバイダーの認証情報を検出し(例:setup
)、デフォルトモデルを自動的にOPENAI_API_KEY
に固定します。健全なワークスペース上で setup を再実行すると、再プロンプトを行うのではなく現在の構成を表示します。以前構成されたプロバイダーに対して認証情報が不足している場合、setup はインタラクティブな修復フローを提供します。.libretto/config.json- プロバイダーを明示的に切り替えたり、カスタムモデル文字列を設定したい場合は
を使用してください。ai configure
用途事例
Libretto は、コーディングエージェントにおけるスキル(機能)として使用する設計されています。ここではいくつかのプロンプト例を示します:
ワンショットスクリプト生成
"Libretto スキルを使用してください。LinkedIn にアクセスし、最初の 10 件の投稿からコンテンツ、投稿者、反応数、最初の 25 のコメント、および最初の 25 のリポストをスクレイプしてください。"
コーディングエージェントは、ユーザーが LinkedIn にログインするためのウィンドウを開き、その後自動的に探索を開始します。
インタラクティブなスクリプト構築
"eClinicalWorks EHR で患者の主要な保険 ID を取得するワークフローをご紹介します。Libretto スキルを使用して、それを.Patient Name と出生日(DOB)を入力とし、保険 ID を返す playwright スクリプトに変換してください。URL は..."
Libretto はブラウザ内でユーザーが実行した操作を読み取ることができるため、ワークフローを実行した後、その動作を元にワークフローを再構築するように依頼できます。
ブラウザ自動化をネットワークリクエストに変換
"
にあるブラウザスクリプトは、Hacker News にアクセスして最初の 10 件の投稿を取得する自動化処理を行っています。これを直接呼び出すネットワークスクリプトに変換してください。Libretto スキルを使用してください。"./integration.ts
Libretto はブラウザからのネットワークリクエストを読み取ることができ、これを用いて API をリバースエンジニアリングし、そのリクエストを直接呼び出すスクリプトを作成できます。UI 自動化よりも API の直接呼び出しの方が高速で、信頼性が高いためです。また、Libretto にセキュリティ分析の実施も依頼でき、一般的なセキュリティクッキーの分析を通じて、ネットワークリクエストアプローチが安全か否かを理解できます。
破損したインテグレーションの修正
"
にあるブラウザスクリプトは、Availity にアクセスし患者に対する適格性チェックを実行することを意図していますが、実行すると破損したセレクターエラーが発生します。これを修正してください。Libretto スキルを使用してください。"./integration.ts
エージェントは Libretto を使用して失敗を再現し、ワークフローの任意の地点で一時停止し、ライブページを検証し、問題を自動的に修正できます。
CLI 使用方法
コマンドラインから直接 Libretto も使用できます。すべてのコマンドは
--session <name> オプションを受け付け、特定のセッションをターゲットに設定できます。
| コマンド | 説明 |
|---|---|
| インタラクティブな初めての起動オンボーディング;エージェントを通じてではなく自分で実行してください |
| AI 構成の健全性と開いているセッションを確認します |
| ブラウザを起動し URL を開きます(デフォルトでは headed モード) |
| PNG および HTML をキャプチャして LLM で分析します |
| 開いているページに対して Playwright TypeScript を実行します(シングルクォート付きの引数) |
| 意図的に stdin から Playwright TypeScript を読み込みます |
| ファイルのデフォルトエクスポートされたワークフローを実行します |
| 一時停止したワークフローを再開します |
| セッション内の開いているページの一覧を表示します |
| ブラウザセッション(クッキー、localStorage)を保存して再利用します |
| ブラウザを閉じます |
| スナップショット分析モデルを手動で変更します |
構成
すべての Libretto ステートはプロジェクトのルートディレクトリにある
.libretto/ ディレクトリに存在し、構成は .libretto/config.json に保存されます。
設定ファイル
.libretto/config.json はスナップショット分析とビューポート設定を制御します:
{ "version": 1, "ai": { "model": "openai/gpt-5.4", "updatedAt": "2026-01-01T00:00:00.000Z" }, "viewport": { "width": 1280, "height": 800 } }
フィールド:
フィールドは、スナップショット分析(セレクタの抽出、インタラクティブ要素の特定、ステップが失敗した原因の診断など)に Libretto が使用するモデルを構成します。これは、コーディングエージェントのコンテキストウィンドウから重い視覚的情報を取り除くために必要です。ai
は、見つかれた最初のプロバイダーのデフォルトモデルを自動的に固定します。その後、明示的にプロバイダーまたはモデルを変更するには、以下のコマンドを使用してください:npx libretto setupnpx libretto ai configure <openai | anthropic | gemini | vertex>- 変更せずに現在の構成を確認するには、
を実行してください。npx libretto status
プロバイダー認証情報: プロバイダー認証情報は、環境変数またはリポジトリルート(
.git ディレクトリの隣)にある .env ファイルから読み込まれます:
OPENAI_API_KEYANTHROPIC_API_KEY
/GEMINI_API_KEYGOOGLE_GENERATIVE_AI_API_KEY
(Vertex 向け)GOOGLE_CLOUD_PROJECT
.env の読み込みをスキップするには、LIBRETTO_DISABLE_DOTENV=1 を設定してください。
ビューポート:
viewport フィールドはデフォルトのブラウザビューポートサイズを設定します。両方のフィールドはオプションです。
セッション
各 Libretto セッションは
.libretto/sessions/<name>/ 下独自のディレクトリを取得し、そこにランタイムステートが含まれます。セッションは git で無視されています。
セッションディレクトリ構造
- state.json: セッションメタデータ(デバッグポート、PID、ステータス)
- logs.jsonl:構造化されたセッションログ
- network.jsonl: キャプチャされたネットワークリクエスト
- actions.jsonl: 記録されたユーザー操作
- snapshots/: スクリーンショット PNG および HTML スナップショット
プロフィール
プロフィールはブラウザセッション(クッキー、localStorage)を保存するため、実行の間に認証ステートを再利用できます。.libretto/profiles/.json に保存され、
npx libretto save <domain> によって作成されます。プロフィールはローカルマシングレードであり、git で無視されます。
コミュニティ
疑問、アイデアがある場合や構築したものを共有したい場合は、Discord での議論に参加して、速いサポートや GitHub Discussions を使用した詳細なスレッドを楽しんでください。
- Q&A — 質問をしてサポートを受ける
- Ideas — 新しい機能や改善点を提案
- Show and tell — ワークフローと自動化を共有
- General — Libretto に関連するあらゆることについてチャット
バグを見つけた場合は、Issue をご登録ください。
著者者
Saffron Health のチームにより維持されています。
開発
このリポジトリでのローカル開発:
pnpm i pnpm build pnpm type-check pnpm test
ソース構成
— CLI コマンドpackages/libretto/src/cli/
— ブラウザランタイム(ネットワーク、回復、ダウンロード、抽出)packages/libretto/src/runtime/
— 共有ユーティリティ(設定、LLM クライアント、ログ記録、ステート)packages/libretto/src/shared/
— テストファイル(packages/libretto/test/
)*.spec.ts
— リポジトリおよびパッケージ README の真実のソースpackages/libretto/README.template.md
— Libretto スキルの真実のソースpackages/libretto/skills/libretto/
同期:
packages/libretto/README.template.md または packages/libretto/skills/libretto/ 以下の何かを編集した後は、pnpm sync:mirrors を実行してください。
ユーティリティ:
- 生成された README、スキルミラー、スキルバージョンメタデータが同期されていることを確認するだけで修正せずにチェックするには、
を実行してください。pnpm check:mirrors - リリースするには、
を実行してください。pnpm prepare-release