Semaphore UI の新機能 2.21

CTO・創業者
開発中

AI コーディングエージェントを実行する Claude Code Agent と Codex Agent のテンプレート、プロンプト式、MCP インベントリ、トランスクリプト形式のタスクログを追加。

このリリースについてAIと話す

Claude Code Agent テンプレートのエディター

Semaphore UI 2.21 は AI コーディングエージェント を実行します。2 つの新しいアプリ、Claude Code Agent と Codex Agent は、エージェントのコマンドラインツールをリポジトリ内で起動し、プロンプトを渡します。 エージェントは自律的に作業し、行った内容をタスクログに報告します。プロンプトには 変数グループとサーベイ変数 の値を取り込むことができ、エージェントは MCP サーバー のツールを呼び出せます。 ログにはその作業がトランスクリプトとして表示されます。

Semaphore 2.21 は開発中です。 まだリリースされていません: このページは開発ブランチにすでに入っている内容を 説明しており、リリースまで拡充されていきます。詳細は変更される可能性があります。

ハイライト

  • Claude Code Agent と Codex Agent のテンプレート: エージェントは他と同じテンプレートです。手動、 スケジュール、インテグレーション、またはワークフローのステップとして開始できます。
  • プロンプト式: ${{ vars.extra.NAME }}、${{ vars.env.NAME }}、 ${{ secrets.extra.NAME }}、${{ secrets.env.NAME }} は、GitHub Actions と同様に、変数グループと サーベイ変数の値をプロンプトに挿入します。
  • タスクのプロンプト: テンプレートは、タスクを開始する人が 1 回の実行に限ってプロンプトを置き換えることを許可できます。
  • MCP インベントリ: エージェントがツールを呼び出せるリモート MCP サーバーを持つ新しいインベントリ種別です。 トークンは暗号化して保存されます。
  • エージェントのタスクログ: エージェントのテキスト、ツール呼び出し、サブエージェント、およびトークンと コストを含むサマリーが、エージェントの作業中に更新されます。
  • 分離: すべてのタスクに、エージェント専用の空の設定ディレクトリが与えられます。トークンと プロンプトに挿入されたシークレットはログ内でマスクされます。

AI エージェントのテンプレート

Claude Code Agent と Codex Agent の項目がある新規テンプレートメニュー

エージェントテンプレートは、Claude Code または Codex をリポジトリのディレクトリ内で起動し、プロンプトを 渡します。同僚に説明して任せるような作業に使用します: 最新のコミットをレビューする、失敗しているテストを 見つけて修正する、依存関係を更新してプルリクエストを作成する、などです。

作成するには、タスクテンプレート に移動し、新規テンプレート をクリックしてから Claude Code Agent または Codex Agent を選択します。

フィールド 説明
リポジトリ エージェントが作業するリポジトリ。他のテンプレートと同様に、Semaphore はタスクの前にクローンまたは更新します。
サブディレクトリのパス 任意。エージェントを起動するリポジトリ内のディレクトリ。
MCP サーバー 任意。エージェントがツールを呼び出せるサーバーを持つ MCP インベントリ。
変数グループ エージェント用の変数とシークレット: API キー、プロンプト式の値、エージェントのプロセスの環境変数。
プロンプト エージェントが実行する指示。
CLI 引数 エージェントのコマンドへの追加引数: モデル、制限、権限。
サーベイ変数 タスクの開始時に尋ねられる質問。回答はプロンプトに挿入できます。

必要なもの。 エージェントのコマンドラインツールが、タスクを実行するマシン、つまり Semaphore サーバーまたは ランナーにインストールされている必要があります:

アプリ コマンド インストール
Claude Code Agent claude npm install -g @anthropic-ai/claude-code
Codex Agent codex npm install -g @openai/codex

Semaphore は、起動時に PATH 内でコマンドが見つかるとそのアプリを有効にします。管理者は アプリ ページでアプリを有効にし、実行ファイルへのパスを設定することもできます。

エージェントの実行方法。 Semaphore はリポジトリのディレクトリでエージェントを起動し、プロンプトを 標準入力で渡すため、プロンプトはプロセス一覧に表示されません:

