{
  "kind": "build-recipe",
  "id": "local-intern",
  "part_no": "B-06",
  "html": "https://insidethemachine.ai/build/local-intern",
  "md": "https://insidethemachine.ai/build/local-intern.md",
  "mcp": "https://insidethemachine.ai/mcp",
  "recipe": {
    "id": "local-intern",
    "family": "ops",
    "kind": "tool",
    "title": "Claude's local intern",
    "one": "A small MCP server that lets Claude Code hand bulk jobs to your own machine: draft, sort, transcribe, caption. Each job comes back with a token receipt.",
    "input": "A job from Claude Code (draft, classify, transcribe or caption).",
    "output": "The result, plus a receipt: local tokens used and the Claude tokens it saved (an estimate, labelled as one).",
    "claude": [
      "Plans the work and hands the bulk to the intern.",
      "Reviews what comes back."
    ],
    "private": "The intern talks only to Ollama and whisper.cpp on your computer.",
    "roles": [
      "drafter",
      "decider",
      "transcriber"
    ],
    "stages": [
      {
        "id": "plan",
        "who": "claude",
        "title": "Claude plans",
        "body": "Claude splits the job and calls the intern for the bulk work."
      },
      {
        "id": "bulk",
        "who": "local",
        "title": "The intern does the bulk",
        "body": "draft, classify (through Local Jev), transcribe or caption, on your machine."
      },
      {
        "id": "receipt",
        "who": "code",
        "title": "A receipt per job",
        "body": "Local tokens used, and an estimate of the Claude tokens the job would have cost."
      },
      {
        "id": "review",
        "who": "claude",
        "title": "Claude reviews",
        "body": "Claude checks the result and does the hard part."
      },
      {
        "id": "share",
        "who": "you",
        "title": "Share your run (optional)",
        "body": "At the end, the script shows exactly what it would upload: your chip, memory, the models, how long each stage took and the token counts. No prompts, no outputs, no file names. Say yes and it goes to our review queue. Nothing is public until we approve it."
      }
    ],
    "makeItYours": [
      "Read what the intern wrote before you publish it."
    ],
    "tools": [
      "ollama",
      "whisper-cpp",
      "claude-code"
    ],
    "status": "ran-cpu",
    "statusNote": "Runs today. Tested in a cloud container on CPU with Qwen3.5 0.8B. Speed not measured.",
    "code": {
      "path": "tools/local-intern/local-intern.mjs",
      "run": [
        "claude mcp add local-intern -e INTERN_DRAFT_MODEL=<your model> -- node \"$PWD/local-intern.mjs\""
      ]
    }
  },
  "runs_from_gb": 8,
  "parts_by_memory_gb": [
    {
      "gb": 8,
      "usable": 6,
      "picks": [
        {
          "role": "drafter",
          "id": "qwen3.5-4b",
          "name": "Qwen3.5 4B",
          "needGb": 5.8,
          "fit": {
            "state": "tight",
            "needs": null
          },
          "run": "ollama run qwen3.5:4b",
          "note": null
        },
        {
          "role": "decider",
          "id": "qwen3.5-4b",
          "name": "Qwen3.5 4B",
          "needGb": 5.8,
          "fit": {
            "state": "tight",
            "needs": null
          },
          "run": "ollama run qwen3.5:4b",
          "note": "No model is small enough for the decider rule here, so the drafter's model decides too."
        },
        {
          "role": "transcriber",
          "id": "distil-large-v3-5",
          "name": "Distil-Whisper large-v3.5",
          "needGb": 2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": null,
          "note": "Open ASR Leaderboard (English): 6.76% words wrong"
        }
      ],
      "ok": true
    },
    {
      "gb": 16,
      "usable": 12,
      "picks": [
        {
          "role": "drafter",
          "id": "gemma-4-12b",
          "name": "Gemma 4 12B",
          "needGb": 11.2,
          "fit": {
            "state": "tight",
            "needs": null
          },
          "run": "ollama run gemma4:12b",
          "note": null
        },
        {
          "role": "decider",
          "id": "qwen3.5-0.8b",
          "name": "Qwen3.5 0.8B",
          "needGb": 2.6,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.5:0.8b",
          "note": null
        },
        {
          "role": "transcriber",
          "id": "distil-large-v3-5",
          "name": "Distil-Whisper large-v3.5",
          "needGb": 2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": null,
          "note": "Open ASR Leaderboard (English): 6.76% words wrong"
        }
      ],
      "ok": true
    },
    {
      "gb": 24,
      "usable": 18,
      "picks": [
        {
          "role": "drafter",
          "id": "gemma-4-12b",
          "name": "Gemma 4 12B",
          "needGb": 11.2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run gemma4:12b",
          "note": null
        },
        {
          "role": "decider",
          "id": "qwen3.5-4b",
          "name": "Qwen3.5 4B",
          "needGb": 5.8,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.5:4b",
          "note": null
        },
        {
          "role": "transcriber",
          "id": "distil-large-v3-5",
          "name": "Distil-Whisper large-v3.5",
          "needGb": 2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": null,
          "note": "Open ASR Leaderboard (English): 6.76% words wrong"
        }
      ],
      "ok": true
    },
    {
      "gb": 32,
      "usable": 24,
      "picks": [
        {
          "role": "drafter",
          "id": "qwen3.8-27b",
          "name": "Qwen3.8 27B",
          "needGb": 22.7,
          "fit": {
            "state": "tight",
            "needs": null
          },
          "run": "ollama run qwen3.8:27b",
          "note": null
        },
        {
          "role": "decider",
          "id": "qwen3.5-4b",
          "name": "Qwen3.5 4B",
          "needGb": 5.8,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.5:4b",
          "note": null
        },
        {
          "role": "transcriber",
          "id": "distil-large-v3-5",
          "name": "Distil-Whisper large-v3.5",
          "needGb": 2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": null,
          "note": "Open ASR Leaderboard (English): 6.76% words wrong"
        }
      ],
      "ok": true
    },
    {
      "gb": 48,
      "usable": 36,
      "picks": [
        {
          "role": "drafter",
          "id": "qwen3.8-27b",
          "name": "Qwen3.8 27B",
          "needGb": 22.7,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.8:27b",
          "note": null
        },
        {
          "role": "decider",
          "id": "gemma-4-12b",
          "name": "Gemma 4 12B",
          "needGb": 11.2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run gemma4:12b",
          "note": null
        },
        {
          "role": "transcriber",
          "id": "distil-large-v3-5",
          "name": "Distil-Whisper large-v3.5",
          "needGb": 2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": null,
          "note": "Open ASR Leaderboard (English): 6.76% words wrong"
        }
      ],
      "ok": true
    },
    {
      "gb": 64,
      "usable": 48,
      "picks": [
        {
          "role": "drafter",
          "id": "qwen3.8-27b",
          "name": "Qwen3.8 27B",
          "needGb": 22.7,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.8:27b",
          "note": null
        },
        {
          "role": "decider",
          "id": "gemma-4-12b",
          "name": "Gemma 4 12B",
          "needGb": 11.2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run gemma4:12b",
          "note": null
        },
        {
          "role": "transcriber",
          "id": "distil-large-v3-5",
          "name": "Distil-Whisper large-v3.5",
          "needGb": 2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": null,
          "note": "Open ASR Leaderboard (English): 6.76% words wrong"
        }
      ],
      "ok": true
    },
    {
      "gb": 96,
      "usable": 72,
      "picks": [
        {
          "role": "drafter",
          "id": "qwen3.8-27b",
          "name": "Qwen3.8 27B",
          "needGb": 22.7,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.8:27b",
          "note": null
        },
        {
          "role": "decider",
          "id": "qwen3.8-27b",
          "name": "Qwen3.8 27B",
          "needGb": 22.7,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.8:27b",
          "note": null
        },
        {
          "role": "transcriber",
          "id": "distil-large-v3-5",
          "name": "Distil-Whisper large-v3.5",
          "needGb": 2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": null,
          "note": "Open ASR Leaderboard (English): 6.76% words wrong"
        }
      ],
      "ok": true
    },
    {
      "gb": 128,
      "usable": 96,
      "picks": [
        {
          "role": "drafter",
          "id": "qwen3.8-27b",
          "name": "Qwen3.8 27B",
          "needGb": 22.7,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.8:27b",
          "note": null
        },
        {
          "role": "decider",
          "id": "qwen3.8-27b",
          "name": "Qwen3.8 27B",
          "needGb": 22.7,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.8:27b",
          "note": null
        },
        {
          "role": "transcriber",
          "id": "distil-large-v3-5",
          "name": "Distil-Whisper large-v3.5",
          "needGb": 2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": null,
          "note": "Open ASR Leaderboard (English): 6.76% words wrong"
        }
      ],
      "ok": true
    },
    {
      "gb": 192,
      "usable": 144,
      "picks": [
        {
          "role": "drafter",
          "id": "qwen3.8-flash-next",
          "name": "Qwen3.8-Flash-Next (125B-A6B)",
          "needGb": 140,
          "fit": {
            "state": "tight",
            "needs": null
          },
          "run": "ollama run qwen3.8-flash-next:125b-a6b",
          "note": null
        },
        {
          "role": "decider",
          "id": "qwen3.8-27b",
          "name": "Qwen3.8 27B",
          "needGb": 22.7,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.8:27b",
          "note": null
        },
        {
          "role": "transcriber",
          "id": "distil-large-v3-5",
          "name": "Distil-Whisper large-v3.5",
          "needGb": 2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": null,
          "note": "Open ASR Leaderboard (English): 6.76% words wrong"
        }
      ],
      "ok": true
    },
    {
      "gb": 256,
      "usable": 192,
      "picks": [
        {
          "role": "drafter",
          "id": "qwen3.8-flash-next",
          "name": "Qwen3.8-Flash-Next (125B-A6B)",
          "needGb": 140,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.8-flash-next:125b-a6b",
          "note": null
        },
        {
          "role": "decider",
          "id": "qwen3.8-27b",
          "name": "Qwen3.8 27B",
          "needGb": 22.7,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.8:27b",
          "note": null
        },
        {
          "role": "transcriber",
          "id": "distil-large-v3-5",
          "name": "Distil-Whisper large-v3.5",
          "needGb": 2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": null,
          "note": "Open ASR Leaderboard (English): 6.76% words wrong"
        }
      ],
      "ok": true
    },
    {
      "gb": 512,
      "usable": 384,
      "picks": [
        {
          "role": "drafter",
          "id": "qwen3.8-flash-next",
          "name": "Qwen3.8-Flash-Next (125B-A6B)",
          "needGb": 140,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.8-flash-next:125b-a6b",
          "note": null
        },
        {
          "role": "decider",
          "id": "qwen3.8-27b",
          "name": "Qwen3.8 27B",
          "needGb": 22.7,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": "ollama run qwen3.8:27b",
          "note": null
        },
        {
          "role": "transcriber",
          "id": "distil-large-v3-5",
          "name": "Distil-Whisper large-v3.5",
          "needGb": 2,
          "fit": {
            "state": "good",
            "needs": null
          },
          "run": null,
          "note": "Open ASR Leaderboard (English): 6.76% words wrong"
        }
      ],
      "ok": true
    }
  ],
  "receipts": [
    {
      "key": "claude_hybrid",
      "label": "Claude tokens, this recipe",
      "value": "not run yet",
      "n": 0,
      "note": null
    },
    {
      "key": "claude_all",
      "label": "Claude tokens, all in Claude",
      "value": "not run yet",
      "n": 0,
      "note": null
    },
    {
      "key": "local_minutes",
      "label": "Local minutes",
      "value": "not run yet",
      "n": 0,
      "note": null
    },
    {
      "key": "dollars",
      "label": "Claude dollars (estimate)",
      "value": "not run yet",
      "n": 0,
      "note": null
    }
  ],
  "data_dates": {
    "models": "2026-10-15",
    "speech": "2026-10-15",
    "images": "2026-10-15",
    "machines": "2026-10-15"
  }
}