Skip to content

pane_spawn invisível em sessões Claude Code — anyOf na raiz do inputSchema faz o cliente descartar a tool (orquestrador de squad claude fica sem via de delegação) #1

Description

@rafaelsantana6

Ambiente

  • Overclock desktop (AppImage Linux, sidecar dist/index.jsc), MCP SSE em http://127.0.0.1:<porta>/sse/claude
  • Claude Code 2.1.222 (última no npm em 2026-08-05)

Sintoma

Orquestrador de squad em CLI claude fica sem nenhuma via sancionada de delegação:

  1. overclock_agent_invoke não existe mais (a doc do param persona do pane_spawn confirma: "same lookup the old agent_invoke did") — porém a descrição de overclock_squad_spawn ainda o menciona (doc desatualizada).
  2. pane_spawn não aparece na sessão Claude — ToolSearch não acha, chamada direta retorna "No such tool available".
  3. O gate por pane (skill-gate-pane-N.mjs) permite mcp__overclock__pane_spawn na allowlist, mas bloqueia os fallbacks que o modelo tenta (Agent nativo, overclock_task) → beco sem saída. O orquestrador claude flaila em ToolSearch e termina bloqueado.

Evidência

Probe SSE direto no sidecar (handshake + tools/list), com a MESMA querystring do pane orquestrador (squadRole=orchestrator, callerPaneId vivo):

  • Servidor publica 47 tools, incluindo pane_spawn.
  • Sessões Claude Code enxergam 45 — somem exatamente pane_spawn e overclock.

O inputSchema do pane_spawn anunciado pelo servidor:

{
  "type": "object",
  "required": [],
  "anyOf": [
    {"required": ["prompt"], "description": "Delegating (normal case): ..."},
    {"required": ["idle"], "description": "Deliberately EMPTY pane: ..."}
  ],
  "additionalProperties": false
}

Causa raiz

O Claude Code descarta silenciosamente tools MCP cujo input_schema tem anyOf na raiz (a API de tools da Anthropic exige objeto plain na raiz; o cliente dropa a tool em vez de sanitizar). Resultado: a tool existe no servidor, o gate espera ela, mas o modelo nunca a vê.

Fix sugerido (trivial)

Remover o anyOf da raiz do schema anunciado e mover o enforcement prompt XOR idle para runtime (validação na chamada, erro claro "passe prompt OU idle:true"). A descrição da tool já explica a regra em texto — o modelo obedece; o runtime garante.

Workaround atual

Trocar o orquestrador do squad para CLI codex (ingest OpenAI aceita o schema): pane_spawn({persona}) funciona e resolve CLI/model do roster corretamente. Verificado em produção local (2026-08-05).

Bônus: atualizar a descrição de overclock_squad_spawn que ainda referencia overclock_agent_invoke.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions