Skip to main content
Glama
H234598

codex-master-mcp

by H234598

codex-master

The Hive(레거시 이름: codex-master, codex-master-mcp, Masterjet)는 절전/확장 가능한 Codex Agentinnen 함대를 위한 로컬 MCP 제어 평면입니다. Fleet Registry는 활성 시리즈에 대한 권위 있는 소스이며, 레거시 풀 사양은 호환성을 위해서만 유지됩니다.

버전 관리되는 로컬 Wiki 소스는 docs/wiki/Home.md에서 시작됩니다. 이들은 이 저장소에서 표준(canonical)으로 유지되며, GitHub Wiki 게시를 의미하지 않습니다. Fleet-Overview, G-Serie 및 Goddess-Reporting 계약: docs/operations/goddess-reporting.md.

리소스 모니터 H4 운영자 수명 주기

codex-master-resource-monitor.service는 인자 없는 %h/.local/bin/codex-master-resource-monitor 엔트리포인트를 실행합니다. 이 서비스는 중앙에서 구성된 Hive 상태 저장소만 수신하며, 고정된 resources 하위 트리 아래에 완전한 1Hz 세대(generation)를 게시합니다. H4 수명 주기는 기본 설치와 분리되어 있습니다.

기본적으로 codex-master-resource-monitor.service는 제공되지만 설치되거나 활성화되지는 않습니다. 어떤 설치 프로그램, MCP 도구, 또는 표준 테스트도 이 유닛을 암시적으로 활성화하거나 시작하지 않습니다. 다음의 명시적 운영자 명령만이 그렇게 합니다:

./bin/codex-master-mcp install-resource-monitor --force
./bin/codex-master-mcp resource-monitor-status

설치 프로그램은 변형(mutation) 전에 두 개의 경계가 있는 일반 저장소 유닛과 두 개의 대상 유닛을 모두 검증합니다. 하나의 협력적 프로세스 잠금(install_lock()/flock)이 소스 검증, 스테이징, 트랜잭션, 데몬 리로드, 활성화 및 롤백에 걸쳐 있습니다. 이는 협력적 설치 프로세스를 직렬화합니다. 이 경계 밖의 동일 UID/root 또는 User-Systemd 네임스페이스 조작은 H4가 다루는 적대적 뮤텍스 위협이 아닙니다. 소스 읽기는 바운드 읽기 전후에 identity/type/size/mode/mtime 검사를 포함한 no-follow FD를 사용합니다. 대상 디렉터리 체인은 누락된 접미사에 대해서만 안전하게 생성된 후 FD와 (dev, ino)로 고정됩니다. 안전하지 않은 상위 디렉터리, 심볼릭 링크, 또는 그룹/전역 쓰기 가능한 기존 디렉터리는 fail-closed됩니다. 공유 sticky 상위 디렉터리는 허용됩니다. 최종 ~/.config/systemd/user는 사용자 소유이고 비그룹/전역 쓰기 가능해야 합니다.

두 유닛 모두 첫 변형 전에 스테이징되고 검증됩니다. 기존 유닛은 FD-상대적으로 고유한 검사된 백업으로 이동됩니다. 스테이징된 유닛은 no-replace link로 설치됩니다. EEXIST는 외부 대상을 보존합니다. 유닛별 저널은 원본/스테이징 identity, 내구성, 이동, 복원 및 정리를 기록합니다. 롤백은 저널링된 설치 identity만 제거하고, 백업을 no-overwrite로 복원하며, 외부 파일/백업을 보존하고, 필요 시 수동 복구를 보고합니다. 롤백 중에는 바이트나 모드가 추론되지 않습니다.

두 유닛 변형이 모두 내구성 있게 된 후, 설치 프로그램은 원래 대상 경로를 no-follow로 다시 열고, 고정된 (dev, ino), 보유된 표준 잠금 identity, 그리고 두 저널링된 설치 유닛 identity를 데몬 리로드 전에 그리고 enable --now 전에 다시 검증합니다. 불일치가 있으면 다음 외부 작업이 허용되지 않으며, 롤백 리로드/상태 추측도 허용되지 않습니다. 파일 롤백은 고정된 FD만 사용합니다. 상위 재바인딩은 기본 리로드 없음과 원래 FD를 통한 롤백을 의미합니다. 데몬 리로드는 enable/start 전에 실행되며, 오직 codex-master-resource-monitor.service만 enabled/started됩니다. 슬라이스는 별도로 enabled/started되지 않습니다.

이것은 원자적 쌍 교체가 아닙니다. 각 작업은 파일/이름별로 원자적이지만, 두 rename 사이의 충돌은 혼합된 쌍을 남길 수 있습니다. 프로세스 저널은 메모리에 있으며 충돌 시 손실됩니다. 복구는 파일시스템 증거, 유닛/systemd 상태, resource-monitor-status, 그리고 수동 검사/복구만 사용합니다. 상태는 혼합 또는 외부 상태를 감지하며 운영자는 수동으로 복구해야 합니다. 롤백은 두 유닛, 임시/백업 정리, 데몬 리로드, UnitFileState 복원 및 ActiveState 복원을 독립적으로 시도합니다. 알 수 없는 상태는 추측을 하지 않습니다. 초기 not-found는 비활성 LoadState=not-found에서만 유효합니다. 그렇지 않으면 UnitFileState는 disabled, enabled 또는 enabled-runtime이어야 하고, ActiveState는 active/inactive여야 합니다. 상태 복원은 정확한 영구 vs 런타임 플래그를 사용하며 UnitFileState 실패 후 ActiveState 복구를 건너뛰지 않습니다. 공개 오류는 코드/반환 코드만 포함하며 경로나 원시 출력은 포함하지 않습니다.

매니페스트 존재는 훅 신뢰가 아닙니다. 누락, 잘못된 형식, 비표준 또는 오래된 V2 네이티브 커버리지는 manual_hook_trust_or_new_session_required를 보고합니다. 명시적 사용자 /hooks 신뢰 이후의 새로운 일반 Codex 세션만이 새로운 V2 커버리지를 생성합니다. 어떤 명령도 신뢰를 자동화하거나 합성 네이티브 상태를 편집하지 않습니다.

비활성 자식 없는 codex-master.slice는 실제 FragmentPath와 구체화된 유닛이 있는 경우에만 예상됩니다. 누락되거나 합성된 FragmentPath는 설치된 상태가 아닌 차단 요인입니다. 준비 상태는 두 유닛 모두에 대한 실제 프래그먼트, 활성 모니터 자식, 그리고 신선한 유효한 스냅샷을 요구합니다. 라이브 스폰은 resource-monitor-status가 녹색일 때만 제공됩니다. 기본 install 동작은 변경되지 않습니다. ProtectHome=tmpfs와 PrivatePIDs=yes는 관련 없는 Home 및 프로세스 데이터를 숨깁니다. BindReadOnlyPaths는 설치된 모니터 레이아웃, 고정 카탈로그 및 중앙 Hive 상태만 노출합니다. D8은 resources 및 기존 잠금에 대해서만 쓰기 액세스를 제한합니다.

  • /home/teladi/.codex-agents/a1부터 /home/teladi/.codex-agents/a100까지

  • /home/teladi/.codex-agents/b1부터 /home/teladi/.codex-agents/b100까지

  • /home/teladi/.codex-agents/c1부터 /home/teladi/.codex-agents/c100까지

레거시 선택자 aba1b1에 매핑됩니다. botha1,b1에 매핑됩니다. 시리즈 선택자 a-series, b-series, c-seriesall은 상태, 스킬, 기능, 임대 상태, 시작/중지 및 워치독 호출에 사용할 수 있습니다. 선택자는 대소문자를 구분하지 않으므로 A1, a1, A-Seriesa-series는 동일하게 해석됩니다. 숫자 단일 Agentin 선택자는 현재 선택자 정책을 사용합니다. 기본 정책은 A/B 교대입니다: 1=a1, 2=b1, 3=a2, 4=b2 등입니다. 다음으로 변경하십시오:

./bin/codex-master-mcp selector-policy --series a,b,c
./bin/codex-master-mcp selector-preview --series a,b,c --limit 6

정책은 비공개 MCP 상태에 저장되며 프로세스에 대해 CODEX_MASTER_AGENT_SELECTOR_SERIES=a,b,c로 재정의할 수도 있습니다. Teamleiterinnen은 Masterjet을 통해 agent_start, agent_claim 및 구조화된 agent_assign* 도구로 fremde Bienen을 직접 스폰할 수 있습니다. 임대, 인증 검사 및 쓰기 범위는 조정 경계입니다. 이는 사용 가능한 fremde Bienen을 사용하지 않아야 하는 이유가 아닙니다. 원래 인증된 홈은 a1b1로 보존됩니다. 추가 홈은 의도적으로 슬림하고 기본적으로 절전 상태입니다. 이들은 자체 CODEX_HOME, 래퍼, 구성, tmux 세션 이름, 임대 및 메타데이터를 가지며, 대용량 읽기 전용 스킬/플러그인/모델 캐시 파일은 시리즈 템플릿에서 심볼릭 링크될 수 있습니다. C-시리즈 홈은 다른 계정을 사용할 수 있을 때까지 의도적으로 인증되지 않은 상태입니다.

래퍼는 각 홈의 codex 런처 파일을 통해 인스턴스를 시작합니다. 중앙 해석이 유효한 튜플을 공급하기 전에, 기본값은 중간 추론 수준의 gpt-5.6-luna입니다:

--model gpt-5.6-luna -c 'model="gpt-5.6-luna"' -c 'model_reasoning_effort="medium"' --yolo -s danger-full-access --search

tmux를 PTY 백엔드로 사용합니다. 전체 터미널 출력은 ~/.local/state/codex-master-mcp/raw/ 아래의 로컬 상태 파일에만 기록됩니다. 새 원시 로그는 파일당 5MiB로 제한되며, 관리되는 원시 로그 디렉터리는 기본적으로 최대 20개의 파일을 유지합니다. 준비된 원시 로그 파일은 no-follow 배타적 의미론으로 생성됩니다. 직접 원시 로그 작성기는 또한 관리되는 상태 디렉터리와 그 상위 체인이 심볼릭 링크가 아닌 실제 디렉터리여야 하며, 레거시 원시 로그 디렉터리가 심볼릭 링크인 경우 무시됩니다. Agentin 러너는 심볼릭 링크가 아닌 일반 실행 파일이어야 합니다. 할당 로그 읽기는 일반 파일을 요구하고, 크기가 제한되며, 일반 오류를 사용합니다. 비공개 상태 파일 및 디렉터리 오류는 일반적이며 로컬 상태 경로를 반환하지 않습니다. Agentin 메타데이터 존재 확인은 심볼릭 링크를 따르지 않으며, 메타데이터 읽기는 심볼릭 링크 및 과대 파일을 거부하고, 메타데이터 읽기 오류는 로컬 파일 경로 대신 일반 마커를 사용합니다. Safe-tail 로그 읽기는 비정규 원시 로그 대상을 무시합니다. Tmux 제어 오류는 반환되거나 발생하기 전에 수정되고 크기가 제한됩니다. MCP 도구 응답은 기본적으로 원시 출력을 반환하지 않으며 로컬 원시 로그 경로를 반환하지 않고 원시 로그 존재 여부만 노출합니다. 텍스트는 tmux를 통해 Codex TUI에 붙여넣어지고 일반 Enter로 제출됩니다. 여러 줄 프롬프트는 bracketed-paste 마커를 사용하여 제출 전에 전체 프롬프트가 하나의 컴포저 항목으로 유지되도록 합니다.

