PipoPapoCLI

PPPP / COMMAND REFERENCE / CURRENT IMPLEMENTATION

コマンドを、
もう少し詳しく。

ひとつ鳴らすところから、エージェントとの連携まで。
引数・設定・使用例をまとめました。

← 紹介ページへ戻る

まずは、ひとつ鳴らしてみる。

Homebrew配布はmacOS 13以降(Apple Silicon / Intel)向けです。導入後、短い本文を渡して試せます。

brew install ut0s/pipopapo/pppp
pppp say "こんにちは" --volume 20 --max-duration 2
pppp --help
pppp say --help

CLI名は pppp。本文から電子音・口笛・電話音を合成します。人の声で文章を読み上げる機能ではありません。-h / --help はヘルプ、-V / --version はバージョンを表示します。

Linux(x86_64)はソースからビルドできます。再生にはALSAと出力デバイスが必要です。

Antigravity CLI・Hermes Agent連携と通知音プリセットは、対応版CLIが必要です。公開済みv0.1.1には含まれません。

コマンド一覧

コマンド用途
say本文を電子音にして再生
notify完了・入力待ち・失敗を通知
render再生せずWAVを生成
stop再生中・待機中の要求を停止
doctor音声出力とキューを診断
setupCodex / Claude Code / Antigravity / Hermesへ同梱Pluginを導入
pluginPluginの設定・状態確認・削除・通知

以下の TEXT、EVENT、HOST、ID、PATH は値の置き場所です。実際の本文や識別子に置き換えてください。

say — 本文を再生する

pppp say TEXT [OPTIONS]
pppp say --stdin [OPTIONS]

引用符で囲んだ本文、または --stdin のどちらか一方で入力します。OSのデフォルト出力デバイスから再生し、再生終了まで呼び出し元は待機します。

pppp say "処理が完了しました" --volume 30 --max-duration 2
printf '%s' '長い返答の本文' | pppp say --stdin --session chat-1
pppp say "最新の返答" --session chat-1 --mode replace

音の調整とセッション・待機制御を指定できます。手動の say には通知の重複抑制やTTLを適用しません。

notify — 状態を知らせる

pppp notify EVENT [OPTIONS]

イベントは次の3種類です。本文を省略すると既定の短文を電子音に変換します。イベントに固定の専用音色が割り当てられているわけではありません。

EVENT意味既定の本文
completed完了Task completed
input-required入力・承認待ちUser input required
failed失敗Task failed
pppp notify completed --session build --target release
printf '%s' '承認してください' | pppp notify input-required --stdin --session chat-1
pppp notify failed --volume 25 --max-duration 2
専用オプション既定値動作
--stdinなしイベントの既定文の代わりに標準入力の本文を使う
--target ID未指定同一セッション・対象の古い待機通知を新しい状態で置き換える
--ttl-ms N30000待機通知の有効期間(ミリ秒)。0で期限を無効化。再生開始後には適用しない
--cooldown-ms N500通知完了後の重複抑制期間(ミリ秒)。0でも待機中・再生中の同一通知は抑制

同一セッション・イベント・対象・本文の通知を重複抑制します。音の調整と待機制御も使えます。

render — WAVへ書き出す

pppp render TEXT [OPTIONS]
pppp render --stdin [OPTIONS]

音声デバイスを開かず、48kHz・モノラル・32bit floatのWAVを生成します。本文か標準入力のどちらか一方を指定します。

pppp render "おつかれさま" -o hello.wav
pppp render --stdin -o message.wav < message.txt
pppp render "通知音" > notification.wav
pppp render "更新した通知音" -o hello.wav --force
専用オプション動作
-o / --output PATHWAVの保存先。未指定ならバイナリWAVを標準出力へ出す
--force指定した出力ファイルの上書きを許可。--output と併用

既存ファイルは既定で保護されます。音声オプションを使えますが、セッションや待機制御は使いません。> によるリダイレクトはシェル自身がファイルを上書きするため、既存ファイルを保護したい場合は -o を使ってください。

音の調整 — 共通オプション

say / notify / render に共通です。コマンドごとに引数で指定し、これらのコマンドはPluginの保存設定を読みません。

