Stream Deckの1ボタンからCodex Skillを直接実行する専用ランチャーを作った

下記の記事で、Stream DeckからCodexのSkill一覧を表示し、その中から使いたいSkillを選択して実行する「Codex Skill Launcher」を紹介しました。その記事でも言及しましたが、Skill一覧からSkillを選択するボタンの他に、特定のSkill専用のボタンもいくつか設けるのが現実的だと思ったので、本記事では専用ボタン(専用ランチャー)を設ける方法を検討したのでその内容を紹介します。それらの専用ボタンはStream Deck側へSkillそのものを固定するのではなく、間に「Slot」を置くことで、後からSkillだけを簡単に差し替えられるようにしました。


注)本記事の内容は正確性を保証するものではない。

目次

今回作りたかったもの

目標とした操作は、とても単純です。

Stream Deckのボタンを押す
        ↓
ボタンに対応したSlotを呼び出すSlotに割り当てられたSkillを確認
        ↓
Codex CLIを起動
        ↓
Skillを直接実行

実機では、Stream Deckの上段左端に「検索KW提案」というボタンを用意し、

recent-blog-search-keywords

を直接実行できるところまで確認しました。


ボタン「検索KW提案」を押すと、Codex CLIが立ち上がり、ボタンに設定されたSkill(recent-blog-search-keywords)が実行される。

Skill一覧は表示されません。

よく使うSkillなら、一覧から探して選択するより、この方法の方が操作を大幅に減らせます。

既存のSkill一覧ランチャーは残す

今回、既存のSkill一覧ランチャーを置き換えたわけではありません。

これまでのランチャーには、

  • Skill一覧
  • 最近使ったSkill
  • よく使うSkill
  • そのまま実行
  • 今回だけ追加指示
  • 定型指示付きで実行

といった機能があります。

これらは残したまま、新しく「Skill専用ボタン」を追加しました。

使い分けとしては、

よく使うSkill
    ↓
Stream Deckの専用ボタンから直接実行

それ以外のSkill
    ↓
従来のSkill一覧から選択

という形になります。

Skillそのものではなく「Slot」を登録する

今回の仕組みで重要なのがSlot方式です。

Stream Deckのボタンへ、

recent-blog-search-keywords

のようなSkill名を直接登録するのではありません。

代わりに、

Slot 1
Slot 2
Slot 3
...
Slot 8

という8個のSlotを用意しました。

そして例えば、

Slot 1
    ↓
recent-blog-search-keywords

という割り当てを別に保存します。

Stream Deck側は「Slot 1を実行する」という設定だけです。

このため、後から別のSkillへ変更しても、Stream Deck側を設定し直す必要がありません。

変更するのはSlot 1の割り当てだけです。

Phase 1:SlotからSkillを直接実行+Phase 2:Skill一覧からSlotへ割り当てを実装

今回は、まず下記のPhase 1とPhase 2を実装しました。

Phase 1:SlotからSkillを直接実行

中心となるファイルは、

~/Scripts/CodexSkillLauncher/skill_slot_launcher.py

です。

Slot 1を直接実行する場合、私のMac環境では、

/opt/anaconda3/bin/python3 "/Users/ユーザー名/Scripts/CodexSkillLauncher/skill_slot_launcher.py" run --slot 1

とします。

処理は、

  1. Slot 1の設定を読む
  2. 割り当てられているSkillを確認する
  3. Codex CLIを起動する
  4. Skillを実行する

という流れです。

通常のSkill一覧は表示されません。

Phase 2:Skill一覧からSlotへ割り当てる

Slot 1へSkillを設定する場合は、専用のアプリを立ち上げ、設定するボタン、そのボタンに割り当てるSkillを選択し、Stream Deckのボタンに「システム」の「開く」のappの欄に
“/Users/matsufusa/Applications/Codex Skill Slot 設定 v2.8.3.app”を入力するように構成した。

Stream Deckから呼び出すためにcommandファイルを用意

