Usando Wollipog
Para autoridade de campanha, leia Campaign Authority Preflight. Ela cobre modo/fronteira efetiva, proprietários de decisão exatos, portões humanos não resolvidos e upload/divulgação de evidências; não autoriza uma campanha nem altera políticas instaladas.
Use o comando wollipog quando ele estiver no PATH. Uma sessão hospedada pelo Wollipog fornece
WOLLIPOG_CONTROL_PLANE_URL, WOLLIPOG_SESSION_ID e um arquivo de token protegido automaticamente; não
imprima, copie ou passe esse token na linha de comando.
Comandos principais:
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
Para um worktree sujo recusado de um filho de campanha verificado e totalmente arquivado, apenas seu Orquestrador controlador pode usar session unarchive
(protocolo 266+ no plano de controle e runner). Isso restaura a visibilidade sem reiniciar ou excluir
arquivos. Em seguida, reinicie o filho e peça a ele que preserve e limpe seu trabalho, verifique seu novo relatório final
e arquive novamente. A aposentadoria ainda recusa trabalho sujo, não enviado ou não entregue; um runner mais antigo
recusa a recuperação explicitamente. Mantenha relatórios de rascunho fora dos worktrees gerenciados.
Sem --after, session events retorna os --limit eventos mais recentes (padrão 30, máximo 100).
Para ler um intervalo longo, como tudo o que um filho fez desde um ponto conhecido, avance página por página: comece com
--after 0, ou com um seq que você já leu junto com o eventEpoch de onde veio, então repita
com --after <lastSeq> --event-epoch <eventEpoch> da página anterior até que hasMore seja falso.
historyIncomplete significa que o plano de controle ainda não carregou todo o log, portanto eventos posteriores podem
existir: mantenha o lastSeq retornado e tente novamente mais tarde em vez de tratar a página como o fim. Se a
chamada falhar porque o histórico de eventos foi substituído, reinicie de --after 0 sem o epoch antigo.
Cada evento é uma linha de resumo limitada a 400 caracteres, portanto uma mensagem longa é truncada. A ferramenta MCP
get_session_events aceita os mesmos after, limit e eventEpoch.
Cada evento lido permanece paginado enquanto o histórico é hidratado; uma página curta ou vazia incompleta não é o
fim do log. Sem --after, um resultado incompleto é a janela em cache mais recente, portanto tente novamente
sem --after para a janela mais recente verdadeira quando a hidratação alcançar. Leituras HTTP diretas de
GET /api/sessions/:id/events padronizam para 200 eventos quando limit é omitido; use nextAfter e
eventEpoch para continuar em vez de tratar uma resposta como o log inteiro.
Runners de protocolo-222 usam o leitor limitado durante toda a hidratação. Atualize instalações mais antigas da CLI/MCP
antes de atualizar um plano de controle que serve páginas padrão: o fallback de log inteiro de um leitor antigo
pode confundir uma primeira página limitada com a janela mais recente. Fallbacks de sessão de agente antigas identificáveis
falham com orientação de atualização do runner; chamadas CLI de dispositivo pareado precisam da mesma
migração de atualização primeiro porque suas credenciais humanas não identificam a versão do leitor.
session stop-job (MCP stop_background_job) encerra um trabalho em segundo plano inacabado de uma sessão
filha pelo seu id, que session get lista como unfinishedBackgroundJobs. Use-o quando um trabalho que
nunca termina, como um monitor cuja condição nunca dispara, mantém o resultado de um irmão finalizado ou uma
transferência na fila esperando. Apenas esse trabalho termina e é registrado como morto; a conversa da filha, seus
outros trabalhos e seus prompts na fila são mantidos. Se o provedor não confirmar a parada a tempo, o
trabalho continua em execução; se ele terminar depois, ainda é registrado como sua parada, portanto não repita a
solicitação apenas para ser nomeado. session stop e session restart encerram todos os trabalhos
em vez disso: uma parada descarta os prompts na fila, enquanto uma reinicialização os mantém e os executa depois.
Runners atuais retomam conversas estabelecidas do Claude Code, Codex App Server e Pi; uma sessão nunca executada
começa do zero. A capacidade da sessão agentCapabilities.restartResumesConversation informa
se sua próxima Reinicialização retoma. Runners mais antigos a omitem e podem começar do zero, portanto a ausência não oferece
nenhuma garantia de continuidade. Apenas o proprietário da sessão e seu Orquestrador controlador podem
usar stop-job. Quando uma transferência na fila de um filho relata canRelease, session release-hold
(MCP release_queue_hold) com o id da retenção de session get encerra todos os trabalhos inacabados de uma só vez,
registra cada um como morto por você e executa a transferência e os prompts na fila em ordem sem uma reinicialização;
ele tem a mesma autoridade que stop-job e é recusado se a retenção mudou desde que você a leu.
Uma campanha de Orquestrador deve usar as ferramentas de gerenciamento como limite de política, não inferir autoridade
de seu prompt. Chame get_campaign no início da campanha e depois que um humano alterar a política. Ela retorna
o comportamento efetivo, proprietários de decisão tipados, revisão, limites de admissão e proteção, contagens de filhos e
acompanhamentos, compatibilidade de revisão de UI e um de waiting_human, active, blocked,
verified_complete ou complete_with_handoffs, sem retornar credenciais. Seu behavior contém o Child Harness, Child
Model, Child Effort, Follow-Ups e Completion que a próxima criação de filho impõe. Uma pessoa pode alterá-los
enquanto a campanha é executada; valores alterados carregam a fonte active_campaign e uma
behavior.revision mais alta. Eles se aplicam a filhos criados posteriormente, os filhos existentes mantêm sua própria
configuração, e nenhum agente, incluindo o Orquestrador, pode alterá-los.
O papel de Orquestrador padrão é Delegate Implementation: planejar, delegar, monitorar e revisar. Uma solicitação comum cobrindo vários problemas não autoriza uma campanha ou criação de filho a menos que o humano peça explicitamente por orquestração ou delegação. Um pai pode manter artefatos de planejamento permitidos diretamente. Se o humano pedir explicitamente ao pai para implementar, primeiro inspecione atribuições de filho abertas e pull requests em busca de sobreposição, então crie e selecione um worktree Wollipog dedicado para o pai e siga o fluxo de trabalho normal de teste, revisão, evidência de UI, mesclagem e limpeza do repositório. Permissões e governança do provedor ainda se aplicam em todo o processo.
Strict Project Isolation é uma configuração de execução separada controlada por humano. Novas sessões
padrão o têm desabilitado. Quando habilitado, os locais do projeto são somente leitura impostos pelo SO, o pai trabalha
apenas em espaço de rascunho privado da sessão, e as operações de implementação e self-worktree do pai são recusadas.
O bwrap, Seatbelt ou limite de provedor auditado necessário é verificado antes da inicialização. Sessões de
Orquestrador existentes sem um campo de política de execução são tratadas como estritas e não podem se relaxar.
Cada criação de filho recebe um bloco de política de campanha derivado do servidor em sua atribuição inicial.
Para modelo ou esforço Automático, use get_agent_capabilities e envie o par selecionado na mesma
chamada create_session; valores fixos são aplicados pelo servidor. O bloco não é aprovação genérica. Filhos
devem usar request_workflow_decision, get_workflow_decision e consume_workflow_decision para
perguntas de implementação, mesclagem de PR, exclusão de branch mesclado, publicação de acompanhamento e evidência de UI.
Quando essas ferramentas MCP não estiverem disponíveis, use os equivalentes comandos autoescopados wollipog decision request,
get e consume acima; a captura exata do recurso e a ação opcional de mesclagem de PR são
objetos JSON. A CLI recusa --session para request, consume e reconcile e não expõe operação de resolução.
get_workflow_decision somente leitura aceita um sessionId opcional; list_workflow_decisions
enumera decisões pendentes e aprovadas com sessionId, limit e cursor opcionais.
Omitir o alvo lê a si mesmo. Um Orquestrador pode mirar em um descendente acessível, com acesso
a ambas as sessões necessário. Leituras exatas incluem estados terminais; um 404 nunca prova consumo.
Siga nextCursor até que esteja ausente. As páginas refletem o estado atual, portanto as decisões resolvidas durante a paginação
podem desaparecer; leia uma ocorrência conhecida exatamente quando seu resultado for importante.
Leituras e listagens de descendentes exigem protocolo de plano de controle v214. Runners mais antigos sem a ferramenta
podem usar uma CLI atualizada ou os endpoints HTTP somente leitura
GET /api/sessions/:id/workflow-decisions/:occurrenceId e
GET /api/sessions/:id/workflow-decisions?limit=50&cursor=<occurrence-id> com sua credencial de sessão existente
onde um token é provisionado. Sessões isoladas de provedor possuem apenas uma chave de relé do runner,
que não pode autenticar chamadas HTTP diretas; atualize o runner/CLI para as ferramentas em vez de
procurar um token de portador. Planos de controle mais antigos expõem apenas solicitações pendentes através de
list_descendant_requests; atualize-os para inspeção autorizada do estado do descendente.
Apenas o proprietário atual pode resolver a ocorrência pendente exata.
Para uma review_round_extension pendente desnecessária de propriedade humana, o Orquestrador controlador
pode, em vez disso, chamar withdraw_descendant_workflow_decision com o sessionId do filho, o occurrenceId
exato e um reason não vazio explicando o saque e dando as próximas instruções ao filho (plano de controle v265+).
Ele remove apenas essa solicitação, audita o saque do Orquestrador e entrega o motivo através do caminho
de retomada durável sem parar ou reiniciar o filho. A decisão lê revoked com proveniência withdrawal;
ela não concede aprovação e não pode ser consumida. Decisões aprovadas e categorias não designadas para saque são recusadas.
Use get_workflow_decision para o resultado exato; uma solicitação que ainda precisa de uma pessoa permanece deles.
Quando uma decisão pendente ou aprovada não é mais necessária e nunca foi consumida ou armada, aposente-a
com withdraw_workflow_decision (decision withdraw) e um reason não vazio (plano de controle
v269+); nunca a consuma com uma captura obsoleta para que seja revogada. Omita sessionId para sacar sua
própria. Um Orquestrador controlador pode passar o sessionId de seu filho para sacar uma que o Orquestrador
possui; uma decisão que uma pessoa possui permanece do solicitante para sacar. O saque não aprova nem consome
nada: a decisão lê revoked com withdrawal nomeando a sessão de saque e seu
motivo, nunca pode ser consumida depois e não bloqueia mais verify_campaign_child. Um
filho ainda esperando por uma decisão pendente é retomado com o motivo; um que já possui uma
aprovação não é acordado. Decisões consumidas, um pr_merge armado (reconcilie-o em vez disso) e
fechamento de problema de propriedade humana, escopo, admissão de acompanhamento e solicitações de automação são recusados.
Autenticação, segredos,
concessões persistentes, mudanças de governança, aumentos de orçamento e proteções de ferramentas permanecem apenas humanos.
Autoridade de orçamento separada estabelecida por humanos pode permitir reservas e alocações limitadas de trabalhadores gerenciados;
nunca a infira de um nome de campanha ou use um trabalhador não medido para evadir a contabilidade.
Uma parada ou reinicialização revoga todas as decisões que a sessão não consumiu. Após uma reinicialização, a sessão
recebe uma mensagem [Wollipog Session Restart] nomeando cada ocorrência revogada: não aja com base em uma
aprovação anterior dela e solicite novamente o que você ainda precisar.
Se um comando exato de mesclagem de PR armado já tiver sido bem-sucedido, mas sua ocorrência aprovada permaneceu
não consumida, use reconcile_workflow_decision (ou wollipog decision reconcile) com a
captura de recurso inalterada dessa ocorrência.
Ele nunca reexecuta o comando. Para um filho do Codex App Server, ele prova a admissão exata concluída,
comando do provedor e head de mesclagem da forge; retome a mesma sessão do App Server primeiro.
O enfileiramento de um filho do Claude Code não produz recibo de permissão no modo Auto ou Full Access, s