オプション既定値指定できる値・動作
--sound PRESETelectronic電子音または9種類のnotesプリセット
--volume N1000〜100。出力音量
--telephone-mix N00〜100。電話音の混合率。100では電話音だけを合成
--whistle-max N150〜100。発話ごとに抽選する口笛割合の上限。0で口笛を無効化
--max-duration SECONDS上限なし有限の正数。発話全体を指定秒数で打ち切る。速度・音程は変更しない
--seed N毎回生成0〜4294967295の整数。同じ本文・音声設定の乱数選択を再現
pppp say "処理が完了しました" --volume 20 --whistle-max 0 --max-duration 2
pppp render "サンプル" --telephone-mix 30 --whistle-max 10 --seed 42 -o sample.wav
pppp render "1234567890" --telephone-mix 100 -o telephone.wav

単音・2音・3音の、9種類。

notesは本文に依存しない固定音です。音量と再生時間の上限は適用されますが、telephone-mix / whistle-max / seedは音に影響しません。electronicで従来の電子音に戻せます。

Previewボタンで試聴できます。別の音を選ぶと、再生中の音は停止します。

PRESET音Preview
single-low低い単音
single-mid中音の単音
single-high高い単音
double-rise上昇する2音
double-fall下降する2音
double-repeat繰り返す2音
triple-rise上昇する3音
triple-fall下降する3音
triple-chord3音の和音
pppp notify completed --sound triple-chord --volume 20
pppp render notes --sound double-rise -o notes.wav

通知ごとのプリセット設定

未設定の通知は従来の電子音です。指定した項目だけを変更し、再セットアップでも保持します。ツール音にはtool-eventsの有効化が必要です。各ホストが対応するイベントに適用されます。

オプション用途
--completed-sound PRESET完了
--input-required-sound PRESET入力・承認待ち
--failed-sound PRESET最終失敗
--tool-start-sound PRESETツール開始
--tool-complete-sound PRESETツール完了
pppp plugin configure codex \
  --completed-sound triple-chord \
  --input-required-sound double-repeat \
  --failed-sound triple-fall \
  --tool-events both \
  --tool-start-sound single-low \
  --tool-complete-sound single-high

setup / plugin install / plugin configureで保存できます。plugin hook / plugin notifyを直接呼ぶ場合は、同じ設定を引数で渡してください。

セッションと待機制御

say / notify は同じユーザー・一時領域で複数プロセスの再生を直列化します。--session ID で関連する呼び出しをまとめます。省略した呼び出し同士は同じ範囲になるため、チャットやタスクを分ける場合は識別子を指定してください。

--mode動作
queue(既定)順番に再生を待つ
replace同じセッションの再生・待機を取り消して置き換える。他セッションの待機順は維持
drop再生中または待機中の要求があると新しい要求をスキップ
pppp say "最新の返答です" --session chat-1 --mode replace
pppp notify completed --session chat-2 --mode drop

stop — 再生と待機を停止する

pppp stop --session ID
pppp stop --all

--session ID と --all のどちらか一方が必須です。再生中・待機中の要求を取り消します。--all はユーザーの共有キュー全体が対象です。

# Run in another terminal while playback is active.
pppp stop --session chat-1
pppp stop --all

doctor — 音が出ないときに

pppp doctor

オーディオ出力とプロセスキューを診断し、結果を標準エラー出力へ表示します。音が出ない場合はOSの出力先・音量も確認してください。通常の再生は標準出力を空のままにし、エラーや診断を標準エラー出力へ出します。

setup — エージェントと連携する

pppp setup HOST [OPTIONS]

HOST は codex または claude(別名 claude-code)、antigravity(別名 agy)、hermes(別名 hermes-agent)。同梱Pluginと専用実行ファイルを配置し、ホストへ登録します。pppp plugin install HOST と同じ操作です。ホストのCLIが必要です。

pppp setup codex --volume 20 --max-duration 2
pppp setup claude
pppp setup antigravity
pppp setup hermes
pppp plugin status codex
導入後はホストを再起動するか新しいチャットを開始し、Hookを確認・信頼してください。再セットアップは既存の保存設定を保持し、実行ファイルとPluginを更新します。設定変更・再導入は実行中のチャットを終えてから行ってください。

完了・承認待ちなどをHookで通知します。Codexの最終失敗やHookで取得できない入力待ちは、Skillから明示通知します。すべての質問形式や失敗を自動検出するものではありません。

ホストごとの通知

Codexの最終失敗とHookで取得できない入力待ちはSkillから明示通知します。Antigravityは完全な待機状態で完了を通知し、ask_questionを入力待ちとして扱います。権限承認画面の自動通知には対応していません。Hermesは成功・最終失敗と質問・承認・sudo待ちを通知します。ツール単体の失敗は最終失敗として扱いません。

plugin — 設定・状態・削除