붙여넣기 전에 send, assign-*, report-request는 현재 보이는 팬 꼬리에서 식별 가능한 Codex TUI 입력 프롬프트 마커를 잠시 기다립니다. Agentin이 여전히 시작 경고 중이거나, 시작 텍스트만 표시하거나, 입력 프롬프트가 보이지 않으면, 프롬프트가 시작 화면에 유실되는 대신 재시도 가능한 agent_input_not_ready, paste_attempted: false, raw_output: not_returned로 변경이 실패-폐쇄됩니다. 기존 codex-agent-mcp 상태 디렉터리의 기존 메타데이터는 마이그레이션 폴백으로 여전히 읽힙니다. 외부 tmux, git, codex mcp 하위 프로세스는 시간 초과로 제한되어 MCP 호출이 무기한 대기하는 대신 실패-폐쇄됩니다. MCP 등록 확인은 명령 출력의 광범위한 하위 문자열이 아닌 codex mcp get의 정확한 command: 필드를 비교합니다.

tmux 세션을 변경하거나 전송하는 Agentin 수명 주기 작업은 비공개 no-follow 잠금 파일로 Agentin별로 직렬화되므로, 서로 다른 Agentinnen은 여전히 독립적으로 실행될 수 있지만 동일한 Agentin에 대한 동시 시작/중지/전송은 서로 겹칠 수 없습니다. 이 프로세스가 세션을 생성하기 전에 tmux new-session이 실패하면 정리는 준비된 원시 로그만 제거하고 다른 MCP 프로세스에 속할 수 있는 기존 세션을 종료하지 않습니다. 변경 도구는 또한 Agentin별 임대를 사용하므로 두 Codex-CLI 인스턴스가 동시에 동일한 Agentin에 조용히 할당하거나 전송할 수 없습니다. 임대 충돌은 클라이언트 신원을 노출하지 않고 구조화된 재시도 메타데이터(error_code, retryable, retry_after_seconds, 남은 임대 초)를 반환합니다. agent_claim은 외부 Biene가 사용 중일 때 기본적으로 무한 재시도합니다. 유한한 wait_seconds 값은 계속 사용할 수 있지만 600초로 제한되지 않습니다. 단일 즉시 클레임 시도에는 --no-wait를 사용하십시오. 기본 폴링 간격은 30초이고 최대 폴링 간격은 900초입니다.

명시적 클레임은 Agentin이 더 이상 실행되지 않고, 해당 Agentin 홈을 사용하는 프로세스가 없으며, 로컬 유휴 증거가 최소 120초 이상일 때 외부 보유 임대도 복구합니다. 이 중지된 고아 복구는 --no-recover-stopped로 비활성화할 수 있습니다. 암시적 전송/보고/중단 변경에는 적용되지 않으며 실행 중인 외부 Agentin을 절대 덮어쓰지 않습니다. 수명이 짧은 CLI 호출은 Codex가 제공할 때 CODEX_THREAD_ID에서 안정적이고 숨겨진 소유자를 파생하므로 동일한 Schwesterinstanz가 별도의 CLI 호출에서 클레임, 할당, 보고서 요청, 해제를 수행할 수 있습니다. CODEX_MASTER_MCP_INSTANCE_ID는 제어된 세션에 대한 명시적 재정의로 유지됩니다. 파생된 신원은 공개 응답에 절대 반환되지 않습니다.

agent_start는 일시적인 새 임대만 사용하고 성공적인 시작 후 해제하므로 수명이 짧은 로컬 CLI 명령이 다음 운영자 명령을 차단하지 않습니다. 연결된 Codex-CLI 인스턴스가 시작 후에도 Agentin을 예약 상태로 유지해야 하는 경우 agent_claim을 명시적으로 사용하십시오.

6개 이상의 Agentinnen으로 해석되는 변경 시작/중지 선택기는 allow_broad_selector=true가 전달되지 않으면 실패-폐쇄됩니다. 이는 실수로 all/시리즈 작업이 풀의 큰 부분을 시작하거나 중지하는 것을 방지합니다. 작업 변경은 기본적으로 Agentin별 일반 auth.json을 요구합니다. agent_start, agent_claim, agent_send, agent_interrupt, agent_assign, agent_assign_readonly, agent_assign_live_data, agent_assign_write, agent_report_request는 인증이 없거나, 심볼릭 링크이거나, 일반 파일이 아니거나, 읽을 수 없거나, 너무 크면 실패-폐쇄됩니다. 상태/스킬/기능/임대/풀/중지/해제는 진단 및 정리에 사용할 수 있습니다. 명시적 로그인/부트스트랩 흐름에만 --allow-unauthenticated를 사용하십시오.

ChatGPT 인증의 경우 상태는 JWT 액세스 토큰 만료가 있을 때 이를 확인합니다. 만료된 액세스 토큰은 access_token_expired로 보고되며 해당 Agentin이 다시 로그인할 때까지 새 변경을 차단합니다. 하나의 회전 ChatGPT 새로 고침 토큰을 여러 Agentinnen에 복사하는 것은 지원되지 않습니다. 각 Agentin은 자체 로그인이 필요합니다.

agent_status는 반환하지 않고 제한된 팬/로그 텍스트를 분류하므로 호출자는 일반적인 "아직 응답 없음" 상태와 일일, 주간, 토큰, 할당량 또는 속도 제한 가능성을 구분할 수 있습니다. 분류는 기본 Agentinnen 모델 제한을 Spark 쓰기 모델 제한과 분리하고 메타데이터와 evidence: not_returned만 보고합니다. 제한 메타데이터는 실행 중인 세션 모델, 최신 할당 모델, 감지된 제한에 대해 추론된 모델을 분리합니다. 또한 팬 텍스트를 반환하지 않고 알려진 Codex TUI 시작/자리 표시자 컨텍스트를 분류하므로 호출자는 Agentin이 할당을 생산적 입력으로 받지 못했는지 알 수 있습니다.

공개 status, skills, capabilities, app-bridge-status, plugin-status, namespace-status, release-status, watchdog-status, timeout-policy, doctor 응답은 로컬 Agentin 홈, 러너, 저장소, 매니페스트 또는 작업 디렉터리 경로를 반환하지 않습니다. 대신 path_state, home_kind, cwd_state와 같은 상태/카테고리 메타데이터를 반환합니다. 공개 범위 확인, 작업 트리 상태, 명령 발췌 및 할당 감사 읽기도 절대 로컬 경로를 수정합니다. 할당 프롬프트는 여전히 Teamleiterin이 할당한 명시적 경로를 받습니다.

agent_wait는 호출자가 Agentin 출력을 자동으로 받지 않고 활동, 프로세스 종료 또는 분류된 제한을 기다릴 수 있게 합니다. 기본값은 120초이고 호출당 10분으로 제한됩니다. 폴링 간격은 기본 30초이고 900초로 제한됩니다. 할당은 비동기입니다. agent_waitagent_report_request는 관련 assignment_id를 최상위 수준에서 노출합니다. 해당 ID로 agent_assignment_report를 호출하면 작은 ANSI 제거, 수정된 터미널 발췌를 받습니다. 이것이 명시적 출력 경계입니다. 할당 메타데이터와 대기 결과는 데이터가 적게 유지됩니다.

fleet_watchdog는 원시 출력을 읽지 않고 유휴 Agentinnen을 확인합니다. 기본 유휴 임계값은 60초이며 에스컬레이션 전에 Agentin에게 간결한 보고서를 요청합니다. 보고서 유예 창은 기본 15초이므로 다음 systemd 타이머 패스는 Agentin이 보고할 한 간격을 가진 후에만 에스컬레이션할 수 있습니다. 설치된 systemd 슈퍼바이저는 --action stop을 사용하므로 사용되지 않는 Agentinnen은 활성 상태로 남는 대신 다시 절전 상태로 전환됩니다. 기본적으로 watchdog은 현재 서버가 임대한 Agentinnen만 변경합니다. systemd 슈퍼바이저는 --manage-unclaimed --quiet를 사용하여 다른 클라이언트가 보유한 활성 임대를 건너뛰면서 미클레임 또는 만료된 임대를 처리하고 사용자 저널에서 성공적인 JSON 노이즈를 피합니다.

각 fleet watchdog 실행은 관리되는 프로세스 홈과 tmux 세션에 대해 하나의 변경 불가능한 인메모리 fleet 스냅샷을 생성합니다. Agent 평가는 해당 스냅샷을 재사용합니다. 독립형 agent_status 호출은 레거시 실시간 쿼리 폴백을 유지합니다. 임대 해제 경로는 해제 직전에 실시간 세션/프로세스 신원을 재검증합니다. 사용할 수 없는 tmux 관찰은 알 수 없음으로 보고되고 watchdog 작업을 건너뜁니다. 중지된 세션으로 해석되지 않습니다.

usage-watchdogcodex-usage 스냅샷 상태를 소비하고 로컬 codex-usage 차단 마커를 작성하며 검증된 미래 재설정이 있는 계정의 실행 중인 Agentinnen을 중지합니다. 이미 과거인 검증된 재설정은 차단을 해제합니다. 알 수 없는 재설정은 실패-폐쇄 상태로 유지됩니다. agent_start, 클레임, 전송 및 보고서 요청 흐름은 watchdog이 다시 해제할 때까지 차단된 Agentin 사용을 거부합니다.

Related MCP server: claude-code-mcp

Fleet 계정, 시리즈 및 Gemini 헤드리스 작업

Fleet 레지스트리는 모든 공급자 지원 시리즈와 네이티브 A/B/C 구체화의 진실 공급원입니다. 프로젝트의 정식 이름은 The Hive입니다. 위의 레거시 이름은 유효한 별칭으로 유지됩니다. 먼저 읽기 전용 계정/시리즈 보기를 사용한 다음 stdin 전용 CLI 흐름을 통해 자격 증명을 로컬로 동기화하십시오:

python3 -m codex_master.server fleet account list
python3 -m codex_master.server fleet series list
python3 -m codex_master.server fleet provider-models --provider ollama_local
python3 -m codex_master.server fleet account sync-env --first-key 1 --last-key 30

