Community코딩 & 개발github.com

Wollipog 세션 운영

주입된 CLI 또는 일반 Wollipog MCP 서버를 통해 에이전트 세션 내에서 Wollipog 세션을 운영합니다.

Wollipog 세션 운영란 무엇인가요?

이 스킬은 AI 에이전트(Claude Code, Cursor, Codex 등)가 Wollipog 세션을 제어하고 모니터링할 수 있도록 지원합니다. `wollipog` CLI 명령어를 통해 세션 생성, 프롬프트 전송, 이벤트 조회, 작업 중지, 결정 관리, PR 워크플로우 등을 수행할 수 있습니다. 또한 MCP 도구로 동일한 기능을 제공하여 에이전트가 자연어로 세션을 운영할 수 있게 합니다. 이 스킬은 캠페인 오케스트레이션, 엄격한 프로젝트 격리, 워크트리 관리, 워크플로우 결정(요청, 소비, 철회) 등의 고급 기능을 포함하며, 캠페인 정책 경계를 존중하고 사람의 개입이 필요한 영역을 명확히 구분합니다.

지원 대상✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/picoduck/wollipog/tree/HEAD/skills/using-wollipog

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Wollipog 사용하기

캠페인 권한에 대해서는 캠페인 권한 사전 점검을 읽으십시오. 이 문서는 유효 모드/경계, 정확한 결정 소유자, 해결되지 않은 사람 게이트, 증거 업로드/제공자 공개를 다룹니다. 캠페인을 승인하거나 설치된 정책을 변경하지 않습니다.

wollipog 명령어는 PATH에 있을 때 사용하십시오. Wollipog 호스팅 세션은 WOLLIPOG_CONTROL_PLANE_URL, WOLLIPOG_SESSION_ID, 보호된 토큰 파일을 자동으로 제공합니다. 해당 토큰을 인쇄, 복사 또는 명령줄에 전달하지 마십시오.

핵심 명령어:

wollipog session list --json
wollipog session get <session-id> --json
wollipog session events <session-id> [--after <seq> [--event-epoch <n>]] [--limit <n>] --json
wollipog session capabilities --runner <id> --agent <id> [--offset <n>] [--limit <n>] [--include-hidden] --json
wollipog session capabilities --runner <id> --agent <id> --model <id> --json
wollipog session create --runner <id> --agent <id> --workspace <id> --prompt <task> [--model <id>] [--effort <level>] --json
wollipog session prompt <session-id> <message> --json
wollipog session wait <session-id> --for input_required,completed,failed,stopped --json
wollipog session stop <session-id> --json
wollipog session unarchive <session-id> --json
wollipog session stop-job <session-id> <job-id> --json
wollipog session release-hold <session-id> <hold-id> --json
wollipog pr wait <number|owner/name#number|host/group/project!iid|url> [--head <sha>] [--timeout <ms>] --json
wollipog pr closures <number|owner/name#number|url> [--intended <issue>]... --json
wollipog pr closures --file <description.md> [--repo <owner/name>] [--intended <issue>]... --json
wollipog review session run --repo <owner/name|gitlab-host/group/project> --pr <number> --head <sha> --brief-file <path> [--full-reason <text>] --json
wollipog review session get <review-session-id> --json
wollipog artifact attach --file <absolute-path> [--name <display-name>] --json
wollipog automation request --proposal '<json>' --json
wollipog automation get <occurrence-id> --json
wollipog automation execute <occurrence-id> --digest <resource-digest> --json
wollipog location-switch request --request '<json>' --json
wollipog location-switch get <occurrence-id> --json
wollipog location-switch execute <occurrence-id> --digest <resource-digest> --json
wollipog worktree create --branch <name> [--base <ref>] --json
wollipog worktree attach --path <absolute-path> --json
wollipog worktree select --path <absolute-path> --json
wollipog worktree discard --path <absolute-path> --json
wollipog worktree delete-refs [--path <absolute-path>] --ref <ref>=<object-id> [--ref ...] --json
wollipog decision request --request-id <id> --resource-key <key> --snapshot '<json>' --json
wollipog decision get <occurrence-id> [--session <descendant-id>] --json
wollipog decision list [--session <descendant-id>] [--limit <1-100>] [--cursor <occurrence-id>] --json
wollipog decision consume <occurrence-id> --snapshot '<json>' [--action '<json>'] --json
wollipog decision reconcile <occurrence-id> --snapshot '<json>' --json
wollipog decision withdraw <occurrence-id> --reason <text> [--session <child-id>] --json