HermesはPythonアダプターと管理リンクを配置して有効化します。別プロファイルにはHERMES_HOMEと専用の--data-dirを指定し、以後の管理にも同じ値を使ってください。導入・削除後はゲートウェイを再起動してください。音声はゲートウェイ側で再生されます。

サブコマンド動作
plugin install HOST導入・再導入。setup HOST と同じ
plugin configure HOST指定した設定だけを変更し、ホストのキャッシュを更新
plugin status HOST配置先・保存設定・ホストのPlugin一覧をJSON表示
plugin uninstall HOSTこのCLI管理のPlugin・専用Marketplace・既知の配置ファイルを削除
pppp plugin configure codex --volume 40 --max-duration 2
pppp plugin configure codex --enabled false
pppp plugin configure codex --enabled true --full-length
pppp plugin configure claude --tool-events both
pppp plugin status codex
pppp plugin uninstall codex

install / configure / setup の設定

オプション初回の既定値動作
--enabled true|falsetrueHook通知の有効・無効
--volume N100音量(0〜100)
--telephone-mix N0電話音の混合率(0〜100)
--whistle-max N15口笛割合の上限(0〜100)
--max-duration SECONDS上限なし有限の正数で再生時間を制限
--full-length未指定保存された時間制限を解除。--max-duration と同時指定不可
--mode queue|replace|dropqueue再生待ちの制御
--tool-events none|start|complete|bothnoneツール開始・完了の追加通知。既定では追加通知なし

既存設定のうち、指定しなかった値は保持されます。--seed は保存設定の項目ではありません。定義が変わるとホストでHookの再信頼が必要になる場合があります。

管理コマンド共通の配置オプション

オプション動作
--data-dir PATHPluginの保存先を変更。以後のconfigure / status / uninstallにも同じ値を指定
--host-cli PATHPATH上のcodex / claude / agy / hermesの代わりに使うホスト実行ファイル

macOSの既定保存先は ~/Library/Application Support/PipoPapo/。Linuxは ~/.local/share/pppp/、XDG_DATA_HOME があればその配下の pppp/ を使います。ホストごとに codex/ / claude/ / antigravity/ / hermes/ を配置します。status はHookの信頼済み・スピーカー確認済みという状態までは保証しません。

plugin notify / hook — 連携用の通知

pppp plugin notify EVENT --session ID [OPTIONS]
pppp plugin hook EVENT [OPTIONS]

plugin notify はHookと抑制状態を共有する明示通知です。イベントは completed / input-required / failed、--session は必須です。--stdin で本文を渡せます。

pppp plugin notify failed --session chat-1 --volume 20
printf '%s' '確認してください' | pppp plugin notify input-required --session chat-1 --stdin

plugin hook はホストからのイベントJSONを標準入力で受けるアダプターです。通常はセットアップで生成したHook定義から呼び出します。主なイベントは UserPromptSubmit / PreToolUse / PostToolUse / PermissionRequest / Stop、Claude向けに Notification / StopFailure も扱います。

共通オプション既定値・動作
--enabled true|falsetrue。通知の有効・無効
--sound / --volume / --telephone-mix / --whistle-max / --max-duration / --seed共通の音声オプションと同じ
--modequeue。queue / replace / drop
--tool-eventsnone。none / start / complete / both
--timeout SECONDS45。1〜45の整数。キュー待ち+再生の合計上限
--binary PATH通知用の実行ファイルを変更。通常は自身のpppp

これらは保存設定を直接読み込まず、呼び出し時の引数を使います。plugin hook の実行エラーは標準エラー出力へ報告し、ホストの処理を妨げないよう終了コード0と空JSON {} を返します。notify 本体の --target / --ttl-ms / --cooldown-ms は、この連携用サブコマンドの引数ではありません。

入力の制約と終了コード

本文はUTF-8で最大16KiBです。空白だけなら再生せず正常終了し、render では空のWAVを生成します。合成波形が256MiBを超える場合はエラーとなるため、必要に応じて --max-duration を指定してください。

コード意味
0完了・停止・重複抑制・drop・期限切れ
1引数エラー
2オーディオ出力エラー。doctorで診断
3キュー・一時状態のエラー
4UTF-8・入力サイズ・合成・WAV入出力エラー。Plugin管理のファイル/ホストCLIエラーも含む
# Notify only after checking the command result.
if cargo build --release --locked; then
  pppp notify completed --session build --target release
else
  pppp notify failed --session build --target release
fi

インストール済みの版に合わせた最新の引数は pppp COMMAND --help で確認できます。このページは最新の実装を記載しています。配布版で利用できる引数は、インストール済みCLIのヘルプを確認してください。