Pular para o conteúdo principal
Esta página lista todos os controles de configuração para a busca de memória do OpenClaw. Para visões conceituais gerais, consulte:

Visão geral da memória

Como a memória funciona.

Mecanismo integrado

Backend SQLite padrão.

Mecanismo QMD

Sidecar local-first.

Busca de memória

Pipeline de busca e ajuste.

Memória ativa

Subagente de memória para sessões interativas.
Todas as configurações de busca de memória ficam em agents.defaults.memorySearch no openclaw.json, salvo indicação em contrário.
Se você está procurando a alternância do recurso de memória ativa e a configuração do subagente, isso fica em plugins.entries.active-memory em vez de memorySearch.A memória ativa usa um modelo de duas portas:
  1. o plugin deve estar habilitado e direcionado ao id do agente atual
  2. a solicitação deve ser uma sessão de chat persistente interativa elegível
Consulte Active Memory para o modelo de ativação, a configuração pertencente ao plugin, a persistência de transcrições e o padrão de implantação segura.

Seleção de provedor

ChaveTipoPadrãoDescrição
providerstring"openai"ID do adaptador de embeddings, como bedrock, deepinfra, gemini, github-copilot, local, mistral, ollama, openai, openai-compatible ou voyage; também pode ser um models.providers.<id> configurado cujo api aponta para um adaptador de embeddings de memória ou uma API de modelo compatível com OpenAI
modelstringpadrão do provedorNome do modelo de embeddings
fallbackstring"none"ID do adaptador de fallback quando o primário falha
enabledbooleantrueHabilita ou desabilita a busca de memória
Quando provider não está definido, o OpenClaw usa embeddings da OpenAI. Defina provider explicitamente para usar Gemini, Voyage, Mistral, DeepInfra, Bedrock, GitHub Copilot, Ollama, um modelo GGUF local ou um endpoint /v1/embeddings compatível com OpenAI. Configurações legadas que ainda dizem provider: "auto" são resolvidas para openai.
Alterar o provedor de embeddings, o modelo, as configurações do provedor, as fontes, o escopo, a fragmentação ou o tokenizer pode tornar o índice vetorial SQLite existente incompatível. O OpenClaw pausa a busca vetorial e relata um aviso de identidade de índice em vez de recriar automaticamente os embeddings de tudo. Recrie quando estiver pronto com openclaw memory status --index --agent <id> ou openclaw memory index --force --agent <id>.
Quando provider não está definido, provider: "auto" legado está presente ou provider: "none" seleciona intencionalmente o modo somente FTS, a recuperação de memória ainda pode usar classificação lexical FTS quando embeddings não estiverem disponíveis. Provedores explícitos não locais falham de modo fechado. Se você definir memorySearch.provider como um provedor concreto com backend remoto, como OpenAI, Gemini, Voyage, Mistral, Bedrock, GitHub Copilot, DeepInfra, Ollama, LM Studio ou um provedor personalizado compatível com OpenAI, e esse provedor estiver indisponível em runtime, memory_search retornará um resultado indisponível em vez de usar silenciosamente a recuperação somente FTS. Corrija a configuração de provedor/autenticação, mude para um provedor acessível ou defina provider: "none" se você quiser recuperação somente FTS deliberada.

IDs de provedores personalizados

memorySearch.provider pode apontar para uma entrada personalizada models.providers.<id> para adaptadores de provedor específicos de memória, como ollama, ou para APIs de modelo compatíveis com OpenAI, como openai-responses / openai-completions. O OpenClaw resolve o proprietário de api desse provedor para o adaptador de embeddings preservando o ID de provedor personalizado para tratamento de endpoint, autenticação e prefixo de modelo. Isso permite que configurações com várias GPUs ou vários hosts dediquem embeddings de memória a um endpoint local específico:
{
  models: {
    providers: {
      "ollama-5080": {
        api: "ollama",
        baseUrl: "http://gpu-box.local:11435",
        apiKey: "ollama-local",
        models: [{ id: "qwen3-embedding:0.6b" }],
      },
    },
  },
  agents: {
    defaults: {
      memorySearch: {
        provider: "ollama-5080",
        model: "qwen3-embedding:0.6b",
      },
    },
  },
}

