プログラミング
Show HN: Pinrail – コーディングエージェントがレビューを待つデスクトップ受信トレイ
Show HN: Pinrail – A desktop inbox where coding agents wait for your review (github.com)
要約
Pinrailは、コーディングエージェントがアクションを起こす前にユーザーの確認を求めるデスクトップアプリケーションです。コードレビュー、画像生成、ドキュメント作成など、エージェントの提案内容に特化したインターフェースでレビューを行い、承認または却下を決定します。決定は構造化された形式でエージェントに返され、ローカルマシン上で完結するため、プライバシーも保護されます。現在macOSとLinuxで利用可能で、Windows対応も予定されています。
全文翻訳
Pinrail Webサイト · ダウンロード · ドキュメント · プラグイン
Pinrailは、コーディングエージェントがアクションを起こす前にあなたに尋ねるデスクトップアプリです。エージェントが提案した内容を専用のビューでレビューすると、エージェントはあなたの決定に従って続行します。Pinrailは、Claude Code、Codex、Cursor、OpenCodeなど、コマンドを実行できるあらゆるエージェントと連携します。macOSとLinuxで動作し、Windowsサポートも近日中に提供予定です。
Pinrailは開発の初期段階にあるため、荒削りな部分やリリース間の変更が予想されます。
なぜエージェントは作業を行うのが得意ですが、一部のステップには人が必要なのでしょうか?
あなたの名前でのコメント、顧客へのメール、本番環境への変更。
これらのステップをチャットで承認することは、大量のテキストを読み、返信を入力することを意味します。
Pinrailは、これらの各瞬間に適切なレビューを提供します。
エージェントはいつ尋ねるかを決定します。その指示は、あなたが必要とするステップを名前で指定するため、それらのステップでのみ尋ね、それ以外の場所では尋ねません。
各レビューには、その内容のために作られたビューがあります。
コードレビューは、エージェントの発見事項が示された差分を表示します。
生成された画像のセットは画像を表示し、変更したい部分にボックスを描画します。
あなたの決定は構造化されています。エージェントは、あなたが受け入れたもの、却下したもの、およびあなたのメモを、対応できるMarkdownまたはスクリプト用のJSONとして受け取ります。
すべてがあなたのマシン上に留まります。アプリはループバックインターフェースでのみAPIを提供し、レビューと決定をローカルに保持します。
仕組み
シーケンス図
参加者 A: あなたのエージェント
参加者 P: Pinrail
A->>P: pinrail submit code-review --data review.json --wait
注釈 A: 待機中
注釈 P: あなたがレビューして決定します
P->>A: あなたの決定
注釈 A: 続行します
ロード時
エージェントがあなたを必要とするステップに到達すると、レビューとともにpinrailコマンドを実行します。表示するプラグイン、タイトル、JSONペイロードを指定します。
pinrail submit code-review --title "Retry failed webhook deliveries" \
--data findings.json --wait
Pinrailがあなたに通知し、レビューはプロジェクトごとにグループ化されて受信トレイに表示されます。それを開き、プラグインのビューで決定します。このページの先頭にあるコードレビューでは、エージェントの各発見事項を受け入れるか却下するか、エージェントへのメモを記述します。レビューを渡すと、コマンドはあなたの決定を出力して終了し、エージェントは続行します。
r_01K5R2 · decided · Retry failed webhook deliveries code-review · decided by maya at 2026-09-23 10:14
- **#1 accepted** `src/deliver.ts:42` — The worker sleeps for up to 31 seconds per delivery (major) > Agreed. Re-enqueue with runAt = now + backoff(attempt)
- **#4 rejected** `src/log.ts:18` — The give-up log should say why (nit) > Fine as it is; the log already has the delivery id.
Undecided: #2, #3, #5
コマンドの終了コードは、レビューがどのように終了したかを示します。決定、中止指示付きで破棄、取り消し、または期限切れです。変更を要求すると、エージェントは新しいラウンドを提出し、アプリは以前のあなたの判断を横に表示します。
開始方法
ダウンロードページまたは最新リリースからアプリをインストールします。macOSでは、署名および公証済みです。最初に開くセットアップに従ってください。pinrailコマンドをインストールし、コンピュータで見つかったエージェントにPinrailのスキルを追加し、推奨プラグインをインストールします。
あなた自身の言葉で、エージェントに何かを依頼してください。
このリポジトリのTODOのうち、どれを最初に処理すべきかPinrail経由で教えてください。
または、あなたのプロジェクトでPinrailがどのように役立つかを尋ねてください。
このプロジェクトを見て、アクションを起こす前にPinrail経由で私に尋ねるべき場所を提案してください。
最初のレビューはこれをウォークスルーします。
エージェントを指示する は、エージェントがあなたが選んだステップで、毎回尋ねるようにする方法を示しています。
プラグイン
レビューの各種類はプラグインです。エージェントが送信するペイロード、あなたが返す決定、およびあなたが決定するビュー。
アプリには5つのコアプラグインが付属しています。
Plugin Review code-review
エージェントの提案されたレビューコメントの差分。各コメントは受け入れ、却下、または編集されます。
list
見出しの下にグループ化されたアイテム。各アイテムはメモとともに受け入れまたは却下されます。
feedback
一度のパスで回答される質問。選択肢、はい/いいえ、および自由テキスト。
markdown
ドキュメント。計画や仕様など。セクションごとに読み取り、コメントが付けられます。
image
選択肢のある生成画像。変更する部分にボックスとピンが付けられます。
forgeplane/pinrail-plugins のサンプルプラグインは、他のプラグインが何ができるかを示しています。これらは、HTMLページ、メール、カレンダー、ロゴ、カラーパレット、3Dモデル、アニメーション、オーディオ、ビデオ、デザインキャンバス、ビフォーアフター比較、トレードをカバーしています。各プラグインはzipファイルとしてリリースされ、アプリの設定 › プラグインにインストールします。
プラグインの作成
プラグインは、マニフェスト、2つのJSONスキーマ、およびHTMLビューで構成され、ビルドステップは不要です。
pinrail plugins new <name> はプラグインを作成し、プラグインSDKであるpinrail-sdkは、アプリなしでブラウザでビューを実行し、Playwrightでテストします。ビューはReact、Vue、Svelte、またはその他のフレームワークで構築することもできます。「プラグインの作成」を参照してください。
リポジトリディレクトリの内容
desktop/
アプリ:Rustコア(API、ストレージ、プラグイン)、Tauriシェル、React UI。
cli/
エージェントが実行するpinrailコマンド。
plugins/
コアプラグイン。
sdk/
プラグインSDK、開発シェル、テストハーネス。
skill/
エージェントにPinrailの使用方法を教えるスキル。
e2e/
CLIとアプリのUIのヘッドレスコアに対するエンドツーエンドテスト。
docs/
ウェブサイトで公開されるドキュメント。
website/
ウェブサイト。
開発
Nodeはmise.tomlでピン留めされており、mise installがセットアップします。Rustはrust-toolchain.tomlでピン留めされており、rustupが自動的に読み取ります。
mise run dev:desktop # ライブリロード付きアプリ
mise run test # すべてのテストスイート
mise run lint # rustfmt、clippy、型チェック、ライセンス。CIが実行するものと同様です。
CONTRIBUTING.md は各テストスイートとその実行方法を説明しています。プルリクエストを開く前に読んでください。脆弱性を報告するには、SECURITY.mdに従ってください。
ライセンス
PinrailはApache License 2.0の下でライセンスされています。著作権およびサードパーティの通知については、NOTICEを参照してください。