git:20251106.5b3b5d5 to git:20251109.ca14d90

28 added, 3 removed. Audit A to A.

---
name: api-credentials
- description: Securely manages API credentials for multiple providers (Anthropic Claude, Google Gemini). Use when skills need to access stored API keys for external service invocations.
+ description: Securely manages API credentials for multiple providers (Anthropic Claude, Google Gemini, GitHub). Use when skills need to access stored API keys for external service invocations.
---
# API Credentials Management
**⚠️ WARNING: This is a PERSONAL skill - DO NOT share or commit with actual credentials!**
This skill provides secure storage and retrieval of API credentials for multiple providers. It serves as a dependency for other skills that need to invoke external APIs programmatically.
## Supported Providers
- **Anthropic** (Claude API)
- **Google** (Gemini API, Vertex AI, etc.)
+ - **GitHub** (GitHub API, Personal Access Tokens)
- Extensible for additional providers
## Purpose
- Centralized credential storage for multiple API providers
- Secure retrieval methods for dependent skills
- Clear error messages when credentials are missing
- Support for multiple credential sources (config file, environment variables)
## Usage by Other Skills
Skills that need to invoke APIs should reference this skill:
### Anthropic Claude API
```python
import sys
sys.path.append('/home/user/claude-skills/api-credentials/scripts')
from credentials import get_anthropic_api_key
try:
api_key = get_anthropic_api_key()
# Use api_key for Claude API calls
except ValueError as e:
print(f"Error: {e}")
```
### Google Gemini API
```python
import sys
sys.path.append('/home/user/claude-skills/api-credentials/scripts')
from credentials import get_google_api_key
try:
api_key = get_google_api_key()
# Use api_key for Gemini API calls
except ValueError as e:
print(f"Error: {e}")
```
+ ### GitHub API
+
+ ```python
+ import sys
+ sys.path.append('/home/user/claude-skills/api-credentials/scripts')
+ from credentials import get_github_api_key
+
+ try:
+ api_key = get_github_api_key()
+ # Use api_key for GitHub API calls
+ except ValueError as e:
+ print(f"Error: {e}")
+ ```
+
## Setup Instructions
### Option 1: Configuration File (Recommended)
1. Copy the example config:
```bash
cp /home/user/claude-skills/api-credentials/assets/config.json.example \
/home/user/claude-skills/api-credentials/config.json
```
2. Edit `config.json` and add your API keys:
```json
{
"anthropic_api_key": "sk-ant-api03-...",
- "google_api_key": "AIzaSy..."
+ "google_api_key": "AIzaSy...",
+ "github_api_key": "ghp_..."
}
```
3. Ensure the config file is in `.gitignore` (already configured)
### Option 2: Environment Variables
Set environment variables for the providers you need:
```bash
# Anthropic Claude
export ANTHROPIC_API_KEY="sk-ant-api03-..."
# Google Gemini
export GOOGLE_API_KEY="AIzaSy..."
+
+ # GitHub
+ export GITHUB_TOKEN="ghp_..."
+ # or
+ export GITHUB_API_KEY="ghp_..."
```
Add to your shell profile (~/.bashrc, ~/.zshrc) to persist.
## Priority
Credential retrieval follows this priority for each provider:
1. `config.json` in the skill directory (highest priority)
2. Environment variable (ANTHROPIC_API_KEY or GOOGLE_API_KEY)
3. ValueError raised if neither is available
## Security Notes
- **Never commit config.json with real credentials**
- The config.json file should be in .gitignore
- Only config.json.example should be version controlled
- Consider using environment variables in shared/production environments
- Rotate API keys regularly
- Skills should never log or display full API keys
## File Structure
```
api-credentials/
├── SKILL.md # This file
├── config.json # YOUR credentials (gitignored)
├── scripts/
│ └── credentials.py # Credential retrieval module
└── assets/
└── config.json.example # Template for users
```
## Error Handling
When credentials are not found, the module raises `ValueError` with clear guidance:
- Where to place config.json
- How to set environment variables
- Links to provider consoles for key generation
Skills should catch `ValueError` exceptions and handle appropriately.
## Available Functions
**get_anthropic_api_key()** → str
- Returns Anthropic API key
- Raises ValueError if not configured
**get_google_api_key()** → str
- Returns Google API key
- Raises ValueError if not configured
+ **get_github_api_key()** → str
+ - Returns GitHub API token (Personal Access Token)
+ - Raises ValueError if not configured
+
**get_api_key_masked(api_key)** → str
- Returns masked version for safe logging
- Example: "sk-ant-...xyz"
**verify_credential(provider)** → bool
- Checks if provider is configured
- Returns True/False without raising exceptions
- - Providers: 'anthropic', 'google'
+ - Providers: 'anthropic', 'google', 'github'
## Adding New Providers
To support additional providers:
1. Add field to `assets/config.json.example`
2. Add getter function to `scripts/credentials.py`:
```python
def get_provider_api_key() -> str:
# Follow existing pattern with config file + env var
pass
```
3. Add to `verify_credential()` mapping
4. Update this documentation
## Token Efficiency
This skill uses ~300 tokens when loaded but saves repeated credential management code across multiple skills that invoke external APIs. It provides a single, consistent pattern for all credential handling.