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.
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;
ghegcloudtê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
~/.gitconfigblocos são adicionados apenas se ausentes; nos configs dos agentes só o objeto de env é mesclado — o resto é preservado. --dry-runglobal: 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 loginegcloud 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
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9682b78a4d604aa915c5c77878aaa6128dfad4a0cc2ccedcb2cdc877ffc42c49
|
|
| MD5 |
fb88296da6da926e6b1a3ce330e6bc9b
|
|
| BLAKE2b-256 |
e620492b2f150bd34035b2b631c2445de926a32352287878b03f74f374f205a9
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
959dbde27d80f903b2c2cb06bb0da94cbdf1dc7e7d82aa0e7d82cbe332db679e
|
|
| MD5 |
b9a0242f5978f6914200df6ea636822e
|
|
| BLAKE2b-256 |
085b23459ef1181d8d6f7f44548202d1314dbd89b610f108613945c3a238bf7d
|