# Credential Setup

> Standardize credential handling for an ESP32 project (credentials.h.example, .gitignore, pre-commit protection)

- Skill: `laurigates/credential-setup` (Agent Skill)
- Install (CLI): `npx skillmds@latest add laurigates/credential-setup`
- Raw SKILL.md: https://api.skillmd.com/api/skills/laurigates/credential-setup/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: laurigates (https://skillmd.com/u/laurigates)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/laurigates/credential-setup

---


## Task

Standardize credential handling for the project at `$1` (relative path under `packages/<domain>/`).

## Standard Patterns

### ESP-IDF Projects

Use `credentials.h` + `credentials.h.example`:

```c
// credentials.h.example — Template for project credentials
// Copy to credentials.h and fill in your values:
//   cp credentials.h.example credentials.h

#ifndef CREDENTIALS_H
#define CREDENTIALS_H

// WiFi Configuration
#define WIFI_SSID "your-wifi-ssid"
#define WIFI_PASSWORD "your-wifi-password"

// API Keys (uncomment and fill in as needed)
// #define API_KEY "your-api-key"

#endif // CREDENTIALS_H
```

### ESPHome Projects

Use `secrets.yaml` + `secrets.yaml.example`:

```yaml
# secrets.yaml.example — Template for project secrets
# Copy to secrets.yaml and fill in your values:
#   cp secrets.yaml.example secrets.yaml

wifi_ssid: "your-wifi-ssid"
wifi_password: "your-wifi-password"
api_encryption_key: "generate-with-esphome"
ota_password: "your-ota-password"
```

## Process

1. **Detect project type** (ESP-IDF or ESPHome) by checking for `CMakeLists.txt` vs `.yaml` config
2. **Scan source** for credential usage:
   - `#include "credentials.h"` or `#include "secrets.h"` or `#include "wifi_config.h"`
   - `WIFI_SSID`, `WIFI_PASSWORD`, `API_KEY`, etc.
3. **Check current state**:
   - Does a `.example` file exist?
   - Is the credential file gitignored?
   - Are pre-commit hooks protecting it?
4. **Fix non-conforming patterns**:
   - `wifi_config.h` / `wifi_config_example.h` → rename to `credentials.h` / `credentials.h.example`
   - `secrets.h` / `secrets.h.example` → rename to `credentials.h` / `credentials.h.example`
   - Update `#include` statements in source to match
5. **Ensure protection**:
   - Verify `.gitignore` covers `credentials.h` and `secrets.yaml`
   - Verify root `.pre-commit-config.yaml` blocks credential files

## Migration Table

| Current File | Standard Name | Action |
|-------------|--------------|--------|
| `wifi_config.h` | `credentials.h` | Rename, update includes |
| `wifi_config_example.h` | `credentials.h.example` | Rename |
| `secrets.h` | `credentials.h` | Rename, update includes |
| `secrets.h.example` | `credentials.h.example` | Rename |
| `credentials.h.template` | `credentials.h.example` | Rename |
| `credentials.h.example` | (already correct) | No action |

## Output

Report what was found and what was changed:
- Current credential pattern detected
- Files renamed/created
- .gitignore status
- Pre-commit protection status
- Source files updated (if includes were changed)

