Novidades no Semaphore UI 2.21

CTO e fundador
Em desenvolvimento

Adiciona os modelos Claude Code Agent e Codex Agent para executar agentes de IA para programação, expressões no prompt, um inventário MCP e um log da tarefa em forma de transcrição.

Converse sobre esta versão com IA

O editor de um modelo Claude Code Agent

O Semaphore UI 2.21 executa agentes de IA para programação. Duas novas aplicações, Claude Code Agent e Codex Agent, iniciam a ferramenta de linha de comando do agente em um repositório e passam a ela um prompt. O agente trabalha por conta própria e relata o que faz no log da tarefa. O prompt pode receber valores dos grupos de variáveis e das variáveis de survey, o agente pode chamar as ferramentas de servidores MCP, e o log mostra o trabalho dele como uma transcrição.

O Semaphore 2.21 está em desenvolvimento. Ele ainda não foi lançado: esta página descreve o que já está no branch de desenvolvimento e vai crescer até o lançamento. Os detalhes ainda podem mudar.

Destaques

  • Modelos Claude Code Agent e Codex Agent: um agente é um modelo como qualquer outro. Inicie-o manualmente, por um agendamento, por uma integração ou como uma etapa de um workflow.
  • Expressões no prompt: ${{ vars.extra.NAME }}, ${{ vars.env.NAME }}, ${{ secrets.extra.NAME }} e ${{ secrets.env.NAME }} inserem no prompt os valores dos grupos de variáveis e das variáveis de survey, como no GitHub Actions.
  • Prompt de uma tarefa: um modelo pode permitir que quem inicia uma tarefa substitua o prompt em uma única execução.
  • Inventário MCP: um novo tipo de inventário com os servidores MCP remotos cujas ferramentas o agente pode chamar. Os tokens são armazenados criptografados.
  • Log da tarefa do agente: o texto do agente, as chamadas de ferramentas, os subagentes e um resumo com os tokens e o custo, atualizados enquanto o agente trabalha.
  • Isolamento: cada tarefa recebe seu próprio diretório de configuração do agente, vazio. Os tokens e os segredos inseridos no prompt são mascarados no log.

Modelos de agentes de IA

O menu Novo modelo com os itens Claude Code Agent e Codex Agent

Um modelo de agente inicia o Claude Code ou o Codex em um diretório de um repositório e passa a ele um prompt. Use-o para o trabalho que você descreveria a um colega: revisar o último commit, encontrar e corrigir um teste que falha, atualizar uma dependência e abrir um pull request.

Para criar um, acesse Modelos de tarefa, clique em Novo modelo e depois em Claude Code Agent ou Codex Agent.

Campo Descrição
Repositório O repositório em que o agente trabalha. O Semaphore o clona ou atualiza antes da tarefa, como em qualquer outro modelo.
Caminho do subdiretório Opcional. O diretório do repositório em que o agente é iniciado.
Servidores MCP Opcional. Um inventário MCP com os servidores cujas ferramentas o agente pode chamar.
Grupos de variáveis Variáveis e segredos para o agente: a chave de API, os valores para as expressões no prompt, as variáveis de ambiente do processo do agente.
Prompt A instrução com a qual o agente é executado.
Argumentos da CLI Argumentos adicionais para o comando do agente: o modelo, os limites, as permissões.
Variáveis de survey Perguntas feitas quando a tarefa é iniciada. As respostas podem ser inseridas no prompt.

O que é necessário. A ferramenta de linha de comando do agente deve estar instalada na máquina que executa as tarefas, o servidor do Semaphore ou o runner:

Aplicação Comando Instalação
Claude Code Agent claude npm install -g @anthropic-ai/claude-code
Codex Agent codex npm install -g @openai/codex

O Semaphore habilita uma aplicação quando encontra o comando dela no PATH na inicialização. Um administrador também pode habilitá-la e definir o caminho do executável na página Aplicações.

Como o agente é executado. O Semaphore inicia o agente no diretório do repositório com o prompt na entrada padrão, de modo que o prompt não aparece na lista de processos:

Aplicação Comando
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> -
  • Nada é mantido entre as tarefas. Cada execução é uma nova sessão do agente. O que deve sobreviver a uma execução pertence ao repositório: um commit, um pull request, um arquivo.
  • Em runners Docker e Kubernetes o agente é executado em um contêiner, portanto a imagem do executor deve conter o comando claude ou codex.

Chave de API

O agente obtém sua chave de API de uma variável de ambiente. Adicione a chave a um grupo de variáveis do modelo como uma variável de ambiente secreta:

Aplicação Variável Também aceita
Claude Code Agent ANTHROPIC_API_KEY CLAUDE_CODE_OAUTH_TOKEN
Codex Agent OPENAI_API_KEY CODEX_API_KEY

O login do usuário que executa o Semaphore não é usado: o diretório de configuração do agente é criado para a tarefa e está vazio, portanto uma chave de um grupo de variáveis é a única forma de autenticação. Se nenhuma das variáveis estiver definida, o log da tarefa informa qual adicionar.

Expressões no prompt

O prompt de um modelo pode receber valores dos grupos de variáveis do modelo. Escreva uma expressão entre chaves duplas, como no GitHub Actions, e o Semaphore a substitui quando a tarefa é iniciada:

