Pular para o conteúdo principal
Versão: 0.9.2

Client

Execute ivoai sem argumentos para abrir o menu completo. Em um TTY, use Cima/Baixo (ou j/k), Enter, Esc e q. O menu restaura o modo cooked do terminal antes de prompts e antes de iniciar Codex ou Claude. Operações destrutivas exigem uma frase exata de confirmação.

Quando stdin/stdout não são terminais, o ivoai exibe um fallback numerado. Defina NO_COLOR=1 para desabilitar cores ANSI ou IVOAI_ASCII=1 para evitar lettering Unicode. Subcomandos continuam sendo a interface estável para automação. O progresso é escrito em stderr para que stdout e doctor --json permaneçam legíveis por máquina.

O renderer lê largura e altura em cada frame e reage a SIGWINCH. Terminais largos mostram lettering completo com block/shadow, badges de prontidão e descrições. Terminais médios usam banner reduzido e descrições compactas. Terminais pequenos usam wordmark de uma linha, viewport limitada pela altura e indicador de posição. Badges quebram linha e labels são truncados pela largura exibida das células Unicode; a interface não depende de terminal fixo de 80 colunas.

Telas interativas para pessoas usam a mesma paleta semântica: cyan para trabalho ativo, violet para títulos, green para sucesso, yellow para resultados degradados e red para falhas. Menu principal, todos os submenus e todos os comandos para pessoas usam o mesmo lettering adaptativo do ivoai e mostram a versão do binário logo abaixo. Lettering, decoração da versão, animação do cursor e cor ficam deliberadamente ausentes de saída redirecionada ou legível por máquina.

Apresentação do instalador​

install.sh usa o mesmo banner responsivo do ivoai que a CLI e reporta versão exata instalada, plataforma e arquitetura detectadas, destino da instalação e fases. Transferências com tamanho conhecido usam barra de bytes/percentual; checksum, extração, build do source e registro usam spinner com tempo decorrido. Se uma etapa falhar, o instalador interrompe a animação, mostra o log relacionado em um bloco de erro legível e não deixa download temporário parcial.

No sucesso, ele reporta o path instalado e o próximo comando. Um usuário normal é direcionado a ivoai setup; uma instalação server como root, a ivoai setup --mode server. A animação vira automaticamente texto simples periódico quando stderr não é um terminal compatível.

Arquivos e ownership​

O ivoai segue a XDG Base Directory Specification:

FinalidadeDefault
Configuração$XDG_CONFIG_HOME/ivoai ou ~/.config/ivoai
Dados e assets gerenciados$XDG_DATA_HOME/ivoai ou ~/.local/share/ivoai
Estado e manifest de ownership$XDG_STATE_HOME/ivoai ou ~/.local/state/ivoai
Cache$XDG_CACHE_HOME/ivoai ou ~/.cache/ivoai

Diretórios com estado privado usam modo 0700; arquivos secretos usam 0600. O TOML principal contém status e preferências, não bearer tokens.

ivoai setup é idempotente. Ele registra se cada executável já existia ou foi instalado pelo ivoai. ivoai uninstall remove somente arquivos e binários gerenciados; não remove logins de terceiros nem tools preexistentes.

Componentes​

Versões e fontes de instalação são centralizadas em manifest/components.yaml. O setup verifica a plataforma, baixa assets pinados, verifica os dados de integridade revisados, instala wrappers gerenciados e reporta falhas independentes. Headroom usa constraints com hash lock específicas da arquitetura; Ruflo usa seu lockfile npm completo. Updates são explícitos por ivoai update. O updater verifica o candidate, cria snapshot privado de arquivos pertencentes ao IVOAI, aplica migrations ordenadas pertencentes ao target, promove o binário e executa Doctor. Uma falha restaura binário e config/state/ownership compatíveis. Use ivoai update --dry-run para um plano de compatibilidade sem commit; ele ainda executa os probes limitados de preflight do candidate verificado por checksum. Use ivoai update --rollback para a última transação. Consulte o contrato de compatibilidade de produção.

O estado desconectado saudável é:

ivoai ready
Codex installed / not connected
Claude Code installed / not connected
OpenCode ready / managed frontend
Headroom ready
Compression default caveman / effective caveman
Caveman installed / managed
ai-memory installed / not connected
Ruflo ready / provider execution disabled
Server not-connected

Overall: READY — external connections pending

Launch do agent​

