Cofre de segredos local-first

O agente executa o projeto.
Ele não lê o segredo.

O Arca descriptografa o cofre só na memória e injeta as variáveis no processo filho. Sem .env em disco, sem segredo colado no chat. Cada uso é autorizado, limitado e auditado.

O problema

Três jeitos de dar uma chave a um agente

Você pediu ao agente: "testa o checkout". O teste chama a API do Stripe, então precisa de STRIPE_KEY. Três jeitos de entregar a chave, e o que acontece quando o agente tenta ver o valor:

Colar no chatvaza
você   › testa o checkout, a chave é
sk_live_51Hx9KqLm2Vw8fQ
agente › ✓ cobrança criada

Funcionou, e a chave de produção ficou no histórico da conversa, nos logs e no provedor do modelo. Para trocar, só depois de achar todos os lugares.

Deixar o .envvaza
agente › cat .env
STRIPE_KEY=sk_live_51Hx9KqLm2Vw8fQ
agente › ✓ cobrança criada

Funcionou, e qualquer leitura de arquivo, ou um README com instrução escondida, entrega a chave ao contexto do agente.

Usar o Arcaprotege
agente › arca run -- npm test
✓ cobrança criada
agente › arca run -- printenv STRIPE_KEY
████████████████████

O teste usa a chave de verdade. Se o agente tentar imprimi-la, a saída é redigida e ele só vê blocos.

Um cofre no lugar de vários .env

Pare de criar um .env para cada projeto

Hoje cada projeto carrega a própria cópia dos mesmos segredos. Com o Arca, os segredos ficam num cofre só, e cada pasta guarda apenas um .arca que diz a qual projeto e ambiente ela pertence.

Hoje: uma cópia por projetoespalha
api/.env      STRIPE_KEY=sk_live_…
web/.env      STRIPE_KEY=sk_live_…
worker/.env   STRIPE_KEY=sk_live_… (antiga)
  • Trocar a chave é editar vários arquivos e torcer para não esquecer um.
  • Cada cópia vai parar em backup, zip, commit acidental e no alcance do agente.
  • Projeto novo começa com copiar e colar de outro.
Com o Arca: um cofre, um .arca por pastacentraliza
api/.arca      projeto api, ambiente dev
web/.arca      projeto web, ambiente dev
worker/.arca   projeto worker, ambiente dev
cofre cifrado: STRIPE_KEY, …
  • O .arca não tem segredo nenhum: pode ir para o git.
  • Os valores existem num lugar só, cifrados, e vão direto para o processo.
  • Projeto novo é um arca init, sem copiar nada.

Como sair dos .env

1 · Importe o que já existe

Leia o arquivo uma vez

O Arca mostra uma prévia só com os nomes das chaves, aponta duplicadas e conflitos e importa para o projeto e ambiente que você escolher.

$ arca scan --project api --env dev ./api/.env

2 · Vincule a pasta

Crie o .arca

Um arquivo pequeno, sem segredo, que diz o projeto e o ambiente. Flags como --env prod sempre vencem o arquivo.

$ cd api && arca init --project api --env dev
.arca criado (projeto api, ambiente dev).

3 · Rode sem arquivo

Apague o .env

O arca run acha o projeto pelo .arca e injeta as variáveis no processo. O .env original já pode ir embora.

$ arca run -- npm start

E o que se repete entre projetos, troca uma vez

Vários projetos usam o mesmo banco? Guarde a senha num item e referencie. A referência guarda o nome do item e do campo, nunca o valor.

$ arca ref add DATABASE_URL 'postgres://${item:db/pg#user}:${item:db/pg#password}@${item:db/pg#host}/api'
# trocou a senha em db/pg? todo projeto que a referencia já usa a nova

Como funciona

Um dia de trabalho com seu agente de IA

O mesmo cofre, do café ao fim do dia. Você pediu "testa o checkout" e o teste chama o Stripe. A saída abaixo é ilustrativa.

  1. 09:00

    Você destrava o cofre

    A senha mestra vai para o arca agent, que guarda a chave só na memória, num socket 0600, por 15 minutos. Nada fica em disco.

    $ arca unlock --vault pessoal
    ✓ cofre destravado por 15 min
  2. 09:02

    O agente roda o teste

    Ele chama arca run. O Arca acha o projeto pelo .arca da pasta, confere se ele foi liberado, aplica a política de cada segredo, injeta STRIPE_KEY e DATABASE_URL no processo e redige a saída.

    agente › arca run -- npm test
    ✓ cobrança de teste criada
    ✓ 12 testes passando
  3. 09:15

    Ele quer conferir produção, você decide

    A política de STRIPE_KEY em prod exige aprovação a cada uso. O agente espera; um diálogo aparece na janela do Arca e um aviso no desktop. A aprovação vale para um único run e expira em 60 segundos.

    agente › arca run --env prod -- npm run smoke
    ⏳ aguardando aprovação humana (60 s)
    você   › arca approve
    ✓ aprovado uma vez
  4. 18:40

    Você tranca a tela e vai embora

    O cofre pode cortar o acesso do agente com a tela bloqueada. No dia seguinte, a auditoria mostra cada uso, sem nenhum valor.

    $ arca audit --last 3
    09:02  run  api/dev   agente  liberado
    09:15  run  api/prod  agente  aprovado por você
    18:52  run  api/dev   agente  negado: tela bloqueada