비밀은 제어 센터 또는 stdin 흐름에서 일시적으로 입력될 수 있지만 UI 상태에 표시되거나 저장되거나 UI 또는 일반 MCP 출력에 의해 반환되지 않습니다. 비밀은 비공개 사이드카에만 저장되며 레지스트리, 할당 또는 셸 기록의 일부가 절대 아닙니다. 계정 게이트는 구성된 비밀과 성공적인 승인 확인을 요구합니다. 오래되었거나 알 수 없는 Gemini 프로브는 호출 시 한 번 확인되므로 인접 프로젝트가 이 프로젝트를 오래된 것으로 만들지 않습니다. Gemini RPM/TPM/RPD 관찰은 프로젝트 범위입니다. 청구 계층과 지출 상한은 청구 계정에 의해 공유될 수 있습니다. 제공된 AI Studio 내보내기는 the-hive-1the-hive-2에 대해 Tier 1, the-hive-3, the-hive-4, the-hive-6the-hive-10에 대해 Tier 0을 확인합니다. 이는 프로젝트 범위 증거입니다. 로컬 계정 그룹은 프로젝트의 계층을 추론하는 데 사용되지 않습니다. 정확한 RPM/TPM/RPD 제한은 모델 및 프로젝트별로 다릅니다. 알려진 값은 제공된 스냅샷에 Rate Limit 테이블이 있는 프로젝트에 대해서만 가져오며 알 수 없는 값은 로컬에서 추측되지 않습니다. Tier 1의 문서화된 지출 가드는 롤링 10분당 $10이고 청구 계정 상한은 월 $250입니다. 로컬 사용량 계산기는 관찰된 RPM/TPM/RPD를 보고하며 이제 알려진 프로젝트/모델 쌍에 대해 제공된 AI Studio 스냅샷을 사용합니다. 제한을 모델별로 유지하고 적용 가능한 스냅샷이 없을 때 model_required 또는 limits_unknown_dashboard_required를 반환합니다. 지출 활용률은 API 키만으로는 청구 지출을 노출하지 않으므로 billing_export_required로 유지됩니다.

가져온 속도 제한 스냅샷:

모델

Tier 0

Tier 1

Gemini 3.1 Flash Lite

15 RPM / 250K TPM / 500 RPD

4K RPM / 4M TPM / 150K RPD

Gemini 3 Flash

5 RPM / 250K TPM / 20 RPD

1K RPM / 2M TPM / 10K RPD

Gemini 3.5 Flash

5 RPM / 250K TPM / 20 RPD

1K RPM / 2M TPM / 10K RPD

스냅샷 소스는 제공된 Tier 0 (kostenlos).mhtmlTier 1 (Billing).html입니다. AI Studio가 활성 프로젝트 제한을 변경하면 새로 고치십시오.

fleet_gemini_bootstrap_plan은 비밀 없는 호환성 드라이 플랜 도우미로만 유지됩니다. 폐기된 D/E/F 시리즈를 생성하지 않으며 런타임 활성화는 비공개 토큰 파일의 채워진 The_Hive_N 항목에서 비롯됩니다. 키 1–10은 키당 하나의 프로젝트가 있는 하나의 청구 계정에 속하며 키 11–20 및 21–30은 다음 두 계정을 위해 예약되어 있으며 해당 값이 존재할 때만 활성화됩니다. 선택적 설치 프로그램은 공식 안정 패키지 채널만 사용합니다:

NPM_CONFIG_PREFIX="$HOME/.local" ./scripts/install-gemini-cli
"$HOME/.local/bin/gemini" --version

설치 프로그램은 권한을 승격하는 대신 쓰기 불가능한 시스템 NPM 접두사를 거부합니다. 위와 같이 사용자 소유의 NPM_CONFIG_PREFIX를 명시적으로 설정하십시오.

Gemini 작업은 에이전트 전용 HOME/GEMINI_CLI_HOME, stdin 전용 작업 입력, 제한된 stream-json stdout/stderr, 프로세스 그룹 취소, 역할별 승인(plan은 Exploriererinnen, auto_edit은 Arbeitsbienen)을 사용합니다. CLI는 빈 --prompt로 명시적으로 headless 모드에 들어가며, 실제 작업은 stdin 전용으로 유지됩니다. yolo, -p -, Codex TUI 마커는 사용하지 않습니다. 할당 응답은 제한되고 파싱됩니다. 프롬프트, 자격 증명, 도구 이벤트, 원시 출력은 영구 메타데이터에 남지 않으며, 프로세스 출력은 제한된 상태로 유지됩니다.

생산적 headless 할당은 호출당 최대 7200초(120분)를 허용하며, 기본값은 600초로 유지됩니다.

레지스트리 모델이 auto인 Gemini 시리즈의 경우 Masterjet은 headless CLI를 gemini-3.1-flash-lite에 고정합니다. 이는 구조화된 Bauplan 감사용 저비용/고RPM 기본 모델입니다. 더 무거운 모델은 해당 시리즈에 명시적으로 구성된 경우에만 사용됩니다.

모든 Gemini API 프로브 또는 headless 작업은 또한 프로젝트별 영구 요청 예약(reservation)을 사용합니다. 예약은 활성 요청을 하나만 허용하고, 프로세스 및 재시작 전반에 걸쳐 최소 60초 간격을 적용하며, 확인된 429 이후 지수 백오프(15분 시작, 24시간 상한)를 적용합니다. 비공개 상태는 fleet/rate-limits.json에 저장되며, 잘못된 상태는 폐쇄 실패(fail closed)하고 격리되어 다른 요청을 허용하지 않습니다.

GTK 없는 fleet_control 뷰 모델과 control_center 컨트롤러는 서버와 동일한 제한 및 생성 검사를 적용합니다. 선택적 GTK3 페이지는 지연 로드되어 headless 임포트가 디스플레이 없이 유지됩니다. Cinnamon 어댑터는 스냅샷 스키마 v3, 시리즈 페이지당 최대 26개 시리즈와 25개의 표시 행을 사용하며, 제한된 행은 상태 전용입니다. 실제 제공자 자격 증명, 계정 프로브, Ollama 리소스 허용, 데스크톱 세션 수락은 명시적 로컬 게이트로 유지됩니다. Ollama 시리즈는 simple_only로 유지되며 복잡하거나 저장소를 변경하는 작업을 거부합니다. 구성된 별도 2-에이전트 리소스 상한과 호스트 압력 게이트가 적용되며, 전역 10-Bee 상한은 추가 상한으로 유지됩니다.

도구

  • agent_start: 선택된 Agentinnen 시작; all/시리즈 선택자는 6명 이상의 Agentinnen으로 해석될 때 allow_broad_selector=true가 필요합니다

  • agent_status: 원시 출력 없이 구조화된 상태, 응답 상태, 제한 분류 제공

  • agent_lease_status: 선택된 Agentinnen의 데이터 최소 임대 상태

  • agent_status, agent_lease_status, agent_skills, agent_skill_match, agent_capabilities의 광범위한 읽기 전용 선택자는 agents_limit/agents_offset으로 페이지 처리됩니다. 기본 페이지 크기는 30명의 Agentinnen이며 응답에는 total_counttruncated 메타데이터가 포함됩니다.

  • agent_claim: 한 명의 Agentin을 클레임하거나 갱신하며, 그녀가 바쁠 때 기본적으로 무한 재시도합니다. 명시적 클레임은 유예 기간 후 중지된 고아 임대를 복구할 수 있습니다

  • agent_release: 이 MCP 클라이언트의 Agentin 클레임을 해제합니다. 강제 해제는 상태 확인 후에만 수행합니다

  • agent_wait: 원시 출력 없이 활동/중지/제한 메타데이터를 대기하며, 기본 120초, 호출당 최대 10분

  • fleet_watchdog: 유휴 Agentinnen에게 보고서를 요청하고, 유예 창을 기다린 후 선택적으로 중단, 중지 또는 해제합니다(원시 출력 없음)

  • usage_watchdog: codex-usage 제한 블록을 로컬 Agentin 상태와 동기화하여, 차단된 실행 중 Agentinnen을 중지하고 codex-usage watchdog가 해제하면 로컬 블록 마커를 지웁니다

  • agent_send: 실행 중인 한 명의 Agentin에게 텍스트 전송

  • agent_interrupt: 실행 중인 한 명의 Agentin에게 Ctrl-C 전송

  • agent_stop: 선택된 Agentinnen 중지; all/시리즈 선택자는 6명 이상의 Agentinnen으로 해석될 때 allow_broad_selector=true가 필요합니다

  • agent_safe_tail: 명시적 상한, ANSI 제거, 편집된 발췌문. 다른 클라이언트가 보유한 활성 임대가 있으면 패널 또는 로그 출력을 읽기 전에 거부합니다. 로그 소스는 일반 원시 로그 파일만 읽습니다

  • agent_skills: 파일 내용 없이 데이터 최소 스킬 인벤토리

  • agent_skill_match: 한 명 또는 모든 Agentinnen이 명명된 스킬을 보유했는지 확인

  • agent_capabilities: 제한된 플러그인 페이지와 함께 요약된 모델, 스킬, 정책 기능

  • agent_scope_check: 쓰기 경로가 할당 범위 내에 유지되는지 확인

  • agent_assign: 명시적 경계가 있는 구조화된 스킬 인식 할당

  • agent_assign_readonly: 읽기 전용 Exploriererin 할당용 단축키

  • agent_assign_live_data: 현재 소스 또는 명시적 도구/액세스 제한 보고서가 필요한 읽기 전용 Web-/Live-Daten 할당용 단축키

  • agent_assign_write: Arbeitsbiene 쓰기 할당용 단축키

  • agent_assignments: 데이터 최소 할당 감사 로그

  • agent_last_assignment_status: 한 명의 Agentin에 대한 최신 할당 메타데이터

  • agent_report_request: 한 명의 Agentin에게 간결한 보고서 요청

  • agent_assignment_report: 알려진 할당에 대한 상한 편집 발췌문 읽기

  • agent_selector_policy: 서수 선택자 정책 표시 또는 설정(예: a,b 또는 a,b,c)

  • agent_selector_preview: 상태 변경 없이 숫자 선택자 매핑 미리보기

  • agent_selection_preview: 읽기 전용 Selection-/Admission-Kern을 통해 실제 fleet 후보 미리보기. Shadow 계획만 수립하고 실행하지 않습니다. 권위 있는 Hive 콜백과 작업별 실행기가 제공될 때까지 Enforced는 닫힌 상태로 유지됩니다. ServerAdmissionRuntime은 폐쇄 실패 경계를 제공하지만 작업을 실행하지는 않습니다

로컬 codex_master.admission 모듈은 이제 해당 예약 경계를 프로세스 내 폐쇄 실패 계약으로 제공합니다. 불변 레코드는 작업 버전, 부여/범위 다이제스트, 임대 기대치, 선택된 리소스를 바인딩합니다. 상태 변경은 개정 CAS를 사용하고, 예약 TTL은 30~120초로 제한되며, public()은 계정 키, 범위 경로 및 기타 비공개 바인딩을 제거합니다. 범위 중복, 에이전트/계정/계정-모델 용량, 읽기/읽기 대 쓰기 중복이 원자적으로 검사됩니다. FileAdmissionStore는 새 프로세스 복구를 위한 비공개 잠금과 원자적 상태 교체를 추가합니다. 잘못된 형식, 과대 크기, 심볼릭 링크 상태는 폐쇄 실패합니다. 제공자, 수명 주기, 임대 또는 네트워크 변경을 수행하지 않으며 아직 Enforced 실행에 연결되지 않았습니다.

