Terminal desktop multi-sessão, com um core em Rust que classifica o risco de cada comando — e recusa git push origin main antes que a interface tenha chance de opinar.
macOS · Windows · Linux — nenhum binário publicado ainda.
TerminalWorkspace
01.31.00
tyba on ⎇ main via 🦀 v1.31.0
→ cargo test approvals
test core_recusa_push_para_main_master ok
→ git push origin main
✗ recusado pelo core — main é protegida
→
Disponível em
macOS
Windows
Linux
Continua
O porquê
TYBA não é um terminal. Não é uma IDE. É o habitat onde desenvolvedores e tecnologias convergem para criar.
O desenvolvimento de software evoluiu. As ferramentas se multiplicaram — cada uma resolve um problema. Mas nenhuma delas foi desenhada para conviver. O TYBA foi.
Não substituindo as ferramentas em que você já confia, mas dando a elas um lugar onde trabalham juntas de verdade. Um habitat para o desenvolvimento moderno.
O nome
Tyba vem do tupi.
Lugar onde as coisas se reúnem em abundância. Onde vidas diferentes convivem.
Uma aldeia.
Um nome brasileiro para uma ideia universal.
O desenvolvimento de software moderno é igual.
ShellGitIAContainersCloudWorkspaces
Cada um é poderoso. Juntos, viram algo maior.
Tyba é onde eles se encontram.
Conceito
Quatro rios, um ponto de encontro
A marca não é decoração: é o desenho do produto.
Sistemas independentes
Shell, git, containers, agentes. Cada um com sua janela, seu estado, seu contexto.
Convergência
As correntes se dobram uma na direção da outra. O contexto passa a ser compartilhado.
Um só ambiente vivo
Um habitat. O que está ativo emite luz; o que é destrutivo passa por você.
O habitat
Uma janela. Sete superfícies.
Cada superfície é uma ferramenta que você já usa, no mesmo workspace e com o mesmo contexto. O que já roda está marcado como tal — o resto está em construção, e diz isso.
Sessõeshoje
PTY em Rust, xterm.js com WebGL. Múltiplas sessões, splits e re-attach. É o chão do habitat.
Githoje
A branch atual sempre à vista. Push para main é recusado no core, não na interface.
Agentesem construção
Claude Code e Codex como sessões de primeira classe, saída em streaming, risco classificado a cada passo.
Dockerem construção
Os containers do projeto ao lado das sessões. Subir, derrubar e ler log sem trocar de janela.
MCPem construção
Os servidores conectados ao habitat. O que um agente pode tocar é declarado, não descoberto.
Arquivosem construção
A árvore do projeto e o diff do worktree do agente, dentro do app, antes de qualquer merge.
Ajusteshoje
17 temas, cada um com par light. Atalhos visíveis na própria UI. Import por JSON.
Diff · o que o agente mudou
src/pty/pool.rs31012000..HEAD+2−1
41
fn kill(&self, id: SessionId) {
42
- child.kill()?;
42
+ // mata o process group inteiro, não só o pai
43
+ killpg(child.pgid(), SIGTERM)?;
44
}
Metadados de sessão
⎇ Branch
feat/terminal-selection-clipboard
◈ Ambiente
Ativo · Node 20 · Docker
✦ Agente
✹ Claude · ativo
O que já existe
Terminal antes de tudo
Nada aqui é promessa. É o que roda hoje, no app.
Sessões de terminal
PTY em Rust, xterm.js com WebGL, batching de 16ms. Múltiplas sessões, splits e re-attach.
Recusa no core
Push para main ou master é barrado em Rust — nome direto, refspec e force-push. Com testes.
Classificação de risco
Todo comando entra como verde, amarelo ou vermelho antes de chegar na inbox de aprovações.
Kill de verdade
Encerrar uma sessão mata o process group inteiro, não só o processo pai. Nada de órfão.
Paleta de comandos
Ações em ⌘P, sessões em ⌘⇧P. Toda ação recorrente tem atalho, e o atalho aparece na UI.
17 temas
Solarized, Dracula, Gruvbox, GitHub e a família Monokai — cada um com par light. Import por JSON.
Segurança
Três fontes de comando. Uma delas você não controla.
Um terminal que aceita comandos de um agente herda a superfície de ataque do que o agente lê.
1Você
Confiável
Digitou, leu, sabe o que quer.
2Um agente
Erra
Boa fé, contexto incompleto. Vai propor besteira em algum momento.
3O que o agente leu
Não confiável
Uma issue, um README, a saída de um comando. Aqui mora prompt injection.
Todo comando recebe uma cor
O core classifica o risco antes de qualquer coisa acontecer. É o modelo que governa a inbox de aprovações.
Verde
Leitura. Aprovação automática.
Amarelo
Escrita local. Aprovação automática configurável.
Vermelho
Rede, remoto, destrutivo. Sempre passa por você.
Push para main é recusado pelo core, não pela UI
A recusa vive em Rust, abaixo da interface. Cobre o nome direto, o refspec e o force-push. Uma janela comprometida não contorna isso.
src-tauri/src/approvals/mod.rs
pub fnis_refused_by_core(command: &str) -> bool
Coberto por testes
✓core_recusa_push_para_main_master
✓core_nao_recusa_push_para_feature
Ainda não existe
O que vem depois
Está no roadmap, não no release. Enquanto não rodar, não vira bullet de marketing.
Em breve
Agentes orquestrados
Claude Code e Codex rodando como sessões, com a saída em streaming e o risco classificado a cada passo.
Em breve
Worktrees isolados
Cada agente no seu próprio worktree git. O que ele escreve não toca a sua árvore de trabalho.
Em breve
Review de diff local
Three-dot diff entre a base e o worktree do agente, dentro do app, antes de qualquer merge.
Em breve
Sandbox real
Spawn do agente atrás de uma fronteira de sistema operacional, não de uma trait de confiança.
Ainda não há release
Te aviso quando der para baixar
Um binário que não existe não vira botão de download. Deixa seu e-mail e você sabe primeiro — no sistema que você está usando agora.