OpenClawSkills
GitHub
Gateway / Operations • TutorialHeader.readTime

Local Models

Run OpenClaw on local LLMs (LM Studio, vLLM, LiteLLM, custom OpenAI endpoints)

Local is doable, but OpenClaw expects large context + strong defenses against prompt injection. Small cards truncate context and leak safety. Aim high: ''≥2 maxed-out Mac Studios or equivalent GPU rig (~$30k+)''. A single ''24 GB'' GPU works only for lighter prompts with higher latency. Use the ''largest / full-size model variant you can run''; aggressively quantized or "small" checkpoints raise prompt-injection risk (see ''Security'').

Tutorial.step

Recommended: LM Studio + MiniMax M2.1 (Responses API, full-size)

Best current local stack. Load MiniMax M2.1 in LM Studio, enable the local server (default ''http://127.0.0.1:1234''), and use Responses API to keep reasoning separate from final text.

Json5
{
  agents: {
    defaults: {
      model: { primary: "lmstudio/minimax-m2.1-gs32" },
      models: {
        "anthropic/claude-opus-4-5": { alias: "Opus" },
        "lmstudio/minimax-m2.1-gs32": { alias: "Minimax" },
      },
    },
  },
  models: {
    mode: "merge",
    providers: {
      lmstudio: {
        baseUrl: "http://127.0.0.1:1234/v1",
        apiKey: "lmstudio",
        api: "openai-responses",
        models: [
          {
            id: "minimax-m2.1-gs32",
            name: "MiniMax M2.1 GS32",
            reasoning: false,
            input: ["text"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 196608,
            maxTokens: 8192,
          },
        ],
      },
    },
}

Setup checklist

- Install LM Studio: https://lmstudio.ai

- In LM Studio, download the ''largest MiniMax M2.1 build available'' (avoid "small"/heavily quantized variants), start the server, confirm ''http://127.0.0.1:1234/v1/models'' lists it.

- Keep the model loaded; cold-load adds startup latency.

- Adjust ''contextWindow''/''maxTokens'' if your LM Studio build differs.

- For WhatsApp, stick to Responses API so only final text is sent.

Best current local stack. Load MiniMax M2.1 in LM Studio, enable the local server (default ''http://127.0.0.1:1234''), and use Responses API to keep reasoning separate from final text.

Keep hosted models configured even when running local; use ''models.mode: "merge"'' so fallbacks stay available.

Tutorial.step

Hybrid config: hosted primary, local fallback

Json5
{
  agents: {
    defaults: {
      model: {
        primary: "anthropic/claude-sonnet-4-5",
        fallbacks: ["lmstudio/minimax-m2.1-gs32", "anthropic/claude-opus-4-5"],
      },
      models: {
        "anthropic/claude-sonnet-4-5": { alias: "Sonnet" },
        "lmstudio/minimax-m2.1-gs32": { alias: "MiniMax Local" },
        "anthropic/claude-opus-4-5": { alias: "Opus" },
      },
    },
  },
  models: {
    mode: "merge",
    providers: {
      lmstudio: {
        baseUrl: "http://127.0.0.1:1234/v1",
        apiKey: "lmstudio",
        api: "openai-responses",
        models: [
          {
            id: "minimax-m2.1-gs32",
            name: "MiniMax M2.1 GS32",
            reasoning: false,
            input: ["text"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 196608,
            maxTokens: 8192,
          },
        ],
      },
    },
}

#

Tutorial.step

Local-first with hosted safety net

Swap the primary and fallback order; keep the same providers block and ''models.mode: "merge"'' so you can fall back to Sonnet or Opus when the local box is down.

#

Tutorial.step

Regional hosting / data routing

- Hosted MiniMax/Kimi/GLM variants also exist on OpenRouter with region-pinned endpoints (e.g., US-hosted). Pick the regional variant there to keep traffic in your chosen jurisdiction while still using ''models.mode: "merge"'' for Anthropic/OpenAI fallbacks.

- Local-only remains the strongest privacy path; hosted regional routing is the middle ground when you need provider features but want control over data flow.

Tutorial.step

Other OpenAI-compatible local proxies

Keep ''models.mode: "merge"'' so hosted models stay available as fallbacks.

Json5
{
  models: {
    mode: "merge",
    providers: {
      local: {
        baseUrl: "http://127.0.0.1:8000/v1",
        apiKey: "sk-local",
        api: "openai-responses",
        models: [
          {
            id: "my-local-model",
            name: "Local Model",
            reasoning: false,
            input: ["text"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 120000,
            maxTokens: 8192,
          },
        ],
      },
    },
}

Keep ''models.mode: "merge"'' so hosted models stay available as fallbacks.

Tutorial.step

Troubleshooting

- Gateway can reach the proxy? ''curl http://127.0.0.1:1234/v1/models''.

- LM Studio model unloaded? Reload; cold start is a common "hanging" cause.

- Context errors? Lower ''contextWindow'' or raise your server limit.

- Safety: local models skip provider-side filters; keep agents narrow and compaction on to limit prompt injection blast radius.