codex_master.selection_service.SelectionService는 다음 로컬 오케스트레이션 계층입니다. 미리보기를 동일한 결정적 플래너에 위임하고, 주입된 런타임 호출 전에 재검증하며, 50/100/200ms 백오프로 최대 3회 재시도하고, 실패한 시도를 보상하며, 재실행 없이 충돌 증거를 조정합니다. codex_master.admission_runtime.ServerAdmissionRuntime은 이제 폐쇄 실패 서버 경계를 제공합니다. 권한, 저장소, 표준 범위 콜백은 권위 있는 Hive 레코드에서 와야 하며, 기존 Fleet 계정, 모델, Usage, 임대, 프로세스 ID, 인증, 러너 구성 검사가 고정 순서로 연결됩니다. 누락된 Hive 바인딩, 오래된 허용, 잘못된 게이트 증거 또는 콜백 오류는 런타임을 거부하며, 성공적인 재검증은 허용 개정당 단일 사용입니다. 어댑터 자체는 제공자를 클레임, 시작, 할당 또는 호출하지 않습니다. 비공개 크로스 프로세스 저장소는 자동 실행 경로가 current_admission_store()를 명시적으로 요청할 때 상태 로컬 admission-state.json/잠금 쌍에 뿌리를 둡니다. 생산적 Enforced 실행은 권위 있는 Hive 콜백과 작업별 실행기가 제공될 때까지 닫힌 상태로 유지됩니다.

Applet 상태는 읽기 전용 소스를 사용할 수 없을 때 제한된 fleet_snapshot_degradedwatchdog_snapshot_degraded 플래그를 노출합니다. 확인된 재설정이 이미 지난 고갈된 Usage-v2 창은 더 이상 계정을 차단하지 않습니다. 향후 또는 알 수 없는 재설정은 폐쇄 실패로 유지됩니다.

Hive 제어 평면

codex_master.hive 패키지에는 이제 제한된 제어 평면 기반이 포함됩니다. 엄격한 공개 구성, 비공개 상태, 주체 및 실행 바인딩, 저장소/권한 검사, 타입화된 메시지 및 디스패치 상태 머신, 추가 전용 결정, 출처 인식 메모리, DP 작업 큐, 단일 허용 경계. codex_master.selection 패키지는 기존 결정적 플래너 주변의 호환성 경계이며, 두 번째 선택기를 도입하지 않고 타입화된 모델-정책, 작업 분류, 소스, 공정성 상태, 수동 앵커 계약을 추가합니다.

Hive 상태, 검증, 마이그레이션, Selection 진단은 읽기 전용 MCP 도구로 노출됩니다. 권위 있는 Work-/Grant-/Repository-/Scope- 및 Lease 증거가 없으면 폐쇄 실패로 유지됩니다. 어떤 Hive 진단 도구도 제공자를 클레임, 시작, 할당 또는 호출하지 않습니다.

운영 세부 사항은 docs/account-aware-selection.md, docs/operations/hive-operations.md, docs/operations/selection-operations.md, docs/security/hive-security.md, docs/security/selection-privacy.md, docs/migration/hive-selection-migration.md에 문서화되어 있습니다. 공개적이고 비밀이 없는 구성 예제는 examples/에 있습니다: 에이전트 클래스, Hive 모드, 모델 정책.

  • worktree_create_for_agent: 한 명의 Agentin을 위한 격리된 git worktree 생성

  • worktree_status: 상한 git 상태 및 worktree 메타데이터

  • integration_status: 저장소 상태, diff 통계, 최근 할당 메타데이터

  • commit_ready_check: 통합/커밋을 위한 고정 준비 검사

  • master_app_bridge_status: App Bridge 매니페스트 및 커넥터 ID 상태

  • master_plugin_status: 플러그인 패키징, 플러그인 캐시 드리프트, App Bridge, MCP 등록 상태

  • master_namespace_status: 새 클라이언트에 대한 codex-master-mcp 등록, 시작, 플러그인 캐시 드리프트, tools/list 가시성 진단

  • master_release_status: 패키지 버전, 플러그인 매니페스트 버전, 로컬 태그, GitHub 릴리스 간 릴리스 드리프트 진단

  • master_watchdog_status: systemd Fleetwatchdog 상태, 설치된 유닛 강화, 집계 보안 점수 상태 진단

  • master_timeout_policy: MCP 시작, Agentin 클레임 재시도, Agentin 대기, 생산적 headless 할당, watchdog 감독, 숨겨진 CLI 임대 ID 소스에 대한 유효 타임아웃 및 폴링 정책 보고

  • master_applet_status: 1~6명의 구체적 Agentinnen에 대한 제한된 읽기 전용 스냅샷. Cinnamon 애플릿에서 사용되며 CLI에서 applet-status로 사용 가능

  • agent_pool_validate: 기계 판독 가능한 Agentinnen 풀 사양 검증

  • agent_pool_install: 사양에서 휴면 Agentinnen 홈 설치 또는 새로고침

  • agent_pool_status: 데이터 최소 풀 설치 수 검사

  • agent_pool_copy_auth: 하나의 소스 auth.json을 여러 설치된 Agentinnen에 명시적으로 복사, 기본적으로 드라이런

  • agent_pool_destroy_pool: 설치된 Agentinnen 홈의 보호된 제거

  • agent_doctor: 원시 출력 없이 구조화된 진단

  • agent_selection_options: 유효한 클래스/수명 주기/모델/추론 조합만 포함하는 계정 및 권한 필터링된 1차 제안

  • fleet_account_list, fleet_gemini_bootstrap_plan, fleet_series_list, fleet_account_upsert, fleet_account_set_secret, fleet_account_disable, fleet_account_probe, fleet_account_delete, fleet_provider_models, fleet_series_plan, fleet_series_apply, fleet_series_disable, fleet_series_delete: 제한된 Fleet 계정/제공자/시리즈 관리. 비밀 입력은 stdin 전용이며 변경은 generation CAS를 사용합니다

/mcp는 Teamleiterin/메인 Codex 인스턴스에서만 codex-master-mcp를 표시해야 합니다. 관리형 Agentinnen은 의도적으로 Masterjet MCP 도구를 받지 않습니다. 이들은 외부에서 제어되며, 할당이 명시적으로 허용하는 경우에만 네이티브 Subagentinnen을 사용할 수 있습니다.

tool_search는 로컬 stdio MCP 네임스페이스에 대해 권위 있는 소스가 아닙니다. 영향을 받는 Codex 클라이언트에서 /mcp를 사용하거나 이 저장소의 namespace-status를 사용하세요.

plugin-statusnamespace-status는 또한 저장소 플러그인 매니페스트 버전이 로컬 플러그인 캐시에 설치되어 있는지 여부를 보고하지만, 캐시 경로는 반환하지 않습니다.

namespace-status의 경우, 최상위 ok는 MCP 서버, 로컬 플러그인 캐시, 활성 Codex 클라이언트 구성, 활성 CODEX_HOME 컨텍스트가 모두 준비되었음을 의미합니다.

mcp_server_ready, plugin_cache_ready, client_config_ready, active_home_ready는 서버 시작을 오래된 클라이언트/플러그인 상태, 불일치 구성, 또는 관리형 Agentin 홈과 분리하기 위해 별도로 유지됩니다.

running_process_summary.namespace_visibility는 집계된 클라이언트 홈 범주만 보고하므로, 형제 Codex 세션이 사용자 지정 홈에 자체 MCP 구성이 필요한 시점이나 관리형 Agentin 홈이 Master MCP 도구를 노출하지 않아야 하는 시점을 식별할 수 있습니다.

로컬 CLI

중앙 클래스/라이프사이클/모델 리졸버

첫 시작 또는 시리즈 할당 전에, 요청 모델은 특정 대상 Agentin에 대해 agent_selection_options를 조회합니다. 응답에는 현재 허용된 클래스, 라이프사이클, 모델, 추론 수준 및 이들의 유효한 조합만 포함됩니다. 이 제안은 참고용이며 아무것도 예약하지 않습니다. 해당 generation은 후속 호출에서 known_generation으로 전달될 수 있습니다. options_changed는 계정 또는 카탈로그 관련 변경 사항을 보고합니다. Teamleiterin에 대한 첫 제안에서는 정확히 하나의 합법적인 튜플이 표시되어야 합니다: class=teamleiterin, lifecycle=persistent, model=gpt-5.6-terra, reasoning=xhigh. 정책상 xhigh는 최소값이자 최대값입니다. 다른 Teamleiterin 튜플은 제안될 수 없습니다.

agent_start, agent_assign 및 할당 바로가기는 선택적 필드 class, lifecycle, model, reasoning_effort, complexity를 동일한 리졸버에 전달합니다. 이후 두 번째 선택 정책은 적용되지 않습니다. 공개 라이프사이클은 ephemeral, binding, persistent입니다. invocation은 입력 별칭으로 허용되며 ephemeral로 반환됩니다.

호환 가능한 명시적 지정은 유지됩니다. 클래스 프로필, 라이프사이클, 모델 기능, 계정 관련 가용성, 추론 최소값 및 최대값은 하드 경계입니다. 클래스가 누락된 경우 적절한 위임 가능한 비관리 클래스가 선택됩니다. 관리 클래스는 자동으로 승격되지 않습니다. 라이프사이클이 누락된 경우 클래스 프로필이 적용됩니다. Arbeiterinnen 기본값:

  • 단순 쓰기 작업 + ephemeral: gpt-5.3-codex-spark/low

  • 읽기 전용 또는 단순하지 않은 쓰기 작업 + ephemeral: gpt-5.6-luna/medium

  • binding: gpt-5.6-luna/high

  • persistent: gpt-5.6-luna/xhigh; 여기서 xhigh는 동시에 최소값입니다

Spark를 계정에서 사용할 수 없거나 작업 검사가 이를 거부하면 기본값은 Luna로 대체됩니다. Spark는 모델 요청이 없는 단순 쓰기 작업의 기본값일 뿐입니다. Arbeiterin에 대해 명시적으로 요청된 알 수 없거나 사용할 수 없는 모델은 안전하게 gpt-5.6-luna로 대체되며, 절대 Spark로 대체되지 않습니다. 호환 가능한 명시적 effort는 유지되거나 대체 모델 및 클래스/라이프사이클 경계에 맞게 조정됩니다. 클래스에 맞지 않거나 너무 약한 지정도 하드 경계 내에서 대체됩니다. Gottbiene와 Koenigin은 Sol에 바인딩된 상태로 유지됩니다. selection.fallback, 요청된 값과 유효 값, 안정적인 reason_codes는 명확한 오류/대체 메시지를 제공합니다. 요청 모델은 이후 중단하거나 다른 제안된 조합으로 다시 요청할 수 있습니다. Spark -> Luna -> Terra -> Sol로의 유효한 승격은 클래스 및 effort 경계 내에서 가능합니다. ultra는 절대 허용되지 않습니다.

Teamleiterin은 영구적으로 고정되어 있으며 정확히 gpt-5.6-terraxhigh와 함께 사용합니다. xhigh는 그녀에게 최소값이자 최대값입니다. 사용할 수 없는 필수 모델 또는 effort는 대체 없이 하드 오류입니다. required_model_unavailable:gpt-5.6-terra 또는 required_model_effort_unavailable:gpt-5.6-terra:xhigh. 이는 특히 Teamleiterin에게 적용됩니다: 시작과 할당은 중앙 리졸버를 공유하며 절대 Sol, Luna, Spark 또는 다른 effort로 대체할 수 없습니다.

관리 클래스는 영구적으로 고정되어 있으며 첫 실제 사용자 접촉 시 이름으로 자신을 소개합니다: Gottbiene는 gpt-5.6-sol/max를 사용하고, Koenigin은 gpt-5.6-sol/xhigh를 사용하며, Teamleiterin은 정확히 gpt-5.6-terra/xhigh를 사용합니다. Koenigin, Teamleiterin 및 모든 Arbeiterklassen의 경우 xhigh가 절대 상한입니다. max를 사용할 수 있는 것은 Gottbiene뿐입니다.