Stream Deckへ長いPythonコマンドを直接設定するのではなく、Slotごとに .command ファイルを用意しました。

Slot 1なら、

run_slot_1.command

です。

内容は、

#!/bin/zsh
exec /opt/anaconda3/bin/python3 "$HOME/Scripts/CodexSkillLauncher/skill_slot_launcher.py" run --slot 1

というシンプルなものです。

まずTerminalから、

~/Scripts/CodexSkillLauncher/run_slot_1.command

を実行し、正常にSkillが起動することを確認しました。

Stream Deckへボタンを設定

続いて、Elgato Stream Deckアプリを開きました。

ボタンへ、

「システム → 開く」

を設定し、Slot 1の場合は、

/Users/ユーザー名/Scripts/CodexSkillLauncher/run_slot_1.command

を指定します。

ボタン名は、Slot番号ではなく用途が分かるように、

検索KW提案

としました。

実機では、Stream Deckの1ページの上段左端へ配置しています。

これで、目的だった「1つのボタンから1つのSkillを直接実行」が実現できました。

Slot 1〜8まで用意した

Slot 1が正常に動いたため、Slot 2〜8用の .command もまとめて作成しました。

run_slot_1.command
run_slot_2.command
run_slot_3.command
run_slot_4.command
run_slot_5.command
run_slot_6.command
run_slot_7.command
run_slot_8.command

それぞれが、

--slot 1
--slot 2
--slot 3
...
--slot 8

に対応しています。

そのため、最大8個のSkill専用ボタンを作れます。

Slot 2〜8へ何のSkillを設定するかは、今後用途を検討してから決めることにしました。

Skillを変更してもStream Deck側は変更しない

この方式で特に便利なのが、Skillを変更するときです。

例えば現在、

Slot 1
↓
recent-blog-search-keywords

となっていても、専用アプリを実行して別のSkillを選べば、Slot 1の割り当てを変更できます。

Stream Deck側では、

run_slot_1.command

を呼び出す設定のままです。

つまり、

Stream Deckの設定
        ↓
     Slot 1
        ↓
割り当てるSkillだけ変更

という構造です。

Stream Deck側とSkill側を分離したことが、今回のSlot方式の大きな利点だと思います。

使用手順

ここからは、普段使用するときの操作だけをまとめます。

1. SkillをSlotへ割り当てる

専用アプリを立ち上げ、表示されたSkill一覧から使用するSkillを選択します。

2. 現在の割り当てを確認する

専用アプリを立ち上げ、現在の割り当てを確認します。

3. Stream Deckへボタンを作る

Elgato Stream Deckアプリを開きます。

使用するボタンへ、

「システム → 開く」

を配置します。

4. Slotに対応するcommandファイルを指定する

Slot 1なら、

/Users/ユーザー名/Scripts/CodexSkillLauncher/run_slot_1.command

を指定します。

5. 分かりやすいボタン名を付ける

今回の例では、

検索KW提案

としています。

6. ボタンを押す

ボタンを押すと、Codex CLIが起動し、そのSlotへ登録したSkillが直接実行されます。

Skill一覧から選択する操作はありません。

まとめ

別記事で紹介したSkillランチャーは、多数のSkillから使いたいものを探して実行するときに便利です。

一方、今回作ったSlot方式は、普段よく使うSkillをすぐに実行する用途に向いています。

よく使うSkill
→ Stream Deck専用ボタン

その他のSkill
→ Skill一覧ランチャー

という使い分けができます。

特に便利なのは、Stream DeckへSkillそのものを登録していない点です。

Stream Deck側ではSlotを呼び出す設定だけを残し、実際にどのSkillを動かすかは後から変更できます。

今回はSlot 1へ「最近の記事から検索キーワードを提案」を設定し、Stream Deckの上段左端に作った「検索KW提案」ボタンから、recent-blog-search-keywords が正常に実行されるところまで確認しました。

目次