검증되고 완전히 보관된 캠페인 자식의 거부된 더티 워크트리의 경우, 해당 자식을 제어하는 오케스트레이터만 session unarchive를 사용할 수 있습니다(컨트롤 플레인 및 러너에서 프로토콜 266 이상). 이는 파일을 다시 시작하거나 삭제하지 않고 가시성을 복원합니다. 그런 다음 자식을 다시 시작하고 작업을 유지 및 정리하도록 요청하고, 새로운 최종 보고서를 확인한 후 다시 보관합니다. 폐기는 여전히 더티, 푸시되지 않았거나 전달되지 않은 작업을 거부합니다. 이전 러너는 명시적으로 복구를 거부합니다. 스크래치 보고서는 관리되는 워크트리 외부에 보관하십시오.

--after 없이 session events는 가장 최근 --limit 이벤트(기본값 30, 최대 100)를 반환합니다. 알려진 지점 이후 자식이 수행한 모든 작업과 같은 긴 범위를 읽으려면 앞으로 페이지 매김하십시오: --after 0으로 시작하거나, 이미 읽은 seq와 함께 해당 eventEpoch를 사용하여 시작한 다음, hasMore가 false가 될 때까지 이전 페이지의 --after <lastSeq> --event-epoch <eventEpoch>로 반복하십시오. historyIncomplete는 컨트롤 플레인이 아직 전체 로그를 로드하지 않았음을 의미하므로 이후 이벤트가 존재할 수 있습니다: 반환된 lastSeq를 유지하고 나중에 다시 시도하되 페이지를 끝으로 처리하지 마십시오. 이벤트 기록이 교체되어 호출이 실패하면 이전 epoch 없이 --after 0부터 다시 시작하십시오. 각 이벤트는 최대 400자로 제한된 요약 줄이므로 긴 메시지는 잘립니다. MCP get_session_events 도구는 동일한 after, limit, eventEpoch를 사용합니다.

읽은 모든 이벤트는 기록이 채워지는 동안 페이지로 유지됩니다. 짧거나 빈 불완전 페이지는 로그의 끝이 아닙니다. --after 없이 불완전한 결과는 가장 최근 캐시된 창이므로, 채워지면 진정한 최신 창을 위해 --after 없이 다시 시도하십시오. GET /api/sessions/:id/events의 직접 HTTP 읽기는 limit이 생략되면 기본적으로 200개의 이벤트를 반환합니다. nextAfter와 eventEpoch를 사용하여 하나의 응답을 전체 로그로 처리하지 않고 계속 읽으십시오. 프로토콜-222 러너는 채워지는 동안 제한된 리더를 사용합니다. 기본 페이지를 제공하는 컨트롤 플레인으로 업그레이드하기 전에 이전 CLI/MCP 설치를 업데이트하십시오: 이전 리더의 전체 로그 폴백은 제한된 첫 페이지를 최신 창으로 오인할 수 있습니다. 식별 가능한 이전 에이전트-세션 폴백은 러너 업그레이드 안내와 함께 실패합니다. 페어링된 장치 CLI 호출은 동일한 업그레이드 우선 마이그레이션이 필요합니다. 사람 자격 증명이 리더 버전을 식별하지 않기 때문입니다.

session stop-job(MCP stop_background_job)은 자식 세션의 완료되지 않은 백그라운드 작업 하나를 해당 ID로 종료합니다. session get은 이를 unfinishedBackgroundJobs로 나열합니다. 조건이 발생하지 않는 모니터와 같이 끝나지 않는 작업이 완료된 형제의 결과나 대기 중인 핸드오프를 계속 차단할 때 사용하십시오. 해당 작업만 종료되고 종료된 것으로 기록됩니다. 자식의 대화, 다른 작업 및 대기 중인 프롬프트는 유지됩니다. 공급자가 제시간에 중지를 확인하지 않으면 작업은 계속 실행됩니다. 나중에 종료되더라도 여전히 귀하의 중지로 기록되므로 이름을 알리기 위해 요청을 반복하지 마십시오. session stop과 session restart는 대신 모든 작업을 종료합니다: stop은 대기 중인 프롬프트를 폐기하는 반면, restart는 이를 유지하고 재시작 후 실행합니다. 현재 러너는 설정된 Claude Code, Codex App Server 및 Pi 대화를 재개합니다. 실행된 적이 없는 세션은 새로 시작됩니다. 세션 능력 agentCapabilities.restartResumesConversation은 다음 재시작이 재개되는지 여부를 보고합니다. 이전 러너는 이를 생략하고 새로 시작할 수 있으므로 부재는 연속성을 보장하지 않습니다. 오직 세션의 소유자와 이를 제어하는 오케스트레이터만 stop-job을 사용할 수 있습니다. 자식의 대기 중인 핸드오프 홀드가 canRelease를 보고할 때, session get의 홀드 ID와 함께 session release-hold(MCP release_queue_hold)를 사용하면 모든 완료되지 않은 작업을 한 번에 종료하고 각각을 귀하가 종료한 것으로 기록하며, 재시작 없이 순서대로 핸드오프와 대기 중인 프롬프트를 실행합니다. 이는 stop-job과 동일한 권한을 가지며, 귀하가 읽은 이후 홀드가 변경된 경우 거부됩니다.