アプリ コマンド
Claude Code Agent claude -p --output-format=stream-json --verbose --include-partial-messages --mcp-config=<file> --strict-mcp-config --no-session-persistence <CLI args>
Codex Agent codex exec --json --skip-git-repo-check <CLI args> -
  • タスク間では何も保持されません。 各実行はエージェントの新しいセッションです。実行後に残すべきものは リポジトリに置きます: コミット、プルリクエスト、ファイル。
  • Docker および Kubernetes ランナーでは エージェントはコンテナ内で実行されるため、エグゼキューターのイメージに claude または codex コマンドが含まれている必要があります。

API キー

エージェントは API キーを環境変数から取得します。キーをテンプレートの変数グループに シークレット環境変数 として追加します:

アプリ 変数 これも使用可能
Claude Code Agent ANTHROPIC_API_KEY CLAUDE_CODE_OAUTH_TOKEN
Codex Agent OPENAI_API_KEY CODEX_API_KEY

Semaphore を実行しているユーザーのログインは使用されません: エージェントの設定ディレクトリは タスクのために作成され、空であるため、変数グループのキーが唯一の認証手段です。 いずれの変数も設定されていない場合、タスクログにどの変数を追加すべきかが表示されます。

プロンプト式

テンプレートのプロンプトには、テンプレートの変数グループの値を取り込めます。GitHub Actions と同様に 二重波括弧で式を記述すると、Semaphore がタスクの開始時にそれを置き換えます:

式 値
${{ vars.extra.NAME }} 変数グループの追加変数。
${{ vars.env.NAME }} 変数グループの環境変数。
${{ secrets.extra.NAME }} 変数グループのシークレット追加変数。
${{ secrets.env.NAME }} 変数グループのシークレット環境変数。
Find the flaky tests in services/api and fix them.
Open a pull request against ${{ vars.extra.base_branch }} and post its link
to ${{ vars.env.TRACKER_URL }} with the token ${{ secrets.env.TRACKER_TOKEN }}.
  • サーベイ変数 は追加変数です: サーベイ変数 version への回答は ${{ vars.extra.version }} で、シークレットの場合は ${{ secrets.extra.NAME }} です。環境変数として 渡されるサーベイ変数は、代わりに env の下にあります。回答されなかったサーベイ変数は 空文字列になります。
  • 存在しない変数はタスクを失敗させます。 エージェントが起動する前に、その式を示すメッセージとともに 失敗します。Semaphore は、プロンプトに穴があるままエージェントを実行しません。
  • 誤って記述された式はテンプレートの保存時に拒否されます: ${{ secrets.TOKEN }} には extra も env もありません。
  • その他の式はそのまま残されます。 Semaphore に属するのは vars.… と secrets.… だけなので、 プロンプトでエージェントに ${{ github.sha }} を含むワークフローを書かせることができます。 vars または secrets の式をテキストのまま残すには、その前にドル記号をもう 1 つ付けます: $${{ secrets.env.NAME }}。
  • 値はそのまま挿入されます。 文字列は記述どおりに、リストやオブジェクトは JSON として使用されます。 値の中の式が再度検索されることはありません。
  • プロンプトに挿入されたシークレットは、 エージェントがそれをどこで繰り返しても、タスクログ内で マスクされます。

プロンプト内のシークレットは、プロンプトの残りの部分とともにモデルプロバイダーに送信されます。シークレットは エージェントのツールに渡すことを推奨します: 変数グループのシークレット環境変数として、または MCP サーバーのトークンとして。

タスクのプロンプト

テンプレートで プロンプト チェックボックスを有効にすると、タスクフォームにテンプレートのプロンプトが 表示され、1 回の実行に限って変更できます。スケジュール、インテグレーション、ワークフローのステップも 同じ方法で独自のプロンプトを保持できます。API では、タスクのパラメーターで送信します:

{
  "template_id": 12,
  "params": {
    "prompt": "Review the changes of the last release and list the risky ones."
  }
}

タスクで指定されたプロンプトは、記述されたとおりにそのまま使用されます: プロンプト式が置き換えられるのは、 テンプレートに保存されたプロンプト内だけです。これにより、プロジェクトの変数とシークレットは、 タスクの実行しか許可されていないユーザーから保護されます。テンプレートが許可していない場合、プロンプトを伴うタスクは 拒否されます。

