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 --helpCLI名は pppp。本文から電子音・口笛・電話音を合成します。人の声で文章を読み上げる機能ではありません。-h / --help はヘルプ、-V / --version はバージョンを表示します。
Linux(x86_64)はソースからビルドできます。再生にはALSAと出力デバイスが必要です。
コマンド一覧
| コマンド | 用途 |
|---|---|
say | 本文を電子音にして再生 |
notify | 完了・入力待ち・失敗を通知 |
render | 再生せずWAVを生成 |
stop | 再生中・待機中の要求を停止 |
doctor | 音声出力とキューを診断 |
setup | Codex / Claude Code / Antigravity / Hermesへ同梱Pluginを導入 |
plugin | Pluginの設定・状態確認・削除・通知 |
以下の 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 N | 30000 | 待機通知の有効期間(ミリ秒)。0で期限を無効化。再生開始後には適用しない |
--cooldown-ms N | 500 | 通知完了後の重複抑制期間(ミリ秒)。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 PATH | WAVの保存先。未指定ならバイナリWAVを標準出力へ出す |
--force | 指定した出力ファイルの上書きを許可。--output と併用 |
既存ファイルは既定で保護されます。音声オプションを使えますが、セッションや待機制御は使いません。> によるリダイレクトはシェル自身がファイルを上書きするため、既存ファイルを保護したい場合は -o を使ってください。
音の調整 — 共通オプション
say / notify / render に共通です。コマンドごとに引数で指定し、これらのコマンドはPluginの保存設定を読みません。
| オプション | 既定値 | 指定できる値・動作 |
|---|---|---|
--sound PRESET | electronic | 電子音または9種類のnotesプリセット |
--volume N | 100 | 0〜100。出力音量 |
--telephone-mix N | 0 | 0〜100。電話音の混合率。100では電話音だけを合成 |
--whistle-max N | 15 | 0〜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ボタンで試聴できます。別の音を選ぶと、再生中の音は停止します。
音声を再生できませんでした。もう一度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-chord | 3音の和音 |
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-highsetup / 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 dropstop — 再生と待機を停止する
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 --alldoctor — 音が出ないときに
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で通知します。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 codexinstall / configure / setup の設定
| オプション | 初回の既定値 | 動作 |
|---|---|---|
--enabled true|false | true | Hook通知の有効・無効 |
--volume N | 100 | 音量(0〜100) |
--telephone-mix N | 0 | 電話音の混合率(0〜100) |
--whistle-max N | 15 | 口笛割合の上限(0〜100) |
--max-duration SECONDS | 上限なし | 有限の正数で再生時間を制限 |
--full-length | 未指定 | 保存された時間制限を解除。--max-duration と同時指定不可 |
--mode queue|replace|drop | queue | 再生待ちの制御 |
--tool-events none|start|complete|both | none | ツール開始・完了の追加通知。既定では追加通知なし |
既存設定のうち、指定しなかった値は保持されます。--seed は保存設定の項目ではありません。定義が変わるとホストでHookの再信頼が必要になる場合があります。
管理コマンド共通の配置オプション
| オプション | 動作 |
|---|---|
--data-dir PATH | Pluginの保存先を変更。以後のconfigure / status / uninstallにも同じ値を指定 |
--host-cli PATH | PATH上の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 --stdinplugin hook はホストからのイベントJSONを標準入力で受けるアダプターです。通常はセットアップで生成したHook定義から呼び出します。主なイベントは UserPromptSubmit / PreToolUse / PostToolUse / PermissionRequest / Stop、Claude向けに Notification / StopFailure も扱います。
| 共通オプション | 既定値・動作 |
|---|---|
--enabled true|false | true。通知の有効・無効 |
--sound / --volume / --telephone-mix / --whistle-max / --max-duration / --seed | 共通の音声オプションと同じ |
--mode | queue。queue / replace / drop |
--tool-events | none。none / start / complete / both |
--timeout SECONDS | 45。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 | キュー・一時状態のエラー |
| 4 | UTF-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のヘルプを確認してください。