Resolução de chave de API

Embeddings remotos exigem uma chave de API. Bedrock usa a cadeia de credenciais padrão do AWS SDK em vez disso (funções de instância, SSO, chaves de acesso).
ProvedorVariável de ambienteChave de configuração
Bedrockcadeia de credenciais da AWSNenhuma chave de API necessária
DeepInfraDEEPINFRA_API_KEYmodels.providers.deepinfra.apiKey
GeminiGEMINI_API_KEYmodels.providers.google.apiKey
GitHub CopilotCOPILOT_GITHUB_TOKEN, GH_TOKEN, GITHUB_TOKENPerfil de autenticação via login de dispositivo
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
OllamaOLLAMA_API_KEY (placeholder)
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey
O OAuth do Codex cobre apenas chat/completions e não atende a solicitações de embeddings.

Configuração de endpoint remoto

Use provider: "openai-compatible" para um servidor genérico /v1/embeddings compatível com OpenAI que não deve herdar credenciais globais de chat da OpenAI.
remote.baseUrl
string
URL base personalizada da API.
remote.apiKey
string
Substitui a chave de API.
remote.headers
object
Cabeçalhos HTTP extras (mesclados com os padrões do provedor).
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai-compatible",
        model: "text-embedding-3-small",
        remote: {
          baseUrl: "https://api.example.com/v1/",
          apiKey: "YOUR_KEY",
        },
      },
    },
  },
}

Configuração específica do provedor

ChaveTipoPadrãoDescrição
modelstringgemini-embedding-001Também oferece suporte a gemini-embedding-2-preview
outputDimensionalitynumber3072Para Embedding 2: 768, 1536 ou 3072
Alterar o modelo ou outputDimensionality muda a identidade do índice. O OpenClaw pausa a busca vetorial até que você recrie explicitamente o índice de memória.
Endpoints de embeddings compatíveis com OpenAI podem optar por campos de solicitação input_type específicos do provedor. Isso é útil para modelos de embeddings assimétricos que exigem rótulos diferentes para embeddings de consulta e de documento.
ChaveTipoPadrãoDescrição
inputTypestringnão definidoinput_type compartilhado para embeddings de consulta e documento
queryInputTypestringnão definidoinput_type em tempo de consulta; substitui inputType
documentInputTypestringnão definidoinput_type de índice/documento; substitui inputType
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai-compatible",
        remote: {
          baseUrl: "https://embeddings.example/v1",
          apiKey: "${EMBEDDINGS_API_KEY}",
        },
        model: "asymmetric-embedder",
        queryInputType: "query",
        documentInputType: "passage",
      },
    },
  },
}
Alterar esses valores afeta a identidade do cache de embeddings para indexação em lote do provedor e deve ser seguido por uma reindexação de memória quando o modelo upstream tratar os rótulos de forma diferente.

Configuração de embeddings do Bedrock

Bedrock usa a cadeia de credenciais padrão do AWS SDK — nenhuma chave de API é necessária. Se o OpenClaw for executado no EC2 com uma função de instância habilitada para Bedrock, basta definir o provedor e o modelo:
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "bedrock",
        model: "amazon.titan-embed-text-v2:0",
      },
    },
  },
}
ChaveTipoPadrãoDescrição
modelstringamazon.titan-embed-text-v2:0Qualquer ID de modelo de embeddings do Bedrock
outputDimensionalitynumberpadrão do modeloPara Titan V2: 256, 512 ou 1024
Modelos compatíveis (com detecção de família e padrões de dimensão):
ID do modeloProvedorDimensões padrãoDimensões configuráveis
amazon.titan-embed-text-v2:0Amazon1024256, 512, 1024
amazon.titan-embed-text-v1Amazon1536
amazon.titan-embed-g1-text-02Amazon1536
amazon.titan-embed-image-v1Amazon1024
amazon.nova-2-multimodal-embeddings-v1:0Amazon1024256, 384, 1024, 3072
cohere.embed-english-v3Cohere1024
cohere.embed-multilingual-v3Cohere1024
cohere.embed-v4:0Cohere1536256-1536
twelvelabs.marengo-embed-3-0-v1:0TwelveLabs512
twelvelabs.marengo-embed-2-7-v1:0TwelveLabs1024
Variantes com sufixo de throughput (por exemplo, amazon.titan-embed-text-v1:2:8k) herdam a configuração do modelo base.Autenticação: a autenticação do Bedrock usa a ordem padrão de resolução de credenciais do AWS SDK:
  1. Variáveis de ambiente (AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY)
  2. Cache de token SSO
  3. Credenciais de token de identidade web
  4. Arquivos compartilhados de credenciais e configuração
  5. Credenciais de metadados do ECS ou EC2
