Introduction
O OpenCrabs é um agente de orquestração de IA auto-hospedado e agnóstico de provider que corre como um único binário Rust. Automatiza o teu terminal, browser, channels (Telegram/Discord/Slack/WhatsApp/Trello) e codebase, respeitando a tua privacidade e mantendo-te no controlo.
12,611 testes em providers, ferramentas, channels, TUI, self-healing e automação de browser.
O Que Distingue o OpenCrabs
Zero Telemetria, Nem por Opção
- O OpenCrabs nunca liga para casa. Nunca. Sem analytics, sem tracking, sem estatísticas de utilização, sem logs remotos, sem relatórios de falhas
- As tuas conversas, ferramentas, memória, configuração e chaves de API nunca saem da tua máquina
- O único tráfego de saída é o que inicias explicitamente: chamadas a APIs de LLM, pesquisas web, comandos GitHub, automação de browser
- Não é uma checkbox de política de privacidade: não há código de telemetria para desativar, nenhuma flag de opt-out, nenhum serviço de analytics para bloquear. Simplesmente não há nada para enviar
Agnóstico de Provider por Concepção
- 18 providers integrados + Custom compatível com OpenAI: OpenCrabs (integrado, gratuito), Anthropic Claude, OpenAI, Gemini, Xiaomi MiMo, OpenRouter, Qwen (DashScope), MiniMax, Ollama, z.ai GLM, GitHub Copilot, Codex, Codex CLI, OpenCode, OpenCode CLI, Moonshot AI (Kimi), Command Code CLI, Claude CLI
- Integração CLI nativa: usa o Claude Code CLI, OpenCode CLI, Codex CLI e Command Code CLI como providers sem chaves de API
- Cadeia de fallback persistente: failover automático em rate limits ou erros, persistência com noção de estado que sobrevive a reinícios
- Prompt caching em Anthropic, OpenRouter, Gemini e Qwen DashScope reduz custos até 95%
- Override da janela de contexto: limita ou expande o contexto de qualquer model via config (o provider OpenCrabs incorporado é a exceção: a sua janela está fixada em 200k)
- Xiaomi MiMo: mais de 30 models incluindo a série de reasoning MiMo, provider com chave
- Moonshot AI (Kimi): endpoints do plano API (api.moonshot.ai) e do plano Coding (api.kimi.com), config de reasoning-effort, janela de contexto por nível de plano
Multi-Agent Orchestration
- As sessions são agentes totalmente isolados, cada uma com o seu próprio brain, provider, model, diretório de trabalho e histórico
- Sub-agentes tipados:
general,explore,plan,code,researchcom acesso a ferramentas adaptado - Orquestração de equipas:
team_create,team_broadcast,team_deletepara workflows coordenados - Overrides de provider/model por chamada: mistura models entre equipas (planear com GLM, programar com Deepseek, rever com Kimi)
- Protocolo A2A: gateway JSON-RPC 2.0 para comunicação agente-a-agente
Comunicação Nativa dos Channels
- Telegram, Discord, Slack, WhatsApp, Trello, integração completa de bot com DMs, grupos e threads
- Mensagens ricas no Telegram: tabelas nativas, títulos, listas, matemática via config
rich_messages - Streaming de mensagens em rascunho: atualizações “a escrever…” em direto enquanto os tokens são gerados nas DMs
- Blocos colapsáveis: secções
<details>/<summary>para outputs longos - Isolamento de session por tópico de fórum: cada tópico em supergrupos do Telegram tem a sua própria session
- Reações no Telegram: o bot lê as reações emoji recebidas e pode responder com uma reação em vez de uma mensagem quando isso encaixa
- Reações de enquadramento (v0.3.61): reações recebidas lidas por sentimento, o agente trata o utilizador pelo primeiro nome
- Reações a meio do turn (v0.3.61): uma reação durante um turn em execução é injetada no loop atual em vez de disparar um segundo turn
- Sugestões de seguimento (v0.3.69): follow-ups opcionais de toque-para-enviar no Telegram, Discord, Slack e WhatsApp; preencher-sem-enviar no TUI
- Reafixar cartão de plano no Telegram (v0.3.71): reafixa o cartão de plano e enrola o texto nele quando fica enterrado
- Captura integral do histórico de grupos (v0.3.73): persiste todas as mensagens de grupo no histórico, mesmo de remetentes e bots fora da allowlist
- Interlocutor de grupo correto (v0.3.73): deixa de tratar um remetente do histórico do grupo como o interlocutor atual
- Herança de sessions: o
/newherda o diretório de trabalho da tua session mais recente /goalem todos os channels: define objetivos autónomos a partir do Telegram, Discord, Slack e WhatsApp- Suporte de voz: Whisper STT local + Piper TTS, totalmente offline
- Recuperação de falhas entre channels: pedidos pendentes regressam ao channel de origem no reinício
/cowork: cria workspaces partilhados a partir de channels e do TUI/rename,/profiles,/cd, gere sessions, profiles e diretórios a partir de qualquer channel
Self-Healing e Auto-Melhoria
-
Recursive Self-Improvement (RSI): o agente analisa o desempenho, identifica padrões e reescreve os ficheiros brain
-
Deteção de phantom tool calls: apanha quando o model narra alterações sem executar ferramentas
-
Self-heal de phantom calls (v0.3.72): apanha turns sem ferramentas que alegam efeitos secundários críticos (ship/push/tag/release)
-
Edições de config só via config_manager (v0.3.74): o agente nunca edita à bruta o config.toml/keys.toml; cada escrita é validada antes de aterrar
-
Dedup do brain (v0.3.75): o comando
/dedupmais rastreios pós-escrita e semanais entre ficheiros evitam que os ficheiros brain derivem para duplicação, com aprovação por teclado inline no Telegram -
Dicas de ficheiros brain em falhas de ferramentas (v0.3.75), notas brain relevantes surgem automaticamente quando uma chamada de ferramenta falha ou dá erro
-
Memória proativa (v0.3.76): memória relevante surge sem ser pedida quando o contexto da conversa corresponde a conhecimento armazenado
-
Nomes naturais de models (v0.3.76):
/models opusfunciona; nomes coloquiais resolvem para IDs exatos de model -
Encaminhamento de provider plan/execute (v0.3.76): encaminha o planeamento e a execução para providers/models separados
-
Timeout de thinking-loop (v0.3.78): apanha loops de reasoning infinitos, dispara a aplicação de phantom enforcement com fallback persistente
-
Motor epistémico (v0.3.78): tracking de crenças com níveis de confiança, malha cognitiva OODA/BDI, gate de Orient antes da execução do plano
-
Gate de verificação Ralph (v0.3.78): verificação de tarefas com noção de critérios e limite de iterações; as tarefas têm de cumprir os critérios de aceitação declarados
-
Gates de segurança TOML (v0.3.78): blocklist de bash configurável em runtime com hot-reload, redação de segredos entre aspas, verificação de ficheiros brain
-
Analytics do Mission Control (v0.3.78): filtro D/W/M, grelha de cartões 3 por linha, separadores phantom/model/streaming, DB de eventos dedicada
-
Onboarding de OpenAI TTS (v0.3.78): seletor de voz e campo de chave de API no assistente de onboarding
-
Instalação via Homebrew (v0.3.79):
brew install opencrabsa partir do homebrew-core: binário pré-compilado, ambas as arquiteturas, sem toolchain Rust -
/restarte/exit(v0.3.79): reinicia ou desliga a partir de qualquer channel ou do TUI; só o owner nos channels, anuncia antes de agir -
Circuit breaker de quota (v0.3.79): providers com quota esgotada recebem um breaker com TTL e são saltados nas passagens de fallback; o esgotamento da cadeia é reportado explicitamente
-
Estado de planos entre sessions (v0.3.79): os planos sobrevivem aos limites das sessions; a execução isolada de tarefas de plano vem ligada por defeito, o Ralph verifica no próprio diretório da session
-
Sistema de temas (v0.5.0): presets verificados, um seletor interativo e os teus próprios temas em
~/.opencrabs/themes/*.toml; o truecolor é detetado com um nível de recurso ANSI-256, e um preset cujo contraste tornaria o texto ilegível é recusado -
Memória estrutural de código (v0.5.0): o tree-sitter constrói um índice de símbolos e de grafo de chamadas ao lado do índice de texto, por isso “quem chama X” percorre arestas de chamada reais enquanto as perguntas conceptuais mantêm o percurso de texto (#1324)
-
Transferência de ficheiros por SSH (v0.5.0): um ficheiro largado numa TUI a correr num host remoto é obtido através da ligação já aberta, com um
opencrabs drop-agentdo lado do cliente (#1289) -
Veredictos de entrega do notify (v0.5.0): o
session_notifydevolve um resultado de envio legível por máquina, os recibos de injeção de profundidade 3 tornam onotify_idverificável, e a entrega é redirecionada para a session que detém o channel nesse momento -
Compactação em segundo plano (v0.5.0): o sumarizador corre fora do turno em vez de reter a session enquanto trabalha
-
Redação do token na escrita (v0.5.0): um erro de provider que transporte um URL já não pode expor o token do bot num log, seja qual for a origem do registo (#1322)
-
Userbot de Telegram só de receção (v0.5.0, experimental): captura MTProto protegida por feature com início de sessão local por QR/código/2FA; guarda texto autorizado para consulta e nunca age como o utilizador
-
Ancoragem temporal (v0.5.1): o agente sabe sempre que horas são: cada turno traz uma marca temporal no fuso horário do utilizador, e o prompt do sistema permanece byte a byte estável para o cache do provedor (#1516)
-
Sessões cron por job (v0.5.1): cada job agendado recebe a sua própria sessão, para que dois jobs em execução simultânea nunca partilhem contexto ou provedores (#1511)
-
Gating por globs de skill (v0.5.1): a lista
globs:de uma skill pode recusar chamadas de ferramentas sobre ficheiros correspondentes até que o agente tenha lido o corpo da skill (#1515) -
Escritas no config validadas pela estrutura (v0.5.1), a guarda de escrita e as sugestões de secção do config_manager derivam agora do próprio tipo
Config, para nunca divergirem do código publicado (#1508) -
Propostas de plano recusadas à escrita (v0.5.1): um desenho de plano malformado rebate imediatamente com as secções em falta nomeadas, e uma escrita recusada restaura o scaffold em vez de apagar o rascunho (#1507)
-
Backpressure de orçamento do provedor (v0.5.1): um provedor que reporta um orçamento de tokens de saída dispara uma única compactação com limites e uma retentativa, em vez de uma cascata de 400 (#1518)
-
Tokens A2A vinculados e config só do owner (v0.5.1), os tokens A2A ligam-se ao gateway que os emitiu, e config.toml/keys.toml passam a modo exclusivo do owner, com segredos removidos dos logs
-
Modo servidor ACP (v0.5.2):
opencrabs acpfala o Agent Client Protocol sobre stdio JSON-RPC, por isso o Zed, o MonoCode e qualquer cliente ACP conduzem o mesmo brain que os teus channels usam, com streaming do progresso e aprovações a voltar até ao editor (#1540) -
Navegação com consciência de shadow-DOM (v0.5.2): a resolução de seletores atravessa shadow roots, por isso a automação chega a web components que antes eram invisíveis para as ferramentas
-
Superfície completa do WhatsApp (v0.5.2): mensagens de voz nativas, vídeo/sticker/localização/contacto recebidos, votos em sondagens, recuperação de presença e media, confirmações de reação, streaming com edição no lugar, mensagens temporárias, bloqueio de contactos, fixar/reencaminhar/perfil, atualizações de estado, descoberta de newsletters, botões de native flow, histórico por conversa
-
Tracing ao vivo e tabelas nativas no Discord (v0.5.2), turnos longos são transmitidos como uma resposta ao vivo com tracing, as respostas criam thread automaticamente, as tabelas markdown renderizam nativamente e os turnos com ferramentas deixam de publicar a resposta final duas vezes (#1603, #1608)
-
Tópicos de fórum do Telegram e /clear (v0.5.2): criar/renomear tópicos de fórum com ligação à session, e /clear inicia uma session nova sem a chamada ao summariser (#1585)
-
Orçamento do payload do menu de comandos (v0.5.2): o setMyCommands do Telegram rejeita silenciosamente corpos de pedido acima de ~7,8KB reportando BOT_COMMANDS_TOO_MUCH; as descrições passam a encurtar por níveis para o menu inteiro caber (#1613)
-
Cron com triggers (v0.5.3): um job corre um pre-flight check e só executa quando a condição é satisfeita (output não vazio, exit code, regex), os runs saltados custam 0 tokens e um trigger disparado pode despachar um goal para uma session (#233)
-
Windows de primeira classe (v0.5.3): shell handling por plataforma, leitura de ficheiros BOM/UTF-16, fallbacks de tilde e cwd, com a CI a compilar Windows e a fazer gate aos PRs (#627)
-
Memória epistémica (v0.5.3): os factos do MEMORY.md ganham confidence e decay (#1643), as secções frias arquivam-se sozinhas e o
opencrabs memory prunemostra o que ficou frio antes de tocar em nada (#1657) -
Motor de temas terminado (v0.5.3): todos os widgets do TUI resolvem as cores através do tema, com um guard de suite contra novos sítios de ANSI cru, e os temas podem declarar um canvas background (#1634)
-
Polls de sugestões no WhatsApp (v0.5.3): conjuntos de follow-ups além do limite nativo de botões renderizam como poll, e um voto seleciona a opção (#1616)
-
Família de sessions ACP (v0.5.4): os sessions são first-class na superfície ACP: o context meter é restaurado no load e acompanha as usage updates, o
session/loadrepõe a transcrição e restaura o model do session, oset_modelpersiste entre processos, osession/set_modenativo aplica a approval policy do lado do servidor, osession/compactfaz push, e osession/newoferece um catálogo de models ao vivo -
Entrega interativa do terminal (v0.5.4): o
!vi/!nanoassumem o terminal de forma interativa e devolvem-no com o session intacto; apenas terminais Unix, no Windows mantém-se a captura por pipe (#1744, #1759) -
Paste & drop universal (v0.5.4): um router de attachments partilhado aceita qualquer tipo de ficheiro no paste ou no drop e classifica código, docs, arquivos e dados para cada um seguir o pipeline certo (#1740, #1743)
-
Motor de pesquisa Serper (v0.5.4): o
serper_searchacrescenta resultados Google SERP, e o fan-out do web_search elimina duplicados por URL entre engines (#1731) -
Decision cache (v0.5.4): o
decide_cachedresponde a decisões repetidas a partir de um anel de reutilização L1 com tiers shadow/live e config[decisions](#1648) -
Custos reportados pelo provider e uma cadeia de timeouts unificada (v0.5.4), o ledger de usage prefere o custo que o provider reportou de facto em vez de estimativas de tabela (#1707), e os flags de timeout resolvem
[providers.<name>]->[agent]-> default em todos os providers (#1688) -
Comandos compilados /architecture e /attach, audit trail opcional (v0.5.4), ambos os comandos são distribuídos como arms compilados, e um audit trail opcional regista o que correu com um viewer
/audit(#933, #1705) -
Superfície nativa do Discord (v0.5.5): inquéritos nativos via
send_poll, respostas TTS entregues como mensagens de voz, ecommands.tomlprojetado nos slash commands nativos para que os teus comandos apareçam no picker do Discord (#1848, #1849, #1850) -
Flow groups e governors de escrita (v0.5.5): o Discord e o Slack abrem o flow group no início do turno com um relógio ao vivo a cobrir o pensamento e o texto de atividade a liderar a linha, e um governor de escrita partilhado orçamenta cada edição e faz park em 429s (#1841, #1843, #1844, #1845, #1807, #1808, #1809, #1910, #1912, #2012)
-
/respond_to e /cowork (v0.5.5): modos respond_to e open por canal na configuração, mais os dois comandos para os definir a partir do próprio canal (#2014, #2015)
-
Disciplina de rate limit no Telegram (v0.5.5): polls getUpdates e handoffs de handler instrumentados para triagem de stalls, um piso de espaçamento sub-segundo entre superfícies com telemetry de admissão, uma pausa 429 por chat atrás de um único accessor Cooldown, e ligações markdown a ficheiros locais entregues como documentos (#1927, #1916, #1968)
-
Ciclo de vida de sessions ACP v1 (v0.5.5): os cinco métodos v1 de ciclo de vida de session estão implementados e o plano é publicado como um plan update nativo v1 (#1815)
-
Footer de diálogo partilhado, URLs clicáveis, timeline de onboarding no TUI (v0.5.5): todos os diálogos partilham um command footer com verbos de aprovação a/r diretos, URLs e caminhos de ficheiro são clicáveis, e o onboarding foi reconstruído como uma timeline de passos à esquerda com comandos de configuração diretos (#1775, #1772, #1979, #1980, #1981, #1982)
-
Reforma de cron one-shot (v0.5.5): os jobs one-shot reformam-se na entrega em vez de voltarem a disparar um ano depois, cada execução entregue leva o seu run id, e os reports de cron do Discord chegam como um único post no fórum (#544, #1703, #1851)
-
Primeira execução sem configuração (v0.5.11): uma instalação nova cai direto no chat com o provider incorporado já provisionado,
config.tomlekeys.tomlcriados, e o agente a cumprimentar-te. O assistente é opcional através de/onboardou--onboard(#2079) -
Um primeiro turno que não pode abortar o processo (v0.5.11): as threads worker do agente correm numa stack de 16 MiB, por isso o primeiro turno já não transborda a stack predefinida (#2080)
-
Tags de release só com CI verde (v0.5.11): o workflow de release lê a conclusão da run de CI do próprio commit antes de publicar. Uma run vermelha falha a release, uma run ainda em curso é aguardada, e um commit sem run também falha (#2078)
-
O evolve reinicia as unidades certas (v0.5.11): o reinício agendado aponta para nomes de unidades resolvidos em vez do glob de descoberta
opencrabs*.service, que também apanhava a unidade transitória que corre o reinício e fazia o systemd parar o seu próprio executor (#2081) -
As guest queries do Telegram passam a ter a superfície completa (v0.5.12): um tag num chat onde o bot nunca foi convidado corre a mesma superfície de ferramentas, o mesmo bloco de estado ao vivo e a mesma renderização rich de um turno normal, com um turno cancelável por guest session e rate limiting (#2087, #2109, #2133, #2135, #2138, #2143)
-
Um plano passa a ser exigido a partir de um limite de tool calls (v0.5.12): quando um turno ultrapassa um limite de tool calls, o agente tem de parar e escrever um plano antes de continuar (#2128)
-
O transcript sobrevive à troca de session (v0.5.12): o mapa de dobras é indexado por um anchor estável de role e timestamp em vez de um UUID gerado a cada render, por isso trocar de session e voltar já não dobra todos os turnos que tinhas aberto (#2155)
-
Instalações headless provisionam o provider integrado (v0.5.12):
opencrabs run,daemon,agent,acpecroncriam o token integrado numa home nova tal como a TUI já fazia, enquantostatusedoctorficam read-only (#2151) -
language packs de árabe e chinês (v0.5.14): mais dois packs juntam-se ao phantom detector, cada um com a sua deteção de escrita, e os caracteres Han encaminham para o pack chinês enquanto kana ou hangul mantêm o texto japonês e coreano fora desse ramo (#2222, #2223)
-
Cobertura comparável entre os packs (v0.5.14): os packs não ingleses passam a ter frases de intenção na mesma ordem de grandeza do inglês em vez de cerca de um terço, e um teste fixa um anúncio apanhado e uma frase limpa por idioma (#2225)
-
Narração contínua em português europeu (v0.5.14): construções do tipo
estou a carregarsão apanhadas ao lado do gerúndio brasileiro, que um lookahead que falhou silenciosamente a compilação tinha levado consigo (#2224) -
Operações de edição byte-safe (v0.5.14): as operações de linha do
edit_filejá não perdem a newline final do ficheiro nem reescrevem um ficheiro CRLF como LF, e ohashline_editmais o fuzzy fallback mantêm o fim de linha do próprio ficheiro (#2227, #2212) -
Um lint que trava panics de byte slice (v0.5.14): o CI falha numa nova slice que possa partir um caractere UTF-8, adicionado depois de um bug de espaços multi-byte na verificação de URL do phantom (#2220, #2221)
-
O Ctrl+O mantém o teu lugar (v0.5.15): expandir um turno cujo cabeçalho está fora do ecrã já não atira o viewport para o topo do turno, e o toggle deixa de desarmar o auto-scroll em silêncio (#2241)
-
A linha de fila volta a ficar por baixo da linha de thinking (v0.5.15): o feedback da mensagem em fila é agora uma hierarquia suave de cinzas em vez de âmbar e quase branco, e um teste renderizado lê as cores reais das células, pelo que uma regressão de brilho falha o CI (#2244)
-
O terminal sobrevive a um panic apanhado (v0.5.15): o hook de panic repõe o raw mode, por isso as teclas continuam a funcionar depois de um panic de renderização ser apanhado (#2238)
-
O endpoint embutido fica mais difícil de matar de fome (v0.5.15):
inference.opencrabs.comrecebe um orçamento de handshake de 120s e a escada de retries para após 2 timeouts silenciosos, com o pior caso num endpoint morto a cair de 315s para cerca de 241s (#2232) -
A deteção de endpoint analisa o host (v0.5.15): o endpoint embutido é reconhecido pelo hostname analisado, não por substring, por isso um URL que apenas contenha o hostname não se pode fazer passar por ele (#2234)
-
O Enter diz o que faz (v0.5.15): a caixa de input, a linha de fila e o marcador de histórico descrevem agora o fluxo de fila durante a execução, e o ↑ puxa uma mensagem em fila de volta para a caixa (#2236, #2237, #2242)
-
Parar a meio do turno mantém a narração (v0.5.15): um turno parado por um prompt interativo renderiza a narração intermédia como resposta, em vez de a perder (#2240)
-
Recuperação do dispatcher e do evolve (v0.5.15): o dispatcher do Telegram recupera de um arranque falhado em vez de entrar em panic, e o
/evolverepete downloads de release assets interrompidos, distinguindo um checksum mau de uma ligação caída (#2228, #2229) -
A app de ambiente de trabalho chega em todos os pacotes (v0.6.0): os cinco alvos trazem o
opencrabs-guiao lado doopencrabs, o macOS recebe um segundo bundle que abre a janela com um duplo clique, e o Linux recebe a sua própria entrada no lançador. A app que arranca fica com o perfil: reivindica o instance lock, serve os teus channels, corre o cron e mantém o trabalho de fundo vivo (#2905) -
O Seeker encontra tudo a partir de um único cartão (v0.6.0):
alt+spaceabre-o no terminal e na janela, comcmd+kcomo alias da janela. Procura conversas, comandos slash, os ecrãs que a app pode abrir, as skills guardadas e as páginas da documentação, e executa a linha com Enter (#2458, #2460) -
A janela tem quatro temas, uma linha de tipo de letra e transparência (v0.6.0):
autosegue a aparência do sistema,orgné a paleta escura da própria janela,lighté uma paleta clara suave e nativa, ecustomtira um accent de uma roda de matiz mais o fundo onde assenta. Uma linha Font lista as famílias que a máquina tem realmente, e a janela inteira esbate até 40 por cento (#2619, #2786, #2922) -
Um cartão de definições configura o agente sem sair da janela (v0.6.0):
ctrl+commaabre um cartão sobre a conversa para a política de aprovação, notificações, redaction, lazy tools, o intervalo do thinking-loop, debug logging, opções de memória e credenciais (#2878, #2890) -
Um ecrã de projetos com atribuição em lote e reparação no local (v0.6.0):
alt+pabre cartões de projetos e de sessões apoiados no mesmo serviço que o terminal usa, e atribuir, mover ou limpar corre como uma única operação protegida sobre a seleção (#2669, #2886) -
Edita, reage, responde, reencaminha e copia qualquer mensagem (v0.6.0): uma linha guardada oferece Edit ao passar o rato, React a partir do crab pack, Reply que cita as linhas escolhidas, Forward que prepara no compositor de destino para revisão, e Copy as Markdown no seu próprio canto. Um turno em curso traz as mesmas ações na entrada live exata (#2826, #2825, #2827, #2924, #2750, #2925)
-
Um exe Windows que arranca numa instalação limpa (v0.6.0): o zip traz as quatro DLLs do runtime MSVC ao lado dos dois exes, por isso o pacote arranca sem Visual Studio e sem vc_redist, e o CI lê a tabela de imports do PE para que uma regressão não possa sair (#2257)
-
Uma janela dividida parada deixa de queimar frames (v0.6.0): a sonda de animação da rail resolve agora na cadência de repaint e a resposta é reutilizada entre repaints, e a linha de estado é resolvida uma vez por frame para cada leaf em vez de duas (#2909)
-
Os títulos das tuas sessões ficam os que lhes deste (v0.6.0): o retitling por drift aplica-se só a sessões de channel, porque um título curto escolhido à mão raramente partilha palavras com os últimos turnos, e aplicar aí o drift renomeava sessões locais contra a vontade do owner (#2882)
-
Modo de reparação doctor –fix (v0.3.83): linhas de cron presas, markers obsoletos e permissões partidas são reparados no momento em vez de apenas reportados
-
Locks de escrita por caminho (v0.3.83): escritas concorrentes no mesmo ficheiro são serializadas; o último a escrever deixa de ganhar silenciosamente
-
Isolamento de worktree para sub-agentes (v0.3.83): cada agente filho recebe o seu próprio worktree e branch, pelo que um fan-out não consegue destruir a árvore partilhada
-
Critérios de aceitação com noção de tipo (v0.3.83): os critérios do plano são aplicados contra a toolchain que o projeto realmente usa (#1133)
-
Verificação de planos com noção de projeto (v0.3.83), os planos verificam com os comandos do próprio projeto, não sempre cargo, e encontram o projeto a partir da pasta da session
-
/stop cancela imediatamente (v0.3.83): interrompe durante o handshake do provider e os backoffs de retry (#1148)
-
Retoma de sessions A2A (v0.3.83): as sessions retomam por context id, o gateway é endereçado por profile (#1159, #1161)
-
Botões de thinking do DeepSeek (v0.3.83): o DeepSeek recebe os parâmetros de thinking que realmente lê, mais tratamento de turns só de tool-call
-
Correlação de logs por session_id (v0.3.82): cada turn abre um tracing span com o seu session id, e os cron jobs e o motor RSI têm os seus próprios, pelo que um único grep reconstrói um turn inteiro a partir de um log diário partilhado
-
Fiabilidade do logger (v0.3.82): o logger deixa de descartar eventos e deixa de escrever no terminal do TUI; uma escrita travada deixa de silenciar o logging de todas as outras threads
-
Ficheiros brain do utilizador protegidos (v0.3.82): o SOUL.md, USER.md e MEMORY.md nunca recebem merges do upstream, e as diretivas são encaminhadas para o AGENTS.md, que está sempre carregado
-
Unificação de secções de config (v0.3.82): a grafia legada
[gateway]é migrada em disco para[a2a], pelo que um nome sobrevive a um ciclo de reload -
Cache por hash de chunk (v0.3.82): a memória salta o re-embedding de chunks cujo conteúdo não mudou
-
Binários de pre-release (v0.3.82): cinco alvos de plataforma mais SHA256SUMS, publicados como pre-release contínua para que contribuidores testem código por lançar sem esperar por uma tag. Corre a pedido, não em cada push
-
Abandono em rate-limit (v0.3.82): uma janela longa de rate-limit do Telegram devolve imediatamente em vez de estacionar o envio em linha
-
Store de memória in-tree (v0.3.81): a dependência qmd foi removida; pesquisa vetorial + SQLite FTS5 mantida in-tree
-
Caminhos de índice externos (v0.3.81) (a pesquisa de memória lê índices fora do diretório do profile, default-deny em sessions partilhadasCaminhos de índice externos (v0.3.81)) a pesquisa de memória l�� índices fora do diretório do profile, default-deny em sessions partilhadas
-
Mermaid como imagens no Telegram (v0.3.81): os diagramas renderizam como imagens enquanto as tabelas mantêm a formatação nativa
-
Reasoning do Qwen entre turns (v0.3.81): preserve_thinking, botões de thinking gated por família, nível de esforço recomendado por defeito, Qwen hospedado acessível em todo o lado
-
Correção da perda de chaves no keys.toml (v0.3.81), as chaves de API dos providers deixam de se perder em runtime; chaves envenenadas autorrecuperam-se
-
Deteção precoce de loops (v0.3.81): rondas de ferramentas repetitivas apanhadas antes de o provider rejeitar o turn
-
Gate do motor RSI (v0.3.81): RSI autónomo desligado por defeito para daemons headless, ativa com
rsi_enabled -
Âmbito do memory_search (v0.3.80): pesquisa os logs diários (
memory), os ficheiros brain (brain) ou ambos (all); os ficheiros brain são indexados no momento da escrita -
Recuperação de memória por chunks (v0.3.80): documentos divididos em chunks antes do embedding para que chunks posteriores sejam pesquisáveis; recall ordenado com BM25
-
Renderização nativa do Slack (v0.3.80): tabelas e títulos chegam na própria forma do Slack em vez de markdown cru
-
Comandos de channel reservados ao owner (v0.3.80): comandos e skills personalizados são só do owner no braço catch-all dos channels em grupos
-
Gates de convergência do RSI (v0.3.80): a auto-melhoria pausa na convergência, recua em sequências de zero melhorias, faz hash dos achados por identidade estável
-
Guardas de loop (v0.3.80): guardas de repetição de anúncios e quase-correspondências em todas as ferramentas; kills do detetor de loop chegam à cadeia de fallback
-
Modo de inventário do browser (v0.3.80): o
browser_findnu enumera todos os elementos clicáveis na página -
Atualização dos templates de ficheiros brain (v0.3.80), os templates de AGENTS.md, BOOT.md e SOUL.md mudaram; o seeding nunca sobrescreve ficheiros existentes, por isso faz diff contra
src/docs/reference/templates/e faz merge à mão se quiseres os novos defeitos -
Reconstrução do brain de sistema: ficheiros brain reconstruídos a partir do disco quando mudam, sem reinício
-
Descoberta proativa de ferramentas: pesquisa ferramentas disponíveis antes de alegar incapacidade
-
Analisador de prompts multilingue (v0.3.67): PromptAnalyzer partilhado com soft-nudge no TUI e Telegram, 6 packs de idioma (EN/ES/FR/ID/PT/RU)
-
Modo de planos (v0.3.67-v0.3.68): tracks design/checklist, cartão de plano persistente, comando
/plan <query>, auto-aprovação do agente quando o utilizador concede autonomia -
Clique-para-expandir (v0.3.69): clique esquerdo num bloco de tool-call ou reasoning para expandir só esse bloco, a complementar o Ctrl+O
-
review_gate de skills (v0.3.70): declaração no frontmatter para skills críticas que exigem aprovação do utilizador antes de efeitos secundários
-
Ativação JIT de ferramentas: ferramentas estendidas ativadas a pedido, sem pré-registo
-
Auto-reparação da config: repara automaticamente um config.toml partido, nunca envenena a última config boa
-
Gestão do orçamento de contexto: limiares de compaction de 65% suave / 90% rígido com fallback LLM
-
Deteção de streams presas: janela deslizante de 2048 bytes apanha padrões repetitivos
-
Defesa contra gaslighting: remove preâmbulos de recusa de ferramentas a meio do turn
-
Entrega de resultados de build (v0.3.61): os resultados de rebuild/evolve chegam a quem pediu, através de channels e TUI
Interface de Terminal (TUI)
- Renderização nativa de markdown: ênfase, listas, links e itens de tarefa renderizam diretamente no terminal
- Medidor de tok/s em tempo real: tokens por segundo em direto durante o streaming
- Exibição da versão (v0.3.73): mostra a versão em execução no cabeçalho do TUI e no /help + /usage dos channels
- Expansão de reasoning em 3 estados (v0.3.74): clique ou Ctrl+O percorre um bloco de reasoning colapsado → limitado → completo, para nunca inundar a vista
- Cabeçalhos por turn (v0.3.75): cada turn recebe um cabeçalho de resumo de uma linha, o raciocínio enrola-se nele, e os turns vêm dobrados por defeito para a vista se manter limpa
- Agrupamento de tool calls (v0.3.61): chamadas de ferramentas consecutivas colapsam num único bloco expansível, mantendo o TUI limpo em operações multi-passo
- Dobrar texto intermédio (v0.3.61): o texto de processamento intermédio dobra-se no mesmo log in-place das tool calls, pelo que só a resposta final fica visível
- Pesquisa de sessions: filtro de pesquisa + scroll no viewport por todas as sessions
- Painéis divididos: sessions paralelas ao estilo tmux com persistência de layout
- Colar imagens da clipboard: cola imagens do browser ou de qualquer app diretamente no TUI
- Afixar o plano: o plano ativo é afixado no fim do prompt a cada turn
- Onboarding orientado pelo agente: configuração inicial personalizada com fluxo guiado
- Loop autónomo
/goal: define um objetivo e o agente entra em loop até um juiz LLM dizer que está feito, com controlos pause/resume/status - Auto-objetivos (v0.3.61): o agente pode definir e conduzir os seus próprios objetivos multi-turn via ferramenta
goal_managesem o utilizador invocar/goal
Experiência de Desenvolvimento
- Mais de 50 ferramentas integradas: operações de ficheiros, bash, pesquisa web, execução de código, automação de browser, geração de imagens, voz, renderização de PDF
- Pesquisa web paralela unificada (v0.3.73): web_search, exa_search e brave_search dispersam em paralelo sob uma única ferramenta web_search
- web_scrape: scraping nativo de URL para markdown com proteção SSRF, rastreio de sitemaps, deteção de JS-shell e export com noção de profile
- Deteção de captcha DDG (v0.3.73): deteta captcha do DuckDuckGo via HTTP 202 + verificação estrutural de formulário
- Skill /github integrada: controlo total do gh CLI para issues, PRs, code reviews, gestão de repos
- Descoberta proativa de ferramentas: o agente encontra ferramentas antes de dizer “não consigo”
- Sistema de skills: templates de workflow com fuzzy-finding, registadas automaticamente como slash commands
- Ferramentas dinâmicas: definidas em runtime via TOML (executores HTTP + shell)
- Sistema de projetos: sessions dedicadas com overlays de brain por projeto, arquivo de ficheiros e badges de cor
- Edição hashline: edição de ficheiros ancorada por hash com suporte de lote e deteção de colisões
- Mission Control: dashboard de ecrã inteiro com inbox RSI, log de atividade e agenda de cron
- RTK auto-download: proxy de 4MB incluído para 53.5% de poupança de tokens em mais de 100 comandos
- Proteção de ficheiros confidenciais: chaves SSH, .env, credenciais protegidas por defeito
- AGENTS sempre carregado: regras rígidas e governança aplicadas a cada turn
- debug_logs orientado por config (v0.3.71): alterna logs de debug com hot-reload, sem reinício
- Âmbito de redação de segredos (v0.3.71): limita a redação a global/grupo/DM com o comando
/redact - Âmbito de redação de segredos (v0.3.71): limita a redação a global/grupo/DM com o comando
/redact - debug_logs orientado por config (v0.3.71): alterna logs de debug com hot-reload, sem reinício
- Watchdog de tmux (v0.3.71): kill só do painel, aviso de 30s, re-anexação automática
- Plan-gate de três estados (v0.3.71): GateDecision com bash a ir para aprovação no Editing pós-init
- ToolHints ao estilo MCP (v0.3.71): modelo de risco para classificação de ferramentas, alimenta o plan gate
Browser Automation
- Suporte CDP total: navegar, clicar, escrever, screenshot, avaliar JS, encontrar elementos
- Modo headless ou headed com screenshots específicas por elemento
- Persistência de cookies/sessions entre sessions de browser
- Isolamento de separadores por session: sem pisões de DOM entre sessions
Descoberta de Diretivas de Projeto (v0.3.59)
O OpenCrabs descobre automaticamente ficheiros de regras que outras ferramentas de codificação por IA deixam num repo. Aponta o agente para qualquer repositório (via /cd, um workspace de channel, ou lançando dentro de um) e ele pesquisa as convenções enviadas pelo Claude Code, Cursor, Windsurf, Cline, Gemini CLI, GitHub Copilot, OpenCode e o standard entre ferramentas AGENTS.md. Sem config, sem passo de importação.
| Origem | Ficheiros |
|---|---|
| Standard entre ferramentas | AGENTS.md |
| Claude Code | CLAUDE.md, CLAUDE.local.md, .claude/CLAUDE.md, .claude/rules/**/*.md |
| Cursor | .cursorrules, .cursor/rules/**/*.mdc |
| Windsurf | .windsurfrules |
| Cline | .clinerules (file or .clinerules/**/*.{md,txt}) |
| Gemini CLI | GEMINI.md |
| GitHub Copilot | .github/copilot-instructions.md |
| OpenCode | .opencode/AGENTS.md |
O índice reconstrói-se quando fazes /cd para um novo diretório, pelo que os ficheiros de diretivas estão sempre atualizados.
Início Rápido
# Instalar (Linux e macOS)
curl -fsSL https://opencrabs.com/install.sh | bash
# Ou via Cargo (requer Rust 1.94+)
cargo install opencrabs --locked
O instalador resolve a versão mais recente, confere a transferência com o SHA256SUMS publicado e deixa o comando opencrabs disponível. No macOS esse comando é um link simbólico para ~/Applications/OpenCrabs.app, por isso não ande à procura de um binário solto ao lado do arquivo extraído. Todas as flags e as rotas manuais por plataforma estão em Instalação.
Auto-update ativado por defeito. Desativa com [agent] auto_update = false em ~/.opencrabs/config.toml.
Architecture
┌─────────────────────────────────────────┐
│ OpenCrabs Binary │
│ (Single 34-36 MB Rust executable) │
├─────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────────┐ │
│ │ TUI │ │ CLI Daemon │ │
│ │ (crossterm)│ │ (systemd/launchd)││
│ └─────────────┘ └─────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Provider Registry │ │
│ │ 15 built-in + Custom OpenAI │ │
│ │ Sticky fallback chain │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Tool Layer │ │
│ │ 50+ built-in tools │ │
│ │ Dynamic tools via TOML │ │
│ │ JIT activation │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Channel Adapters │ │
│ │ Telegram / Discord / Slack / │ │
│ │ WhatsApp / Trello / Voice │ │
│ └────────────────���────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Self-Healing Layer │ │
│ │ Context budget / Stuck stream │ │
│ │ Phantom detection / RSI │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Persistence │ │
│ │ SQLite + Brain files │ │
│ │ FTS5 + vector search │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
Próximos Passos
- Instalação: Instalar e configurar
- Configuração: Tod as opções de config
- Providers: Liga os teus backends LLM
- Channels: Liga Telegram, Discord, etc.
- Ferramentas: Explora mais de 50 capacidades integradas
- Self-Healing: Funcionalidades de resiliência
- Multi-Agent: Orquestra sub-agentes e equipas
Comunidade e Suporte
- Comunidade no Telegram: junta-te ao grupo OpenCrabs para dúvidas, dicas e conversa sobre releases
- Patrocina no GitHub: apoia o projeto e mantém os crabs alimentados
- Buy Me a Coffee: apoio pontual se o OpenCrabs te poupou uma tarde
Encontraste um bug ou queres uma funcionalidade? Abre uma issue no GitHub.