O Sequential Thinking expõe dois eixos ortogonais além da camada de permissão stLayer:

EixoCampoControla
PrivilégiostLayer (derivado do token)Escopo de dados, catálogo permitido por camada, persona conversacional
Pipelineoptions.mode ou modeInputQuais chapters rodam, subset de ações, plano pré-construído, guidance de domínio

Confundir os dois eixos é erro comum: um token Host pode usar mode: 'lean'; uma sessão Conversational pode usar pipeline completo (sem mode).

stLayer e mode são server-derived nos produtos Tolky (webchat, backoffice). Integradores externos via runWithAgents podem passar modeInput.mode quando o contrato do produto permitir — valores fora da whitelist são ignorados ou rejeitados conforme o caller.


options.mode — presets de pipeline

Um mode restringe ou especializa o motor antes da fase PREPARATION:

  • Subset de ações — ex.: copilot de ticket vê só ações de tickets/leads.
  • Constraints e guidance — regras SQL, primers de domínio, políticas de área.
  • Opções de execuçãomaxSteps, timeouts, flags de performance embutidas.
  • Plano pré-construídoprebuiltPlan determinístico (sem Planner LLM).

Modes built-in (referência)

ModeUso típico
(ausente)Pipeline completo — Planner + Executor + DeliveryComparator + Compile
leanResposta rápida em 1 chamada LLM (bypass de Planner/Executor). Webchat anônimo.
canvasIntegração com UI dinâmica /canvas — ações pushCanvasEntry, mountCanvasFrame, etc.
workflowBuilderEdição de grafos de workflow (addWorkflowNode, connectWorkflowNodes, …)
advisor_decisionAuditoria Advisor V4 com plano fixo de tracers

Como ativar via API

Passe modeInput no body de runWithAgents (ou screenTags legado):

{
  "instructions": "Atualize o ticket 12345678 com prioridade alta",
  "modeInput": {
    "mode": "copilot_ticket",
    "screen": "ticket_detail",
    "entityIds": { "ticketId": "uuid-do-ticket" }
  }
}

Quando modeInput.mode está presente, o backend resolve bindings de tela (screenBindings) e injeta registry/opções antes do pipeline.

Parâmetros relacionados:

CampoDescrição
modeInput.modeID estável do mode (slug)
modeInput.screenTela/contexto de UI para resolução automática quando mode omitido
modeInput.entityIdsIDs de entidade exigidos pelo mode (ticket, lead, conversa, …)
canvasSessionIdSessão de canvas para fan-out de comandos UI (requer coerência com hostId)
sessionIdCorrelação WebSocket / sequentialKeeper

options.performanceMode — presets de custo/latência

Atalho para ligar/desligar gates LLM caros. Valores: balanced (padrão), fast, turbo. Flags explícitas no mesmo options sempre vencem o preset.

PresetEfeito resumido
balancedComportamento padrão do motor
fastDesliga DeliveryComparator, PlanReviewer, ResultEvaluator, narração, avatar persona; ativa terseOutput
turboAdiciona desligamento de RAG/Web/prefilters/sessionContext, corta retries, persistenceMode: 'deferred'

Flags individuais (override fino): skipDeliveryComparator, skipAvatarPersona, skipResultEvaluator, skipNarration, skipActionPrefilter, skipConstraintPrefilter, skipSessionContext, enableRag: false, terseOutput, persistenceMode, avatarPersonaMode (fused | rewrite | off).

O motor expõe result.metrics.perfMode = { preset, resolvedFlags } quando um preset foi aplicado.


Além das ~60 ações base, o GET /listActions pode incluir clusters conforme variáveis de ambiente:

ClusterFlag (opt-out)Ações (exemplos)
Advisor V4ADVISOR_V4_ENABLED=falseresolveAdvisorScope, compileAdvisorReportV4, verifyIssueV4, … (~37)
Canvas / side-trackCANVAS_DYNAMIC_CONTENT_ENABLED=falsepushCanvasEntry, mountCanvasFrame, sideTrackAgent, … (~10)
Decision AssistantST_DECISION_ASSISTANT_ENABLED=falseaskDecisionChain, createDecisionChain, editDecisionChain, … (4)
Sub-plannerST_SUB_PLANNER_DELEGATION_ENABLED=falsedelegateToSubPlanner (default ON; whitelist de layers em ST_SUB_PLANNER_DELEGATION_LAYERS, default admin)

