Skip to main content

aparta

Isole suas contas de desenvolvimento (git, GitHub CLI, gcloud) por pasta de projeto — e faça seus agentes de IA de terminal usarem a conta certa, sempre.

CI Python License: MIT PyPI

demo placeholder

Quick Start (English)

Working with multiple identities (personal + work, or several clients) means commits going out with the wrong e-mail, gh/gcloud having a single global active account, and AI coding agents inheriting whatever identity your shell happens to have. aparta automates the known manual fix — includeIf blocks in ~/.gitconfig, parallel gh config dirs selected via GH_CONFIG_DIR, named gcloud configurations selected via CLOUDSDK_ACTIVE_CONFIG_NAME — and injects those env vars per project into your terminal AI agents.

uvx aparta        # first run drops you straight into the interactive wizard
# not on PyPI yet? run straight from GitHub:
uvx --from git+https://github.com/lucascarvalhal/aparta aparta

Pick your AI agents, describe each context (folder, git e-mail, SSH key, gh/gcloud accounts — aparta lists what is already logged in), review the summary, confirm once. Done. aparta doctor verifies everything afterwards.

Requirements: Python >= 3.10; gh and gcloud must already be authenticated (aparta selects credentials, it never logs in for you). Nothing ever leaves your machine.


O problema

Quem trabalha com mais de uma identidade vive esbarrando no mesmo atrito:

  • commits saindo com o e-mail errado dependendo da pasta;
  • gh e gcloud têm uma conta ativa global — trocar num terminal troca em todos;
  • agentes de IA de terminal herdam o ambiente do shell e usam a conta errada.

O aparta automatiza a solução manual conhecida: blocos [includeIf "gitdir:..."] no ~/.gitconfig, diretórios de config paralelos do gh (GH_CONFIG_DIR), configurations nomeadas do gcloud (CLOUDSDK_ACTIVE_CONFIG_NAME) — e injeta essas variáveis por projeto nos seus agentes de IA.

Instalação

uvx aparta          # roda sem instalar (recomendado para começar)
pip install aparta  # ou instale de vez

Enquanto o pacote não está no PyPI, use a instalação direto do GitHub:

uvx --from git+https://github.com/lucascarvalhal/aparta aparta

Rodar aparta sem argumentos na primeira vez abre o wizard interativo; com perfis já configurados, abre um menu (novo perfil / apply / doctor / list).

Agentes suportados

Agente Mecanismo de injeção
Claude Code campo env em .claude/settings.local.json (merge)
Codex CLI seção [env] em .codex/config.toml do repositório
Gemini CLI .gemini/.env do projeto (carregado nativamente pelo CLI)
Antigravity terminal.integrated.env.{osx,linux} em .vscode/settings.json
direnv (genérico) linhas export no .envrc — funciona para qualquer ferramenta

Adicionar suporte a um agente novo = criar um arquivo em src/aparta/agents/ (registro automático).

O que cada perfil configura

Ferramenta Mecanismo
git ~/.gitconfig-<perfil> com user.email, core.sshCommand (chave SSH própria) e opcionalmente url insteadOf; incluído via [includeIf "gitdir:~/pasta/"]
gh cópia de ~/.config/gh para ~/.config/gh-<perfil> + gh auth switch na cópia; seleção via GH_CONFIG_DIR (tokens ficam no keyring — sem novo login)
gcloud gcloud config configurations create <perfil> --no-activate; seleção via CLOUDSDK_ACTIVE_CONFIG_NAME
agentes as duas env vars acima injetadas por repositório, pelos adapters da tabela anterior

Comandos

aparta            # wizard (1ª vez) ou menu
aparta init       # wizard: agentes → contextos → resumo → confirmação → apply
aparta apply <p>  # aplica um perfil
aparta doctor     # valida tudo (tabela: git email por repo, gh auth, gcloud, env)
aparta list       # perfis configurados
aparta --dry-run apply <p>   # mostra o diff completo sem tocar em nada

Segurança

  • Backups sempre: toda escrita em arquivo existente cria antes <arquivo>.bak-aparta-<timestamp>.
  • Merge, nunca substituição: no ~/.gitconfig blocos são adicionados apenas se ausentes; nos configs dos agentes só o objeto de env é mesclado — o resto é preservado.
  • --dry-run global: veja o diff exato antes de aplicar qualquer coisa.
  • Nada sai da sua máquina: o aparta não faz chamadas de rede; ele apenas organiza arquivos locais e credenciais que você já criou com gh auth login e gcloud auth login (faça login antes de usar o aparta).

Estado em ~/.config/aparta/profiles.toml (override com APARTA_CONFIG_DIR).

Contribuindo

Veja CONTRIBUTING.md. Resumo: uv sync, uv run pytest, um adapter novo é um arquivo em src/aparta/agents/ com name, display_name e os métodos detect/inject/validate.

Licença

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aparta-0.1.0.tar.gz (22.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aparta-0.1.0-py3-none-any.whl (24.7 kB view details)

Uploaded Python 3

File details

Details for the file aparta-0.1.0.tar.gz.

File metadata

  • Download URL: aparta-0.1.0.tar.gz
  • Upload date:
  • Size: 22.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aparta-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9682b78a4d604aa915c5c77878aaa6128dfad4a0cc2ccedcb2cdc877ffc42c49
MD5 fb88296da6da926e6b1a3ce330e6bc9b
BLAKE2b-256 e620492b2f150bd34035b2b631c2445de926a32352287878b03f74f374f205a9

See more details on using hashes here.

File details

Details for the file aparta-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: aparta-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 24.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aparta-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 959dbde27d80f903b2c2cb06bb0da94cbdf1dc7e7d82aa0e7d82cbe332db679e
MD5 b9a0242f5978f6914200df6ea636822e
BLAKE2b-256 085b23459ef1181d8d6f7f44548202d1314dbd89b610f108613945c3a238bf7d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page