Motor Strands
O Libre WebUI integra um motor de agentes construído sobre o
harness do Strands Agents, de
código aberto (@strands-agents/harness 0.1.1 sobre @strands-agents/sdk
1.19.0). Ele roda dentro do processo do backend do Libre WebUI, então não há
nenhum daemon separado para instalar. O SDK é carregado na primeira vez que o
motor é usado; um servidor com o Strands desligado nunca o carrega.
O motor usa os modelos que o Libre WebUI já oferece:
- modelos do Ollama, quando o Ollama está ativado
- modelos de plugins de provedor de chat ou de completion ativos
Toda chamada de modelo passa pelos mesmos serviços do Ollama e de plugins que o Chat usa. Não há configuração de provedor separada nem chave de API separada. As credenciais dos provedores e a chave do Ollama continuam valendo sem alterações.
Você pode usar o motor em três lugares:
- na página Strands, para sessões de agente persistentes
- no Chat, pelas entradas Strands do seletor de modelos
- no Work, como a opção Strands do controle Motor do compositor
Acesso
Um administrador escolhe quem pode usar o motor em Configurações → Gerenciamento de Usuários → Acesso e políticas → Motor Strands:
| Modo | Rótulo na configuração | Quem pode usar o Strands |
|---|---|---|
disabled | Desligado | Ninguém, nem mesmo administradores (padrão) |
admins | Administradores | Administradores ativos |
all-users | Todos os usuários | Todas as contas ativas |
A alteração vale a partir da próxima solicitação, sem reiniciar.
Para fixar o modo no nível da implantação, defina LIBRE_STRANDS_ACCESS:
LIBRE_STRANDS_ACCESS=admins # or disabled, all-users
Um modo fixado bloqueia o controle em Gerenciamento de Usuários. Qualquer valor
diferente de disabled, admins ou all-users deixa o motor travado como
desligado, em vez de voltar à configuração salva.
O servidor aplica o modo em toda solicitação REST, no chat por WebSocket e em
toda chamada de modelo de uma execução do Work. Se o modo não puder ser lido, o
acesso é negado. Contas sem acesso não veem a página Strands, as entradas
Strands do chat nem o motor Strands do Work, e a API responde 403.
Página Strands
Abra Strands pela barra lateral (/strands).
- As sessões persistem entre reinicializações, até 200 por conta. A primeira mensagem dá nome a uma nova sessão.
- Escolha um modelo para cada sessão. Modelo padrão usa o seu modelo de chat padrão.
- As respostas aparecem em streaming à medida que são geradas, com o raciocínio do modelo e um cartão para cada chamada de ferramenta.
- Parar cancela o turno em execução. Uma sessão executa um turno por vez.
- Excluir uma sessão remove o histórico e o workspace dela.
Chat
Escolha Strands no seletor de modelos. Ele aparece no grupo Agentes, ao lado dos modelos de agentes CLI:
- Strands (
strands) usa o padrão do motor, que é o seu modelo de chat padrão. - Strands · modelo (provedor) (
strands:<route>) fixa um modelo e o provedor dele para a conversa.
O Strands no Chat depende apenas do acesso ao Strands. Ele não precisa da chave de modelos de agentes CLI e aparece mesmo com essa chave desligada. No Chat, o agente tem as mesmas ferramentas de arquivo da página Strands, em um workspace privado por conta, e as respostas chegam como texto e raciocínio. Consulte Agentes de programação instalados para saber mais sobre o grupo Agentes e sobre como usar uma entrada Strands como modelo de tarefa para títulos e resumos de raciocínio.
Work
No compositor do Work, escolha Libre WebUI ou Strands no controle Motor e selecione o modelo separadamente. Com Strands, um agente Strands planeja cada etapa, e o Work executa as ferramentas que ele pede no sandbox do Work, sob a política de aprovação normal do Work. O Work continua sendo a fonte oficial da transcrição, das aprovações, da execução de ferramentas e do histórico de execuções; no Work, o agente Strands não executa nenhuma ferramenta própria.
O modelo do provedor por trás precisa oferecer suporte a chamadas de ferramentas. O Work verifica isso antes de iniciar uma execução e rejeita um modelo que não anuncia suporte a ferramentas.
Execuções do Work salvas por versões anteriores com o prefixo de modelo dsh:
abrem como execuções Strands. Consulte
Work: motor Strands para ver como a escolha do
motor interage com modelos trazidos do Chat.
Modelo de segurança
Na página Strands e no Chat, o agente tem um conjunto de ferramentas propositalmente pequeno:
read,writeeedit, para arquivos do seu workspace- o plugin
todosdo harness, para planejar trabalhos com várias etapas
Ele não tem shell, busca na web, memória nem skills, e nenhum arquivo
AGENTS.md é injetado nas instruções dele.
Cada sessão tem um diretório de workspace privado, que o agente vê como
/workspace. Todo caminho é resolvido depois de seguir links simbólicos e
precisa permanecer dentro desse diretório, então um link no workspace não
consegue alcançar o resto do disco. O sandbox se recusa a executar comandos.
| Item | Limite |
|---|---|
| Sessões por conta | 200 |
| Tamanho do prompt | 32.000 caracteres |
| Turnos do agente por mensagem | 24 |
| Leitura ou gravação de arquivo | 2 MB por chamada |
| Título da sessão | 120 caracteres |
Um turno que atinge o limite de turnos para e avisa isso. Cada turno pode fazer várias chamadas de modelo aos seus provedores, então conceda acesso com o mesmo cuidado de qualquer outro acesso a modelos que consome orçamento de provedor.
Armazenamento
Os dados do Strands ficam em <DATA_DIR>/strands/, não no banco de dados da
aplicação. Cada conta tem o próprio diretório,
<DATA_DIR>/strands/users/<account-hash>/, que contém:
registry.json: a lista de sessões da contasessions/: os snapshots de sessão do Strands que o agente usa como contextotranscripts/: a transcrição de cada sessão exibida na página Strandsworkspaces/: o workspace privado de cada sessãochat-workspace/: o workspace usado pelos turnos do Chat
Inclua <DATA_DIR>/strands/ nos backups se as sessões forem importantes para
você.
Uso
O Uso do provedor (/usage) atribui as chamadas do Strands ao agente
Strands na seção Agentes. Consulte
Uso dos agentes.
API
Toda rota exige uma conta autenticada com acesso ao Strands, exceto
/api/strands/access, que exige um administrador.
| Método | Caminho | Finalidade |
|---|---|---|
GET | /api/strands/access | Lê o modo de acesso e se LIBRE_STRANDS_ACCESS o fixa (admin) |
PUT | /api/strands/access | Define mode como disabled, admins ou all-users (admin; 409 se fixado) |
GET | /api/strands/health | Disponibilidade do motor e versões do harness e do SDK |
GET | /api/strands/models | Modelos que o motor pode usar para esta conta |
GET | /api/strands/sessions | Lista as sessões |
POST | /api/strands/sessions | Cria uma sessão (title e model opcionais) |
GET | /api/strands/sessions/:sessionId | Lê uma sessão, a transcrição dela e se há um turno em execução |
PATCH | /api/strands/sessions/:sessionId | Altera o título ou o modelo de uma sessão |
DELETE | /api/strands/sessions/:sessionId | Exclui uma sessão com a transcrição e o workspace dela |
POST | /api/strands/sessions/:sessionId/messages | Envia { "text": "..." } e transmite o turno como NDJSON |
POST | /api/strands/sessions/:sessionId/cancel | Para o turno em execução |
O stream de mensagens grava um evento JSON por linha: turn-start, text,
reasoning, tool-start, tool-result, done (com o motivo da parada e o uso
de tokens quando o provedor informa) e error. Fechar a conexão cancela o
turno. Enviar uma mensagem enquanto um turno está em execução retorna 409.
Configuração
| Variável | Padrão | Finalidade |
|---|---|---|
LIBRE_STRANDS_ACCESS | não definido (configuração administrativa, admins) | Fixa disabled, admins ou all-users; qualquer outro valor deixa o motor travado como desligado |
Solução de problemas
Consulte Problemas do motor Strands.