Local InferenceOpen SourceFreeActiveMachine-verified· beginner · ~10 min setup

Local model chore: draft a sensitive message in private

Ask a free, offline model to draft or soften a delicate message (a note about money, a reply to a doctor, a careful complaint) knowing the contents stay on your machine.

by Shilpa Mitra· verified today· v1.0.0

Run this workflow

CI-verified, 2/2 fixtures passing.

Build this with your agent

One copy-paste hands Claude Code, Codex, or Cursor the full recipe, steps included, nothing to fetch.

Intended Use

Anyone wording a delicate message who wants it kept private. CI installs Ollama, pulls a real small Gemma 3 model, and runs the actual 'soften this' prompt offline, asserting a non-empty answer with a clean exit (no key, no cloud). gemma3:4b is recommended for real use; CI uses gemma3:270m for speed. The wording's QUALITY is fenced.

Not for

  • Sending the draft unread, always reread a sensitive message before it goes out
  • Expecting CI to judge tone, only that a local model ran and produced a draft offline

The Stack

Tested Against

ollama@0.30gemma3:270mgemma3:4b (recommended for real use)

Side effects & data flow

Network
ollama.com, model pull only; inference is fully offline
Writes
~/.ollama/ (downloaded model)
Credentials
none required

Data privacy

  • nobody (fully local after the one-time model download) the message contents (retention: stays on device; goes to no company's servers)

Prerequisites

  • A laptop with ~8GB RAM

Steps

  1. 1

    Soften the message on a real local model (offline)

    Install Ollama, pull a Gemma 3 model, and ask it to rewrite a heated message to be calmer. After the download this runs with wifi off, so the contents stay on the machine. CI runs exactly this on gemma3:270m and checks a real draft came back.

    command -v ollama >/dev/null 2>&1 || curl -fsSL https://ollama.com/install.sh | sh
    curl -s http://localhost:11434/api/version >/dev/null 2>&1 || (ollama serve >/tmp/ollama-serve.log 2>&1 &)
    for i in $(seq 1 60); do curl -s http://localhost:11434/api/version >/dev/null 2>&1 && break; sleep 1; done
    ollama pull gemma3:270m >/dev/null 2>&1
    OUT=$(ollama run gemma3:270m "Rewrite this message to sound calmer and more polite, keep it short and sincere: I am extremely frustrated that the invoice is wrong again and I need this fixed today.")
    if [ -n "$OUT" ]; then
      echo "chore3 OK: gemma3:270m drafted a $(printf '%s' "$OUT" | wc -c | tr -d ' ')-char softened message offline (quality fenced)"
    else
      echo "EMPTY OUTPUT"; exit 1
    fi
  2. 2

    Use the recommended size and reread it (the quality step, not checked by CI)

    For real messages, pull gemma3:4b or larger for better tone, then always reread before sending. The draft's quality is non-deterministic, so CI never claims it.

Eval, 2 fixtures

Last passed: verified today
  • ran-offlinecontainstimeout 600s · max $0

    Expected: chore3 OK: gemma3:270m drafted a

  • clean-exitexit_codetimeout 600s · max $0

    Expected: 0

Results

The chore the privacy angle was made for: soften the wording of a difficult message with nothing going to any company's servers.

Did this work for you?

Our CI checks the setup runs. You tell us if the whole thing worked. Tell us straight.

Liked this workflow?

Get new verified workflows in WebAfterAI, three issues a week (Tue, Thu, Sat).