Workflow builder (addWorkflowNode, importN8nWorkflow, …) não entra no catálogo padrão de listActions — só no mode workflowBuilder.

SecOps crypto (encryptJson, hashFromText, …) e tracers investigateV3 (toolCallTracer, timelineReverseTrace, …) fazem parte do catálogo base quando registrados no deploy.


Sub-planner (delegateToSubPlanner) — default ON

Quando o catálogo inclui delegateToSubPlanner, o Planner pode decompor pedidos multi-parte em sub-runs headless (filhos com o mesmo hostId). Caps principais: ST_SUB_PLANNER_MAX_DEPTH (default 1), ST_SUB_PLANNER_MAX_PARALLEL (default 3). Supervisão (ST_SUB_PLANNER_SUPERVISION_*) e composição com Investigation Loop (ST_SUB_PLANNER_IN_LOOP_ENABLED) são opt-in e default OFF.

Não há campo no body do cliente para ligar/desligar — só variáveis de ambiente do serviço.


Canvas Curator — default ON

Instância paralela ao Planner que preenche o Side Track (painel visual) do webchat com tabelas, imagens e Atomic Visuals produzidos no turno, sem exigir que o plano peça ações de canvas. Master: ST_CANVAS_CURATOR_ENABLED (opt-out com =false). Layers: ST_CANVAS_CURATOR_LAYERS (default conversational,host,admin). Budget da live wave: ST_CANVAS_CURATOR_LIVE_MAX_PER_TURN (default 3).

O curador não altera a resposta textual do Planner; só emite comandos de canvas no trilho canônico. Pedidos explícitos de curadoria (ST_CANVAS_CURATOR_USER_REQUESTS_ENABLED) continuam opt-in OFF.


Investigation Loop (server-side, default OFF)

O motor tem um loop proativo INVESTIGAR→DECIDIR: cada ciclo é um plan+execute completo, e um decisor avalia os resultados acumulados para entregar, rodar outro ciclo ou pausar e perguntar. A ativação é 100% por variável de ambiente do serviço — não há campo em options do request; o payload do cliente não influencia.

Flag (server-side)DefaultEfeito
ST_INVESTIGATION_LOOP_ENABLEDfalsemaster switch do loop
ST_INVESTIGATION_LOOP_LAYERS / _REAL_LAYERSadmin,hostcamadas elegíveis / com loop real (demais elegíveis ficam em shadow: decisor roda, entrega idêntica)
ST_INVESTIGATION_LOOP_ASYNC_LAYERSconversationalcamadas reais que entregam o ciclo 1 imediatamente e continuam o loop em background
ST_EXPLORATION_AFTER_DELIVERfalsefase shadow exploratória: o decisor pode emitir DELIVER_AND_EXPLORE (entrega inalterada; registra a pista para telemetria)

Quando ligado, o stream de eventos pode incluir investigation_cycle_started, continuation_decision_made e cycle_limit_reached; cada ciclo tem intentId próprio, correlacionado por loopGroupId no resultado.

Composição loop × delegação (ST_SUB_PLANNER_IN_LOOP_ENABLED) permanece opt-in OFF: com OFF, turnos sob Investigation Loop não registram delegateToSubPlanner no catálogo daquele turno.


Transporte de eventos (ST_TRANSPORT_MODE)

Saída dos eventos do motor para o gateway webchat:

ValorEfeito
dual (default)Emite no socket legado e no Redis pub/sub (publish)
publishSó Redis pub/sub (caminho de produção alvo)
socketSó socket legado in-process

O contrato browser (nomes de evento, seq, rooms) permanece o mesmo — muda só o caminho interno entre pods. Detalhes de conexão em Eventos e WebSocket.


Relação com stLayer

PerguntaResposta
conversationId define a camada?Não — indica onde persistir; stLayer vem do token.
Mode restringe ações além do stLayer?Sim — intersecta com o catálogo permitido na camada.
Integrador define stLayer no body?Não — derivado do contexto de autenticação.
Integrador define mode?Depende do produto — via modeInput quando o caller Tolky expõe.

Para isolamento por tenant/host, veja Camadas de permissão.