Recursos opcionais
O bot da plataforma
Seção intitulada “O bot da plataforma”Os usuários podem fazer o onboarding pela web. Um bot da plataforma também permite fazê-lo pelo Telegram (/new, /status, /retry), vincular a conta do Telegram à conta na bohr e criar o bot de cada projeto com um toque.
-
Crie um bot com o @BotFather. Nas configurações dele, permita que ele gerencie outros bots (managed bots da Bot API): é isso que deixa ele criar o bot de cada projeto. Sem isso, os usuários colam um token do BotFather.
-
Guarde o token dele:
Janela do terminal npx wrangler secret put TELEGRAM_BOT_TOKEN -
Aponte o bot para a instância:
Janela do terminal curl -X POST https://<your instance>/api/admin/platform-bot \-H "Authorization: Bearer <ADMIN_TOKEN>"
Sem um bot da plataforma, Vincular o Telegram diz “Esta instância não tem um bot do Telegram configurado.”; os bots dos projetos continuam funcionando com tokens do BotFather.
Login com um código por e-mail
Seção intitulada “Login com um código por e-mail”Os usuários podem entrar com o GitHub, ou com um código de uso único enviado pelo Cloudflare Email Service.
-
Ative o Email Sending para um domínio seu:
Janela do terminal npx wrangler email sending enable mail.example.com -
No
wrangler.jsonc, descomente o bindingsend_emaile defina oEMAIL_FROM:"send_email": [{ "name": "EMAIL", "allowed_sender_addresses": ["login@mail.example.com"] }],"vars": { "EMAIL_FROM": "bohr <login@mail.example.com>" } -
Faça o deploy de novo. Sem o binding, a página de login só oferece o GitHub.
Um container de login dedicado
Seção intitulada “Um container de login dedicado”Conectar uma assinatura Claude roda o claude setup-token da CLI oficial. Sem mais nada, ele roda no container de um dos projetos do dono: o dono precisa de um projeto com o agente pronto, e um container dormindo precisa iniciar antes.
Um container dedicado pequeno, ligado à instância, elimina as duas coisas: a conexão funciona antes de existir qualquer projeto e inicia em segundos. Ele não recebe nenhum secret; o token que ele devolve vai para a instância, nunca para o navegador. Cada usuário ou organização que faz login ganha o próprio container, que para 10 minutos depois do último uso.
Ele precisa do Workers Paid na conta da instância e da imagem no registry dessa conta:
-
Crie um token da API com Containers: Edit na conta da instância e copie a imagem (por padrão, a versão em
runtime/claude-login/package.json; passe outra imagem como argumento):Janela do terminal CLOUDFLARE_API_TOKEN=<token> CLOUDFLARE_ACCOUNT_ID=<account ID> node apps/instance/scripts/copy-login-image.mjs -
No
wrangler.jsonc, descomentedurable_objects,migrationsecontainersem “Optional: a small dedicated container”, com o ID da sua conta na imagem (o script mostra a linha), e faça o deploy de novo.
Copie a nova imagem e atualize a tag dela quando atualizar a bohr.
Sua própria imagem do agente
Seção intitulada “Sua própria imagem do agente”O sandbox de cada projeto roda a imagem gerada a partir de runtime/agent. No primeiro projeto de uma conta, a instância copia a imagem publicada (ghcr.io/bohr-io/agent:<version>) para o registry da Cloudflare dessa conta. Para usar o seu próprio build:
pnpm --filter @bohr/agent builddocker build --platform linux/amd64 -f runtime/agent/Dockerfile -t ghcr.io/<you>/bohr-agent:<tag> .docker push ghcr.io/<you>/bohr-agent:<tag>npx wrangler secret put RUNTIME_IMAGE # ghcr.io/<you>/bohr-agent:<tag>A imagem precisa ser pública (recomendamos o GitHub Container Registry ou o Google Artifact Registry; o Docker Hub limita pulls anônimos). Os Cloudflare Containers rodam imagens linux/amd64.