| name | agent-tools |
| description | Run 150+ AI apps via inference.sh CLI - image generation, video creation, LLMs, search, 3D, Twitter automation. Models: FLUX, Veo, Gemini, Grok, Claude, Seedance, OmniHuman, Tavily, Exa, OpenRouter, and many more. Use when running AI apps, generating images/videos, calling LLMs, web search, or automating Twitter. Triggers: inference.sh, infsh, ai model, run ai, serverless ai, ai api, flux, veo, claude api, image generation, video generation, openrouter, tavily, exa search, twitter api, grok |
| triggers | ["inference.sh","infsh","FLUX","Veo","Gemini","Grok","Claude API","image generation","video generation","OpenRouter","Tavily","Exa","search API","AI model","run AI","serverless AI","Twitter API","social media automation"] |
| negatives | ["local model","Ollama","vector search","memory","ChromaDB"] |
| license | MIT |
| compatibility | opencode |
| allowed-tools | Bash(infsh *) |
| metadata | {"version":"1.0.0","workflow":"ai-agents","audience":"developers"} |
Run 150+ AI apps in the cloud with a simple CLI. No GPU required.

Install CLI
curl -fsSL https://cli.inference.sh | sh
infsh login
What does the installer do? The install script detects your OS and architecture, downloads the correct binary from dist.inference.sh, verifies its SHA-256 checksum, and places it in your PATH. That's it — no elevated permissions, no background processes, no telemetry. If you have cosign installed, the installer also verifies the Sigstore signature automatically.
Manual install (if you prefer not to pipe to sh):
curl -LO https://dist.inference.sh/cli/checksums.txt
curl -LO $(curl -fsSL https://dist.inference.sh/cli/manifest.json | grep -o '"url":"[^"]*"' | grep $(uname -s | tr A-Z a-z)-$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') | head -1 | cut -d'"' -f4)
sha256sum -c checksums.txt --ignore-missing
tar -xzf inferencesh-cli-*.tar.gz
mv inferencesh-cli-* ~/.local/bin/inferencesh
Quick Examples
infsh app run falai/flux-dev-lora --input '{"prompt": "a cat astronaut"}'
infsh app run google/veo-3-1-fast --input '{"prompt": "drone over mountains"}'
infsh app run openrouter/claude-sonnet-45 --input '{"prompt": "Explain quantum computing"}'
infsh app run tavily/search-assistant --input '{"query": "latest AI news"}'
infsh app run x/post-tweet --input '{"text": "Hello from AI!"}'
infsh app run infsh/rodin-3d-generator --input '{"prompt": "a wooden chair"}'
Local File Uploads
The CLI automatically uploads local files when you provide a path instead of a URL:
infsh app run falai/topaz-image-upscaler --input '{"image": "/path/to/photo.jpg", "upscale_factor": 2}'
infsh app run falai/wan-2-5-i2v --input '{"image": "./my-image.png", "prompt": "make it move"}'
infsh app run bytedance/omnihuman-1-5 --input '{"audio": "/path/to/speech.mp3", "image": "/path/to/face.jpg"}'
infsh app run x/post-create --input '{"text": "Check this out!", "media": "./screenshot.png"}'
Commands
| Task | Command |
|---|
| List all apps | infsh app list |
| Search apps | infsh app list --search "flux" |
| Filter by category | infsh app list --category image |
| Get app details | infsh app get google/veo-3-1-fast |
| Generate sample input | infsh app sample google/veo-3-1-fast --save input.json |
| Run app | infsh app run google/veo-3-1-fast --input input.json |
| Run without waiting | infsh app run <app> --input input.json --no-wait |
| Check task status | infsh task get <task-id> |
What's Available
| Category | Examples |
|---|
| Image | FLUX, Gemini 3 Pro, Grok Imagine, Seedream 4.5, Reve, Topaz Upscaler |
| Video | Veo 3.1, Seedance 1.5, Wan 2.5, OmniHuman, Fabric, HunyuanVideo Foley |
| LLMs | Claude Opus/Sonnet/Haiku, Gemini 3 Pro, Kimi K2, GLM-4, any OpenRouter model |
| Search | Tavily Search, Tavily Extract, Exa Search, Exa Answer, Exa Extract |
| 3D | Rodin 3D Generator |
| Twitter/X | post-tweet, post-create, dm-send, user-follow, post-like, post-retweet |
| Utilities | Media merger, caption videos, image stitching, audio extraction |
Related Skills
npx skills add inference-sh/skills@ai-image-generation
npx skills add inference-sh/skills@ai-video-generation
npx skills add inference-sh/skills@llm-models
npx skills add inference-sh/skills@web-search
npx skills add inference-sh/skills@ai-avatar-video
npx skills add inference-sh/skills@twitter-automation
npx skills add inference-sh/skills@flux-image
npx skills add inference-sh/skills@google-veo
npx skills add inference-sh/skills@image-upscaling
npx skills add inference-sh/skills@background-removal
Reference Files
Documentation
Workflow
- Discover —
infsh app list --search "<keyword>" or infsh app list --category <image|video|llm|search|3d|x|utility> to find the right app
- Inspect —
infsh app get <app-id> for description, pricing, input schema, and rate limits
- Generate sample input —
infsh app sample <app-id> --save input.json to get a valid input template pre-filled with defaults
- Customize — edit the JSON input file: replace prompts, file paths, or configuration values
- Run —
infsh app run <app-id> --input input.json for synchronous execution, or --no-wait for long-running tasks
- Check status —
infsh task get <task-id> to poll progress of async tasks; infsh task logs <task-id> for streaming output
- Retrieve output — outputs are URLs (images, videos) or text responses; download with
infsh task download <task-id>
For multi-step pipelines, chain apps: run the first app, extract its output URL, feed it as input to the next app (e.g., generate image → upscale, or generate video → add audio).
Error Handling
| Error | Cause | Fix |
|---|
infsh: command not found | CLI not installed or not in PATH | Run `curl -fsSL https://cli.inference.sh |
401 Unauthorized | Not logged in or token expired | Run infsh login and re-authenticate |
402 Payment Required | Account has no credits or payment method | Check infsh billing; add credits via inference.sh dashboard |
429 Too Many Requests | Rate limit exceeded for the app or account tier | Wait for the Retry-After header duration; for paid tiers, request a limit increase |
400 Bad Request on file upload | File path does not exist, is a directory, or exceeds size limits | Verify the file path with ls -la; check the app's max input size in infsh app get <app-id> |
Task timed out (HTTP 504 or task status failed) | App execution exceeded max duration | Check infsh task get <task-id> for error details; retry with smaller input or check app status page |
502 Bad Gateway or connection errors | inference.sh backend or model provider is down | Check https://status.inference.sh; retry with exponential backoff (2s, 4s, 8s) |
| Output URL returns 404 | Generated asset expired (files are ephemeral) | Re-run the job; for permanent storage, download immediately with infsh task download <task-id> |
JSON parse error on --input | Input file is not valid JSON or schema mismatch | Use infsh app sample <app-id> --save input.json to regenerate a valid template |
| Image/video generation produces blank or corrupted output | Model inference failed silently | Re-run the job; check app-specific known issues in infsh app get <app-id>; try a different model for the same task |
Checklist
Sources
- inference.sh CLI documentation — installation, commands, authentication
- inference.sh Apps Catalog — full app library with schemas and examples
- OpenRouter API — LLM model routing and pricing
- FLUX documentation (fal.ai, replicate.com) — image generation parameters and best practices
- Veo API (Google DeepMind) — video generation capabilities and limitations
- Tavily Search API (tavily.com) — web search and extraction endpoints
- Exa API (exa.ai) — semantic search and content extraction
- x.com Developer API — Twitter/X posting, DMs, and engagement endpoints
Anti-Patterns
| Anti-pattern | Why it fails | Fix |
|---|
Not checking infsh app get before running | Input schema varies between apps; guessing fields causes 400 errors | Always run infsh app sample first to see the exact schema |
| Hardcoding file paths without verifying they exist | The CLI auto-uploads relative paths; missing files produce confusing errors | Use absolute paths or verify relative paths with Test-Path before running |
Not using --no-wait for long-running tasks | Synchronous runs block the terminal for minutes on video/3D generation | Use --no-wait and poll with infsh task get <id> for tasks expected to take > 30s |
| Ignoring rate limits and credit costs | Each app has different pricing; some cost $0.50+ per run | Check infsh app get <app-id> for cost estimate before bulk/generating runs |
| Using the cheapest model for everything | OpenRouter free models may have lower quality or stricter rate limits | Match model quality to task importance; paid tiers are more reliable |
| Not saving task IDs | Async tasks complete after the terminal session; without the ID you can't retrieve results | Log all task IDs: infsh task get <id> > task-<id>-result.json |
| Running image generation without checking supported resolutions/aspect ratios | Models silently crop or stretch to supported dimensions | Check infsh app get for supported_sizes or aspect_ratios field |