ivoai codex e ivoai claude abrem suas interfaces Direct oficiais. ivoai opencode, assim como ivoai auto, abre uma TUI OpenCode pinada e anexada ao control plane privado do IVOAI. O IVOAI roteia turnos para a CLI oficial Codex ou Claude Code e reutiliza o login que já pertence àquele client sem lê-lo ou copiá-lo. Um overlay OpenCode gerenciado e privado desabilita config de projeto, sharing e auto-update; a configuração global e o store de provider do usuário permanecem intactos.

Sessões Codex e Claude podem selecionar um purpose de knowledge registrado sem alterar a config global do agent:

ivoai codex --knowledge-source mindsite
ivoai claude --knowledge-source voicecorp
ivoai auto --knowledge-source mindsite

Sem --knowledge-source, todas as fontes conectadas e habilitadas participam da federation de leitura limitada. Repita --knowledge-source ou passe um valor separado por vírgula para restringir a sessão exatamente àquele subconjunto. Federation automática nunca transmite escritas Memory; um destino ambíguo falha explicitamente. O agent recebe somente endpoints MCP privados em loopback e uma capability local de curta duração. Credenciais upstream permanecem dentro do ivoai. Consulte Fontes de conhecimento multi-server.

Codex e Claude solicitam Caveman por default. Overrides explícitos direct ou headroom legado são preservados. Se o provider selecionado estiver indisponível, unhealthy ou incompatível no preflight, o ivoai inicia diretamente o agent oficial. Quando um processo wrapper selecionado inicia, seu exit status é propagado em vez de ocultado. Hooks de memory e context são best effort e não podem bloquear o launch.

Quando ivoai-memory ou ivoai-context autoritativo estiver ativo para as fontes selecionadas da sessão, o launcher inicia deliberadamente o client oficial de forma direta, independentemente de Caveman ou Headroom ter sido solicitado. Um provider lossy pode encurtar resultados exatos de custom tools antes que o modelo os veja, inclusive o fim exato de uma página de memória. O launch mostra esse bypass e a metadata observada da sessão reporta o bypass provider-neutral; Headroom permanece disponível como provider explícito temporário de compatibilidade.

Para uma sessão OpenCode standalone explícita, OpenCode mantém seu provider nativo somente de assinatura. Quando o runtime Caveman pinado não consegue fazer proxy desse provider, o preflight seleciona Direct antes do launch; o IVOAI não solicita API key, troca provider nem inicia OpenCode duas vezes. AUTO usa a bridge IVOAI e os contratos de executor Codex/Claude descritos acima.

Todo primary gerenciado pelo ivoai recebe o mesmo contrato de conhecimento compartilhado. Qualquer tarefa que exija pesquisa, levantamento de fatos, informação atual ou verificação externa usa a ordem fixa ivoai-memory → ivoai-context somente leitura → fontes web/externas. As duas etapas do ivoai são tentadas antes da primeira consulta externa, inclusive em perguntas aparentemente gerais ou sensíveis ao tempo. Resultados internos vazios, indisponíveis, insuficientes ou stale permitem pesquisa web; tarefas autocontidas não disparam consultas artificiais. Uma solicitação explícita para lembrar informação é gravada por memory_write_page e verificada com memory_read_page. Context é um índice RAG alimentado por connector, não um store de escrita conversacional; portanto, um agent não pode afirmar que gravou um fato do chat no Context.

A mesma policy process-scoped é injetada em workers Codex e Claude. OpenCode é o frontend AUTO, não um worker consultivo nem um segundo scheduler. O executor OpenCode standalone continua disponível explicitamente, sem modificar config pertencente ao usuário nem tratar texto recuperado como instrução.

Codex trata tools MCP sem annotations somente leitura de forma conservadora. Para servers IVOAI remotos realmente registrados e habilitados, o launcher adiciona overrides approve process-local somente para memory_query, memory_read_page e as quatro tools Context somente leitura. Isso mantém leituras headless funcionais enquanto escritas e exclusões Memory e tools MCP não relacionadas continuam seguindo a policy normal de aprovação do usuário. Nenhum server MCP ausente é sintetizado por esses overrides.

OpenAI publica codex-code-mode-host como asset versionado separado. O IVOAI instala o archive revisado junto ao Codex gerenciado e verifica seu SHA-256. O tool router estável do Codex falha de forma fechada quando o companion está ausente, inclusive para chamadas MCP; portanto o ivoai recusa um launch gerenciado sem tools e direciona o usuário a ivoai setup. Instalações Codex gerenciadas externamente permanecem responsáveis por seu próprio companion da versão correspondente.

