Install
openclaw skills install @runware/llm-agentBuild a chat, reasoning, or tool-calling agent on top of Runware-hosted LLMs. Use when the user says "make an agent that can call my functions", "let the model use these tools", "wire up an LLM over my API", "chat assistant with function calling", "give the model access to my database/search", or wants multi-step reasoning that runs the user's own code. Covers the OpenAI-compatible chat-completions + tool-calling loop, not the imageInference task shape.
openclaw skills install @runware/llm-agentBuild a conversational or agentic LLM over your own functions using Runware-hosted models. The model reasons, decides when to call the tools you define, reads what they return, and answers with that data in hand. Runware exposes an OpenAI-compatible endpoint, so this is the standard chat-completions + tool-calling format, not the imageInference task shape the image skills use.
Address by AIR. Confirm each is live and inspect its schema via runware-models + runware-run before calling. Never hardcode a stale pick.
google:gemini@3.1-pro). Strongest reasoning and instruction-following, ~1M-token context. Best general agent brain.anthropic:claude@opus-4.8). Premium reasoning and long-horizon tool use.anthropic:claude@sonnet-4.6). Fast, cheaper Claude tier for high-volume or latency-sensitive agents.moonshotai-kimi-k2-6, AIR moonshotai:kimi@k2.6). Open frontier model built for long-horizon, tool-rich agentic workflows. The tool-calling guide is grounded on it.alibaba:qwen@3.5-397b). Large MoE reasoner with ultra-long context, strong on coding and agent tasks.Route by sub-task, not by brand: pick reasoning depth and context window for the job, then drop to a faster tier for cheap or high-volume calls. All five carry io:text-to-text.
This is text, not media, so it runs over the OpenAI-compatible endpoint, not imageInference.
https://api.runware.ai/v1, your Runware API key, and set model to the AIR (or slug). Existing OpenAI agent code and frameworks work unchanged. See the platform endpoint docs at /docs/platform/openai.tools: { "type": "function", "function": { name, description, parameters } }. Constrain arguments tightly (enum, required).messages with system + user) plus tools. Set tool_choice (default auto).response.choices[0].message. If finish_reason is tool_calls, the assistant content is null and calls live in message.tool_calls. For each call: parse function.arguments (a JSON string, not an object), run the function, and append one tool message whose tool_call_id matches the call's id. Append the assistant message too. Repeat until the model returns no tool calls (finish_reason: "stop").See references/examples.md for worked request/response recipes: a basic chat completion, a single tool-call loop, and parallel tool calls in OpenAI chat-completions format.
tool_calls finish means there is no text to show yet. arguments is a JSON-encoded string you must parse. Your tool reply's tool_call_id must equal the call's id, and that pairing is how the model matches your result to its request.tool reply. Dropping the assistant message breaks the tool_call_id pairing and the next request errors.{ "error": "..." } back as the tool message so the model can read it and adjust. A thrown exception just ends the loop.tool_calls array instead of one round at a time. The loop already handles this: iterate every entry, append one tool message per call. Because each result is matched by its own tool_call_id, you can run independent calls concurrently and append results in any order.get_service_health, search_logs), not handler or doStuff. Treat the description as instructions for choosing between tools mid-conversation. Return compact JSON objects with named fields, not prose or large blobs. Keep the set small: a handful of well-scoped tools beats a large overlapping catalog.model: the AIR (or slug). Confirm it's live first.messages: the conversation. Keep stable parts (system prompt + tool defs) as a fixed prefix to maximize Runware's prompt cache. Watch usage.prompt_tokens_details.cached_tokens climb across rounds on long conversations.tools: array of function schemas. enum and required are the difference between a clean call and a malformed one.tool_choice: "auto" (default, model decides), "none" (text only, no tools), "required" (must call at least one tool), or { "type": "function", "function": { "name": "..." } } (must call the named one, useful when the action is decided and you only need arguments filled). Naming a function guarantees that call but the model may still issue others it judges necessary. Expose only that one tool if you need exactly one call.temperature, max_completion_tokens: standard OpenAI knobs. Lower temperature for decisive tool-use agents.runware-run. Never guess.tool reply are both in history, with tool_call_ids paired correctly.arguments is parsed (and ideally validated) before the function runs. Tool failures return { "error": ... }, not exceptions.enum/required on arguments, compact JSON results.live and supports io:text-to-text (verified against its card, not assumed).runware-run, runware-models, runware-prompting; vision-understanding (image/video understanding with the same LLMs over the same endpoint).