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.
Agenteshoje
Claude Code como sessão de primeira classe: hooks no core, saída em streaming, risco classificado a cada passo.
Dockerhoje
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.
Arquivoshoje
A árvore do projeto e o diff do worktree do agente, dentro do app, antes de qualquer merge.
Ajusteshoje
15 temas em cinco famílias, cada uma com par light. Atalhos visíveis e reconfiguráveis na 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.
Worktrees isolados
Cada agente no seu próprio worktree git. O que ele escreve não toca a sua árvore de trabalho.
Diff antes do merge
Three-dot diff entre a base e o worktree do agente, unified ou split, dentro do app.
PR sem sair do app
GitHub e GitLab detectados pelo remote. Abrir PR, listar e ler comentários sem trocar de janela.
Paleta de comandos
Ações em ⌘P, sessões em ⌘⇧P. Toda ação recorrente tem atalho, e o atalho aparece na UI.
15 temas
Solarized, Dracula, Gruvbox, GitHub e a família Monokai — cinco famílias, cada uma 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
Codex como runner
Codex ao lado do Claude Code, como sessão de primeira classe. O seletor já existe; o core ainda recusa o spawn.
Em breve
MCP
Os servidores conectados ao habitat, com o que cada agente pode tocar declarado, não descoberto.
Em breve
Sandbox real
Spawn do agente atrás de uma fronteira de sistema operacional, não de uma trait de confiança.
Em breve
Reconectar ao reabrir
O scrollback já persiste em SQLite, com segredos redigidos. Falta a sessão voltar viva quando o app reabre.
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.