Add missing environment variable defaults to settings.json or settings.local.json
Scanned 6/7/2026
Install via CLI
openskills install melodic-software/claude-code-plugins---
name: sync-environment-variables
description: Add missing environment variable defaults to settings.json or settings.local.json
argument-hint: "[--target project|local] [--dry-run] [--include-undocumented]"
allowed-tools: Task, Skill, Read, Write, Edit, WebFetch, AskUserQuestion
---
# Sync Environment Variables
Add missing environment variable entries with explicit defaults to settings files.
## Arguments
| Argument | Description |
|----------|-------------|
| `--target project` | Update `.claude/settings.json` (default) |
| `--target local` | Update `.claude/settings.local.json` |
| `--dry-run` | Show changes without modifying files |
| `--include-undocumented` | Include changelog/discovered vars (not just official) |
## Phase 1: Discovery
Run environment variable discovery using the same process as `list-environment-variables`:
1. Invoke `docs-management` skill for official documentation
2. WebFetch CHANGELOG.md for additional variables
3. If `--include-undocumented`, spawn MCP research agents
Collect all discovered variables with their default values.
## Phase 2: Read Current Settings
Determine target file based on `--target` argument:
| Target | File Path |
|--------|-----------|
| `project` (default) | `.claude/settings.json` |
| `local` | `.claude/settings.local.json` |
Read the target file. If it doesn't exist:
- For `project`: Create new file with basic structure
- For `local`: Create new file (this is gitignored)
Parse the current `env` section (if present).
## Phase 3: Compare and Categorize
For each discovered environment variable, categorize:
| Category | Criteria | Action |
|----------|----------|--------|
| **MISSING** | Not in current settings, has known default | Add to settings |
| **EXISTS** | Already in current settings | Skip (preserve user value) |
| **USER-SPECIFIC** | No universal default (e.g., API keys) | Skip, report only |
| **CUSTOM** | `CLAUDE_HOOK_*` or repo-specific | Never touch |
### Variables to Add (with defaults)
These variables have known, safe defaults:
```json
{
"env": {
"DISABLE_AUTOUPDATER": "0",
"DISABLE_TELEMETRY": "0",
"CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR": "0",
"CLAUDE_CODE_SKIP_EXT_PROMPT": "0"
}
}
```
### Variables to NEVER Add Automatically
- `ANTHROPIC_API_KEY` - User-specific, no default
- `CLAUDE_CODE_USE_BEDROCK` - Provider choice, user decision
- `CLAUDE_CODE_USE_VERTEX` - Provider choice, user decision
- `AWS_*` - AWS credentials, user-specific
- `GOOGLE_*` - Google credentials, user-specific
- `HTTP_PROXY` / `HTTPS_PROXY` - Network-specific
- `CLAUDE_HOOK_*` - Repository-specific hook variables
## Phase 4: Preview Changes
Display what will be added:
```markdown
## Environment Variable Sync Preview
### Target: .claude/settings.json
### Variables to Add
| Variable | Default | Reason |
|----------|---------|--------|
| DISABLE_AUTOUPDATER | "0" | Official default, not in current settings |
| ... | ... | ... |
### Variables Skipped (Already Set)
| Variable | Current Value |
|----------|---------------|
| DISABLE_TELEMETRY | "1" |
| ... | ... |
### Variables Skipped (No Safe Default)
| Variable | Reason |
|----------|--------|
| ANTHROPIC_API_KEY | User-specific, no universal default |
| ... | ... |
```
## Phase 5: User Confirmation
Unless `--dry-run` is specified, ask for confirmation:
```yaml
AskUserQuestion:
question: "Apply these changes to settings?"
options:
- "Yes, apply changes"
- "No, abort"
- "Show me the full file preview first"
```
If `--dry-run`, stop here and report "Dry run complete. No changes made."
## Phase 6: Apply and Validate
1. **Read current file** (or create new if doesn't exist)
2. **Merge new env vars** into existing `env` section
3. **Preserve existing values** - never overwrite user-set values
4. **Alphabetical order** - sort env vars alphabetically
5. **Write updated file**
6. **Validate JSON** - ensure file is valid JSON after write
7. **Report success**
### File Structure
```json
{
"env": {
"CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR": "0",
"DISABLE_AUTOUPDATER": "0",
"DISABLE_TELEMETRY": "0"
}
}
```
If file has other sections (permissions, hooks, etc.), preserve them.
## Error Handling
| Error | Action |
|-------|--------|
| Target file not valid JSON | Report error, do not modify |
| Write permission denied | Report error with path |
| Discovery failed | Report partial results, ask to continue |
## Post-Sync Verification
After applying changes:
1. Read back the modified file
2. Validate JSON syntax
3. Confirm all intended changes were applied
4. Report any discrepancies
## Example Output
```markdown
## Sync Complete
**Target:** .claude/settings.json
### Added (3 variables)
- CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR = "0"
- DISABLE_AUTOUPDATER = "0"
- CLAUDE_CODE_SKIP_EXT_PROMPT = "0"
### Preserved (1 variable)
- DISABLE_TELEMETRY = "1" (user-set value kept)
### Skipped (2 variables)
- ANTHROPIC_API_KEY (no safe default)
- CLAUDE_CODE_USE_BEDROCK (provider choice)
**File validated:** JSON syntax OK
```
No comments yet. Be the first to comment!