.claude/skills/api-conventions/SKILL.md
Azure Functions and Service Bus message conventions for this project. Applied automatically when working on function_app.py or Service Bus message schemas.
npx skillsauth add wfhanna1/Automated-obs-trigger api-conventionsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
/api/<kebab-case-name>/api/load-schedulemethods=["POST"] on @app.route for mutation operationsfunc.HttpResponse with appropriate status codes200 - Success207 - Partial success (some messages enqueued, some failed)400 - Bad request (schedule validation error)500 - Internal config error (missing env vars)502 - Upstream fetch failure (GitHub or servers.yaml unavailable)def _get_env(name: str) -> str:
value = os.environ.get(name)
if not value:
raise RuntimeError(f"Required environment variable '{name}' is not set.")
return value
Always use this pattern. Never use os.environ[name] directly (raises KeyError with less context).
{
"command": "start" | "stop",
"server_id": "<id matching servers.yaml>",
"action": "recording" | "streaming"
}
obs-jobsmsg.scheduled_enqueue_time_utc (must be naive UTC datetime — strip tzinfo)| Secret Name | Value |
|---|---|
| ssh-key-<server-id-with-hyphens> | Base64-encoded PEM private key |
| obs-ws-password-<server-id-with-hyphens> | OBS WebSocket password |
Server IDs use underscores (e.g., win-server-1). Key Vault names use hyphens.
Conversion: kv_id = server_id.replace("_", "-")
servers:
<server-id>:
name: "Human-readable name"
platform: windows | mac
host: "<IP or hostname>"
ssh:
user: "<username>"
port: 22
obs:
path: "<full path to OBS executable>"
websocket_port: 4455
Use module-level logger in each file:
logger = logging.getLogger(__name__)
Log levels:
logger.info(...) — normal operation events (triggered, started, stopped, enqueued)logger.warning(...) — recoverable issues (SSH retry, WebSocket retry)logger.error(...) — failures that need attentionlogger.debug(...) — internal state useful for development (SSH exec commands, port numbers)Never log: SSH key PEM content, OBS passwords, or Service Bus connection strings.
development
Test-driven development workflow. Write failing tests first, then implement to make them pass.
data-ai
Fix a GitHub issue end-to-end using the agent team workflow
development
Run a comprehensive code review on recent changes using the code-reviewer and security-reviewer agents
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.