Expressão Valor
${{ vars.extra.NAME }} Uma variável extra de um grupo de variáveis.
${{ vars.env.NAME }} Uma variável de ambiente de um grupo de variáveis.
${{ secrets.extra.NAME }} Uma variável extra secreta de um grupo de variáveis.
${{ secrets.env.NAME }} Uma variável de ambiente secreta de um grupo de variáveis.
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 }}.
  • As variáveis de survey são variáveis extra: a resposta à variável de survey version é ${{ vars.extra.version }}, e uma secreta é ${{ secrets.extra.NAME }}. Uma variável de survey entregue como variável de ambiente fica em env. Uma variável de survey deixada sem resposta resulta em uma string vazia.
  • Uma variável que não existe faz a tarefa falhar antes de o agente iniciar, com uma mensagem que indica a expressão. O Semaphore não executa um agente com uma lacuna no prompt.
  • Uma expressão escrita incorretamente é recusada ao salvar o modelo: ${{ secrets.TOKEN }} não tem extra nem env.
  • As outras expressões são deixadas como estão. Apenas vars.… e secrets.… pertencem ao Semaphore, portanto um prompt pode pedir ao agente que escreva um workflow contendo ${{ github.sha }}. Para manter uma expressão vars ou secrets como texto, coloque mais um cifrão antes dela: $${{ secrets.env.NAME }}.
  • Um valor é inserido como está. Uma string é usada como foi escrita, uma lista ou um objeto como JSON. O valor não é examinado novamente em busca de expressões.
  • Um segredo inserido no prompt é mascarado no log da tarefa, onde quer que o agente o repita.

Um segredo no prompt é enviado ao provedor do modelo junto com o restante do prompt. Prefira entregar um segredo às ferramentas do agente: como variável de ambiente secreta de um grupo de variáveis ou como token de um servidor MCP.

Prompt de uma tarefa

Com a caixa de seleção Prompt habilitada no modelo, o formulário da tarefa mostra o prompt do modelo e permite alterá-lo em uma única execução. Um agendamento, uma integração ou uma etapa de workflow podem manter um prompt próprio da mesma forma. Pela API, envie-o nos parâmetros da tarefa:

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

Um prompt fornecido por uma tarefa é usado exatamente como está escrito: as expressões no prompt são substituídas apenas no prompt armazenado no modelo. Isso mantém as variáveis e os segredos do projeto longe de quem só pode executar tarefas. Se o modelo não permitir, uma tarefa que traz um prompt é recusada.

Servidores MCP

O formulário de um inventário MCP com três servidores

Um agente pode chamar as ferramentas de servidores MCP remotos: um issue tracker, uma busca na documentação, um serviço próprio. Os servidores são mantidos em um inventário do novo tipo Inventário MCP, e um único inventário atende tanto aos modelos Claude Code quanto aos modelos Codex.

Campo Descrição
Interruptor Um servidor desativado permanece na lista e não é entregue ao agente.
Nome O nome pelo qual o agente conhece o servidor: até 64 letras, dígitos, - e _.
URL Um endereço http ou https de um servidor que fala MCP sobre HTTP ou SSE. Um nome de usuário ou uma senha na URL não são aceitos.
Token Opcional. O agente o envia no cabeçalho Authorization como bearer token.
  • Um token salvo é armazenado criptografado e nunca mais é exibido: digite um novo para substituí-lo, ou remova-o.
  • O token chega ao agente como uma variável de ambiente do processo dele. Ele não é gravado no arquivo de configuração do agente, na linha de comando nem no log da tarefa.
  • O agente recebe exatamente esses servidores. As ferramentas deles são aprovadas antecipadamente, já que não há ninguém para confirmar uma chamada, e os servidores MCP configurados para o usuário que executa o Semaphore não são usados.

Log da tarefa

O log de uma tarefa Claude Code: o modelo, as chamadas de ferramentas, um subagente, o resumo

O log da tarefa mostra o trabalho do agente à medida que acontece, como uma transcrição e não como os eventos JSON que a ferramenta de linha de comando imprime:

  • O texto do agente, linha por linha. O Codex imprime uma mensagem quando ela está completa.
  • As chamadas de ferramentas, cada uma em uma linha: o estado, o servidor MCP e a ferramenta, os argumentos. Clique em uma linha para ver os argumentos e o resultado. Uma chamada que falhou fica aberta desde o início.
  • Os subagentes: as linhas de um subagente são marcadas com o nome dele.
  • A primeira linha de uma execução do Claude Code indica o modelo e os servidores MCP, com os que não se conectaram em vermelho.
  • O resumo ao final: o número de turnos, a duração, os tokens e o custo, na medida em que o agente os informa.

Log bruto mostra o mesmo log como texto simples.

Segurança

  • Um agente executa comandos. Dentro das permissões que a ferramenta de linha de comando lhe concede, o agente pode ler e alterar o diretório do repositório, executar programas como o usuário que executa as tarefas e chamar as ferramentas dos seus servidores MCP. Dê a um modelo de agente um repositório e tokens com os direitos mais restritos que bastem para o trabalho, e um runner separado para o trabalho que você quer manter afastado do servidor.
  • Cada tarefa tem seu próprio diretório de configuração do agente (CLAUDE_CONFIG_DIR, CODEX_HOME), criado para a tarefa e removido depois dela. As configurações, os logins e os servidores MCP do usuário que executa o Semaphore não chegam ao agente, e uma variável de um grupo de variáveis não pode redirecionar o diretório.
  • O prompt e o que o agente lê vão para o provedor do modelo: os arquivos do repositório, a saída dos comandos, os resultados das ferramentas.
  • Um repositório pode instruir o agente. O texto nos arquivos que o agente lê, em uma issue ou no resultado de uma ferramenta pode mudar o que o agente faz. Não aponte um agente com tokens poderosos para conteúdo que você não controla.
  • Tokens e segredos são mascarados no log da tarefa: os tokens dos servidores MCP e os segredos inseridos no prompt são substituídos por ********.
  • Variáveis e segredos ficam fora da linha de comando de um agente, onde a lista de processos os mostraria.

Documentação

O guia do usuário tem uma página com cada campo e cada regra: Agentes de IA.