표준 운영 절차는 Selection Operations에 있습니다. 버전 관리된 카탈로그 codex-agent-classes.jsoncodex-model-policy.json은 권위 있는 소스로 유지됩니다. README와 스킬은 두 번째 선택 정책을 정의하지 않습니다.

리소스 인지 스폰 제안

agent_spawn_offers는 가능한 로컬 용량에 대한 읽기 전용 MCP 힌트입니다. MCP tools/call의 예:

{"name":"agent_spawn_offers","arguments":{"required_slots":1}}

이 워크트리에서 동일한 CLI 명령:

PYTHONPATH=src python -m codex_master.server spawn-offers --required-slots 1
./bin/codex-master-mcp spawn-offers --required-slots 1

PYTHONPATH=src는 이 워크트리의 Python 호출에 필요합니다: 로컬 editable 설치가 다른 소스 상태를 가리킬 수 있습니다.

제안은 참고용이며 5초 동안 유효하고 아무것도 예약하지 않습니다 (reservation: "none"). start는 admission 잠금 하에 새 tmux 시작 전에 사용 가능한 총 슬롯을 다시 확인합니다. 신뢰할 수 있는 총 수가 없으면 제안은 비어 있습니다. 데이터 부족 응답에는 reason 코드만 포함되며 /proc 내용, tmux 출력, 로컬 경로 또는 환경 텍스트는 포함되지 않습니다. 15초 대기 안내와 함께 재시도 가능합니다.

새 시작에 대한 임시 제한:

  • 리소스 압력 제한은 기존 값으로 구성되고 활성 상태로 유지됩니다: CPU, 로드, I/O 대기 및 RAM은 스폰을 fail-closed로 차단할 수 있습니다.

  • 구성된 Ollama 2개 제한은 유지되며 전역 10개 제한보다 먼저 적용됩니다.

  • 총 최대 10 Bienen; 실행 중인 Masterjet 세션과 활성 및 미확인 네이티브 Subagentinnen이 함께 집계됩니다.

  • 10 Bienen부터 추가 Biene는 하드 거부됩니다.

  • required_slots는 1에서 10 사이입니다.

거부된 admission 응답에는 안정적인 reason_codes 외에 구조화된 errors 테이블이 포함됩니다. 각 항목은 code, title, explanation, rule, action을 제공합니다. 원시 메트릭이나 로컬 상태 데이터는 포함되지 않습니다.

코드

의미

running_agent_limit

전역 10개 제한에 이미 도달했습니다.

insufficient_slots

요청이 남은 총 슬롯에 완전히 맞지 않습니다.

session_metrics_unavailable

Masterjet이 총 수를 신뢰할 수 있게 결정할 수 없습니다.

policy_invalid

구성된 값 또는 enforcement 플래그가 유효하지 않습니다.

cpu_metrics_unavailable

CPU 증거가 없습니다. 압력 enforcement가 활성화된 경우 관련됩니다.

memory_metrics_unavailable

메모리 증거가 없습니다. 압력 enforcement가 활성화된 경우 관련됩니다.

cpu_pressure_high

활성 CPU 제한을 초과했습니다.

io_pressure_high

활성 I/O 대기 제한을 초과했습니다.

memory_pressure_high

활성 메모리 제한을 초과했습니다.

ollama_concurrency_limit

구성된 활성 Ollama 2개 제한에 도달했습니다.

ollama_simple_task_only

작업이 Ollama capability 게이트를 위반합니다.

CODEX_MASTER_SPAWN_PRIORITY는 유일한 스폰 환경 구성입니다. 쉼표로 구분된 우선순위 목록(기본값 mcp_host)이며, 데이터로만 읽히고 중복 제거되며 셸 명령이나 네트워크 대상으로 절대 실행되지 않습니다. 해당 텍스트는 응답에 반영되지 않습니다. 현재 정확한 로컬 라우트 값 mcp_host만 제안을 생성할 수 있습니다. developer_vmsandbox는 이 목록에 있더라도 제안되지 않습니다. 이 버전에는 원격 실행이 없습니다.

제안은 임대, 메타 파일 또는 할당 감사 항목을 생성하지 않습니다. 인증, 범위, 라우팅, 모델, 사용량 및 기존 admission 게이트는 실제 시작 또는 할당 시 계속 적용됩니다. 서버나 세션이 없는 깨끗한 tmux 상태는 실행 중인 Agentinnen 0개로 집계됩니다. 측정 오류, /proc 오류 및 기타 모든 tmux 오류는 fail-closed입니다. 공개 오류는 제한되고 편집된 상태로 유지됩니다.

네이티브 Subagentinnen은 시작과 중지를 Masterjet에 보고합니다. 따라서 활성 및 미확인 항목은 이후의 모든 슬롯 결정에 포함됩니다. 할당 프롬프트 정책은 추가 스폰 전에 새로운 전체 확인을 요구합니다. 이 MCP 경로를 우회하는 모델은 Codex 자체 사전 스폰 훅이 없으면 Masterjet이 기술적으로 가로챌 수 없습니다. developer_vm은 다음 모든 전제 조건이 충족된 경우에만 제안 가능해질 수 있습니다:

  • 실제 VM에 대한 실제 reachability/health 프로브

  • 인증된 전송 및 호스트 키 검증/고정

  • 호스트 간 분산 임대/예약

  • 제한된 원격 실행(시간 초과 및 제한된 출력)

  • 실제 대상에 대한 종단 간 통합 테스트

그때까지 VM 백엔드는 완전히 생략됩니다.

cd /home/teladi/codex-master
python3 -m codex_master.server install          # create ~/.local/bin/codex-master-mcp + codex mcp add
python3 -m codex_master.server doctor          # smoke check (codex, tmux, state path, JSON result)
python3 -m codex_master.server uninstall       # remove mcp registration and local symlink
python3 scripts/codex-master-cinnamon-applet install --dry-run
python3 scripts/codex-master-cinnamon-applet install --no-reload
python3 scripts/codex-master-cinnamon-applet verify

python3 -m codex_master.server start both --cwd /home/teladi/codex-master
python3 -m codex_master.server status
python3 -m codex_master.server selector-policy
python3 -m codex_master.server selector-policy --series a,b,c
python3 -m codex_master.server selector-preview --limit 6
python3 -m codex_master.server selection-preview --series d --task-kind simple --admission-mode shadow --sp1a --limit 8
python3 -m codex_master.server lease-status all --agents-limit 30
python3 -m codex_master.server claim b --forever --poll-interval-seconds 30
python3 -m codex_master.server claim b --no-wait
python3 -m codex_master.server claim b --no-recover-stopped
python3 -m codex_master.server wait a --timeout-seconds 120 --poll-interval-seconds 30
python3 -m codex_master.server watchdog active --idle-seconds 60 --poll-interval-seconds 15 --report-grace-seconds 15 --action stop --manage-unclaimed --quiet
python3 -m codex_master.server capabilities all --agents-limit 30
python3 -m codex_master.server skills all --agents-limit 30
python3 -m codex_master.server skills a --include-names --limit 20 --names-offset 20 --plugins-offset 20 --plugins-limit 20
python3 -m codex_master.server skill-match all codex-security:security-scan --agents-limit 30
python3 -m codex_master.server scope-check --scope src/codex_master --write-path src/codex_master/server.py
python3 -m codex_master.server assign-readonly a --skill codex-security:security-scan --scope src/codex_master/server.py --task "Pruefe nur lesend und berichte knapp."
python3 -m codex_master.server assign-live-data a --task "Wie ist das Wetter gerade in Berlin?" --live-data-topic "Wetter Berlin heute"
python3 -m codex_master.server assign-write b --scope .github/workflows --write-path .github/workflows/ci.yml --task "Haerte nur die CI-Datei."
python3 -m codex_master.server assignments all --limit 20
python3 -m codex_master.server last-assignment a
python3 -m codex_master.server assignment-report a ASSIGNMENT_ID --source pane --lines 40 --chars 4000
python3 -m codex_master.server integration-status
python3 -m codex_master.server commit-ready-check
python3 -m codex_master.server app-bridge-status
python3 -m codex_master.server plugin-status
python3 -m codex_master.server namespace-status
python3 -m codex_master.server release-status
python3 -m codex_master.server watchdog-status
python3 -m codex_master.server timeout-policy
python3 -m codex_master.server fleet-recovery-status
python3 -m codex_master.server fleet-recovery-retry
python3 -m codex_master.server pool validate --spec codex-agent-pool.json
python3 -m codex_master.server pool install --spec codex-agent-pool.json --target-dir "$HOME/.codex-agents" --codex-bin /usr/local/bin/codex
python3 -m codex_master.server pool status --spec codex-agent-pool.json
python3 -m codex_master.server pool copy_auth --spec codex-agent-pool.json --from-agent a1 --to a-series
python3 -m codex_master.server pool destroy_pool --spec codex-agent-pool.json --yes
python3 -m codex_master.server send a "Kurzer Auftrag"
python3 -m codex_master.server release b
python3 -m codex_master.server tail a --source pane --lines 20 --chars 2000
python3 -m codex_master.server stop both

Agentinnen 풀 사양

저장소에는 일반적이고 기계가 읽을 수 있는 codex-agent-pool.jsonschemas/codex-agent-pool.schema.json이 포함되어 있습니다. 현재 설치된 네이티브 풀은 5개의 A 홈, 3개의 B 홈, 3개의 C 홈을 사용합니다. a1b1은 인증된 소스 홈으로 유지됩니다. b92는 별도로 보존된 활성 홈이며 병합된 플릿 인벤토리에 표시됩니다. Gemini 시리즈는 Fleet 레지스트리를 통해 관리되며 이 네이티브 풀 사양의 일부가 아닙니다. 풀 사양 읽기는 일반 UTF-8 JSON 파일만 허용하고, 심볼릭 링크되거나 과도하게 큰 사양 파일을 거부하며, 사양 경로를 공개 오류 응답에 포함하지 않습니다. 풀 검증은 시리즈, 별칭 및 인증된 Agentinnen에 대한 개수와 상태 표시만 반환합니다. 구체적인 이름은 에코되지 않습니다. 풀 설치 또한 생성된 codex 래퍼와 config.toml 파일을 Agentin별 일반 파일로 유지하고, 대상에 영향을 주지 않고 심볼릭 링크 항목을 교체하며, 런타임 디렉터리를 실제 디렉터리로 검증하고, 일반 설치된 풀 마커를 작성합니다. 풀 상태는 마커, 모든 예상 홈, 래퍼, 구성 및 필수 공유 자산 링크가 존재하고 유효한 경우에만 ok를 보고합니다. 공유 자산 진단은 개수만 제공합니다. 로컬 링크 대상과 풀 경로는 반환되지 않습니다. 풀 상태는 또한 구체적인 시리즈 이름을 에코하지 않고 시리즈 개수를 반환합니다.

사양은 지도일 뿐입니다. 실제 인증 자료는 여전히 홈별 auth.json입니다(예: ~/.codex-agents/a1/auth.json). 일반 설치는 인증 자료를 절대 복사하지 않습니다.

두 가지 설치 경로가 지원됩니다:

