agend-sh
Espaços de trabalho Linux persistentes para agentes de IA, com terminais interativos, eventos de espera de entrada, transferências de arquivos e visualizações HTTPS.
Documentação
Um computador real para seu agente de IA.
Espaços de trabalho Linux persistentes. Terminais interativos. Pré-visualizações compartilháveis.
Traga seu agente MCP favorito. Deixe-o trabalhar.
Início rápido · Terminais interativos · Conecte seu agente · Ferramentas MCP · agend.sh
O agend dá ao seu agente um ambiente Linux persistente e isolado que ele pode controlar via MCP. Ele pode executar código, editar arquivos, usar REPLs Python e Vim, iniciar serviços e expor uma URL de pré-visualização. Você pode abrir um shell você mesmo ou assistir ao terminal interativo do agente enquanto ele trabalha.
| Construa | Interaja | Mostre o trabalho |
|---|---|---|
| Execute comandos e tarefas em segundo plano. Transfira arquivos. Mantenha projetos no seu espaço de trabalho remoto. | Conduza REPLs e aplicativos de terminal via PTY, com feedback quando o terminal entra em espera de entrada. | Abra uma pré-visualização no navegador ou espelhe a sessão interativa com agend watch. |
Início rápido
1. Instalação
Linux / macOS
curl -fsSL https://agend.sh/i | sh
Windows · PowerShell
irm https://agend.sh/i.ps1 | iex
Homebrew · Linux / macOS
brew install agend-sh/tap/agend
Os instaladores de script verificam a assinatura da versão e o checksum SHA-256 do arquivo. O instalador Unix grava em /usr/local/bin e pode solicitar sudo. O instalador Windows grava em %LOCALAPPDATA%\agend\bin e o adiciona ao seu PATH de usuário. As versões suportam amd64 e arm64 nas três plataformas.
agend version
2. Entre
agend login
Conclua a autenticação no navegador. Criando uma conta com e-mail e senha:
agend signup --email you@example.com
signup solicita uma senha e faz login em caso de sucesso. Você não precisa executar login novamente.
3. Crie seu espaço de trabalho
agend env create --name my-workspace
agend ping
agend exec 'python3 --version'
A criação seleciona o novo ambiente para comandos CLI. Seu tamanho segue o perfil padrão da sua conta. Use agend profiles para ver tamanhos disponíveis, cotas e políticas de suspensão; passe um ID de perfil retornado com agend env create --profile <profile-id> para escolher outro tamanho.
4. Conecte seu agente
agend config claude-code
Ou configure um cliente diferente:
agend config codex cursor gemini
Reinicie ou recarregue a integração MCP do seu cliente e tente este prompt:
Use o
list_environmentsdo agend para encontrarmy-workspace. Inicie um REPL Python interativo lá, calcule 6 × 7 e saia do REPL.
Seu agente descobre o ambiente e o controla com ferramentas MCP. Uma conta Agend e cota de ambiente disponível são necessárias; apenas o CLI não provisiona uma máquina local gratuita.
agend-sh está listado no Registro Oficial MCP
como io.github.agend-sh/agend-sh. Para instalação via Docker, veja o
guia de pacote de contêiner e conexão.
Também disponível no Smithery.
Para clientes que suportam extensões MCPB, veja o guia de pacote.
Terminais interativos
O terminal pode informar que entrou em espera de entrada. Isso dá feedback ao processo do agente enquanto ele conduz um REPL ou aplicativo de terminal.
Por exemplo, chame shell_exec com:
{
"environment": "my-workspace",
"command": "python3 -q",
"interactive": true
}
Uma resposta pode ser assim:
status: awaiting_input
>>>
prompt_type: interactive
input_wait: true
Continue através de shell_send_raw:
{
"environment": "my-workspace",
"input": "print('hello from agend')\n"
}
status: awaiting_input
print('hello from agend')
hello from agend
>>>
input_wait: true
Então envie exit()\n através de shell_send_raw para fechar o Python.
Lendo a resposta
| Campo | Significado |
|---|---|
status: completed | O comando terminou. Verifique exit_code. |
status: awaiting_input | O processo interativo ainda está ativo. Este status sozinho não prova que está esperando entrada. |
input_wait: true | Um evento de espera de entrada foi observado ao coletar esta resposta: o leitor do terminal não tinha entrada suficiente e entrou no caminho de espera. |
input_wait: false | Nenhum novo evento foi observado nesta resposta. Não cancela um evento anterior nem prova que o processo parou de esperar. |
status: timeout | Um comando em primeiro plano excedeu seu orçamento de tempo. |
O sinal de espera de entrada é um evento, não uma consulta de estado persistente ou uma garantia de que um aplicativo ou serviço está pronto. Depende de suporte na pilha convidada do ambiente.
Para REPLs e TUIs, defina interactive: true e use shell_send_raw para entrada subsequente. Inclua \n quando quiser Enter. Use shell_resize quando a janela mudar. Saia pelo comando do próprio aplicativo ou use shell_interrupt para fechar a sessão. Uma sessão interativa pode estar ativa por ambiente; termine-a antes de iniciar outra shell_exec.
Um processo interativo permanece ativo entre chamadas de ferramenta e não é morto quando a coleta de resposta expira. Após uma resposta de ferramenta concluída, desconectar o cliente MCP não interrompe o processo: reconecte ao mesmo ambiente para continuar. Suspensão do ambiente, uma falha ou um reset a frio podem afetar sua vida útil.
Assista seu agente trabalhar
agend watch
O modo assistir espelha a sessão interativa do ambiente selecionado, reproduz a saída retida e segue novas atualizações. Ele não envia entrada ao processo remoto. Pressione q ou Ctrl+C para parar de assistir; a sessão do agente continua.
Para uma gravação de tela:
agend watch --typing-delay 40ms
Combine o tamanho do seu terminal com a sessão remota para uma exibição precisa. O modo assistir segue a saída coletada pelas chamadas de ferramenta do agente; ele não consulta o convidado por saída entre essas chamadas. Mostra sessões interativas, não saída de comandos comuns ou logs de tarefas em segundo plano.
Quer trabalhar no ambiente você mesmo?
agend connect
Isso abre um terminal ao vivo com entrada de teclado e redimensionamento de terminal. Execute exit para fechar o shell. Requer um terminal em stdin e usa o mesmo slot de sessão interativa única que o MCP, então feche o aplicativo interativo do agente primeiro.
Compartilhe uma pré-visualização no navegador
Peça ao seu agente para iniciar um serviço usando shell_exec:
{
"environment": "my-workspace",
"command": "python3 -m http.server 8080 --bind 0.0.0.0 --directory /home/agend-user/readme-demo",
"run_in_background": true
}
Crie /home/agend-user/readme-demo e coloque seus arquivos de demonstração lá primeiro. Vincule o serviço a 0.0.0.0 para que o túnel possa alcançá-lo.
Então chame port_expose:
{
"environment": "my-workspace",
"port": 8080
}
A resposta contém uma URL HTTPS pública. Dê tempo para o túnel e o DNS ficarem acessíveis. port_list mostra exposições ativas; port_unexpose remove uma. Expor uma porta torna esse serviço acessível pela internet.
Para seu próprio domínio gerenciado pela Cloudflare, registre sua zona com agend domain add example.com, então passe domain: "app.example.com" para port_expose. O registro solicita um token de API Cloudflare com permissões Zone:DNS:Edit, Zone:Zone:Read e Account:Cloudflare Tunnel:Edit; scripts podem fornecê-lo através de AGEND_CF_TOKEN. agend domain list retorna os IDs de domínio usados por agend domain remove <domain-id>.
Conecte seu agente
agend config detecta clientes suportados instalados na sua máquina. Pré-visualize suas escolhas antes de escrever:
agend config --dry-run
agend config
Você também pode selecionar clientes explicitamente:
| Cliente | Comando |
|---|---|
| Claude Code | agend config claude-code |
| Claude Desktop | agend config claude-desktop |
| Codex | agend config codex |
| Cursor / Windsurf | agend config cursor windsurf |
| Gemini CLI / Antigravity | agend config gemini antigravity |
| VS Code / Zed / JetBrains | agend config vscode zed jetbrains |
| Cline / Roo Code | agend config cline roo-code |
| OpenCode / GitHub Copilot CLI | agend config opencode github-copilot-cli |
| Amazon Q / Goose / Continue | agend config amazon-q goose continue |
A configuração registra agend mcp como um servidor stdio local. O cliente deve conseguir encontrar o binário instalado; no Windows, o gravador de configuração usa seu caminho absoluto. Caminhos e formatos de configuração específicos do cliente são tratados por agend config.
Configure outro cliente MCP manualmente
Para clientes que usam o formato JSON mcpServers:
{
"mcpServers": {
"agend": {
"command": "agend",
"args": ["mcp"]
}
}
}
Use o caminho absoluto do binário se o cliente não herdar o PATH do seu shell. Este é um exemplo genérico; alguns clientes usam um esquema diferente. agend mcp lê JSON-RPC de stdin e escreve respostas de protocolo em stdout; logs vão para stderr. Resultados de ferramenta são conteúdo de texto MCP, incluindo campos como status e input_wait.
Ferramentas MCP
O CLI expõe 23 ferramentas. Chame list_environments para descobrir IDs e nomes. Ferramentas específicas de ambiente exigem um argumento environment e aceitam um ID ou um nome. env_create, list_environments, profiles_list e reload_config não precisam de um.
| Área | Ferramenta | O que faz |
|---|---|---|
| Ambientes | list_environments | Descubra ambientes, nomes, descrições, estado e nível. |
profiles_list | Mostre tamanhos disponíveis, cotas e uso. | |
env_create | Crie um ambiente; opcional name, description e profile. | |
env_update | Edite ou limpe nome e descrição de um ambiente. | |
env_status | Inspecione estado e metadados sem acordar o ambiente. | |
env_wake | Acorde um ambiente em suspensão. | |
env_cold_reset | Recuperação de último recurso para um ambiente travado; requer um motivo de diagnóstico. | |
| Shell | shell_exec | Execute um comando com timeout, truncamento de cabeça/cauda, modo interativo ou modo em segundo plano. |
shell_send_raw | Envie bytes para um aplicativo interativo; nenhuma nova linha é anexada. | |
shell_provide_input | Responda a um prompt simples em uma sessão de terminal ativa; anexa uma nova linha. Use shell_send_raw para REPLs e TUIs. | |
shell_resize | Redimensione o PTY ativo. | |
shell_interrupt | Interrompa um comando ou feche a sessão interativa. | |
shell_task_output | Leia a saída e o status de uma tarefa em segundo plano. | |
shell_task_stop | Pare uma tarefa em segundo plano. | |
| Arquivos | file_write | Escreva texto atomicamente em um arquivo remoto. |
file_upload | Transfira um arquivo local para o ambiente. | |
file_download | Transfira um arquivo remoto para a máquina local. | |
file_move | Mova ou renomeie um arquivo remoto. | |
| Rede | port_expose | Exponha um serviço através de um túnel HTTPS público. |
port_list | Liste portas e URLs expostas. | |
port_unexpose | Remova uma exposição; opcionalmente, direcione um domínio. | |
| Diagnóstico | env_stats | Inspecione disco, memória, CPU e processos. |
reload_config | Recarregue credenciais após mudanças em outro terminal e redefina conexões. |
interactive e run_in_background são mutuamente exclusivos. A execução em segundo plano retorna um task_id para as ferramentas de tarefa.
Caminhos locais em file_upload e file_download são confinados ao diretório de trabalho do servidor MCP, ou a AGEND_LOCAL_ROOT se você o definir no ambiente do servidor. Downloads retornam metadados de transferência; leia texto com shell_exec ou abra o arquivo local baixado. Para arquivos grandes, baixar diretamente dentro do ambiente remoto com curl ou wget geralmente é mais rápido.
Referência CLI
Comandos CLI operam no ambiente selecionado. Use IDs de ambiente com agend env use e outros comandos CLI de ambiente; ferramentas MCP também resolvem nomes.
agend env list
agend env use <env-id>
agend exec 'pwd'
Ambientes e contas
| Comando | Finalidade |
|---|---|
agend profiles | Lista os perfis disponíveis para a sua conta. |
agend env create [--name NAME] [--description TEXT] [--profile ID] | Provisiona e seleciona um workspace. |
agend env list | Lista os ambientes. |
agend env use <env-id> | Seleciona um ambiente; ativa-o se estiver em repouso. |
agend env edit [env-id] --name NAME --description TEXT | Edita metadados; --clear-name e --clear-description removem valores. |
agend env status [env-id] | Inspeciona o estado sem ativá-lo. |
agend env wake [env-id] | Ativa um ambiente em repouso. |
agend env cold-reset [env-id] --reason TEXT | Recupera um ambiente realmente travado por meio de uma inicialização a frio. |
agend env delete [env-id] | Exclui permanentemente um ambiente e seus dados. |
agend status | Mostra o status de autenticação e do ambiente selecionado. |
agend signup --email <email> | Cria uma conta e faz login com um prompt de senha. |
agend login | Autentica por meio do seu navegador. |
agend login --email <email> | Faz login com e-mail e senha. |
agend login --token <token> | Salva um token de API direto. |
agend account list | Lista as contas salvas. |
agend account switch <email> | Alterna entre contas. |
agend account remove <email> | Remove uma conta salva. |
agend logout [--all] | Remove as credenciais locais da conta ativa ou todas as contas salvas. |
A reinicialização a frio preserva o disco de dados persistente, mas descarta a memória do convidado, sessões e snapshots. É uma operação de recuperação. Criar, selecionar ou executar em um ambiente pode inicializá-lo ou ativá-lo; env status é o caminho de inspeção somente leitura.
Shell, arquivos e tarefas
| Comando | Finalidade |
|---|---|
agend connect [--shell COMMAND] | Abre um terminal interativo ao vivo. |
agend watch [--typing-delay 40ms] | Espelha a sessão interativa sem enviar entrada. |
agend exec <command> | Executa um comando remoto. |
agend input <text> | Responde a um prompt simples; acrescenta uma nova linha. |
agend resize <columns> <rows> | Redimensiona o PTY ativo. |
agend interrupt | Interrompe o comando/sessão ativo. |
agend ping | Verifica a conectividade e mostra a versão do backend. |
agend file-get <remote-path> | Imprime o conteúdo do arquivo remoto na saída padrão. |
agend file-put <remote-path> <content> | Grava o conteúdo fornecido em um arquivo remoto. |
agend file-move <source> <destination> | Move ou renomeia um arquivo remoto. |
agend task-output <task-id> | Lê a saída de tarefas em segundo plano. |
agend task-stop <task-id> | Interrompe uma tarefa em segundo plano. |
exec suporta --timeout em milissegundos (padrão: 30000), --head, --tail, --background e --interactive. Para um terminal ao vivo, use connect; para um agente que conduz um REPL ou TUI, use o fluxo de trabalho de ferramentas interativas do MCP.
Por exemplo:
agend file-put /home/agend-user/hello.txt 'hello from agend'
agend file-get /home/agend-user/hello.txt
agend exec --timeout 60000 'python3 --version'
file-get grava metadados de arquivo em stderr. file-put recebe conteúdo, não um nome de arquivo local; use o file_upload do MCP para transferência de arquivos locais. Ambos os comandos de arquivo da CLI suportam --encoding text ou --encoding base64; file-put também suporta --create-dirs, --overwrite e --mode.
Equipes e ambientes compartilhados
Uma equipe é proprietária de ambientes compartilhados. Uma concessão dá a um membro acesso exclusivo até ser liberada ou expirar.
| Comando | Finalidade |
|---|---|
agend team create <name> | Cria uma equipe da qual você é proprietário. |
agend team list | Lista suas equipes. |
agend team invite <team-id> <email> | Convida um membro. |
agend team accept <team-id> | Aceita um convite. |
agend team members <team-id> | Lista os membros. |
agend team envs <team-id> | Lista ambientes compartilhados e o status da concessão. |
agend profiles --team <team-id> | Inspeciona os perfis disponíveis para uma equipe. |
agend team env-create <team-id> [--profile ID] | Provisiona um ambiente compartilhado. |
agend env acquire <env-id> | Adquire uma concessão exclusiva. |
agend env heartbeat <env-id> | Estende a concessão. |
agend env release <env-id> | Libera a concessão. |
Quando o ambiente selecionado pertence a uma equipe, agend mcp tenta adquirir sua concessão, envia heartbeats enquanto conectado e a libera no desligamento normal. Uma concessão mantida por outro membro bloqueia o acesso. Um cliente encerrado abruptamente pode deixar uma concessão até sua expiração.
Atualizações e solução de problemas
agend update
O atualizador verifica o manifesto de soma de verificação assinado e o arquivo antes de substituir o binário. Um processo MCP já em execução continua usando sua versão atual até ser reiniciado. As versões de lançamento também verificam automaticamente atualizações no máximo uma vez a cada 24 horas; defina AGEND_NO_AUTOUPDATE=1 para desativar essas verificações automáticas. Para uma instalação gerenciada pelo Homebrew, use brew upgrade agend.
| Situação | O que fazer |
|---|---|
O instalador imprime agend setup claude, ou config claude falha | Use agend config claude-code ou agend config claude-desktop. |
| O agente não encontra o servidor | Verifique agend version, execute novamente agend config <client> e reinicie a integração MCP. Uma configuração manual pode exigir um caminho absoluto para o binário. |
| A CLI não tem ambiente selecionado | Execute agend env list e depois agend env use <env-id>. |
| O novo ambiente ainda não está acessível | Inspecione agend env status; aguarde o túnel ficar online e tente novamente agend ping. |
| A entrada relata nenhuma sessão ativa | Inicie o aplicativo com interactive: true. Comandos comuns em primeiro plano não mantêm o stdin aberto para chamadas de ferramentas posteriores. |
connect relata no active session waiting for input ao sair | Isso pode ocorrer intermitentemente no backend atual após um shell ser executado com sucesso. Consulte o relatório de verificação; inicie uma nova sessão connect se precisar continuar. |
| O caminho do arquivo local é rejeitado | Mantenha-o dentro do diretório de trabalho do MCP ou configure AGEND_LOCAL_ROOT. |
| A URL de pré-visualização do navegador não abre ainda | Verifique se o serviço está em execução e vinculado a 0.0.0.0; aguarde a propagação do túnel/DNS e inspecione port_list. Se o nome do host ainda não resolver, verifique seu resolvedor de DNS. |
| O ambiente parece travado | Inspecione env status primeiro. Use uma reinicialização a frio somente após a reconexão/ativação comum ser insuficiente. |
| O proxy corporativo bloqueia a conectividade | Defina HTTPS_PROXY / HTTP_PROXY; binários Go não usam as configurações de proxy do sistema Windows. |
As credenciais e a seleção de ambiente por conta ficam em ~/.config/agend/credentials.json, com permissões de arquivo somente do proprietário no Unix. No Windows, ~ é seu perfil de usuário e o acesso é governado pelas permissões do sistema de arquivos do Windows. Para autenticação por e-mail/senha em script, use AGEND_PASSWORD; caso contrário, a CLI solicita.
Desenvolvimento
Requer Go 1.26.9+. A partir de um checkout do código-fonte:
git clone https://github.com/agend-sh/cli.git
cd cli
make build
./bin/agend version
make install compila e copia o binário para /usr/local/bin; esse diretório deve ser gravável. No Windows, compile diretamente com go build -o agend.exe ./cmd/agend.
go test ./...
go vet ./...
A CI compila, testa e verifica no Linux e no Windows, com verificações adicionais de compilação cruzada. As tags de versão acionam o GoReleaser para publicar arquivos tar.gz para Linux/macOS e arquivos zip para Windows para amd64 e arm64, um manifesto de soma de verificação e seu pacote de assinatura Sigstore. O tap do Homebrew é atualizado por seu próprio fluxo de trabalho. make release é um alvo local de compilação cruzada Unix, não o fluxo de trabalho de publicação.
Consulte o relatório de verificação do README para a versão testada, verificações ao vivo, problemas atuais e limites de cobertura.
Como tudo se encaixa
Your MCP agent
│ stdio / JSON-RPC
▼
agend mcp ──────────────── agend connect / agend watch
│ authenticated gRPC over a WebSocket tunnel
▼
Environment backend
│
▼
Isolated Linux workspace
A ponte MCP resolve o endpoint de cada ambiente sob demanda, mantém um pool de conexões e lida com a recuperação de conexão. O acesso direto ao shell pela CLI usa o mesmo backend. Você não precisa instalar um cliente de túnel separado.
| Caminho | Finalidade |
|---|---|
cmd/agend/ | Ponto de entrada e versão injetada. |
internal/cmd/ | Comandos da CLI, configuração do cliente e atualizações. |
internal/mcp/ | Servidor JSON-RPC, definições de ferramentas, pool de conexões e regras de caminho local. |
internal/grpc/ | Cliente e transporte do backend. |
internal/api/ | Cliente HTTP do plano de controle. |
internal/auth/ | Contas, credenciais e autenticação no navegador. |
internal/recovery/ | Classificação de erros de conexão. |
proto/agentd/v1/ | Definições geradas de protobuf e gRPC. |
Licença
MIT.