
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 または 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 サーバー

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

タスクログは、エージェントの作業をリアルタイムで表示します。コマンドラインツールが出力する JSON イベントではなく、 トランスクリプトとして表示されます:
- エージェントの テキスト。1 行ずつ表示されます。Codex はメッセージが完成した時点で出力します。
- ツール呼び出し。それぞれ 1 行で表示されます: 状態、MCP サーバーとツール、引数。行をクリックすると 引数と結果が表示されます。失敗した呼び出しは最初から開いた状態です。
- サブエージェント: サブエージェントの行にはその名前が付きます。
- Claude Code の実行の 最初の行 には、モデルと MCP サーバーが示され、接続できなかったものは 赤で表示されます。
- 最後の サマリー: ターン数、所要時間、トークン、コスト。エージェントが報告する範囲で 表示されます。
Raw ログ は、同じログをプレーンテキストとして表示します。
セキュリティ
- エージェントはコマンドを実行します。 コマンドラインツールが与える権限の範囲内で、エージェントは リポジトリのディレクトリを読み取りおよび変更し、タスクを実行するユーザーとしてプログラムを実行し、 MCP サーバーのツールを呼び出せます。エージェントテンプレートには、作業に必要な最小限の権限を持つ リポジトリとトークンを与え、サーバーから切り離しておきたい作業には別のランナーを 使用してください。
- すべてのタスクは、エージェント専用の設定ディレクトリを持ちます (
CLAUDE_CONFIG_DIR、CODEX_HOME)。これはタスクのために作成され、終了後に削除されます。Semaphore を実行しているユーザーの 設定、ログイン、MCP サーバーはエージェントに届かず、変数グループの変数でこのディレクトリを 別の場所に向けることはできません。 - プロンプトとエージェントが読み取る内容は、モデルプロバイダーに送信されます: リポジトリのファイル、 コマンドの出力、ツールの結果。
- リポジトリはエージェントに指示を与えることができます。 エージェントが読み取るファイル、課題、 ツールの結果に含まれるテキストは、エージェントの動作を変える可能性があります。強力なトークンを持つエージェントを、 自分が管理していないコンテンツに向けないでください。
- トークンとシークレットはタスクログ内でマスクされます: MCP サーバーのトークンと
プロンプトに挿入されたシークレットは
********に置き換えられます。 - 変数とシークレットは、エージェントのコマンドラインには載りません。 コマンドラインはプロセス一覧に 表示されるためです。
ドキュメント
ユーザーガイドには、すべてのフィールドとルールを記載したページがあります: AI エージェント。