./bin/codex-master-mcp pool install --spec codex-agent-pool.json --target-dir "$HOME/.codex-agents"
./scripts/install-agent-pool --spec codex-agent-pool.json --target-dir "$HOME/.codex-agents"

Codex CLI 바이너리가 /usr/local/bin/codex가 아닌 경우 --codex-bin을 사용하세요. 일반 설치는 인증 자료를 절대 복사하지 않습니다. 대량 인증 전파의 경우, 먼저 --yes 없이 pool copy_auth를 실행하여 개수를 확인한 다음, 의도적인 경우 --yes로 반복하세요. copy_authauth.json만 복사하고, 소스 Agentin이 대상 선택기의 일부인 경우 건너뛰며, 소스 Agentin 홈이 실제 디렉터리여야 하며, 인증 내용, 소스 Agentin ID 또는 요청된 대상 선택기를 절대 반환하지 않습니다.

일반 풀 모델에서 auth.json에 심볼릭 링크나 하드링크를 사용하지 마십시오. 인증 파일은 작으므로 복사본을 유지하면 각 Agentin이 격리됩니다. 심볼릭 링크는 no-follow 신뢰 경계를 위반하고, 하드링크는 여러 Agentin이 하나의 inode를 공유하게 됩니다.

전체 명령 세트는 docs/agent-pool.md를, auth-copy 안전성 모델은 docs/auth-copy.md를 참조하십시오.

Cinnamon 설치 프로그램은 원자적 교체, 검증된 롤백 트리 하나, 전용 작업 잠금, 그리고 제한된 소스/대상 검증을 통해 애플릿을 사용자별 Xlet 디렉터리에 복사합니다. install --dry-run은 파일시스템 또는 D-Bus 변경을 수행하지 않으며, --no-reload는 CI 및 임시 홈 스모크 테스트에 유용합니다. verify는 데스크톱 세션이 사용 가능한 경우 실행 중인 Cinnamon Xlet도 추가로 확인합니다.

Cinnamon 애플릿: Flottenmanagement

codex-master@H234598은 P3/P3a 읽기 전용 상태 애플릿입니다. 표시되는 패널 제목은 항상 Flottenmanagement입니다. 애플릿 상태 스키마 v4를 명시적으로 요청하며, v1~v3 스키마는 기존 호출자를 위해 변경되지 않은 상태로 유지됩니다.

각 스키마 v4 새로고침은 하나의 제한된 tmux 세션 인벤토리를 사용합니다. 실행 중인 모든 알려진 codex-master Agentin이 자동으로 발견되어 고정된 6행 제한까지 표시됩니다. 외부 tmux 세션은 무시됩니다. tracked-agents는 더 이상 표시되는 함대를 정의하지 않습니다. 활성 Agentin이 남긴 빈 행에 휴면 Agentin만 고정할 뿐입니다. 따라서 기본값 a1,b1은 자동 발견을 제한하지 않습니다. 활성 관리 Agentin이 6개를 초과하면 무제한 메뉴 대신 제한된 오버플로 표시가 생성됩니다.

네이티브 Codex-Subagentin은 관리되는 tmux Agentin과 혼합되지 않습니다. 공식 SessionStart, SubagentStart, SubagentStop, SessionEnd 훅은 전용 제한 레지스터를 유지합니다. 애플릿은 이 레지스터를 별도의 Native Bienen (N) 하위 메뉴에만 6개의 고정된 비반응형 자식 행으로 렌더링합니다. 네이티브 행은 상태 전용이며 작업 또는 컨텍스트 토큰을 포함하지 않습니다.

애플릿은 기껏해야 하나의 제한된 codex-master-mcp applet-status 자식 프로세스를 시작하며 리소스 스냅샷을 읽거나 리소스 모니터를 시작하지 않습니다. 스키마 v4는 제한된 리소스 게이트 상태, 병목, 추세, 신뢰도, 프로필 힌트, 스냅샷 세대만 추가합니다. 잘못되었거나 퇴보한 리소스 세대는 사용 불가로 렌더링됩니다. 애플릿은 셸을 호출하지 않습니다.

상태 모델은 세 가지 관심사를 분리합니다:

  • activity_state: running, sleeping, mixed 또는 unknown;

  • backend_state: ok, degraded 또는 unavailable;

  • control_state: ready, blocked, mixed 또는 unknown.

휴면 Agentin은 정상이며 그 자체로 백엔드 상태를 저하시키지 않습니다. 실패한 새로고침은 마지막 유효 스냅샷을 유지하고 이를 오래된 것으로 표시합니다. 응답에는 고정된 상태 필드와 개수만 포함됩니다. 프롬프트, 로그, 프로세스 ID, 경로, 임대 소유자, 임대 ID, 원시 출력은 반환되지 않습니다.

resource-status --format compact|json|markdown은 MCP 도구가 아닌 로컬 운영자 CLI입니다. 검증된 ResourceOperatorStatus 프로젝션만 렌더링합니다. 센서 레이블, cgroup 범위 ID, 경로, PID, 원시 기록, stdout, stderr, 자격 증명, 절대 사용 가능 메모리 증거는 절대 반환되지 않습니다.

네 가지 애플릿 설정은 다음과 같습니다:

  • tracked-agents: 쉼표로 구분된 a1c100; 자동 활성 발견이 용량을 남길 때 휴면 행으로 고정할 16개의 구체적 ID, 대소문자 정규화 및 중복 제거됨; 기본값 a1,b1;

  • refresh-on-open: 메뉴를 열 때 새로고침; 기본값 켜짐;

  • background-refresh: 선택적 주기적 새로고침; 기본값 꺼짐;

  • refresh-interval-seconds: 15~3600초; 기본값 60.

잘못된 에이전트, 스위치 또는 간격 값은 구성 오류를 표시하고 안전한 기본값으로 폴백하며 백그라운드 작업을 비활성화하고 프로세스 argv에 도달하지 않습니다. 허용 범위를 벗어난 유한 새로고침 간격은 15~3600초로 클램프됩니다. 메뉴에는 수동 새로고침, 애플릿 관리, 요약 하나, 관리 행 최대 6개, 그리고 별도로 제한된 Native-Bienen 하위 메뉴가 포함됩니다.

Koenigin만 Masterjet을 재시작하거나 다시 로드하거나 설치하거나 플러그인 캐시를 동기화할 수 있습니다. 다른 역할은 상태를 검사하고 검증하며 이러한 작업을 Koenigin에게 권장할 수 있지만 실행해서는 안 됩니다.

MCP/플러그인 및 애플릿을 저장소 소유 설치 프로그램으로 설치하십시오:

./bin/codex-master-mcp install
./scripts/codex-master-cinnamon-applet install --dry-run
./scripts/codex-master-cinnamon-applet install
./scripts/codex-master-cinnamon-applet verify

전체 CLI 참조는 저장소 매뉴얼 페이지 codex-master-mcp(1)입니다. 설치하지 않고 결정적 압축 출력을 빌드하거나 소스를 직접 렌더링하십시오:

./scripts/codex-master-manpage build --output-dir /tmp/codex-master-man
groff -man -Tutf8 man/man1/codex-master-mcp.1

codex-master-mcp install은 일반 hooks/hooks.json, hooks/native_spawn_admission.py, hooks/native_bee_event.py 파일을 포함한 플러그인을 개인 플러그인 캐시에 동기화합니다. Codex 훅 신뢰 상태를 변경하지 않으며 변경해서도 안 됩니다. 현재 상위 Codex 세션에서 /hooks를 열고 5개의 codex-master 정의를 검사한 후 명시적으로 신뢰하십시오: 차단 PreToolUse 허용 훅 하나와 수명주기 훅 네 개. 그런 다음 저장소에서 완전히 새로운 상위 Codex 세션을 시작하십시오. MCP 재연결, 상태 또는 에이전트 시작은 그 새 세션을 대체하지 않습니다. 이 수동 단계가 성공할 때까지 네이티브 스폰 허용 또는 Native-Bienen 수명주기 적용이 활성 상태라고 주장하지 마십시오.

활성 애플릿 트리를 롤백하려면:

./scripts/codex-master-cinnamon-applet rollback

install은 일반 비하드링크 소스 파일을 스테이징하고 해시하며, 심볼릭 링크된 소스/대상 경로를 거부하고, Cinnamon의 ReloadXlet을 통해 이 UUID만 다시 로드하며, 배포 실패 시 이전 트리를 복원하고 다시 로드합니다. verify는 바이트 단위로 동일한 설치 파일과 GetRunningXletUUIDs applet의 실행 중인 UUID를 요구합니다. rollback은 검증된 설치 및 롤백 트리를 요구하지만 온전한 저장소 소스는 요구하지 않습니다. 필수 트리가 없거나 예상치 못한 경우 fail-closed로 동작합니다. 설치, 검증, 롤백은 UUID별 전용 잠금으로 직렬화됩니다. --no-reload는 통제된 오프라인 설치/롤백 테스트에 사용할 수 있습니다. 어떤 명령도 Eval을 사용하거나 Cinnamon을 전역적으로 재시작하지 않습니다.

유용한 진단:

./bin/codex-master-mcp resource-status --format compact
./bin/codex-master-mcp resource-status --format json
./bin/codex-master-mcp resource-status --format markdown
./bin/codex-master-mcp applet-status --schema-version 4
gdbus call --session --dest org.Cinnamon --object-path /org/Cinnamon \
  --method org.Cinnamon.GetRunningXletUUIDs applet
journalctl --user -b | grep -F codex-master@H234598

unavailable 또는 오래된 애플릿 상태는 제한된 읽기 전용 새로고침이 실패했음을 의미합니다. 먼저 설치된 파일과 CLI를 검증하십시오. 일반적인 sleeping 활동을 백엔드 실패로 해석하지 마십시오.

설치 계약 (CLI)

install

  • bin/codex-master-mcp에 대한 심볼릭 링크로 ~/.local/bin/codex-master-mcp를 생성합니다

  • Codex에 등록하기 전에 저장소 래퍼가 MCP initialize 프로브에 응답할 수 있는지 검증합니다

  • 설치된 명령 경로도 등록 전에 동일한 프로브에 응답하는지 검증합니다

  • codex mcp add codex-master-mcp -- <link>를 통해 명령을 등록합니다

  • 활성 Codex MCP 구성에 startup_timeout_sec = 120이 있는지 확인합니다

  • 런타임 허용 목록(.codex-plugin, .app.json, .mcp.json, bin, docs, examples, schemas, scripts, skills, src, systemd, README, codex-agent-pool.json, 패키지 메타데이터)에서 개인 codex-master 플러그인 캐시를 동기화하면서 .git, 테스트, 바이트코드, 테스트 캐시, 숨김 파일, 편집기 스왑 파일, 백업/패치 잔여물을 제외합니다

  • 하드링크된 플러그인 소스 파일을 거부하고 잘못되었거나 심볼릭 링크된 캐시 항목을 정리하지 않으면서 현재 및 가장 최근의 유효한 캐시 플러그인 버전만 유지합니다

  • 일반 플러그인 캐시 소스 파일을 no-follow 파일 디스크립터를 통해 복사하고 열기 후 소스 정체성을 검증하므로 소스 교체가 캐시 내용을 리디렉션할 수 없습니다

  • nonce 접미사가 붙은 플러그인 캐시 임시 디렉터리를 생성하며 이 동기화가 생성하지 않은 기존 임시 디렉터리는 절대 제거하지 않습니다

  • 관리 Agentin의 CODEX_HOME에서 Master MCP를 등록하는 것을 거부합니다

  • 설치 경로 상위 체인이 심볼릭 링크가 아닌 실제 디렉터리여야 합니다

  • 원자적 동일 디렉터리 임시 심볼릭 링크와 디렉터리 fd 바인딩 rename을 통해 설치 심볼릭 링크를 생성하거나 교체합니다

  • 깨졌거나, 순환하거나, 읽을 수 없는 설치 심볼릭 링크를 해석 중 충돌하는 대신 불일치로 처리합니다

  • 에이전트 출력, 설치 경로, 저장소 래퍼 대상 경로, 플러그인 캐시 경로 없이 JSON을 반환합니다

  • --no-plugin-cache는 개인 플러그인 캐시를 건드리지 않아야 하는 명시적 진단 설치에만 허용합니다