오케스트레이터 캠페인은 정책 경계로 관리 도구를 사용해야 하며, 프롬프트에서 권한을 유추해서는 안 됩니다. 캠페인 시작 시와 사람이 정책을 변경한 후에 get_campaign을 호출하십시오. 이는 자격 증명을 반환하지 않고 유효 동작, 유형별 결정 소유자, 개정, 승인 및 가드레일 한계, 자식 및 후속 작업 수, UI 검토 호환성, 그리고 waiting_human, active, blocked, verified_complete 또는 complete_with_handoffs 중 하나를 반환합니다. 해당 behavior는 다음 자식 생성이 적용하는 Child Harness, Child Model, Child Effort, Follow-Ups 및 Completion을 보유합니다. 사람은 캠페인이 실행되는 동안 이를 변경할 수 있습니다. 변경된 값은 active_campaign 소스와 더 높은 behavior.revision을 전달합니다. 이는 이후에 생성된 자식에 적용되며, 기존 자식은 자체 구성을 유지하고, 에이전트(오케스트레이터 포함)는 이를 변경할 수 없습니다.

오케스트레이터 역할의 기본값은 위임 구현입니다: 계획, 위임, 모니터링 및 검토. 여러 문제를 다루는 일반적인 요청은 사람이 명시적으로 오케스트레이션이나 위임을 요청하지 않는 한 캠페인 또는 자식 생성을 승인하지 않습니다. 부모는 허용된 계획 아티팩트를 직접 유지할 수 있습니다. 사람이 부모에게 구현을 명시적으로 요청하는 경우, 먼저 열린 자식 할당 및 풀 리퀘스트를 검사하여 중복을 확인한 다음, 전용 Wollipog 워크트리를 생성 및 선택하고 저장소의 일반적인 테스트, 검토, UI 증거, 병합 및 정리 워크플로우를 따르십시오. 제공자 권한 및 거버넌스는 전체적으로 적용됩니다.

엄격한 프로젝트 격리는 별도의 사람이 제어하는 실행 설정입니다. 새 세션은 기본적으로 비활성화되어 있습니다. 활성화되면 프로젝트 위치는 OS에서 강제로 읽기 전용이 되고, 부모는 세션 전용 스크래치에서만 작업하며, 부모 구현 및 자체 워크트리 작업은 거부됩니다. 필요한 bwrap, Seatbelt 또는 감사된 제공자 경계는 시작 전에 확인됩니다. 실행 정책 필드가 없는 기존 오케스트레이터 세션은 엄격한 것으로 간주되며 스스로 완화할 수 없습니다.

모든 자식 생성은 초기 할당에서 서버에서 파생된 캠페인 정책 블록을 받습니다. 자동 모델 또는 노력의 경우 get_agent_capabilities를 사용하고 동일한 create_session 호출에서 선택한 쌍을 보내십시오. 고정 값은 서버에서 강제 적용됩니다. 블록은 포괄적인 승인이 아닙니다. 자식은 구현 질문, PR 병합, 병합된 브랜치 삭제, 후속 작업 게시 및 UI 증거를 위해 request_workflow_decision, get_workflow_decision 및 consume_workflow_decision을 사용해야 합니다. 해당 MCP 도구를 사용할 수 없는 경우, 위의 동등한 자체 범위 wollipog decision request, get 및 consume 명령어를 사용하십시오. 정확한 리소스 스냅샷과 선택적 PR 병합 작업은 JSON 개체입니다. CLI는 request, consume 및 reconcile에 대해 --session을 거부하며 해결 작업을 노출하지 않습니다. 읽기 전용 get_workflow_decision은 선택적 sessionId를 허용합니다. list_workflow_decisions는 선택적 sessionId, limit 및 cursor로 보류 및 승인된 결정을 열거합니다. 대상을 생략하면 자체를 읽습니다. 오케스트레이터는 액세스 가능한 하위 항목을 대상으로 할 수 있으며, 두 세션에 대한 액세스가 필요합니다. 정확한 읽기는 최종 상태를 포함합니다. 404는 소비를 증명하지 않습니다. nextCursor가 없을 때까지 따르십시오. 페이지는 현재 상태를 반영하므로, 페이지 매김 중에 결정이 해결되면 사라질 수 있습니다. 결과가 중요할 때 알려진 발생을 정확히 읽으십시오. 하위 읽기 및 목록에는 컨트롤 플레인 프로토콜 v214가 필요합니다. 도구가 없는 이전 러너는 업데이트된 CLI 또는 읽기 전용 HTTP 엔드포인트 GET /api/sessions/:id/workflow-decisions/:occurrenceId 및 GET /api/sessions/:id/workflow-decisions?limit=50&cursor=<occurrence-id>를 기존 세션 자격 증명(토큰이 프로비저닝된 경우)과 함께 사용할 수 있습니다. 제공자 격리 세션은 러너 릴레이 키만 보유하므로 직접 HTTP 호출을 인증할 수 없습니다. 베어러 토큰을 찾지 말고 도구를 위해 러너/CLI를 업그레이드하십시오. 이전 컨트롤 플레인은 list_descendant_requests를 통해 보류 요청만 노출합니다. 권위 있는 하위 상태 검사를 위해 업데이트하십시오. 현재 소유자만 정확한 보류 발생을 해결할 수 있습니다.

