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

agend

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.

Latest release CI MCP over stdio Linux, macOS, and Windows

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.

ConstruaInterajaMostre 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_environments do agend para encontrar my-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

CampoSignificado
status: completedO comando terminou. Verifique exit_code.
status: awaiting_inputO processo interativo ainda está ativo. Este status sozinho não prova que está esperando entrada.
input_wait: trueUm 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: falseNenhum novo evento foi observado nesta resposta. Não cancela um evento anterior nem prova que o processo parou de esperar.
status: timeoutUm 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:

ClienteComando
Claude Codeagend config claude-code
Claude Desktopagend config claude-desktop
Codexagend config codex
Cursor / Windsurfagend config cursor windsurf
Gemini CLI / Antigravityagend config gemini antigravity
VS Code / Zed / JetBrainsagend config vscode zed jetbrains
Cline / Roo Codeagend config cline roo-code
OpenCode / GitHub Copilot CLIagend config opencode github-copilot-cli
Amazon Q / Goose / Continueagend 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.

ÁreaFerramentaO que faz
Ambienteslist_environmentsDescubra ambientes, nomes, descrições, estado e nível.
profiles_listMostre tamanhos disponíveis, cotas e uso.
env_createCrie um ambiente; opcional name, description e profile.
env_updateEdite ou limpe nome e descrição de um ambiente.
env_statusInspecione estado e metadados sem acordar o ambiente.
env_wakeAcorde um ambiente em suspensão.
env_cold_resetRecuperação de último recurso para um ambiente travado; requer um motivo de diagnóstico.
Shellshell_execExecute um comando com timeout, truncamento de cabeça/cauda, modo interativo ou modo em segundo plano.
shell_send_rawEnvie bytes para um aplicativo interativo; nenhuma nova linha é anexada.
shell_provide_inputResponda a um prompt simples em uma sessão de terminal ativa; anexa uma nova linha. Use shell_send_raw para REPLs e TUIs.
shell_resizeRedimensione o PTY ativo.
shell_interruptInterrompa um comando ou feche a sessão interativa.
shell_task_outputLeia a saída e o status de uma tarefa em segundo plano.
shell_task_stopPare uma tarefa em segundo plano.
Arquivosfile_writeEscreva texto atomicamente em um arquivo remoto.
file_uploadTransfira um arquivo local para o ambiente.
file_downloadTransfira um arquivo remoto para a máquina local.
file_moveMova ou renomeie um arquivo remoto.
Redeport_exposeExponha um serviço através de um túnel HTTPS público.
port_listListe portas e URLs expostas.
port_unexposeRemova uma exposição; opcionalmente, direcione um domínio.
Diagnósticoenv_statsInspecione disco, memória, CPU e processos.
reload_configRecarregue 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

ComandoFinalidade
agend profilesLista os perfis disponíveis para a sua conta.
agend env create [--name NAME] [--description TEXT] [--profile ID]Provisiona e seleciona um workspace.
agend env listLista os ambientes.
agend env use <env-id>Seleciona um ambiente; ativa-o se estiver em repouso.
agend env edit [env-id] --name NAME --description TEXTEdita 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 TEXTRecupera 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 statusMostra 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 loginAutentica 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 listLista 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

ComandoFinalidade
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 interruptInterrompe o comando/sessão ativo.
agend pingVerifica 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.

ComandoFinalidade
agend team create <name>Cria uma equipe da qual você é proprietário.
agend team listLista 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çãoO que fazer
O instalador imprime agend setup claude, ou config claude falhaUse agend config claude-code ou agend config claude-desktop.
O agente não encontra o servidorVerifique 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 selecionadoExecute agend env list e depois agend env use <env-id>.
O novo ambiente ainda não está acessívelInspecione agend env status; aguarde o túnel ficar online e tente novamente agend ping.
A entrada relata nenhuma sessão ativaInicie 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 sairIsso 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 é rejeitadoMantenha-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 aindaVerifique 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 travadoInspecione 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 conectividadeDefina 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.

CaminhoFinalidade
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.