uninstall

  • codex mcp remove codex-master-mcp에서 등록을 해제합니다

  • ~/.local/bin/codex-master-mcp를 제거합니다

  • 제거 시 설치 경로 상위 체인이 실제 디렉터리여야 합니다

  • 검증된 상위 디렉터리 fd를 통해 설치 심볼릭 링크를 제거하므로 검증 후 상위 디렉터리 교체가 unlink를 리디렉션할 수 없습니다

  • 저장소 래퍼로 해석되지 않는 한 깨졌거나, 순환하거나, 읽을 수 없는 설치 심볼릭 링크는 그대로 둡니다

  • JSON과 원시 비밀 자료를 반환하지 않습니다

doctor

  • 필수 도구(codex, tmux) 및 MCP 상태 디렉터리의 가용성을 확인합니다

  • 구조화된 checks 객체를 보고합니다

  • 데이터가 적은 initialize 프로브로 설치된 MCP 명령을 검증합니다

  • 활성 Codex MCP 등록에 startup_timeout_sec >= 120이 있는지 보고합니다

  • 활성 CODEX_HOME이 기본 홈, 관리 Agentin 홈, 또는 사용자 지정 홈처럼 보이는지 경로를 반환하지 않고 보고합니다

  • 로컬 래퍼, 설치, Agentin 홈, Agentin 러너 경로를 상태/카테고리 필드 뒤에 숨기면서 존재 및 상태 검사를 유지합니다

  • 관리 원시 로그 디렉터리 경로를 반환하지 않고 원시 로그 보존 개수와 크기를 보고합니다

  • 작업 트리에 추적 또는 추적되지 않은 변경 사항이 있는 동안 설치된 MCP가 이 저장소를 가리키는 경우 파일 경로를 반환하지 않고 경고합니다

  • 깨졌거나, 순환하거나, 읽을 수 없는 설치 심볼릭 링크를 읽을 수 없는 대상 표시와 함께 실패한 installed_symlink 검사로 보고합니다

  • 중지된 Agentin을 실패한 상태 검사가 아닌 정보 제공용 세션 상태로 처리합니다

  • 출력에서 알려진 비밀 형태를 편집합니다

watchdog

  • 구조화된 status 메타데이터와 원시 로그 메타데이터에서만 유휴 상태를 분류합니다. tail을 호출하거나 Agentin 출력을 반환하지 않습니다

  • 기본값은 idle_seconds=60, poll_interval_seconds=15, report_grace_seconds=15, action=interrupt입니다

  • interrupt, stop 또는 release 전에 항상 Agentin에게 간결한 보고서를 요청합니다

  • 요청 시간, 할당 ID, 계획된 작업, 원시 로그 카운터가 있는 메타데이터 마커만 저장합니다. 프롬프트 텍스트, 응답 또는 원시 로그는 마커에 저장되지 않습니다

  • 다른 클라이언트가 보유한 활성 임대를 건너뜁니다. --manage-unclaimed는 이 서버의 자체 임대 외에 미청구 또는 만료된 임대만 감독할 수 있습니다

  • systemd 실행을 위한 --quiet를 지원합니다. 성공적인 watchdog 통과는 JSON 출력을 생성하지 않으며 실패는 여전히 일반 CLI 오류 경로를 사용합니다

  • systemd/user/codex-master-watchdog.servicesystemd/user/codex-master-watchdog.timer를 통해 선택적 systemd --user 최상위 계층으로 설치됩니다

  • 사용자 서비스는 보수적인 강화 지시문으로 실행됩니다: 빈 CapabilityBoundingSet, 개인 키링/tmp/장치, 사용자 tmux 소켓 디렉터리의 읽기 전용 바인드, 커널 및 클록 보호, 읽기 전용 시스템 계층, 관리 상태 및 사용자 런타임 디렉터리에만 명시적 쓰기 권한, IP 소켓 없음, 네임스페이스 없음, NoNewPrivileges, MemoryDenyWriteExecute, 네이티브 syscall 아키텍처, UMask=0077; watchdog가 Codex 구성, tmux IPC, 관리 상태 파일이 필요하므로 일반 사용자 홈 읽기 권한은 의도적으로 유지합니다

  • codex-usage는 현재 스냅샷을 기본적으로 ~/.local/share/codex-usage/current/<account>.json 아래에 저장합니다. 리더는 현재 파일이 없을 때만 이전 snapshots/ 레이아웃을 허용하며 기존 현재 파일이 잘못된 경우 fail-closed로 동작합니다. usage_watchdog는 현재 5시간/주간 창을 비밀 없는 Usage-v2 데이터로 정규화하고 로컬 codex-usage 블록 마커를 쓰며 미래 재설정 창이 활성화된 동안 새로운 agent_start/클레임 흐름을 거부합니다. 과거 검증된 재설정은 블록을 해제하며 알 수 없는 재설정은 fail-closed로 유지됩니다

watchdog-status

  • systemd 타이머가 활성 상태인지, 마지막 서비스 실행이 성공했는지 보고하되, 원시 systemctl 출력은 반환하지 않음

  • 설치된 watchdog 서비스와 타이머가 저장소 복사본과 일치하는지, 서비스에 필요한 하드닝 지시문과 watchdog 플래그가 여전히 포함되어 있는지 확인

  • systemd-analyze security 노출 점수와 수준의 집계 결과만 파싱하며, 원시 분석기 출력과 로컬 유닛 경로는 반환하지 않음

goddess report run은 적격한 모든 UTC 리포트 버킷을 시간순으로 처리하고, 최대 24시간을 백필하며, 최종 확정되지 않은 버킷을 재시도합니다. 시간별 운영을 위해 강화된 선택적 사용자 타이머를 활성화하세요:

systemctl --user daemon-reload
systemctl --user enable --now codex-master-goddess-report.timer

timeout-policy

  • 바쁜 fremde Bienen에 대해 agent_claim이 기본적으로 무한 재시도하는 반면, 유한한 클레임 대기는 600초 상한 없이 여전히 허용됨을 보고

  • 클레임 폴링이 기본 30초이고 최대 900초로 제한됨을 보고

  • 명시적 클레임에 대한 중지된 외부 임대 복구 기본값을 보고: 중지된 Agentinnen만, 관리형 홈 프로세스 없음, 충분한 유휴 증거

  • agent_wait를 제한된 활동 대기로 분리 유지: 기본 120초, 최대 600초

  • 생산적인 헤드리스 할당을 기본 600초, 최대 7200초(120분)로 보고

  • send/assign-*/report-request TUI 입력 준비 게이트를 보고: 기본 15초, 0.5초 폴링, 표시되는 입력 프롬프트 필요, 재시도 가능한 agent_input_not_ready로 붙여넣기 없이 실패-폐쇄

  • 현재 CLI/MCP 소유자 식별자가 호출 간에 안정적인지 여부를 보고하되 식별자 자체는 반환하지 않음

skills

  • 각 Agentin 홈에서 skills/, plugins/cache/, .tmp/plugins/SKILL.md 파일을 스캔

  • 심볼릭 링크된 스킬 루트와 심볼릭 링크된 SKILL.md 파일을 따르지 않고 무시

  • 개수, 루트, 시스템 스킬 이름, 제한된 플러그인/이름 페이지를 반환

  • 많은 플러그인이 설치된 경우 모든 플러그인 이름을 덤프하는 대신 plugin_count, plugins_offset, plugins_limit, plugins_truncated를 보고

  • plugins_offset/plugins_limit을 통한 의도적 열거를 지원하며, include_names 사용 시 names_offset/limit도 지원

  • 스킬 파일 내용과 Agentin 터미널 출력은 반환하지 않음

capabilities

  • 모델 정책, 총 스킬 수, 시스템 스킬 이름, 제한된 첫 플러그인 페이지를 반환

  • 많은 플러그인이 설치된 경우 모든 플러그인 이름을 덤프하는 대신 plugin_count, plugin_page_count, plugins_limit, plugins_truncated를 보고

App Bridge

플러그인은 .app.json을 포함하며 .codex-plugin/plugin.json을 통해 이를 선언합니다:

{
  "apps": {
    "codex-master": {
      "id": "connector_26697a678b7ec999dc005131eb5c087c"
    }
  }
}

이것은 codex-master 플러그인의 로컬 App Bridge 식별자입니다. 기존의 데이터-희소 MCP 도구 표면을 유지하고 Codex가 플러그인을 안정적인 커넥터 ID와 연결할 수 있게 합니다. ID는 의도적으로 비밀이 아닙니다.

ChatGPT Developer Mode 커넥터의 경우, ChatGPT는 여전히 도달 가능한 공개 HTTPS /mcp 엔드포인트에 대해 커넥터를 생성하거나 새로 고쳐야 합니다. 현재 Masterjet MCP는 Codex용 로컬 stdio MCP로 실행되므로, .app.json은 플러그인 측 브리지 식별자를 구성합니다. 저장소를 Marketplace에 게시하거나 로컬 stdio 명령을 자체적으로 호스팅된 HTTP 커넥터로 바꾸지는 않습니다.

로컬 경로 없이 브리지 상태를 확인하세요:

python3 -m codex_master.server app-bridge-status

스티어링 스킬

스킬은 별도의 MCP 함수로 호출되지 않습니다. 작업이 스킬을 명명하거나 해당 도메인과 명확히 일치할 때 Codex Agentin이 사용하는 지침 번들입니다.

python3 -m codex_master.server skills all --agents-limit 30
python3 -m codex_master.server send a "Nutze codex-security:security-scan. Pruefe src/codex_master/server.py nur lesend und berichte knapp."
python3 -m codex_master.server send b "Nutze github:gh-fix-ci. Pruefe die CI-Konfiguration nur lesend und berichte knapp."
python3 -m codex_master.server tail a --source pane --lines 20 --chars 2000

더 안전한 위임을 위해 자유 형식 send보다 assign-readonly, assign-live-data, assign-write를 선호하세요:

python3 -m codex_master.server assign-readonly a \
  --skill codex-security:security-scan \
  --scope src/codex_master/server.py \
  --task "Pruefe nur lesend und berichte knapp."

python3 -m codex_master.server assign-live-data a \
  --task "Wie ist das Wetter gerade in Berlin?" \
  --live-data-topic "Wetter Berlin heute"