A região é resolvida a partir de AWS_REGION, AWS_DEFAULT_REGION, do baseUrl do provedor amazon-bedrock, ou usa us-east-1 como padrão.Permissões do IAM: a função ou o usuário do IAM precisa de:
{
  "Effect": "Allow",
  "Action": "bedrock:InvokeModel",
  "Resource": "*"
}
Para privilégio mínimo, restrinja InvokeModel ao modelo específico:
arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0
ChaveTipoPadrãoDescrição
local.modelPathstringbaixado automaticamenteCaminho para o arquivo de modelo GGUF
local.modelCacheDirstringpadrão do node-llama-cppDiretório de cache para modelos baixados
local.contextSizenumber | "auto"4096Tamanho da janela de contexto para o contexto de embeddings. 4096 cobre chunks típicos (128–512 tokens) enquanto limita a VRAM não usada por pesos. Reduza para 1024–2048 em hosts restritos. "auto" usa o máximo treinado do modelo — não recomendado para modelos 8B+ (Qwen3-Embedding-8B: 40 960 tokens → ~32 GB de VRAM vs ~8,8 GB em 4096).
Instale primeiro o provedor oficial llama.cpp: openclaw plugins install @openclaw/llama-cpp-provider. Modelo padrão: embeddinggemma-300m-qat-Q8_0.gguf (~0,6 GB, baixado automaticamente). Checkouts de origem ainda exigem aprovação de build nativo: pnpm approve-builds e depois pnpm rebuild node-llama-cpp.Use a CLI independente para verificar o mesmo caminho de provedor que o Gateway usa:
openclaw memory status --deep --agent main
openclaw memory index --force --agent main
Defina provider: "local" explicitamente para embeddings GGUF locais. Referências de modelo hf: e HTTP(S) são compatíveis com configurações locais explícitas, mas não alteram o provedor padrão.

Tempo limite de embedding inline

sync.embeddingBatchTimeoutSeconds
number
Sobrescreva o tempo limite para lotes de embeddings inline durante a indexação de memória.Quando não definido, usa o padrão do provedor: 600 segundos para provedores locais/auto-hospedados, como local, ollama e lmstudio, e 120 segundos para provedores hospedados. Aumente isso quando os lotes de embeddings locais limitados por CPU estiverem íntegros, mas lentos.

Configuração de busca híbrida

Tudo em memorySearch.query.hybrid:
ChaveTipoPadrãoDescrição
enabledbooleantrueHabilita busca híbrida BM25 + vetorial
vectorWeightnumber0.7Peso para pontuações vetoriais (0-1)
textWeightnumber0.3Peso para pontuações BM25 (0-1)
candidateMultipliernumber4Multiplicador do tamanho do pool candidato
ChaveTipoPadrãoDescrição
mmr.enabledbooleanfalseHabilita reclassificação por MMR
mmr.lambdanumber0.70 = diversidade máxima, 1 = relevância máxima

Exemplo completo

{
  agents: {
    defaults: {
      memorySearch: {
        query: {
          hybrid: {
            vectorWeight: 0.7,
            textWeight: 0.3,
            mmr: { enabled: true, lambda: 0.7 },
            temporalDecay: { enabled: true, halfLifeDays: 30 },
          },
        },
      },
    },
  },
}

Caminhos adicionais de memória