Quem chama decide o que pode

O agente do Arca identifica o chamador pelo /proc do PID do socket, sem acreditar no que o cliente declara. Pedir o mesmo cofre, por três caminhos:

humanoarca item show banco/itau --reveal

No terminal ou na janela, verificado. Pode tudo, inclusive ver os valores.

executorarca run -- npm test

O agente de IA, sem terminal. Só consegue rodar. Perde o acesso com a tela bloqueada.

outropython -c "socket.connect(...)"

Script, nc, qualquer coisa. Nunca recebe a chave nem descobre se o cofre está destravado.

Recursos

Para cada situação do dia a dia

Quando o agente vai tocar produção

Aprovação a cada uso

O agente espera você aprovar na janela ou com arca approve. Uso único, prazo curto, falha fechada se ninguém responder.

$ arca policy --project api --env prod DATABASE_URL --confirm sim

Quando você dá git push ou ssh

Git e SSH sem segredo solto

O Arca vira credential helper e ssh-agent. A chave privada nunca sai do cofre, só a assinatura. O agente usa só o que você liberar.

$ arca git add github.com --item github/pat
$ arca git setup github.com

Quando o app pede um certificado

Arquivos em tmpfs

O certificado ou o JSON de serviço vira arquivo temporário em memória, passado por variável, zerado e apagado quando o processo termina.

TLS_CERT=${file:certs/api}
# vira um caminho em tmpfs, só durante o run

Quando você tem .env espalhados

Varredura e importação

Acha chaves SSH, AWS, kube e .env pela máquina, sem mostrar valores, e importa do Bitwarden ou de CSV com prévia e triagem.

$ arca discover
$ arca scan --project api --env dev ./app/.env

Quando o notebook morre

Backup e recuperação

Cópias cifradas em pasta, pendrive, nuvem ou Git privado, com código de recuperação e restauração testada antes de confiar nela.

$ arca backup setup

Quando o agente entra em loop

Limite de taxa e auditoria

Teto de runs por minuto e um log só de acréscimo com cada uso, sem valores, para você saber o que rodou e quando.

$ arca config set --rate 5
$ arca audit

Também: itens tipados (login, chave, token, banco, cartão), gerador de senha, TOTP, 100% local, Argon2id e AES-256-GCM.

Interface

Janela Tauri em HTML puro, escuro por padrão, Ctrl+K global. O dia a dia é no terminal; a janela mostra aprovações, agentes e a saúde do cofre.

Tela Início: aprovações pendentes, agentes e atividade recente
Início: aprovações em faixa, bloqueio, agentes e atividade recente.
Tela Itens com busca, filtros e painel de detalhe
Itens: busca, filtros e detalhe em painel lateral.
Tela Agentes com políticas e aprovações por tempo
Agentes: quem pode o quê, políticas e aprovações por tempo.

Imagens ilustrativas, com dados de exemplo.

Arca x gerenciador de senhas

Gerenciador de senhas é feito para humanos preenchendo formulários. O Arca é feito para processos executados por agentes.

Gerenciador convencionalArca
Quem consomePessoa, em formulárioProcesso filho, por arca run
Segredo em disco.env, export, clipboardNenhum; tmpfs só quando preciso
Agente de IAVê o valorUsa, mas não lê
Controle de usoTudo ou nadaPolítica, aprovação, limite de taxa
NuvemCostuma exigir contaLocal; backup é opcional

Segurança, com os limites à vista

O Arca é uma barreira contra acesso acidental e injeção de prompt, não um sandbox. Ele não passou por auditoria externa: leia o modelo de ameaça antes de confiar segredos de produção a ele.

Ler o modelo de ameaça

Instalar

Linux. Go 1.26+. Para a janela, Rust e as bibliotecas de desenvolvimento do WebKitGTK 4.1.

$ git clone https://github.com/Joaovitor12j/arca.git && cd arca
$ go build -o ~/.local/bin/arca ./cmd/arca

Pacote .deb com a janela e o CLI juntos:

$ scripts/build-deb.sh
$ sudo dpkg -i dist/arca_*_amd64.deb

Primeiros passos:

$ arca vault create pessoal
$ arca unlock --vault pessoal
$ arca scan --project api --env dev ./app/.env
$ arca allow --project api
$ arca run --project api --env dev -- go run .