python3 -m codex_master.server assign-write b \
  --skill github:gh-fix-ci \
  --scope .github/workflows \
  --write-path .github/workflows/ci.yml \
  --task "Haerte nur die CI-Datei und berichte Root Cause, Aenderung, Tests, Risiken."

assign은 인벤토리로 명명된 스킬을 검증하고, Exploriererinnen의 쓰기 경로를 거부하며, Arbeitsbienen의 명시적 쓰기 경로를 요구합니다. 생성된 프롬프트를 tmux를 통해 전송하지만 프롬프트나 Agentin 응답은 반환하지 않습니다.

날씨, 뉴스, 가격, 일정 또는 기타 실시간 데이터 작업에는 assign-live-data를 사용하세요. 읽기 전용이며 다른 할당과 동일한 인증 및 임대 가드를 사용하고, 추측 대신 현재 검색 소스를 사용하거나 도구/접근 제한을 보고하라는 명시적 요구사항을 주입합니다. 구체적인 실시간 데이터 주제는 Agentin 프롬프트에만 전송됩니다. 공개 응답과 할당 감사 기록은 주제와 응답 내용을 반환 데이터에서 제외합니다.

assign-write는 또한 agent_scope_check를 통해 쓰기 경로를 게이트합니다. 선언된 범위 밖의 쓰기 경로는 Agentin에게 아무것도 전송되기 전에 거부됩니다. 워크트리 생성은 기존 대상을 거부하며(깨진 심볼릭 링크 포함), 대상 경로의 모든 상위 디렉터리가 실제 디렉터리여야 합니다. 워크트리 생성과 상태는 저장소 범위로 제한됩니다: 상대 경로 탈출과 저장소 외부의 절대 대상은 git 실행 전에 거부되며, 생성 응답은 최대 저장소-상대 경로만 반환하고 절대 로컬 경로는 절대 반환하지 않습니다. 워크트리 상태는 또한 git status 실행 전에 심볼릭 링크와 비-디렉터리 대상을 거부합니다. 할당 및 전송 입력은 tmux 상호작용 전에 제한됩니다: 자유 전송과 시작 프롬프트는 12,000자, 할당 작업은 4,000자, 이름은 80자, 스킬 참조는 300자, 경로 유사 필드는 1,000자, 할당 목록은 50개 항목으로 제한됩니다. MCP 부울 및 정수 인수는 타입 검사되며, 문자열화된 값은 강제 변환 대신 거부됩니다. 수신 MCP 프레임은 JSON 파싱 전에 1 MiB로 제한됩니다. 도구 및 RPC 오류 텍스트는 반환 전에 ANSI 스트립, 편집, 길이 제한이 적용됩니다. tools/call은 디스패치 전에 도구 이름, 객체 형태의 params와 arguments, 알 수 없는 인수 이름, 필수 필드, 값 타입, 열거형, 선언된 경계를 검증합니다. 로컬 CLI 도구 명령은 동일한 스키마 검증을 통과하며, 생략된 선택적 인수는 검증 전에 제거됩니다. 여러 줄 sendassign-* 페이로드는 tmux 붙여넣기 전에 브래킷-붙여넣기 마커로 감싸져 Codex TUI가 템플릿을 별도의 제출 줄이 아닌 하나의 프롬프트로 처리하게 합니다.

하나의 Agentin을 변경하기 전에 start, assign-*, send, report-request, interrupt, stop은 Agentin별 임대를 확인하거나 갱신합니다. 두 번째 MCP 클라이언트는 동일한 tmux 세션에 쓰는 대신 구조화된 재시도 가능 오류를 받습니다. 새로운 start 임대는 성공적인 시작 후 다시 해제됩니다. 이렇게 하면 시작 작업 자체를 직렬화하면서도 로컬 CLI를 별도 호출에서 계속 사용할 수 있습니다. 동일한 연결된 클라이언트가 보유한 기존 클레임은 유지됩니다. Codex-CLI 인스턴스가 바쁜 Agentin을 기다려야 할 때 claim을 사용하세요. 기본적으로 제한된 폴링 간격으로 무한 재시도합니다. 단일 즉시 시도에는 claim --no-wait을, 명시적 유한 제한에는 claim --wait-seconds ...를 사용하세요. 명시적 claim은 Agentin이 실행 중이지 않고 해당 관리형 Agentin 홈을 사용하는 프로세스가 없을 때 중지된 유예 기간(기본 120초) 후에만 중지된 외부 임대를 복구합니다. 운영자가 엄격한 TTL 전용 동작을 원할 때는 claim --no-recover-stopped를 사용하세요. 임대 상태는 메타데이터일 뿐이며 클라이언트 식별자, 프롬프트 텍스트, Agentin 출력 또는 로컬 상태 경로를 반환하지 않습니다.

원시 로그는 일반 API 데이터가 아닌 로컬 디버그 아티팩트입니다. tmux 파이프는 제한된 로컬 작성기를 통해 쓰고, doctor는 구성된 원시 로그 정책을 보고하며, tail --source log는 관리형 원시 로그 상태 외부의 메타데이터 경로를 거부합니다. 관리형 원시 로그는 일반 파일이어야 합니다. 심볼릭 링크는 따르지 않으며 원시 로그 디렉터리에서 정리됩니다. 숨겨진 원시 로그 작성기는 상태나 경로를 건드리기 전에 활성 원시 로그 정책 밖의 --max-bytes 값을 거부합니다. 명시적이고 제한된 ANSI 스트립, 편집된 발췌가 필요할 때만 tail을 사용하세요. 실패한 시작은 오류를 반환하기 전에 준비된 원시 로그 파일을 제거합니다.

모델 정책은 위에 문서화된 중앙 클래스/수명주기/모델/노력 해석기를 통해 한 번 해석됩니다. 시작 및 할당 응답은 유효 선택, 폴백 상태, 이유 코드를 노출합니다. 할당 감사 메타데이터는 프롬프트나 응답을 저장하지 않고 유효 모델을 기록합니다.

Agentinnen은 할당이 --allow-subagents를 사용할 때만 자체 네이티브 Subagentinnen을 시작할 수 있습니다. 해당 플래그가 없으면 생성된 할당은 중첩 위임을 명시적으로 금지합니다. 플래그가 있어도 중첩 Agentinnen은 할당된 범위와 쓰기 경로 내에 유지되며, codex-master-mcp를 사용하지 않고 커밋, 푸시, 릴리스를 하지 않습니다.

Masterjet이 담당하는 동안 동일한 CODEX_HOME으로 관리형 Agentin을 수동으로 시작하지 마세요. start는 홈이 외부 Codex 프로세스에 이미 사용 중인 Agentin의 시작을 거부하며, doctor는 tmux 또는 잠금 경합이 되기 전에 이러한 홈 충돌을 보고합니다. start는 또한 두 번째 외부 프로세스가 동일한 홈을 사용 중인 경우 이미 실행 중인 Masterjet 세션을 거부합니다. install은 관리형 Agentinnen 홈에서 codex-master-mcp 등록을 거부하여 Masterjet 도구가 Teamleiterin/메인 인스턴스에 유지되게 합니다.

할당은 메타데이터로만 ~/.local/state/codex-master-mcp/assignments.jsonl에 추가됩니다: 할당 ID, Agentin, 역할, 선택된 모델, 스킬 일치 상태, 범위, 쓰기 경로, 개수, 플래그. 프롬프트 텍스트와 Agentin 응답은 저장되거나 반환되지 않으며, 할당 쿼리 응답은 로컬 감사 파일 경로를 반환하지 않습니다. 감사 파일은 제한된 로컬 JSONL 원장으로 유지됩니다: 최신 500개의 유효 메타데이터 레코드가 보관되고, 잘못된 레거시 줄은 정리 중에 삭제되며, 파일은 0600 권한으로 다시 작성됩니다. 비공개 상태 추가는 심볼릭 링크 경로를 거부하고, Agentin 메타데이터는 원자적으로 작성되며, nonce-접미사 임시 대체 파일은 no-follow 배타적 의미로 생성됩니다. 관리형 상태 디렉터리와 상위 체인은 심볼릭 링크나 일반 파일이 아닌 실제 디렉터리여야 합니다. 외부 프로세스 호출은 시간 초과로 제한되며 MCP 서버를 무기한 차단하는 대신 구조화된 시간 초과 실패를 반환합니다. agent_doctor는 또한 경로를 반환하지 않고 활성 CODEX_HOME 컨텍스트를 보고하며, 활성 Codex MCP 구성에서 codex-master-mcp가 최소 120초의 startup_timeout_sec을 가지고 있는지 확인합니다.

명시적이고 제한된 발췌가 필요할 때만 tail을 사용하세요. 일반 상태 및 전송 작업은 Agentin 출력을 반환하지 않습니다. tail은 선택된 Agentin이 다른 MCP 클라이언트가 보유한 활성 임대를 가진 동안 팬 또는 로그 출력 읽기를 거부합니다. 먼저 Agentin을 클레임하거나 임대 만료를 기다리세요.

플러그인

이 저장소는 또한 로컬 Codex 플러그인입니다:

  • .codex-plugin/plugin.json: 플러그인 메타데이터 및 Codex UI 정보

  • .mcp.json: 패키지 설치 없이 이 저장소에서 codex-master-mcp를 시작하고 startup_timeout_sec = 120을 선언

  • skills/codex-master-fleet/SKILL.md: Masterjet용 Teamleiterin 스킬

플러그인은 메인/Teamleiterin Codex 인스턴스를 위한 것입니다. 관리형 Agentinnen은 별도의 작업자 스킬을 유지해야 하며 Masterjet MCP 도구를 받아서는 안 됩니다.

Marketplace 항목은 선택 사항입니다. 저장소에는 플러그인 아티팩트가 포함되어 있으며, 기존 codex-master-mcp 등록이 MCP 서버를 직접 실행할 수 있습니다. Codex의 플러그인 UI가 플러그인으로 검색하고 설치하도록 하려는 경우에만 개인/로컬 Marketplace 항목을 추가하세요.

검사

git diff --check
PYTHONPATH=src python3 -m compileall -q src tests
PYTHONPATH=src python3 -m unittest discover -s tests -v
./bin/codex-master-mcp tools

./bin/codex-master-mcp commit-ready-checkgit diff --check, compileall, 단위 테스트에 대한 로컬 릴리스 게이트를 실행합니다.

GitHub Actions는 .github/workflows/ci.yml을 사용하여 동일한 소스 및 단위 테스트 게이트를 실행하며, 플러그인/App/MCP 매니페스트 검증, 푸시 또는 풀-리퀘스트 커밋 범위에 대한 커밋된 공백 검사, CLI 래퍼 스모크 검사, 외부 워크플로우 액션에 대한 전체 SHA 고정 검사, validate, install, status, destroy_pool에 대한 임시 에이전트 풀 설치 프로그램 스모크를 추가로 실행합니다.

Maintenance

ActivityActive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    An MCP server that gives orchestrator agents fine-grained control over interactive Claude Code sessions running inside tmux, enabling mid-session steering, interruption, and token-efficient result extraction.
    15
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server that manages interactive CLI agent pools using tmux, enabling creation, control, and communication with agents like Claude and Codex.
    7
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that allows AI agents to monitor and interact with Codex sessions, providing session awareness, status summaries, and managed tmux windows for automated continuation.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/H234598/codex-master'

If you have feedback or need assistance with the MCP directory API, please join our Discord server