cli-text について
cli-textは、コマンドラインツールへテキストを安全に渡すためのスキルで、引数、ファイル、標準入力などの対応方式を選ぶ手順を示します。CLI経由でテキストを書き込み、パーサーによる誤解釈を避けたいワークフロー向けです。
主な機能
- 01CLIで文書化された入力方式の選択
- 02引用付きヒアドキュメントでの内容受け渡し
- 03空テキストと末尾改行の処理
- 04NUL文字の受け渡し制限の説明
- 05書き込み後の読み戻しと検証
活用シーン
- 01引用符やシェル構文を含むテキストのCLIへの受け渡し
- 02本文の末尾改行を正確に保持
- 03ファイルまたは標準入力による長文の書き込み
- 04不確かな操作の再試行前に書き込み内容を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alekzonder/ tariboy-store --skill cli-textインストール後、Claude Code で/cli-textを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
cli-text.mdevals/baseline-results.jsonbaseline.jsoncandidate-results.jsoncandidate.jsoncheck-consumers.pycheck-text.pyconsumer-results.jsondependent-baseline.mddependent-candidate.mddependent-request.mdinput-modes-baseline.mdinput-modes-candidate.mdinput-modes-request.mdprovenance.jsonREADME.mdrequest.mdrubric.md詳細
CLI テキスト
すべてのパーサーを通して、テキストをデータとして扱います。受け取り側のコマンドのヘルプを確認し、ドキュメントに記載された引数と入力モードのみを使用してください。
| 利用可能なインターフェース | テキストの渡し方 |
|---|---|
| 構造化ツールまたはプロセスの argv API | シェルを介さず、文字列フィールドまたは argv の要素を 1 つ使用 |
| CLI のファイル/標準入力 | ツールで書き込んだファイルまたは引用符で囲んだ heredoc。例:gh pr create --body-file PATH |
| シェルと位置引数/フラグ値のみ | 引用符で囲んだ heredoc を変数に格納し、引用符で囲んだ引数を 1 つ渡す |
まず、該当するスキルの保存ルール(Markdown、1 行のステータス、コンテキストのスコープ)に従ってください。このスキルが扱うのは転送方法であり、認可や書式設定のポリシーではありません。
CLI のドキュメントに記載されている場合に限り、先頭がハイフンの位置引数テキストには -- を使用してください。
シェルの引用符でオプションの解析が無効になるわけではありません。
Bash のテキスト引数
ペイロードの完全な行に含まれない区切り文字を選び、区切り文字の両方の行を列 1 に配置してください。引用符で囲んでいない heredoc にペイロードを展開しないでください。
CLI_TEXT=$(cat <<'CLI_TEXT_84_END'
O'Reilly: `literal` $(literal) $HOME \path — Привет
CLI_TEXT_84_END
)
note-cli set "$CLI_TEXT"
コマンド置換は末尾の改行をすべて削除します。この方法が適しているのは、要求されたテキストも同様に末尾の改行が削除される場合のみです。末尾の改行を正確に保持する必要がある場合は、対応していればファイル/標準入力を使用するか、置換の内部にセンチネルを追加し、その後センチネルのみを削除してください。空のテキストも 1 つの引数です:""。NUL は argv や Bash 変数では表現できません。ドキュメントに記載されたバイナリのファイル/標準入力を使用するか、そのインターフェースでは渡せないことを報告してください。
Codex JavaScript → Bash
この完全なスニペットは、body が既存の文字列であり、note-cli set が 1 つのテキスト引数を受け付けることを前提としています。空のテキストと末尾の改行を正確に保持します。JavaScript の分離環境で Node API、エンコーダー、ファイルシステムを使う必要はありません。
if (body.includes("\0")) throw new Error("CLI argv cannot contain NUL");
let delimiter = "CLI_TEXT_END";
const lines = body.split("\n");
while (lines.includes(delimiter)) delimiter += "_";
const cmd = "CLI_TEXT=$(cat <<'" + delimiter + "'\n" + body +
"\n" + delimiter + "\nprintf .\n)\n" +
'CLI_TEXT=${CLI_TEXT%.}\nCLI_TEXT=${CLI_TEXT%?}\n' +
'note-cli set "$CLI_TEXT"';
const result = await tools.exec_command({cmd});
if (result.exit_code !== 0) throw new Error("Text write did not finish successfully");
センチネルは heredoc の末尾の改行を保持します。2 回目の削除で、閉じ区切りの前に追加された改行をちょうど 1 つ削除します。終了ステータスを確認する前に、実行中のツールプロセスがあれば完了を待ってください。書き込みが成功したら、利用可能な場合はドキュメントに記載された読み取り API を使い、保存されたテキストと意図した値を比較してください(ドキュメントに記載された保存時の正規化のみ許容します)。コメントやメッセージが重複しないよう、不確かな書き込みは再試行する前に検証してください。
よくある間違い
JSON.stringify は JSON をシリアライズするものであり、シェル用の引用符付けではありません。バッククォートと $() はシェルの二重引用符内でも実行されます。eval を使用したり、テキストからコマンドを再構築したり、引用符の問題を修正するために Base64 を手作業で生成したりしないでください。生成されたテキスト、ユーザーのテキスト、ログのテキストはすべて同じように扱ってください。リモートシェルを含め、実際の各パーサー境界を確認してください。直接 argv API がある場合は、余分なシェルを介さないでください。