# Sdkconfig Audit

> Audit sdkconfig.defaults by inferring needed settings from source code analysis

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

---


## Task

Audit `sdkconfig.defaults` for the project at `$1` (relative path under `packages/<domain>/`).

## Process

1. **Read source files** (`main/*.c`, `main/*.h`) to detect feature usage
2. **Map features to required sdkconfig entries** using the table below
3. **Read existing `sdkconfig.defaults`** (if it exists)
4. **Compare and report** missing, unnecessary, or default-reliant settings

## Feature Detection → Config Mapping

| Source Pattern | Required Config | Notes |
|---------------|----------------|-------|
| `#include "esp_wifi.h"` or `esp_wifi_*` calls | `CONFIG_ESP_WIFI_*` basics | WiFi subsystem |
| `#include "esp_bt.h"` or BLE/BT usage | `CONFIG_BT_ENABLED=y` | Bluetooth |
| `CONFIG_BT_NIMBLE_ENABLED` vs `CONFIG_BT_BLUEDROID_ENABLED` | Depends on stack used | Check for NimBLE vs Bluedroid imports |
| `#include "mdns.h"` or `mdns_init()` | `CONFIG_MDNS_ENABLED=y` | mDNS discovery |
| `#include "esp_camera.h"` | `CONFIG_CAMERA_*`, PSRAM settings | Camera module |
| `#include "esp_tls.h"` or HTTPS client | `CONFIG_ESP_TLS_*` | TLS/HTTPS |
| `#include "esp_https_ota.h"` | OTA partition table required | OTA updates |
| `xTaskCreate` with large stacks or many tasks | `CONFIG_ESP_MAIN_TASK_STACK_SIZE=8192` | Stack sizing |
| WiFi + BLE + USB init in `app_main` | `CONFIG_ESP_MAIN_TASK_STACK_SIZE=8192`+ | Multiple subsystem init |
| `#include "tinyusb.h"` or USB device | `CONFIG_TINYUSB_*` | USB device stack |
| `esp_deep_sleep_start()` | Deep sleep related configs | Power management |
| `led_strip_*` or WS2812 | RMT channel config | LED strip driver |

## Also Check

- **Target chip**: `CONFIG_IDF_TARGET` should match justfile `target` variable
- **Flash size**: `CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y` (or appropriate size)
- **Log level**: `CONFIG_LOG_DEFAULT_LEVEL_INFO=y` (recommended for production)
- **Watchdog**: `CONFIG_ESP_TASK_WDT_TIMEOUT_S` if project has long-running operations
- **Partition table**: Custom `CONFIG_PARTITION_TABLE_CUSTOM=y` if `partitions.csv` exists

## Output Format

```
## sdkconfig.defaults Audit: <project-name>

### Missing (should add)
| Setting | Reason | Suggested Value |
|---------|--------|-----------------|
| CONFIG_MDNS_ENABLED | Source uses mdns_init() | y |

### Present (looks good)
| Setting | Value | Notes |
|---------|-------|-------|
| CONFIG_IDF_TARGET | "esp32s3" | Matches justfile target |

### Possibly unnecessary
| Setting | Reason |
|---------|--------|
| CONFIG_BT_ENABLED | No Bluetooth usage found in source |

### Recommendations
- <actionable suggestions>
```

## Style Rules

- **Only report actionable findings** — don't list every possible sdkconfig option
- **Link to source evidence** — show which file/line triggered the detection
- **Don't modify files** — this skill is read-only audit; suggest changes for the user to apply

