dev/familiar-check-env/SKILL.md
Validate the .env configuration for familiar-ai. Detects common misconfigurations like wrong ports, missing MODEL, or TOOLS_MODE issues that cause silent failures or timeouts.
npx skillsauth add lifemate-ai/familiar-ai familiar-check-envInstall 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.
Validate the .env (or environment) for familiar-ai and surface likely misconfigurations before they cause cryptic errors.
Read the current .env (or os.environ) and validate each section:
| Var | Expected | Common Mistake |
|-----|----------|----------------|
| PLATFORM | anthropic / openai / gemini / kimi | Typo, or not set (defaults to anthropic) |
| API_KEY | Non-empty | Forgotten, wrong key for the platform |
| MODEL | Platform-appropriate model ID | Not set → defaults to claude-haiku-4-5-20251001 or gpt-4o-mini, which LM Studio won't serve |
| BASE_URL | Valid URL | Wrong port (LM Studio=1234, Ollama=11434), HTTP vs HTTPS |
| TOOLS_MODE | prompt for local models, native for real OpenAI | Missing → now defaults to prompt for non-OpenAI (was native before v0.x) |
Platform-specific checks:
PLATFORM=anthropic → API_KEY should start with sk-ant-; BASE_URL and TOOLS_MODE are ignoredPLATFORM=openai + BASE_URL not set → falls back to https://api.openai.com/v1 (real OpenAI)PLATFORM=openai + BASE_URL set to local → warn if TOOLS_MODE=native (may cause timeout on models that don't support function calling)PLATFORM=gemini → API_KEY should be a Google AI Studio key; BASE_URL is ignoredPLATFORM=kimi → API_KEY is a Moonshot AI keyLM Studio specific:
localhost by default; cross-machine access requires enabling "Allow connections from network" in LM Studio settingsMODEL must exactly match the identifier shown in LM Studio's loaded model listOllama specific:
0.0.0.0 by default, so cross-machine access usually works without extra config| Var | Notes |
|-----|-------|
| CAMERA_HOST | IP of the camera on the local network |
| CAMERA_USERNAME | Usually admin |
| CAMERA_PASSWORD | Required if CAMERA_HOST is set |
| CAMERA_ONVIF_PORT | Default 2020 for Tapo; check your camera's spec |
Warn if CAMERA_HOST is set but CAMERA_PASSWORD is empty — camera tool will silently skip init.
| Var | Notes |
|-----|-------|
| ELEVENLABS_API_KEY | Required for TTS |
| ELEVENLABS_VOICE_ID | Defaults to a built-in voice; override for custom voices |
| GO2RTC_URL | Default http://localhost:1984; only needed for camera speaker |
| GO2RTC_STREAM | Default tapo_cam |
Check that mpv or ffplay is available in PATH for local speaker playback:
which mpv || which ffplay
| Var | Notes |
|-----|-------|
| TUYA_API_KEY | From Tuya IoT Platform |
| TUYA_API_SECRET | From Tuya IoT Platform |
| TUYA_DEVICE_ID | The vacuum's device ID in Tuya |
| TUYA_REGION | us / eu / cn / in |
Mobility tool silently skips init if any of these are missing.
Report findings grouped by severity:
[PLATFORM: openai]
✅ API_KEY is set
✅ BASE_URL = http://192.168.10.6:1234/v1 (LM Studio)
⚠️ TOOLS_MODE not set → defaulting to "prompt" (correct for local models)
❌ MODEL not set → will request "gpt-4o-mini" which LM Studio may not serve
Fix: set MODEL=<your-loaded-model-identifier>
[CAMERA]
✅ CAMERA_HOST = 192.168.10.5
❌ CAMERA_PASSWORD is empty → camera tool will not initialize
[TTS]
⚠️ ELEVENLABS_API_KEY not set → TTS disabled
⚠️ mpv not found in PATH, ffplay not found → no local audio playback
[MOBILITY]
ℹ️ TUYA_* not set → mobility disabled (OK if no robot vacuum)
Always end with a summary:
Summary: 1 error, 2 warnings. Fix errors before starting the agent.
tools
Debug a stuck or misbehaving familiar-ai ReAct loop. Diagnoses tool-call failures, model output issues, prompt-mode parsing errors, and silent tool skips.
tools
Scaffold a new sensor/actuator tool for familiar-ai. Generates the tool file and registers it in all required places in agent.py.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------