Se você programa Java há algum tempo, provavelmente já testou montar um agente de IA pessoal com algum framework Python, ou colou tudo num script solto. Funciona por uma semana, até o contexto ficar grande demais e o “agente” esquecer quem você é. Escrevi o Qlawkus para resolver exatamente esse problema, e para fazer isso do jeito que a gente já confia para construir backend: Quarkus, extensões, e nada de mágica escondida.
TL;DR
Qlawkus é um conjunto de extensões Quarkus (padrão
deployment+runtime), construído sobre o quarkus-langchain4j, para montar um agente de IA pessoal e 100% autônomo. A diferença central: memória relevante é injetada automaticamente no prompt antes de cada resposta via RAG, em vez de depender do modelo decidir chamar uma tool de busca. Você compõe o agente escolhendo só as capacidades que quer - memória em Postgres/pgvector ou só markdown, Discord, Telegram com voz, Google Workspace, um console admin - via umagent.ymlque gera o pom antes do build. É open-source (Apache 2.0), roda com umdocker compose up, e está em desenvolvimento ativo (0.8.x). PRs, issues e estrelas são muito bem-vindas.
Isso não é a única forma de fazer isso
Preciso ser honesto sobre uma coisa antes de continuar: eu contribuo ativamente para o quarkus-langchain4j, e não quero que esse artigo soe como “esquece a extensão, usa o Qlawkus”. Não é essa a ideia. O quarkus-langchain4j já te dá tudo que você precisa pra montar um agente do zero - @RegisterAiService, RAG, tools, streaming, guardrails, os providers todos. Ele é a fundação. O Qlawkus não compete com ele, é construído em cima dele.
O Qlawkus resolve um problema mais específico: um agente de IA pessoal, single-user, com o objetivo declarado de ser 100% autônomo - que aprende sobre você ao longo do tempo, escreve suas próprias skills, evolui sua própria personalidade (Soul) e age em seu nome (git, shell, Google Workspace), sem que você precise reconstruir a fundação toda vez. Pra isso, ele é opinativo por escolha: várias decisões que num agente genérico ficam em aberto - como a memória é injetada, como uma skill envelhece, como um canal de mensageria conversa com o outro - aqui já vêm resolvidas de um jeito específico.
Então “por que Qlawkus e não só quarkus-langchain4j puro” é meio que a pergunta errada. A certa é: você quer decidir cada peça do zero, ou quer um agente pessoal autônomo com essas decisões já tomadas? O quarkus-langchain4j serve os dois casos igualmente bem - ele é a base debaixo dos dois.
A inspiração para essa combinação específica (memória tripla, skills, single-user, 100% autônomo) veio de dois projetos fora do ecossistema Java: OpenClaw e o Hermes Agent (da Nous Research). O Qlawkus pega essa filosofia e reconstrói em cima do Quarkus - extensões, injeção de dependência, imagem nativa, tudo que a comunidade Java já confia para produção.
O problema: memória que depende do modelo lembrar de procurar
A maioria dos agentes pessoais de IA por aí resolve memória de duas formas, e ambas têm um problema:
- Tool de busca - o modelo decide, a cada turno, se vale a pena chamar uma função para buscar memória antiga. Na prática, ele só busca quando percebe que precisa - e o problema é justamente que a informação mais importante costuma ser a que o modelo não sabe que deveria procurar.
- Jogar tudo no prompt - simples, mas não escala. Quanto mais o agente aprende sobre você, maior o prompt, mais caro e mais lento fica cada turno.
O Qlawkus não escolhe entre os dois: antes de cada resposta, um passo de RAG (ActiveMemoryAugmentor) embeda a mensagem do usuário e injeta só os fatos relevantes para aquele turno - nem tudo, nem nada. Isso acontece sem chamada de tool, então a lembrança nunca depende do modelo “se lembrar de checar”. E se o agente ainda assim precisar cavar mais fundo, ele tem a tool searchTranscripts para buscar deliberadamente no histórico completo de conversas.
O que entra no prompt, todo turno
Soul- a identidade, humor e viés de comportamento do próprio agente.UserProfile- um perfil coerente e curado da pessoa que ele atende (mantido por uma tool e refinado toda noite por um job de curadoria).- Fatos relevantes - recuperados via RAG a partir de um fact store com pgvector, cada um marcado com a origem (
remember-tool,semantic-extractor,episodic-consolidator,transcript). - Índice de skills - nome e descrição de cada procedimento que o agente já aprendeu (o corpo completo só é carregado sob demanda, via
viewSkill).
Jobs em background mantêm tudo isso limpo sozinho: deduplicação semântica de fatos quase-duplicados, consolidação de journals diários, e curadoria que funde fatos soltos num UserProfile coerente. Você não precisa arrumar a casa manualmente.
Skills: memória procedural que o próprio agente escreve
Além de saber fatos (memória declarativa), o Qlawkus também aprende como fazer coisas recorrentes (memória procedural). Cada skill é um SKILL.md simples - frontmatter com name/description, corpo em Markdown - seguindo o padrão agentskills.io, então é portável para qualquer outro agente que fale o mesmo formato:
---
name: open-a-pr
description: Open a GitHub pull request from the current branch with a clean summary
---
# Open a pull request
1. Confirm the branch is pushed: `git status -sb`.
2. Draft a title that reads well in a changelog.
3. Open it: `gh pr create --title "<title>" --body "<summary>"`.
O agente cria, usa e cura suas próprias skills sozinho: um observer destila uma skill reutilizável a cada conversa concluída, um job de curadoria remove redundância, e um job de lifecycle envelhece skills não usadas (ACTIVE -> STALE -> ARCHIVED) sem nunca apagá-las de vez.
Não é só um chatbot: um agente pensado para engenharia
O open-a-pr acima não é um exemplo hipotético. O Qlawkus nasceu como um “autonomous personal engineering agent”, com um shell sandboxado (qlawkus.shell.*) confinado à raiz do workspace, denylist de comandos perigosos por padrão (sudo *, rm -rf /*, mkfs*, dd if=*, shutdown, reboot…) e um modo allowlist opcional para travar ainda mais o que ele pode rodar. Junte isso à integração com git/gh cli e dá para deixar o agente clonar, testar e abrir PR sozinho, quando autorizado.
Tem também um detalhe menor que mostra o espírito do projeto: ao subir, o agente gera um “startup thought” - uma reflexão curta, no tom da própria Soul. É código, mas também é personalidade. A Soul padrão que vem no repositório (default-soul.md) deixa isso bem claro:
“Do, don’t describe. If something needs doing and I have the tools, I do it (…) Be resourceful before asking. Read the file. Check the logs. Search the history. Try the obvious thing. Come back with answers, not questions - unless asking prevents a mistake.”
É isso que é injetado no prompt como Soul - não é um “you are a helpful assistant” genérico, é um viés de comportamento real que molda como o agente age.
Monte só o que você precisa
Aqui é onde o lado “extensão Quarkus” realmente compensa. Em vez de um monólito com tudo embutido, cada capacidade - o backend Postgres/pgvector, Discord, Telegram, Google Workspace, um console admin - é uma extensão opcional. Um agent.yml decide o que entra:
version: 1
build-time:
default: enabled
except:
- brag
- skill-hub
runtime:
qlawkus.skill-hub.approval-mode: hitl
mvn qlawkus:generate lê esse manifesto e reconcilia o pom.xml antes do build - uma capacidade que você não pediu nunca chega a entrar no classpath. Quer um agente 100% database-free, só com arquivos markdown? Dá para montar. Quer ele rodando com Postgres, Discord e Google Workspace? Também.
Rodando em 3 comandos
git clone https://github.com/omatheusmesmo/qlawkus.git
cd qlawkus
mvn install -pl client -am -DskipTests
cd app && mvn quarkus:dev
Dev Services sobe Postgres com pgvector e Ollama via Testcontainers automaticamente - sem precisar de .env. Em segundos você já pode conversar com o agente:
curl -X POST http://localhost:8080/api/chat/sync -u qlawkus:qlawkus \
-H 'Content-Type: application/json' -d '{"message":"Hello, who are you?"}'
Para produção (ou um teste mais realista), ./run.sh local sobe tudo em Docker sem precisar de chave de API nenhuma (Ollama local), e ./run.sh prod sobe com o provedor de LLM da sua escolha (NVIDIA, OpenAI, DeepSeek, Mistral, Groq, xAI, OpenRouter - qualquer coisa compatível com a API da OpenAI).
O que vem na caixa
- Mensageria - Discord e Telegram com suporte a voz (STT via Whisper, TTS com múltiplos provedores por idioma), contexto compartilhado entre canais.
- Ferramentas - Google Workspace inteiro (Gmail, Calendar, Drive, Sheets, Storage), um tool de shell isolado, um gerador de “brag document” para currículo.
- Resiliência - LLM primário com fallback automático para Ollama por trás de um circuit breaker.
- Segredos - um keystore PKCS12 criptografado numa pasta montada, sem precisar de banco só para guardar API keys.
- Console admin - uma UI server-rendered (Qute + HTMX, zero Node.js) para gerenciar memória, skills, configuração e os jobs agendados.
Por que isso importa para quem já vive no ecossistema Quarkus
Se você já escreve Quarkus no trabalho, o Qlawkus não é “mais uma stack para aprender”: é o mesmo modelo de extensão (deployment + runtime), o mesmo @ConfigMapping, o mesmo quarkus:dev com live reload, e o mesmo caminho para imagem nativa que você já usa. A diferença é que, em vez de expor endpoints REST para um cliente, você está montando um agente que aprende sobre você e age em seu nome.
Próximos passos
O roadmap é público, vive no próprio README, e o projeto está longe de terminado:
- M8 (em andamento) - a plataforma composable já está no ar:
agent.yml→ pom, secrets sem banco, o loop de build-and-redeploy e o control-plane UI (onboarding, gerenciamento, editor de configuração, agendamento) já estão todos implementados. Falta o polimento final: cards no Dev UI do Quarkus e uma rodada de QA end-to-end. - M9 (pendente) - observabilidade (métricas, tracing) e um build nativo mais maduro.
- M10 (pendente) - autonomia mais profunda e orquestração de jobs: o agente decidindo e agendando o próprio trabalho, não só reagindo a mensagens.
Vem contribuir
O Qlawkus está em 0.8.x, ativamente em desenvolvimento, licenciado em Apache 2.0. Se você:
- quer um agente pessoal que realmente lembra de você sem virar uma bagunça de prompt gigante;
- curte a ideia de montar exatamente as capacidades que precisa, sem carregar o resto;
- ou só quer dar uma olhada em como um sistema de cognição/memória é construído do zero em Java,
a documentação completa (arquitetura, memória, skills, composição, mensageria, configuração) está no site oficial - comece pelo Quick Start. O código está no repositório no GitHub: uma estrela ajuda a dar visibilidade, uma issue reportando um bug ou pedindo uma feature é uma contribuição real, e um PR é sempre bem-vindo.
E você, o que mais falta para você confiar sua memória de longo prazo a um agente de IA? Deixa nos comentários, eu quero muito saber.
