Add /orient skill for agent onboarding
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
16b393099a
commit
616f435fcb
1 changed files with 230 additions and 0 deletions
230
.claude/commands/orient.md
Normal file
230
.claude/commands/orient.md
Normal file
|
|
@ -0,0 +1,230 @@
|
|||
# /orient — Guia operacional do nixos-config
|
||||
|
||||
Você está trabalhando no repositório NixOS pessoal de `ltadeu6`. Este guia cobre tudo o que você precisa para operar, modificar e depurar este sistema. **Leia com atenção antes de fazer qualquer mudança.**
|
||||
|
||||
---
|
||||
|
||||
## 1. Fonte de verdade primária
|
||||
|
||||
O arquivo **`AGENTS.md`** na raiz do repo é a documentação canônica e deve ser consultado sempre. Este skill é um complemento de orientação rápida — se houver conflito, o `AGENTS.md` prevalece.
|
||||
|
||||
Se tiver dúvidas adicionais que não estejam aqui nem no `AGENTS.md`, **inspecione o código diretamente**:
|
||||
- `hosts/Nixos/configuration.nix` — sistema local
|
||||
- `hosts/NixOracle/configuration.nix` — VPS Oracle
|
||||
- `home/ltadeu6.nix` — Home Manager
|
||||
- `flake.nix` — entrypoint, inputs, overlays
|
||||
- `secrets/secrets.nix` — mapa de todos os secrets
|
||||
|
||||
Use `rg -n 'termo'` para buscar definições. Leia os arquivos antes de assumir qualquer coisa.
|
||||
|
||||
---
|
||||
|
||||
## 2. Dois sistemas neste flake
|
||||
|
||||
| Sistema | Host | Onde fica | Como fazer deploy |
|
||||
|---------|------|-----------|-------------------|
|
||||
| `Nixos` | máquina local x86_64 | `hosts/Nixos/` | `sudo nixos-rebuild switch --flake .#Nixos` |
|
||||
| `NixOracle` | VPS Oracle Cloud (`tadix.dev`) | `hosts/NixOracle/` | `./deploy-oracle.sh` |
|
||||
|
||||
**Nunca confunda os dois.** Secrets, serviços e hardware são completamente diferentes.
|
||||
|
||||
---
|
||||
|
||||
## 3. Deploy do NixOracle (VPS)
|
||||
|
||||
Sempre use o script de deploy — ele cria uma snapshot antes de cada rebuild:
|
||||
|
||||
```bash
|
||||
./deploy-oracle.sh
|
||||
```
|
||||
|
||||
O script:
|
||||
1. Lê credenciais OCI de `~/.oci/` (gerado automaticamente pelo Home Manager)
|
||||
2. Localiza a instância e o boot volume via API
|
||||
3. Apaga snapshots antigas se houver mais de 4
|
||||
4. Cria nova snapshot incremental
|
||||
5. Roda `nixos-rebuild switch --flake .#NixOracle --target-host root@tadix.dev`
|
||||
|
||||
Se `~/.oci/` não existir, rode um `sudo nixos-rebuild switch --flake .#Nixos` para ativar o `home.activation.ociCredentials`.
|
||||
|
||||
---
|
||||
|
||||
## 4. Secrets e credenciais
|
||||
|
||||
### Como funciona
|
||||
|
||||
- Secrets ficam em `secrets/*.age`, criptografados com `age` usando a chave SSH do usuário.
|
||||
- O `agenix` descriptografa em `/run/agenix/<nome>` na ativação do sistema.
|
||||
- A identidade usada é `~/.ssh/id_ed25519`.
|
||||
- Para adicionar um secret: criptografe com `age`, adicione em `secrets/secrets.nix`, declare em `age.secrets` no `configuration.nix`.
|
||||
|
||||
### Secrets disponíveis hoje
|
||||
|
||||
| Arquivo `.age` | Onde é usado |
|
||||
|---------------|--------------|
|
||||
| `openai_api_key` | `OPENAI_API_KEY` no ambiente (fish + profile.d) |
|
||||
| `openclaw_gateway_token` | `OPENCLAW_GATEWAY_TOKEN` + `~/.config/openclaw/gateway.env` |
|
||||
| `forgejo_api_token` | `FORGEJO_API_TOKEN` no ambiente |
|
||||
| `android_release_keystore` | keystore para assinar APKs |
|
||||
| `android_release_store_password` | senha do keystore |
|
||||
| `android_release_key_password` | senha da chave dentro do keystore |
|
||||
| `matrix_android_firebase_service_account` | `.secrets/firebase-service-account.json` no projeto |
|
||||
| `matrix_android_google_services` | `app/google-services.json` no projeto |
|
||||
| `matrix_android_commander_credentials` | `.mc/credentials.json` no projeto |
|
||||
| `cloudflare_worker_api_token` | deploy de Workers |
|
||||
| `cloudflare_dns_api_token` | leitura de DNS/Zone |
|
||||
| `minecraft_rcon_password` | servidor Minecraft |
|
||||
| `oci_key` | chave privada OCI API → `~/.oci/key.pem` |
|
||||
| `oci_config` | config OCI → `~/.oci/config` |
|
||||
|
||||
### Nunca imprima conteúdo de `/run/agenix/*` ou arquivos `.age`.
|
||||
|
||||
---
|
||||
|
||||
## 5. Como buildar um APK Android
|
||||
|
||||
O projeto Android relevante é o `matrix-android`. O processo exige três coisas:
|
||||
|
||||
### 5a. Credenciais de assinatura
|
||||
|
||||
```bash
|
||||
# Exporta variáveis de ambiente para o processo filho apenas
|
||||
android-signing-env ./gradlew assembleRelease
|
||||
# ou
|
||||
android-signing-env ./gradlew bundleRelease
|
||||
```
|
||||
|
||||
O helper `android-signing-env` expõe:
|
||||
- `ANDROID_KEYSTORE_PATH` → `/run/agenix/android_release_keystore`
|
||||
- `ANDROID_KEYSTORE_TYPE`, `ANDROID_KEY_ALIAS`, `ANDROID_KEYSTORE_PASSWORD`, `ANDROID_KEY_PASSWORD`
|
||||
- `PUSH_GATEWAY_URL` → `https://matrix-push-gateway.ltadeu6.workers.dev`
|
||||
|
||||
### 5b. Secrets do projeto (Firebase, google-services, credenciais)
|
||||
|
||||
```bash
|
||||
# No diretório raiz do projeto matrix-android:
|
||||
matrix-android-secrets .
|
||||
```
|
||||
|
||||
Isso cria symlinks de `/run/agenix/` para os paths esperados pelo projeto.
|
||||
|
||||
### 5c. Se faltar alguma ferramenta (Gradle, JDK, etc.)
|
||||
|
||||
Use `nix develop` — veja a seção 8.
|
||||
|
||||
---
|
||||
|
||||
## 6. OCI CLI (Oracle Cloud)
|
||||
|
||||
Para operações na Oracle Cloud:
|
||||
|
||||
```bash
|
||||
nix-shell -p oci-cli --run "oci <comando> --auth api_key"
|
||||
```
|
||||
|
||||
As credenciais ficam em `~/.oci/config` e `~/.oci/key.pem` (symlinks para `/run/agenix/`). Se não existirem, recrie com:
|
||||
|
||||
```bash
|
||||
sudo nixos-rebuild switch --flake .#Nixos
|
||||
```
|
||||
|
||||
Operações comuns:
|
||||
```bash
|
||||
# Listar instâncias
|
||||
nix-shell -p oci-cli --run "oci compute instance list --compartment-id $(awk -F= '/^tenancy/{gsub(/ /,"",$2);print $2}' ~/.oci/config) --auth api_key"
|
||||
|
||||
# Criar snapshot manual
|
||||
nix-shell -p oci-cli --run "oci bv boot-volume-backup create --boot-volume-id <id> --display-name 'manual-backup' --type INCREMENTAL --auth api_key"
|
||||
```
|
||||
|
||||
Limite free tier: **5 snapshots**. Apague antigas antes de criar novas.
|
||||
|
||||
---
|
||||
|
||||
## 7. Serviços no NixOracle (VPS)
|
||||
|
||||
| Serviço | URL | Porta interna |
|
||||
|---------|-----|---------------|
|
||||
| homepage | `tadix.dev` | — |
|
||||
| Forgejo | `git.tadix.dev` | 3000 |
|
||||
| Nextcloud 32 | `nextcloud.tadix.dev` | — |
|
||||
| JupyterLab | `jupyter.tadix.dev` | 8888 |
|
||||
| BioLab (site estático) | `biolab.tadix.dev` | — |
|
||||
|
||||
- SSH: `root@tadix.dev` ou via Tailscale `root@100.64.0.1`
|
||||
- IP público: `204.216.130.111`
|
||||
- Deploy: **sempre via `./deploy-oracle.sh`**
|
||||
|
||||
---
|
||||
|
||||
## 8. Software ausente — use `nix develop` ou `nix-shell`
|
||||
|
||||
Se qualquer ferramenta não estiver disponível no ambiente atual, **não tente instalar globalmente**. Use:
|
||||
|
||||
```bash
|
||||
# Ambiente temporário com um pacote
|
||||
nix-shell -p <pacote> --run "<comando>"
|
||||
|
||||
# Ex: OCI CLI
|
||||
nix-shell -p oci-cli --run "oci ..."
|
||||
|
||||
# Ex: ferramentas de build
|
||||
nix-shell -p gradle jdk21 --run "gradle assembleRelease"
|
||||
|
||||
# Ex: Python com pacotes
|
||||
nix-shell -p python3 python3Packages.requests --run "python3 script.py"
|
||||
|
||||
# Se o projeto tem flake.nix ou shell.nix com devShell:
|
||||
nix develop
|
||||
```
|
||||
|
||||
Pacotes instalados via `nix-shell` não persistem — isso é intencional.
|
||||
|
||||
---
|
||||
|
||||
## 9. Home Manager
|
||||
|
||||
O Home Manager está **embutido no módulo NixOS** — não existe `home-manager switch` separado. Para aplicar mudanças em `home/ltadeu6.nix`:
|
||||
|
||||
```bash
|
||||
sudo nixos-rebuild switch --flake .#Nixos
|
||||
```
|
||||
|
||||
Arquivos em `configs/` são a fonte de verdade para apps — o Home Manager os publica em `~/.config/`. Nunca edite os arquivos em `~/.config/` diretamente.
|
||||
|
||||
---
|
||||
|
||||
## 10. Adicionando serviços ou pacotes
|
||||
|
||||
### No sistema local (`Nixos`)
|
||||
- Pacotes do sistema: `environment.systemPackages` em `hosts/Nixos/configuration.nix`
|
||||
- Pacotes do usuário: `home.packages` em `home/ltadeu6.nix`
|
||||
- Serviços: `services.<nome>.enable = true` em `hosts/Nixos/configuration.nix`
|
||||
|
||||
### No VPS (`NixOracle`)
|
||||
- Edite `hosts/NixOracle/configuration.nix`
|
||||
- Deploy com `./deploy-oracle.sh`
|
||||
|
||||
---
|
||||
|
||||
## 11. Validação antes de rebuild
|
||||
|
||||
```bash
|
||||
# Verifica sintaxe Nix
|
||||
nix-instantiate --parse hosts/Nixos/configuration.nix
|
||||
nix-instantiate --parse home/ltadeu6.nix
|
||||
|
||||
# Build completo sem aplicar (mais lento, mais fiel)
|
||||
nix build --print-out-paths '.#nixosConfigurations."Nixos".config.system.build.toplevel' --no-link
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 12. Regras invioláveis
|
||||
|
||||
- Nunca edite `hardware-configuration.nix` sem pedido explícito.
|
||||
- Nunca imprima conteúdo de `/run/agenix/*` ou `.age`.
|
||||
- Nunca edite arquivos em `/etc`, `/run`, `~/.config` gerados pelo sistema — edite a fonte Nix.
|
||||
- Nunca faça commit de secrets em texto claro.
|
||||
- Sempre use `./deploy-oracle.sh` para o NixOracle — nunca `nixos-rebuild` direto em produção.
|
||||
- Se não encontrar um pacote, use `nix-shell -p <pacote>` antes de qualquer outra alternativa.
|
||||
Loading…
Add table
Add a link
Reference in a new issue