불필요한 보류된 사람 소유 review_round_extension의 경우, 제어 오케스트레이터는 대신 자식의 sessionId, 정확한 occurrenceId 및 철회 이유를 설명하고 자식의 다음 지침을 제공하는 비어 있지 않은 reason과 함께 withdraw_descendant_workflow_decision을 호출할 수 있습니다(컨트롤 플레인 v265 이상). 이는 해당 요청만 제거하고, 오케스트레이터의 철회를 감사하며, 자식을 중지하거나 다시 시작하지 않고 지속적인 재개 경로를 통해 이유를 전달합니다. 결정은 revoked 및 withdrawal 출처로 읽힙니다. 이는 어떤 승인도 부여하지 않으며 소비될 수 없습니다. 승인된 결정 및 철회용으로 지정되지 않은 범주는 거부됩니다. 정확한 결과를 위해 get_workflow_decision을 사용하십시오. 여전히 사람이 필요한 요청은 그들의 것으로 남아 있습니다.

보류 또는 승인된 결정이 더 이상 필요하지 않고 소비되거나 무장된 적이 없는 경우, 비어 있지 않은 reason과 함께 withdraw_workflow_decision(decision withdraw)을 사용하여 폐기하십시오(컨트롤 플레인 v269 이상). 절대 오래된 스냅샷을 사용하여 소비하여 취소시키지 마십시오. sessionId를 생략하여 자신의 것을 철회하십시오. 제어 오케스트레이터는 오케스트레이터가 소유한 결정을 철회하기 위해 자식의 sessionId를 전달할 수 있습니다. 사람이 소유한 결정은 요청자가 철회할 수 있습니다. 철회는 아무것도 승인하거나 소비하지 않습니다: 결정은 revoked로 읽히며 철회 세션 및 그 이유를 명명하고, 이후에 소비될 수 없으며, verify_campaign_child를 더 이상 차단하지 않습니다. 여전히 보류 결정을 기다리는 자식은 이유와 함께 재개됩니다. 이미 승인을 보유한 자식은 깨어나지 않습니다. 소비된 결정, 무장된 pr_merge(대신 조정), 사람 소유의 이슈 종결, 범위, 후속 작업 승인 및 자동화 요청은 거부됩니다.

인증, 비밀, 영구적 허가, 거버넌스 변경, 예산 증가 및 도구 가드레일은 사람 전용으로 남아 있습니다. 별도의 사람이 설정한 예산 권한은 제한된 관리 작업자 예약 및 할당을 허용할 수 있습니다. 캠페인 이름에서 이를 추론하거나 계량되지 않은 작업자를 사용하여 회계를 회피하지 마십시오. 중지 또는 재시작은 세션이 소비하지 않은 모든 결정을 취소합니다. 재시작 후 세션은 취소된 각 발생을 명명하는 [Wollipog Session Restart] 메시지를 받습니다. 이전 승인에 대해 행동하지 말고, 여전히 필요한 경우 다시 요청하십시오. 정확한 무장 PR 병합 명령이 이미 성공했지만 승인된 발생이 소비되지 않은 상태로 남아 있는 경우, 해당 발생의 변경되지 않은 리소스 스냅샷과 함께 reconcile_workflow_decision(또는 wollipog decision reconcile)을 사용하십시오. 명령을 다시 실행하지 않습니다. Codex App Server 자식의 경우 정확한 완료된 승인, 제공자 명령 및 병합된 forge 헤드를 증명합니다. 먼저 동일한 App Server 세션을 재개하십시오. Claude Code 자식의 대기열 추가는 자동 또는 Full Access 모드에서 권한 영수증을 생성하지 않습니다.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