MCP サーバー

3 つのサーバーを持つ MCP インベントリのフォーム

エージェントはリモート MCP サーバーのツールを呼び出せます: 課題 トラッカー、ドキュメント検索、独自のサービスなどです。サーバーは新しい MCP インベントリ 種別のインベントリに保持され、1 つのインベントリを Claude Code と Codex の両方のテンプレートで使用できます。

フィールド 説明
スイッチ オフにしたサーバーは一覧に残りますが、エージェントには渡されません。
名前 エージェントがサーバーを識別する名前: 英字、数字、-、_ で 64 文字まで。
URL HTTP または SSE 上で MCP を話すサーバーの http または https アドレス。URL 内のユーザー名やパスワードは受け付けられません。
トークン 任意。エージェントはこれを Authorization ヘッダーで bearer トークンとして送信します。
  • 保存されたトークンは暗号化して保存され、二度と表示されません: 置き換えるには新しいトークンを入力するか、 削除します。
  • トークンはエージェントのプロセスの環境変数として渡されます。 エージェントの設定ファイル、 コマンドライン、タスクログには書き込まれません。
  • エージェントが取得するのは、これらのサーバーだけです。 呼び出しを確認する人がいないため、 ツールは事前に承認されます。また、Semaphore を実行しているユーザーに設定された MCP サーバーは 使用されません。

タスクログ

Claude Code タスクのログ: モデル、ツール呼び出し、サブエージェント、サマリー

タスクログは、エージェントの作業をリアルタイムで表示します。コマンドラインツールが出力する JSON イベントではなく、 トランスクリプトとして表示されます:

  • エージェントの テキスト。1 行ずつ表示されます。Codex はメッセージが完成した時点で出力します。
  • ツール呼び出し。それぞれ 1 行で表示されます: 状態、MCP サーバーとツール、引数。行をクリックすると 引数と結果が表示されます。失敗した呼び出しは最初から開いた状態です。
  • サブエージェント: サブエージェントの行にはその名前が付きます。
  • Claude Code の実行の 最初の行 には、モデルと MCP サーバーが示され、接続できなかったものは 赤で表示されます。
  • 最後の サマリー: ターン数、所要時間、トークン、コスト。エージェントが報告する範囲で 表示されます。

Raw ログ は、同じログをプレーンテキストとして表示します。

セキュリティ

  • エージェントはコマンドを実行します。 コマンドラインツールが与える権限の範囲内で、エージェントは リポジトリのディレクトリを読み取りおよび変更し、タスクを実行するユーザーとしてプログラムを実行し、 MCP サーバーのツールを呼び出せます。エージェントテンプレートには、作業に必要な最小限の権限を持つ リポジトリとトークンを与え、サーバーから切り離しておきたい作業には別のランナーを 使用してください。
  • すべてのタスクは、エージェント専用の設定ディレクトリを持ちます (CLAUDE_CONFIG_DIR、 CODEX_HOME)。これはタスクのために作成され、終了後に削除されます。Semaphore を実行しているユーザーの 設定、ログイン、MCP サーバーはエージェントに届かず、変数グループの変数でこのディレクトリを 別の場所に向けることはできません。
  • プロンプトとエージェントが読み取る内容は、モデルプロバイダーに送信されます: リポジトリのファイル、 コマンドの出力、ツールの結果。
  • リポジトリはエージェントに指示を与えることができます。 エージェントが読み取るファイル、課題、 ツールの結果に含まれるテキストは、エージェントの動作を変える可能性があります。強力なトークンを持つエージェントを、 自分が管理していないコンテンツに向けないでください。
  • トークンとシークレットはタスクログ内でマスクされます: MCP サーバーのトークンと プロンプトに挿入されたシークレットは ******** に置き換えられます。
  • 変数とシークレットは、エージェントのコマンドラインには載りません。 コマンドラインはプロセス一覧に 表示されるためです。

ドキュメント

ユーザーガイドには、すべてのフィールドとルールを記載したページがあります: AI エージェント。