ChaveTipoDescrição
extraPathsstring[]Diretórios ou arquivos adicionais a indexar
{
  agents: {
    defaults: {
      memorySearch: {
        extraPaths: ["../team-docs", "/srv/shared-notes"],
      },
    },
  },
}
Os caminhos podem ser absolutos ou relativos ao workspace. Diretórios são varridos recursivamente em busca de arquivos .md. O tratamento de symlinks depende do backend ativo: o mecanismo integrado ignora symlinks, enquanto o QMD segue o comportamento do scanner QMD subjacente. Para busca de transcritos entre agentes com escopo de agente, use agents.list[].memorySearch.qmd.extraCollections em vez de memory.qmd.paths. Essas coleções extras seguem o mesmo formato { path, name, pattern? }, mas são mescladas por agente e podem preservar nomes compartilhados explícitos quando o caminho aponta para fora do workspace atual. Se o mesmo caminho resolvido aparecer em memory.qmd.paths e memorySearch.qmd.extraCollections, o QMD mantém a primeira entrada e ignora a duplicada.

Memória multimodal (Gemini)

Indexe imagens e áudio junto com Markdown usando Gemini Embedding 2:
ChaveTipoPadrãoDescrição
multimodal.enabledbooleanfalseHabilitar indexação multimodal
multimodal.modalitiesstring[]["image"], ["audio"], ou ["all"]
multimodal.maxFileBytesnumber10000000Tamanho máximo de arquivo para indexar
Aplica-se somente a arquivos em extraPaths. As raízes de memória padrão permanecem apenas Markdown. Requer gemini-embedding-2-preview. fallback deve ser "none".
Formatos compatíveis: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (imagens); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (áudio).

Cache de embeddings

ChaveTipoPadrãoDescrição
cache.enabledbooleantrueArmazenar embeddings de chunks em cache no SQLite
cache.maxEntriesnumber50000Máximo de embeddings em cache
Evita gerar embeddings novamente para texto inalterado durante reindexação ou atualizações de transcritos.

Indexação em lote

ChaveTipoPadrãoDescrição
remote.nonBatchConcurrencynumber4Embeddings inline paralelos
remote.batch.enabledbooleanfalseHabilitar API de embeddings em lote
remote.batch.concurrencynumber2Jobs em lote paralelos
remote.batch.waitbooleantrueAguardar conclusão do lote
remote.batch.pollIntervalMsnumberIntervalo de polling
remote.batch.timeoutMinutesnumberTempo limite do lote
Disponível para openai, gemini e voyage. O lote da OpenAI costuma ser o mais rápido e barato para grandes preenchimentos retroativos. remote.nonBatchConcurrency controla chamadas de embedding inline usadas por provedores locais/auto-hospedados e provedores hospedados quando as APIs de lote do provedor não estão ativas. Ollama usa 1 por padrão para indexação sem lote a fim de evitar sobrecarregar hosts locais menores; defina um valor mais alto em máquinas maiores. Isso é separado de sync.embeddingBatchTimeoutSeconds, que controla o tempo limite para chamadas de embedding inline.

Busca de memória de sessão (experimental)

Indexe transcritos de sessão e exponha-os via memory_search:
ChaveTipoPadrãoDescrição
experimental.sessionMemorybooleanfalseHabilitar indexação de sessão
sourcesstring[]["memory"]Adicionar "sessions" para incluir transcritos
sync.sessions.deltaBytesnumber100000Limite em bytes para reindexação
sync.sessions.deltaMessagesnumber50Limite de mensagens para reindexação
A indexação de sessões é opcional e executada de forma assíncrona. Os resultados podem ficar ligeiramente desatualizados. Os logs de sessão ficam em disco, então trate o acesso ao sistema de arquivos como o limite de confiança.
As ocorrências em transcrições de sessão também obedecem a tools.sessions.visibility. A visibilidade padrão tree expõe apenas a sessão atual e as sessões que ela criou. Para recuperar uma sessão não relacionada, do mesmo agente, despachada pelo Gateway a partir de outra sessão, como uma DM, amplie intencionalmente a visibilidade para agent (ou all somente quando a recuperação entre agentes também for necessária e a política entre agentes permitir). Os exemplos abaixo colocam essas configurações em agents.defaults. Você também pode aplicar configurações equivalentes de memorySearch em uma substituição por agente quando apenas um agente deve indexar e pesquisar transcrições de sessão. Para recuperação Gateway-para-DM no mesmo agente:
{
  agents: {
    defaults: {
      memorySearch: {
        experimental: { sessionMemory: true },
        sources: ["memory", "sessions"],
      },
    },
  },
  tools: {
    sessions: { visibility: "agent" },
  },
}
Ao usar QMD, agents.defaults.memorySearch.experimental.sessionMemory e sources: ["sessions"] não exportam transcrições para o QMD por si só. Defina também memory.qmd.sessions.enabled: true.

