{"skill":{"slug":"free-ride","displayName":"Free Ride - Unlimited free AI","summary":"Manages free AI models from OpenRouter for OpenClaw. Automatically ranks models by quality, configures fallbacks for rate-limit handling, and updates opencla...","description":"---\nname: freeride\ndescription: Manages free AI models from OpenRouter for OpenClaw. Automatically ranks models by quality, configures fallbacks for rate-limit handling, and updates openclaw.json. Use when the user mentions free AI, OpenRouter, model switching, rate limits, or wants to reduce AI costs.\nenv:\n  - name: OPENROUTER_API_KEY\n    description: OpenRouter API key — get a free one at openrouter.ai/keys\n    required: true\n    secret: true\nnetwork:\n  - openrouter.ai\nwrites:\n  - ~/.openclaw/openclaw.json (keys: agents.defaults.model, agents.defaults.models only)\n  - ~/.openclaw/.freeride-cache.json\n  - ~/.openclaw/.freeride-watcher-state.json\ninstall: pip install -e .\n---\n\n# FreeRide - Free AI for OpenClaw\n\n## What This Skill Does\n\nConfigures OpenClaw to use **free** AI models from OpenRouter. Sets the best free model as primary, adds ranked fallbacks so rate limits don't interrupt the user, and preserves existing config.\n\n## Prerequisites\n\nBefore running any FreeRide command, ensure:\n\n1. **OPENROUTER_API_KEY is set.** Check with `echo $OPENROUTER_API_KEY`. If empty, the user must get a free key at https://openrouter.ai/keys and set it:\n   ```bash\n   export OPENROUTER_API_KEY=\"sk-or-v1-...\"\n   # Or persist it:\n   openclaw config set env.OPENROUTER_API_KEY \"sk-or-v1-...\"\n   ```\n\n2. **The `freeride` CLI is installed.** Check with `which freeride`. If not found:\n   ```bash\n   cd ~/.openclaw/workspace/skills/free-ride\n   pip install -e .\n   ```\n\n## Primary Workflow\n\nWhen the user wants free AI, run these steps in order:\n\n```bash\n# Step 1: Configure best free model + fallbacks\nfreeride auto\n\n# Step 2: Restart gateway so OpenClaw picks up the changes\nopenclaw gateway restart\n```\n\nThat's it. The user now has free AI with automatic fallback switching.\n\nVerify by telling the user to send `/status` to check the active model.\n\n## Commands Reference\n\n| Command | When to use it |\n|---------|----------------|\n| `freeride auto` | User wants free AI set up (most common) |\n| `freeride auto -f` | User wants fallbacks but wants to keep their current primary model |\n| `freeride auto -c 10` | User wants more fallbacks (default is 5) |\n| `freeride list` | User wants to see available free models |\n| `freeride list -n 30` | User wants to see all free models |\n| `freeride switch <model>` | User wants a specific model (e.g. `freeride switch qwen3-coder`) |\n| `freeride switch <model> -f` | Add specific model as fallback only |\n| `freeride status` | Check current FreeRide configuration |\n| `freeride fallbacks` | Update only the fallback models |\n| `freeride refresh` | Force refresh the cached model list |\n| `freeride rotate` | User is rate-limited / fallback chain is dead — live-test and rebuild |\n\n**After any command that changes config, always run `openclaw gateway restart`.**\n\n## What It Writes to Config\n\nFreeRide updates only these keys in `~/.openclaw/openclaw.json`:\n\n- `agents.defaults.model.primary` — e.g. `openrouter/qwen/qwen3-coder:free`\n- `agents.defaults.model.fallbacks` — e.g. `[\"openrouter/free\", \"nvidia/nemotron:free\", ...]`\n- `agents.defaults.models` — allowlist so `/model` command shows the free models\n\nEverything else (gateway, channels, plugins, env, customInstructions, named agents) is preserved.\n\nThe first fallback is always `openrouter/free` — OpenRouter's smart router that auto-picks the best available model based on the request.\n\n## Watcher (Background Daemon)\n\nFor autonomous recovery from a \"whole chain is rate-limited\" deadlock — which\nthe agent can't fix by itself, since calling `freeride rotate` requires\ninference and inference is exactly what's failing — the user can run a slim\nbackground daemon:\n\n```bash\n# Foreground\nfreeride-watcher\n\n# Persistent background\nnohup freeride-watcher > ~/.openclaw/freeride-watcher.log 2>&1 &\n\n# One-shot check (no loop)\nfreeride-watcher --once\n\n# State / history\nfreeride-watcher --status\n```\n\nThe daemon probes the current primary every 60s; if it fails, it rebuilds the\nchain with live-verified models. Recommend this whenever the user is leaving\nan unattended OpenClaw setup running.\n\n## Troubleshooting\n\n| Problem | Fix |\n|---------|-----|\n| `freeride: command not found` | `cd ~/.openclaw/workspace/skills/free-ride && pip install -e .` |\n| `OPENROUTER_API_KEY not set` | User needs a key from https://openrouter.ai/keys |\n| Changes not taking effect | `openclaw gateway restart` then `/new` for fresh session |\n| Agent shows 0 tokens | Check `freeride status` — primary should be `openrouter/<provider>/<model>:free` |","tags":{"latest":"1.0.11"},"stats":{"comments":25,"downloads":67308,"installsAllTime":528,"installsCurrent":528,"stars":469,"versions":9},"createdAt":1770313337350,"updatedAt":1778486032634},"latestVersion":{"version":"1.0.11","createdAt":1778097914776,"changelog":"- Added .gitignore file to manage untracked files in the repository.\n- Documentation improvements in SKILL.md: clarified the daemon usage in the Watcher section, added the freeride rotate command description, and expanded instructions for unattended setups.\n- No changes to user-facing commands or logic.","license":"MIT-0"},"metadata":{"setup":[{"key":"OPENROUTER_API_KEY","required":true}],"os":null,"systems":null},"owner":{"handle":"shaivpidadi","userId":"s176gtst9b3sj98jytmvxc17gd83ggrw","displayName":"Shaishav Pidadi","image":"https://avatars.githubusercontent.com/u/26166520?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1779950963814}}