cold-open について
Cold Open は、Fountain と Final Draft(.fdx)に対応する脚本編集アプリです。デスクトップアプリ、コマンドライン、MCP から操作でき、接続したエージェントの編集はアプリ上で変更履歴として表示され、元に戻せます。
主な機能
- 01Fountain と .fdx の脚本編集
- 02デスクトップアプリとコマンドライン操作
- 03エージェントの編集履歴表示と取り消し
- 04シーン一覧、差分、レポート
- 05編集コマンドの一括実行
活用シーン
- 01脚本の執筆と書式整理
- 02開いている脚本をエージェントに編集させる
- 03テキスト置換やブロック挿入の一括処理
- 04PDF の出力とページ区切りの確認
MCP 対応
Cold Open の MCP サーバーは、編集コマンドをツールとして、脚本、ブロック、ページ、シーンをリソースとして MCP クライアントに公開します。デスクトップアプリで脚本を開いている場合、エージェントの編集は変更履歴として表示されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Cold Open
Cold Open は、無料のオープンソース脚本作成アプリです。Fountain ファイルと Final Draft(.fdx)ファイルの読み書きに対応し、作業内容が失われることはありません。すべての操作がコマンドで、デスクトップアプリ、コマンドライン、stdio 経由の JSON、または MCP サーバーから操作できます。
ステータス: アルファ版で、テスターを募集しています。フェーズ 1 から 5 では、エディター、コマンドライン、MCP サーバー、.fdx 形式のインポートとエクスポート、変更履歴、改訂、脚本の差分表示、レポートを開発しました。フェーズ 6a では脚本家がインストールするビルドを、6b ではユーザーガイド、フィードバック、クラッシュレポートを作成しました。ウェブサイト https://theyungstump.github.io/cold-open/ には、ユーザーガイドとアルファ版への参加方法があります。計画については docs/spec.md、各フェーズの詳細については docs/progress/、各リリースについては CHANGELOG.mdをご覧ください。
インストール
Windows(x64 と ARM64)、macOS(Apple Silicon と Intel)、Linux(x86-64 と ARM64、.deb、AppImage、Flatpak)向けのアルファ版ビルドは、リリースページから入手できます。ダウンロードサイズはそれぞれ 15 MB 未満です。現時点では Microsoft による署名も Apple による公証も受けていません(コード署名ポリシーをご覧ください)。各システムで初回起動時の警告を回避する方法は、リリースノートに記載されています。コマンドラインツール coldopen は、すべてのシステムでアプリに付属しています(docs/specs/release.md §4)。
お使いのコンピューターで Cold Open のパフォーマンスを測定するには、パレットでパフォーマンスを測定を選択するか、coldopen bench を実行し、ダウンロードフォルダーに作成される 2 つの小さなファイルをお送りください(docs/specs/bench.md)。ファイルにはモデル名と所要時間が含まれ、個人情報は含まれません。
コード署名ポリシー
SignPath.ioが提供する無料のコード署名。証明書はSignPath Foundationが提供しています。
Cold Open は、オープンソースプロジェクト向けの SignPath Foundation のプログラムに申請中です。プロジェクトが承認されるまでは、Windows ビルドには署名がなく、初回起動時に Windows から警告が表示されます。
チームの役割:
- 作成者(コミッター)は、他の人によるレビューなしでソースを変更できます:TheYungStump。
- レビュアーは、他の人による変更(プルリクエストなど)をすべてレビューし、マージ前に確認します:TheYungStump。
- 承認者は、各署名リクエストを手動で承認します:TheYungStump。
リリースの署名方法:
- 各リリースは、GitHub Actions によって、このリポジトリのタグ付きコミットからソースをビルドして作成されます(
.github/workflows/release.yml)。 - 署名の対象は Cold Open 独自のプログラムのみです。デスクトップアプリ、コマンドラインツール、Windows インストーラーが含まれます。
- 承認者が各署名リクエストを手動で承認します。
- チームメンバー全員が、GitHub と SignPath で多要素認証を使用しています。
Cold Open のコードの多くは、作成者の指示と GitHub アカウントのもとで AI コーディングエージェントを使って作成されています。作成者は、すべての変更をマージ前にレビューします。
プライバシー
このプログラムは、ユーザー、またはインストールや運用を行う人が明示的に要求しない限り、ネットワークに接続された他のシステムに情報を送信しません。
要するに、ウェブサイトは Cookie を使わずに Cloudflare Web Analytics で訪問数を匿名で集計し、アプリは何も送信しません。
具体的には、次のとおりです。
- Cold Open はネットワーク接続を行いません。 アップデートを確認したり、サーバーに接続したりすることはありません。
- 使用状況の概要はお使いのコンピューター上だけに保存されます(0.1.0-alpha.3 以降)。Cold Open は使用した機能を、このコンピューター上だけで数えます。フィードバックに含めない限り、送信されることはありません。保存するのは回数だけで、テキスト、名前、ファイルパスは保存しません。設定(Ctrl+Comma、または Mac では Cmd+Comma)で詳細を確認したり、リセットしたり、カウントをオフにしたりできます。(
docs/specs/usage-summary.md) - エージェントとの接続はお使いのコンピューター上にとどまります。 アプリと
coldopen mcpは、お使いのユーザーアカウントだけが開けるソケットまたはパイプを介して通信します(docs/specs/mcp.md)。接続する AI エージェントは別のプログラムです。スクリプトから何を読み取り、どこに送信するかは、そのプログラムと独自のプライバシーポリシーによって決まります。 - リンクはクリックした場合にのみ、ブラウザーで開きます。
- パフォーマンスを測定すると、ダウンロードフォルダーにレポートファイルが 2 つ作成されます。送信しない限り、コンピューターの外に出ることはありません。
0.1.0-alpha.2 以降、アプリ内から問題を報告する方法が 2 つあります。どちらも、それだけで何かを送信することはありません。
- **問題を報告…**を選ぶと、ブラウザーでページが開きます。GitHub アカウントがある方は GitHub の issue を、ない方は Google フォームに入力できます。アプリは Cold Open のバージョンとコミット、ビルドの対象、オペレーティングシステムの名前とバージョン、ウィンドウを描画するレンダラーを入力します。スクリプトのテキスト、ファイル名やパス、ユーザー名やコンピューター名は追加されません。ページを自分で送信するまで何も送信されず、送信前に内容を変更できます。
- クラッシュレポート。 Cold Open がクラッシュすると、エラーメッセージ(引用符で囲まれたテキストは取り除かれます)、Cold Open のコード内で発生した場所、ファイルパスを含まないコードアドレス形式のバックトレース、バージョン、オペレーティングシステム、レンダラーを記したレポートが、お使いのコンピューターに保存されます。スクリプトのテキスト、ファイル名、ユーザー名は含まれません。次回の起動時に、Cold Open はレポートを確認するかどうかを尋ねます。コンピューターの外に何かが送信される前に、レポート全体が表示されます。その後、内容を入力済みの issue またはフォームを開くか、貼り付け用にレポートをコピーできます。今後確認しないを選ぶこともできます。
ウェブサイトでは、Cookie を使わずに Cloudflare Web Analytics で訪問数を匿名で集計しています。訪問者を計測するものはほかにありません(サイトのプライバシーページ)。
GitHub の issue は公開され、GitHub のプライバシーに関する声明が適用されます。フォームの回答は、Google Forms を通じてプロジェクトに非公開で送られ、Google のプライバシーポリシーが適用されます。
ビルド
Rust 1.89 以降が必要です。https://rustup.rs からインストールしてから、ビルドします。
cargo build --release
これにより、target/release に 2 つのプログラムがビルドされます。デスクトップアプリの coldopen-app と、MCP サーバーも実行するコマンドラインツールの coldopen です。どちらも Windows、macOS、Linux で動作します(Windows では .exe)。Linux でアプリを実行するには、X11 または Wayland と libxkbcommon が必要です。
すべてのシステム向けパッケージは CI(.github/workflows/build.yml、.github/packaging/package.sh)でビルドされます。各プルリクエストの実行結果は、Summary ▸ Artifacts にあります。
デスクトップアプリを使う
coldopen-app [script.fountain]
- 執筆。 新しい脚本はシーン見出しから始まります。脚本執筆の一般的な流れに沿って、Enter キーと Tab キーで要素(見出し、アクション、人物名、セリフ、括弧書き、トランジション)を移動できます。上部のバーには次に入力される要素が表示されます。見出し、人物名、トランジションを入力すると、大文字になります。オートコンプリートでは人物名、
INT./EXT.、場所、時刻、拡張要素が提示され、Tab キーまたは Enter キーで候補を選択できます。 - キーボードだけで操作。 Ctrl+K(macOS では Cmd+K)でコマンドパレットが開きます。ここにはすべてのコマンド、アプリの操作とそのショートカット、最近使ったファイルが一覧表示されます。
- ページ。 脚本は印刷時と同じページ表示、または連続したドラフト表示(Ctrl+Shift+D)で表示されます。左側のナビゲーターにはシーンが一覧表示されます。シーンをドラッグするか、Alt+Up/Down キーを押すと移動できます。
- ファイル。 Ctrl+S で保存します(入力を止めることなく、バックグラウンドで保存されます)。Ctrl+Shift+E で PDF をエクスポートし、終了時には未保存の変更について確認されます。
- 独自のキー設定と要素の移動順序。 設定フォルダー内の
keymap.jsonとflow.jsonで、ショートカットと Enter キーや Tab キーの動作を変更できます。docs/specs/editor.md§5.2 と §10 を参照してください。アプリがこれらを書き換えることはありません。 - 描画。 アプリは Windows と Linux では CPU で、macOS では GPU で描画します。GPU は 4K および Retina ディスプレイでより滑らかに動作し、CPU は使用メモリを大幅に抑えます。パレットで切り替えられます。
動作の詳細については、docs/specs/editor.md をご覧ください。
AI エージェントに脚本を編集させる
claude mcp add coldopen -- coldopen mcp
coldopen mcp は MCP サーバーです。すべてのコマンドがツール(block_insert、text_replace、scene_list など)で、脚本、そのブロック、ページ、シーンがリソースです。どの MCP クライアントでも同じように動作します。
脚本をデスクトップアプリで開いているとき、エージェントの doc_open はファイルを開く代わりにアプリに接続します。各編集が画面に反映され、変更したブロックには紫色のバーが付き、Ctrl+Z で自分の編集と同じように取り消せます。エージェントの各ステップには、エージェント名と使用したツールが表示され、エージェントは自分のステップだけを取り消せます。ステータスバーには接続中のエージェントが表示され、接続解除とエージェントアクセスを無効にするスイッチがあります。
両者間の接続は、お使いのマシン上のユーザーアカウントに限定されています。開けるのは本人だけのフォルダー内にあるソケット、または本人だけがアクセスできる Windows パイプと、新たに生成される 256 ビットのトークンを使用します。アプリが起動していない場合、coldopen mcp はクラッシュジャーナルを同じように使用しながら、ファイル自体を開きます。詳細については、docs/specs/mcp.md をご覧ください。
コマンドラインを使う
脚本を変換する
coldopen convert draft.fountain clean.fountain
脚本を標準的な Fountain 形式に書き換えます。内容は変わらず、空白とマークアップが整えられます。
代わりに、ドキュメントのブロックと ID を JSON で出力するには、次のようにします。
coldopen convert draft.fountain - --to json
標準出力に書き込むには、出力先として - を指定します。変換先の形式で脚本の内容をすべて保持できない場合、--allow-lossy を追加しない限り何も書き出されません。
シーンを一覧表示する
coldopen scenes draft.fountain
出力は次のようになります。
1 1 p. 1 3/8 EXT. LIGHTHOUSE - DUSK (15 blocks, 39 words)
2 2 p. 1 2/8 INT. RADIO ROOM - NIGHT (5 blocks, 18 words)
各行には、シーンの開始ページと、ページの 8 分の 1 単位で示した長さが表示されます。機械可読形式で出力するには、--json を追加します。
PDF をエクスポートする
coldopen export draft.fountain draft.pdf
coldopen export draft.fountain review.pdf --watermark "DRAFT" --scene-numbers
PDF にはバンドルされている Courier Prime フォントが使用され、Windows、macOS、Linux のどれでもバイト単位で同じものが生成されます。--no-title-page を指定すると、タイトルページが省略されます。フォントにグリフがない文字(中国語や絵文字など)は四角で印刷され、該当する文字がコマンドに表示されます。
ページをテキストで確認する
coldopen pages draft.fountain
各ページを印刷時と同じように、1 インチあたり 10 文字のグリッドでプレーンテキストとして出力します。各ページのヘッダー行には、ページが終了した理由が表示されます。ページ区切りの確認に便利です。
ライセンス
coldopen licenses を実行すると、Cold Open のライセンスと、バンドルされているフォントの SIL Open Font License が表示されます。アプリではパレットの About から確認できます。
一連の編集を実行する
edits.json は、コマンドを並べた JSON 配列、または 1 行に 1 コマンドを記述したファイルです。
[
{"command": "text.replace", "params": {"find": "MAYA", "with": "NINA"}},
{"command": "block.insert", "params": {"type": "transition", "text": "FADE OUT."}}
]
スクリプトに対して実行します。
coldopen run edits.json --doc draft.fountain --save
runは、コマンドごとに 1 つの JSON レスポンスを出力します。--keep-goingを追加しない限り、最初の失敗で停止します。- コマンドが 1 つでも失敗すると、終了ステータス 1 で終了します。
--save(またはバッチ内のdoc.save)がない場合、変更はバッチの終了時に破棄されます。- クラッシュジャーナルから復元された未保存の作業は、決して破棄されません。バッチが変更を加えなかった場合は、次回のオープンに備えてジャーナルに残ります。バッチが変更を加えた場合は、ジャーナルのコピーが保存され、
runがその場所を通知します。
stdio 経由でコマンドを提供する
coldopen serve --stdio
サーバーは 1 行に 1 つの JSON リクエストを読み取り、それぞれに対して 1 行の JSON レスポンスを返します。この方法なら、どの言語からでも利用できます。
→ {"v":1,"id":1,"command":"doc.open","params":{"path":"draft.fountain"}}
← {"v":1,"id":1,"ok":true,"result":{"blocks":42,"format":"fountain","path":"draft.fountain","recovered":null,"scenes":6,"warnings":[]}}
→ {"v":1,"id":2,"command":"block.insert","params":{"after":"b_3","type":"character","text":"MAYA"}}
← {"v":1,"id":2,"ok":true,"result":{"id":"b_43"}}
→ {"v":1,"id":3,"command":"undo"}
← {"v":1,"id":3,"ok":true,"result":{"undone":"block.insert"}}
コマンド、パラメーター、エラーコードの全一覧は、docs/specs/commands.md に記載されています。
作業は安全に保護されます
クラッシュジャーナル。 スクリプトを開いている間、コマンドが戻る前にすべての変更がクラッシュジャーナルに書き込まれます。draft.fountain の場合、ジャーナルは同じディレクトリにある隠しファイル .draft.fountain.coldopen-journal です。
- Cold Open がクラッシュした場合や、マシンの電源が失われた場合、次の
doc.openでジャーナルが再生され、"recovered": {"commands": N}が返されます。取り消し履歴も復元されます。デスクトップアプリには復元された内容が表示され、保持するか、保存済みファイルに戻すかを選べます。 - デスクトップアプリでは、各キー入力は画面に表示される前にジャーナルに書き込まれ、250 ms 以内にディスクへフラッシュされます。アプリをいつ終了しても、画面に表示された内容が失われることはありません。停電の場合でも、失われるのは最大で最後の 1/4 秒分です。一度も保存していないスクリプトにもジャーナルが作成され、次回起動時にアプリがその復元を提案します。
- 保存するとジャーナルがリセットされ、保存済みのドキュメントを閉じるとジャーナルが削除されます。
- スクリプトが git リポジトリ内にある場合は、
.gitignoreに.*.coldopen-journalを追加してください。
アトミック保存。 保存はアトミックに行われるため、保存中にクラッシュしても、古いファイルか新しいファイルのどちらかが残り、両方が混ざった状態になることはありません。
詳細は docs/specs/journal.md に記載されています。
Fountain のサポート
Cold Open は、Fountain 構文のページに記載されたすべての機能をサポートしています。
- タイトルページ
- 強制見出しやシーン番号を含むシーン見出し、および一部の脚本家が使う逆順の
EXT/INTとE/Iの接頭辞 - アクション、登場人物、台詞、括弧書き、二重台詞
- 歌詞、トランジション、中央揃えテキスト
- 強調
- ノート、ボーンヤード、セクション、シノプシス
- 改ページ
すべてのルールと、構文のページで明確に定められていないケースの扱いは、docs/specs/fountain.md に記載されています。
テスト
cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
テストスイートには、次のものが含まれています。
- Fountain 準拠テストケース。
tests/fixtures/fountainにルールごとに 1 つのケースがあり、期待される結果は手作業で記述されています。 - プロパティテスト。 ランダムな Fountain とランダムな編集シーケンスを使って、往復変換、取り消し、やり直し、ジャーナルの再生を検証します。
- クラッシュテスト。 編集ストリームの途中で
coldopen serve --stdioを強制終了し、新しいプロセスが確認応答済みの編集をすべて復元することを検証します。 - アプリのゲートテスト。 アプリ独自のテストでは、実際のインターフェイスを通じて実際のキー入力を行い、ヘッドレスで実行します。入力ゲートでは、スマートフロー、オートコンプリート、アクセント記号、取り消し、保存を含む短いシーンを入力し、ファイルをバイト単位で比較します。クラッシュゲートでは、入力中のランダムな時点で別プロセスとしてアプリを強制終了し、復元を検証します。エージェントゲートでは、実際の
coldopen mcpプロセスを使ってアプリを操作します。
非公開コーパス
実際の脚本には著作権があるため、リポジトリにコミットされることはありません。.fountain ファイルを corpus/(gitignore 対象)に配置するか、COLDOPEN_CORPUS で別のフォルダーを指定してください。コーパステストでは、各スクリプトが損失なく往復変換できることを検証します。コーパスがない場合、このテストはスキップされます。
ファジング
fuzz/ フォルダーには cargo-fuzz のターゲットが含まれています。実行には nightly Rust が必要で、Linux または macOS で動作します。
cd fuzz
cargo +nightly fuzz run fountain_roundtrip
その他のターゲットは envelope、journal_replay、fdx_read、link_line、app_config です。スケジュールされたワークフローにより、毎週日曜日に6つすべてが実行されます。Actions タブから手動で開始することもできます。
構成
| クレート | ライセンス | 内容 |
|---|---|---|
crates/screenplay | MIT OR Apache-2.0 | 脚本の型:要素、リッチテキスト、タイトルページ |
crates/fountain | MIT OR Apache-2.0 | Fountain パーサーとライター |
crates/fonts | OFL-1.1 (フォント)、MIT OR Apache-2.0 (コード) | バンドルされているフォント:ページ用の Courier Prime、アプリのインターフェース用の Atkinson Hyperlegible Next |
crates/layout | MIT OR Apache-2.0 | 文字グリッド上のレイアウト、ページ割り、ページ表示、PDF エクスポート |
crates/fdx | MIT OR Apache-2.0 | 読み取り専用の .fdx リーダー(フェーズ2)。書き込みと修復はフェーズ4で対応予定です |
crates/core | GPL-3.0-or-later | ドキュメント、コマンド、ディスパッチャー、取り消し、ジャーナル、アトミック保存 |
crates/cli | GPL-3.0-or-later | coldopen バイナリ |
crates/app | GPL-3.0-or-later | デスクトップアプリ coldopen-app |
crates/mcp | GPL-3.0-or-later | coldopen mcp の MCP サーバー |
crates/link | GPL-3.0-or-later | アプリと coldopen mcp 間のプライベートリンク |
フォーマットライブラリは、他のアプリでも利用できるよう寛容なライセンスで公開されています。アプリ自体は GPL-3.0-or-later です。LICENSE を参照してください。Courier Prime と Atkinson Hyperlegible Next のフォントは SIL Open Font License 1.1 (crates/fonts/fonts/) に基づいています。エクスポートした PDF はお客様のものであり、このライセンスの対象ではありません。
tools/refpdf はレイアウトテスト用に参照 PDF を測定する開発ツールで、配布されることはありません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。