Aceleração vetorial SQLite (sqlite-vec)

ChaveTipoPadrãoDescrição
store.vector.enabledbooleantrueUsar sqlite-vec para consultas vetoriais
store.vector.extensionPathstringbundledSubstituir o caminho do sqlite-vec
Quando sqlite-vec não está disponível, o OpenClaw recorre automaticamente à similaridade de cosseno no processo.

Armazenamento de índice

Índices de memória integrados ficam no banco de dados SQLite do OpenClaw de cada agente em agents/<agentId>/agent/openclaw-agent.sqlite.
ChaveTipoPadrãoDescrição
store.fts.tokenizerstringunicode61Tokenizador FTS5 (unicode61 ou trigram)

Configuração do backend QMD

Defina memory.backend = "qmd" para habilitar. Todas as configurações do QMD ficam em memory.qmd:
ChaveTipoPadrãoDescrição
commandstringqmdCaminho do executável QMD; defina um caminho absoluto quando o PATH do serviço diferir do seu shell
searchModestringsearchComando de pesquisa: search, vsearch, query
rerankbooleanDefina como false com searchMode: "query" e QMD 2.1+ para ignorar o reranqueamento do QMD
includeDefaultMemorybooleantrueIndexar automaticamente MEMORY.md + memory/**/*.md
paths[]arrayCaminhos extras: { name, path, pattern? }
sessions.enabledbooleanfalseExportar transcrições de sessão para o QMD
sessions.retentionDaysnumberRetenção de transcrições
sessions.exportDirstringDiretório de exportação
searchMode: "search" é apenas lexical/BM25. O OpenClaw não executa sondagens de prontidão vetorial semântica nem manutenção de embeddings do QMD nesse modo, inclusive durante memory status --deep; vsearch e query continuam exigindo prontidão vetorial e embeddings do QMD. rerank: false altera apenas o modo query do QMD e exige QMD 2.1 ou mais recente. No modo CLI direto, o OpenClaw passa --no-rerank; no modo MCP baseado em mcporter, ele passa rerank: false para a ferramenta de consulta unificada do QMD. Deixe sem definir para usar o comportamento padrão de reranqueamento de consultas do QMD. O OpenClaw prefere os formatos atuais de coleção e consulta MCP do QMD, mas mantém versões mais antigas do QMD funcionando ao tentar flags compatíveis de padrão de coleção e nomes antigos de ferramentas MCP quando necessário. Quando o QMD anuncia suporte a vários filtros de coleção, coleções da mesma fonte são pesquisadas com um único processo QMD; builds mais antigos do QMD mantêm o caminho de compatibilidade por coleção. Mesma fonte significa que coleções de memória durável são agrupadas, enquanto coleções de transcrições de sessão permanecem um grupo separado para que a diversificação de fontes ainda tenha ambas as entradas.
Substituições de modelo do QMD permanecem no lado do QMD, não na configuração do OpenClaw. Se você precisar substituir globalmente os modelos do QMD, defina variáveis de ambiente como QMD_EMBED_MODEL, QMD_RERANK_MODEL e QMD_GENERATE_MODEL no ambiente de runtime do Gateway.
ChaveTipoPadrãoDescrição
update.intervalstring5mIntervalo de atualização
update.debounceMsnumber15000Aplica debounce a alterações de arquivos
update.onBootbooleantrueAtualiza quando o gerenciador QMD de longa duração abre; defina como falso para ignorar a atualização imediata na inicialização
update.startupstringoffInicialização QMD opcional ao iniciar o gateway: off, idle ou immediate
update.startupDelayMsnumber120000Atraso antes da atualização de startup: "idle" ser executada
update.waitForBootSyncbooleanfalseBloqueia a abertura do gerenciador até a atualização inicial ser concluída
update.embedIntervalstringCadência separada de embeddings
update.commandTimeoutMsnumberTempo limite para comandos QMD
update.updateTimeoutMsnumberTempo limite para operações de atualização QMD
update.embedTimeoutMsnumberTempo limite para operações de embedding QMD
ChaveTipoPadrãoDescrição
limits.maxResultsnumber6Máximo de resultados de busca
limits.maxSnippetCharsnumberLimita o tamanho do trecho
limits.maxInjectedCharsnumberLimita o total de caracteres injetados
limits.timeoutMsnumber4000Tempo limite da busca
Controla quais sessões podem receber resultados de busca QMD. Mesmo esquema que session.sendPolicy:
{
  memory: {
    qmd: {
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
    },
  },
}
O padrão distribuído permite sessões diretas e de canal, enquanto ainda nega grupos.O padrão é apenas DM. match.keyPrefix corresponde à chave de sessão normalizada; match.rawKeyPrefix corresponde à chave bruta, incluindo agent:<id>:.
memory.citations se aplica a todos os backends:
ValorComportamento
auto (padrão)Inclui o rodapé Source: <path#line> nos trechos
onSempre inclui o rodapé
offOmite o rodapé (o caminho ainda é passado internamente ao agente)
Quando a inicialização QMD ao iniciar o gateway está habilitada, o OpenClaw inicia o QMD apenas para agentes elegíveis. Se update.onBoot for verdadeiro e nenhuma manutenção de intervalo/embedding estiver configurada, a inicialização usa um gerenciador de execução única para a atualização de inicialização e o fecha. Se um intervalo de atualização ou embedding estiver configurado, a inicialização abre o gerenciador QMD de longa duração para que ele possa controlar o observador e os timers de intervalo; update.onBoot: false ignora apenas a atualização imediata na inicialização.

