Semaphore UI의 새로운 기능 2.21

CTO 및 창업자
개발 중

AI 코딩 에이전트를 실행하는 Claude Code Agent 및 Codex Agent 템플릿, 프롬프트 표현식, MCP 인벤토리, 트랜스크립트 형식의 작업 로그를 추가합니다.

AI와 이 릴리스에 대해 대화하기

Claude Code Agent 템플릿 편집기

Semaphore UI 2.21은 AI 코딩 에이전트를 실행합니다. 두 개의 새로운 앱인 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에서처럼 변수 그룹과 설문 변수의 값을 프롬프트에 넣습니다.
  • 작업의 프롬프트: 템플릿은 작업을 시작하는 사람이 한 번의 실행에 한해 프롬프트를 교체하도록 허용할 수 있습니다.
  • 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도 없습니다.
  • 다른 표현식은 그대로 유지됩니다. vars.…와 secrets.…만 Semaphore에 속하므로, 프롬프트에서 에이전트에게 ${{ github.sha }}가 들어간 워크플로를 작성하도록 요청할 수 있습니다. vars 또는 secrets 표현식을 텍스트로 유지하려면 그 앞에 달러 기호를 하나 더 붙입니다: $${{ secrets.env.NAME }}.
  • 값은 있는 그대로 삽입됩니다. 문자열은 작성된 대로, 목록이나 객체는 JSON으로 사용됩니다. 값 안에서 표현식을 다시 찾지 않습니다.
  • 프롬프트에 넣은 시크릿은 에이전트가 어디에서 반복하든 작업 로그에서 마스킹됩니다.

프롬프트의 시크릿은 프롬프트의 나머지 부분과 함께 모델 공급자에게 전송됩니다. 시크릿은 에이전트의 도구에 전달하는 방식을 권장합니다: 변수 그룹의 시크릿 환경 변수로, 또는 MCP 서버의 토큰으로.

작업의 프롬프트

템플릿에서 프롬프트 체크박스를 활성화하면 작업 양식에 템플릿의 프롬프트가 표시되고 한 번의 실행에 한해 변경할 수 있습니다. 일정, 통합 또는 워크플로 단계도 같은 방식으로 자체 프롬프트를 가질 수 있습니다. API에서는 작업 매개변수로 전송합니다:

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

작업이 지정한 프롬프트는 작성된 그대로 사용됩니다: 프롬프트 표현식은 템플릿에 저장된 프롬프트에서만 치환됩니다. 이렇게 하면 프로젝트의 변수와 시크릿이 작업 실행만 허용된 사용자에게 노출되지 않습니다. 템플릿이 허용하지 않으면 프롬프트를 포함한 작업은 거부됩니다.

MCP 서버

서버 세 개가 있는 MCP 인벤토리 양식

에이전트는 원격 MCP 서버의 도구를 호출할 수 있습니다: 이슈 트래커, 문서 검색, 자체 서비스 등입니다. 서버는 새로운 MCP 인벤토리 유형의 인벤토리에 보관되며, 하나의 인벤토리를 Claude Code와 Codex 템플릿 모두에서 사용할 수 있습니다.

필드 설명
스위치 꺼진 서버는 목록에 남아 있지만 에이전트에 전달되지 않습니다.
이름 에이전트가 서버를 식별하는 이름: 문자, 숫자, -, _로 최대 64자.
URL HTTP 또는 SSE를 통해 MCP로 통신하는 서버의 http 또는 https 주소. URL에 포함된 사용자 이름이나 비밀번호는 허용되지 않습니다.
토큰 선택 사항. 에이전트는 이를 Authorization 헤더에 bearer 토큰으로 보냅니다.
  • 저장된 토큰은 암호화되어 저장되며 다시 표시되지 않습니다: 교체하려면 새 토큰을 입력하거나, 제거하십시오.
  • 토큰은 에이전트 프로세스의 환경 변수로 전달됩니다. 에이전트의 설정 파일, 명령줄, 작업 로그에는 기록되지 않습니다.
  • 에이전트는 정확히 이 서버들만 받습니다. 호출을 확인할 사람이 없으므로 서버의 도구는 사전에 승인되며, Semaphore를 실행하는 사용자에게 설정된 MCP 서버는 사용되지 않습니다.

작업 로그

Claude Code 작업의 로그: 모델, 도구 호출, 하위 에이전트, 요약

작업 로그는 에이전트의 작업을 진행되는 대로 표시합니다. 명령줄 도구가 출력하는 JSON 이벤트가 아니라 트랜스크립트로 표시합니다:

  • 에이전트의 텍스트. 한 줄씩 표시됩니다. Codex는 메시지가 완성되면 출력합니다.
  • 도구 호출. 각각 한 행으로 표시됩니다: 상태, MCP 서버와 도구, 인수. 행을 클릭하면 인수와 결과를 볼 수 있습니다. 실패한 호출은 처음부터 펼쳐져 있습니다.
  • 하위 에이전트: 하위 에이전트의 행에는 그 이름이 표시됩니다.
  • Claude Code 실행의 첫 번째 행에는 모델과 MCP 서버가 표시되며, 연결되지 않은 서버는 빨간색으로 표시됩니다.
  • 마지막의 요약: 턴 수, 소요 시간, 토큰, 비용. 에이전트가 보고하는 범위 내에서 표시됩니다.

Raw 로그는 같은 로그를 일반 텍스트로 표시합니다.

보안

  • 에이전트는 명령을 실행합니다. 명령줄 도구가 부여하는 권한 범위 안에서 에이전트는 저장소 디렉터리를 읽고 변경하고, 작업을 실행하는 사용자로 프로그램을 실행하고, MCP 서버의 도구를 호출할 수 있습니다. 에이전트 템플릿에는 작업에 필요한 최소한의 권한을 가진 저장소와 토큰을 제공하고, 서버와 분리해 두고 싶은 작업에는 별도의 러너를 사용하십시오.
  • 모든 작업은 에이전트의 자체 설정 디렉터리를 갖습니다 (CLAUDE_CONFIG_DIR, CODEX_HOME). 이 디렉터리는 작업을 위해 생성되고 작업 후 제거됩니다. Semaphore를 실행하는 사용자의 설정, 로그인, MCP 서버는 에이전트에 전달되지 않으며, 변수 그룹의 변수로 이 디렉터리를 다른 곳으로 돌릴 수 없습니다.
  • 프롬프트와 에이전트가 읽는 내용은 모델 공급자에게 전송됩니다: 저장소의 파일, 명령의 출력, 도구의 결과.
  • 저장소가 에이전트에게 지시할 수 있습니다. 에이전트가 읽는 파일, 이슈 또는 도구 결과에 포함된 텍스트가 에이전트의 동작을 바꿀 수 있습니다. 강력한 토큰을 가진 에이전트를 직접 통제하지 않는 콘텐츠에 연결하지 마십시오.
  • 토큰과 시크릿은 작업 로그에서 마스킹됩니다: MCP 서버의 토큰과 프롬프트에 넣은 시크릿은 ********로 대체됩니다.
  • 변수와 시크릿은 에이전트의 명령줄에 나타나지 않습니다. 명령줄은 프로세스 목록에 표시되기 때문입니다.

문서

사용자 가이드에 모든 필드와 규칙을 다루는 페이지가 있습니다: AI 에이전트.