Session control plane​

O menu interativo contém Session Control, com escolhas diretas e orquestradas para os dois clients oficiais, listagem de sessões, monitoramento e stop seguro. As mesmas operações estão disponíveis para automação:

ivoai session start --executor codex --mode direct
ivoai session start --executor claude --mode orchestrated
ivoai session list --json
ivoai session show --json <session-id>
ivoai session stop <session-id>
ivoai monitor --watch

Sessões Direct adicionam metadata e monitoramento, mas não inicializam Ruflo. Sessões orquestradas exigem profile seguro do Ruflo verificado, inicializam e verificam um swarm real, registram o primary e injetam o MCP ivoai-orchestrator local. O MCP delega tarefas limitadas aos modos não interativos oficiais Codex/Claude. O default são dois workers concorrentes e o máximo rígido são três.

O JSON da sessão é estado XDG privado e não contém prompt, response ou credencial. A saída do modelo é rotulada runtime_verified, argument, configured ou unknown; o último valor é usado intencionalmente em vez de adivinhação. Consulte Controle e orquestração de sessões.

Vários primaries podem executar simultaneamente, inclusive duas sessões Codex e uma Claude. Cada um tem ID de sessão aleatório, marcador PID/start e diretório runtime privado independentes. Metadata de sessão e updates de quota usam file lock e escrita atômica; interromper ou limpar uma sessão alcança somente seus processos e runtime registrados. Memory é compartilhada apenas dentro da fonte/purpose explicitamente selecionada. Sessões Voicecorp e Mindsite concorrentes têm routers loopback e capabilities separados, enquanto estado transitório do Ruflo e a bridge orchestrator local à sessão permanecem isolados. Metadata da sessão armazena aliases selecionados, nunca credenciais.

Modo de conversa automático​

ivoai auto abre o frontend OpenCode gerenciado e mostra estado limitado de executor, quota e knowledge pertencente ao IVOAI. A preferência de planner configurada seleciona o executor oficial inicial; --planner codex e --planner claude fazem override para a sessão. Codex/Claude nunca assumem a tela. OpenCode fornece a UI enquanto IVOAI mantém ownership da sessão, seleção de provider e autoridade single-writer.

O modo automático inicia o mesmo control plane Ruflo sem provider das sessões orquestradas explícitas, injeta o MCP orchestration local à sessão e adiciona bootstrap único de Memory/Context, brief compartilhado privado, score objetivo de tarefas, delegação econômica, roteamento de model/effort ciente de quota/capability, workers DAG realmente assíncronos e checkpoints limitados de continuidade. Trabalho trivial fica no primary; trabalho independente valioso executa simultaneamente. Execute ivoai monitor --watch em um segundo terminal para ver primary atual, provenance do modelo, quantidade de failovers, estado de worker, fonte/freshness/reset da quota e health de services. Antes da primeira resposta do Claude, suas linhas de quota dizem awaiting first response; campos não compatíveis dizem N/A / not exposed, e observações antigas são marcadas stale. Mensalidade do Claude não é fabricada.

A seleção de knowledge permanece fixa durante failover Codex↔Claude e workers herdam os mesmos endpoints locais à sessão. Failover nunca expande o conjunto de fontes nem copia credencial upstream para um handoff.

Executar ivoai connect chatgpt ou ivoai connect claude invalida o cache de quota reconstruível do provider selecionado antes do fluxo de autenticação oficial e executa novo probe depois. Isso impede que um hard limit de conta anterior contamine novo contexto de autenticação sem ler credenciais do provider.

Consulte Orquestração automática, Scheduler automático e Roteamento por quota.

ivoai status usa verificações live limitadas para cada profile Server e para o profile seguro do Ruflo. Reporta alias, purpose, protocol, features limitadas, credencial configurada/não configurada, redundancy group e priority sem imprimir segredo. Config armazenada nunca é rotulada healthy por si só. Uma fonte indisponível não remove outra; Codex e Claude locais permanecem disponíveis. A instalação/compatibilidade do Headroom é reportada separadamente da validação de launch interativo.

Identidade do projeto​

O ivoai é host-first. Fora de um projeto, memory usa identidade estável normalizada do host em vez de derivar projeto de todo diretório de trabalho. ivoai project init cria marcador local explícito dentro de um repositório Git e substitui a identidade do host para aquela árvore.