Exemplo completo de QMD

{
  memory: {
    backend: "qmd",
    citations: "auto",
    qmd: {
      includeDefaultMemory: true,
      update: { interval: "5m", debounceMs: 15000 },
      limits: { maxResults: 6, timeoutMs: 4000 },
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
      paths: [{ name: "docs", path: "~/notes", pattern: "**/*.md" }],
    },
  },
}

Dreaming

Dreaming é configurado em plugins.entries.memory-core.config.dreaming, não em agents.defaults.memorySearch. Dreaming é executado como uma varredura agendada e usa fases internas light/deep/REM como detalhe de implementação. Para o comportamento conceitual e os comandos de barra, consulte Dreaming.

Configurações do usuário

ChaveTipoPadrãoDescrição
enabledbooleanfalseHabilita ou desabilita totalmente o dreaming
frequencystring0 3 * * *Cadência Cron opcional para a varredura completa de dreaming
modelstringmodelo padrãoSubstituição opcional do modelo do subagente Dream Diary
phases.deep.maxPromotedSnippetTokensnumber160Máximo de tokens estimados mantidos de cada trecho de recuperação de curto prazo promovido para MEMORY.md; os metadados de proveniência permanecem visíveis

Exemplo

{
  plugins: {
    entries: {
      "memory-core": {
        subagent: {
          allowModelOverride: true,
          allowedModels: ["anthropic/claude-sonnet-4-6"],
        },
        config: {
          dreaming: {
            enabled: true,
            frequency: "0 3 * * *",
            model: "anthropic/claude-sonnet-4-6",
          },
        },
      },
    },
  },
}
  • Dreaming grava o estado da máquina em memory/.dreams/.
  • Dreaming grava a saída narrativa legível por humanos em DREAMS.md (ou no dreams.md existente).
  • dreaming.model usa a trava de confiança de subagente do Plugin existente; defina plugins.entries.memory-core.subagent.allowModelOverride: true antes de habilitá-lo.
  • Dream Diary tenta novamente uma vez com o modelo padrão da sessão quando o modelo configurado está indisponível. Falhas de confiança ou allowlist são registradas em log e não são repetidas silenciosamente.
  • A política e os limites das fases light/deep/REM são comportamento interno, não configuração voltada ao usuário.

Relacionado