Adi's Repo  /  Catalogue  /  Setup guide iOS 6 Siri Remastered  /  v1.4

Setup guide  ·  about 30 minutes, most of it downloading

Siri, answered by your own machine

The tweak is only half of it. Apple switched off the service iOS 6's Siri used to call, so the assistant needs somewhere else to ask — and that somewhere is a small server you run on a computer in your own house. This page sets it up from nothing, assuming you have never touched Docker or Ollama in your life.

Read this on the right machine

Every command here is typed on the computer that will run the server — not on the iPad. The device only gets involved at step 3.

What follows

  1. 1Pick the computer
  2. 2Put an AI assistant on it
  3. 3Let it into the iPad
  4. 4Give it the prompt
  5. Or do it all by hand — the full walkthrough
  6. What works with no keys
  7. What it cannot do
  8. Reaching the device (only if needed)
  9. When something is wrong
  10. The technical page
  11. Where your words go

The short version. Pick a computer to run the server on, install an AI assistant on it, let that assistant into your iPad over SSH, then paste it one prompt and answer its questions. About half an hour, most of it downloading.

What this costs: nothing, if you want it to. The tweak, the server and every service it uses are free, and there is no account to make anywhere. Two of the three AI assistants below need a paid plan you may already have — Hermes is free, and doing it by hand needs no assistant at all. Say so now rather than five minutes in.

Already run Docker? The whole thing in six lines
  • Two containers: mynah-server (FastAPI, port 8807 — this is what the device talks to) and mynah-stt (faster-whisper).
  • Ollama runs on the host, not in Compose. On Linux it must listen on 0.0.0.0 for the container to reach it.
  • Config is one .env: MYNAH_MODEL, OLLAMA_URL, optional SEARXNG_URL, TMDB_API_KEY, WOLFRAM_APPID. Never set WHISPER_COMPUTE_TYPE.
  • Start with ./start.sh, not docker compose up -d — it picks the CUDA or CPU image for you.
  • GET /healthz is the honest one: it transcribes a silent clip and generates a token, and always answers 200.
  • The device needs the tweak from http://repo.theadipost.com/ and the server URL in Settings. Everything is plain http; iOS 6 cannot do modern TLS.

The full detail is in the technical page.

Step 1Pick the computer

Something in your house that is switched on when you want to ask Siri something and is on the same Wi-Fi as the iPad. Not the guest network. That is the whole requirement.

Only one part of this is heavy: the language model. It wants about 3.5 GB of memory to itself and does the actual thinking. Everything else is small. So judge a machine on whether it can hold and run the model.

MachineHow it goes
Mac with Apple Silicon
M1 or newer, 16 GB
The easiest good answer. Fast, quiet, and Ollama uses the GPU with no setup. The catch is sleep: a closed laptop stops answering. Plug it in and set Energy Saver to prevent sleeping, or accept that Siri works when the lid is open.
A PC with an NVIDIA card
any modern GPU, 8 GB+ RAM
The best of these. The card makes speech near-instant and its memory lets you run a noticeably better model. If it is a desktop that stays on, this is the one to use. Change one setting if you go this route — see below.
An always-on Linux box
home server, old PC, mini PC
Ideal if you have one. Already on, already networked. Without a graphics card, answers take a few seconds longer — perfectly usable.
A NAS that runs Docker Depends which NAS. Intel or AMD with 8 GB+ and real memory free: good. ARM-based (the cheaper models): it will run, slowly. Check what RAM is actually free first — a NAS is usually already several gigabytes into it.
Raspberry Pi 5, 8 GB Works, honestly slow. Around half a minute for a short question. Fine for “what’s the weather”, tiring for conversation. Boot from SSD, not a microSD card.
A Windows laptop you already own Fine to start with. Install Docker Desktop, which sets up WSL2 for you. Like any laptop, it answers only while it is awake.
If you have an NVIDIA card, change the speech model

The default speech model is small and English-only, because it has to work on a Raspberry Pi. On a GPU it is the weakest part of the whole system, and the errors are the ones that hurt most: it mishears names, which is exactly what the cards are looked up by.

Measured here on ten degraded phrases of the kind this actually gets asked:

Speech modelWord errorsTime
the default, distil-whisper-small.en 13.4%0.22 s
large-v3-turbo 5.3%0.48 s

The default heard “Lionel Messi” as Leonel messy and “Nvidia stock” as invidious docket — so the player card and the share price simply could not be looked up. The larger model gets both right, for a quarter of a second. Put this in your .env:

WHISPER_MODEL=deepdml/faster-whisper-large-v3-turbo-ct2

Leave it alone on a CPU or a Pi — there it would be slower than it is worth.

If it is a laptop, read this one line

A laptop that sleeps at night is a Siri that stops answering at night. The server only replies while the machine is awake, so either keep it plugged in with sleep disabled, or accept that Siri works when the lid is open. This is the single most common reason it “stops working” a day later.

The longer version of this comparison is further down, with timings and the trade-offs spelled out.

Step 2Put an AI assistant on it

This is the assistant that will do the installing. It runs on the computer from step 1 — not on your phone, and not in a browser tab, because it needs to actually run commands there.

Never opened a terminal? Two options

Skip the terminal entirely: Claude Code has a desktop app with a normal window and buttons. Download it for macOS, Windows or Linux, sign in, and paste the prompt into it. Nothing below is needed.

Or open one, it takes ten seconds: Mac+Space, type Terminal, Return. WindowsWin+X, choose Terminal. Linux — you know where it is.

Hermes Agent

Free and open source, from Nous Research. Sign in with Nous Portal; no API key, no subscription.

curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

hermes setup --portal

Then run hermes chat. There is a desktop installer on their site too, if you would rather not use the terminal.

Claude Code

Needs a Claude Pro, Max, Team or Enterprise plan. The free plan does not include it.

# macOS, Linux, WSL
curl -fsSL https://claude.ai/install.sh | bash

# Windows PowerShell
irm https://claude.ai/install.ps1 | iex

# or with Homebrew
brew install --cask claude-code

Then run claude and follow the browser sign-in.

Codex

Needs a ChatGPT Plus, Pro, Business, Edu or Enterprise account, or an API key.

npm install -g @openai/codex

# or with Homebrew
brew install --cask codex

Then run codex and choose Sign in with ChatGPT.

Any assistant that can run commands on the machine will do — Gemini CLI, Copilot in a terminal, Cline, Aider. The prompt does not assume any particular one.

Worth being straight about this

The finished system does not phone anyone — what it does with your words is set out at the bottom, and the short answer is that your questions go to your own machine and nowhere else. Setting it up with an assistant is a different question. Claude Code and Codex send what they read and type to Anthropic and OpenAI respectively, for as long as you have them open. That includes this prompt, the contents of your .env, and any API keys you paste in.

If that is not a trade you want to make, take the by-hand route. It is the same software and the same result, and nothing about it involves an AI at all. Hermes with a local model is a middle path, though the hosted Nous Portal sign-in is not.

Step 3Set up the iPad

Two things on the device itself. The first is required — it is the tweak. The second is optional and lets the assistant finish the job instead of handing you homework.

Install the tweak — required

  1. Open Cydia → Sources → Edit → Add, and enter:
    http://repo.theadipost.com/
    Plain http://, not https — an iOS 6 device cannot validate a modern certificate, so an https source refuses to load on exactly the devices this is for.
  2. Install “iOS 6 Siri Remastered” from that source. It sits quietly until you give it a server address, so nothing changes yet.

Let the assistant in — optional

With SSH access the assistant checks the tweak installed properly, writes the server address into Settings for you, and reads the tweak's own log if something misbehaves. Without it, you type the address in by hand at the end — about six taps.

  1. In Cydia, search for OpenSSH — the one from Telesphoreo — and install it. No respring needed; it starts listening straight away.
  2. Find the iPad's address: Settings → Wi-Fi → the blue beside your network. It looks like 192.168.1.42.
  3. Log in from your computer. The username is root and the password is alpine — the same on every jailbroken device, so anyone else on your Wi-Fi could use it too. On a home network that is usually fine; on a shared or public one, passwd changes it.
    ssh root@YOUR-IPAD-IP
  4. If ssh refuses to connect at all, that is expected on a modern computer: iOS 6's SSH is old enough that current clients reject its encryption by default. Add these and it connects:
    ssh -o HostKeyAlgorithms=+ssh-rsa     -o PubkeyAcceptedAlgorithms=+ssh-rsa     -o KexAlgorithms=+diffie-hellman-group14-sha1     root@YOUR-IPAD-IP
  5. Tell the assistant the iPad's address when it asks. The prompt in step 4 knows what to do with it: it checks the tweak is installed, writes the server address into Settings for you, and reads the tweak's log if anything misbehaves.
Rather not run an SSH server on the iPad?

Reasonable. Skip this whole step — everything still works. You will install the tweak from Cydia yourself and type the server address into Settings → iOS 6 Siri Remastered by hand, which is about six taps. If you do install OpenSSH, you can always remove it from Cydia afterwards.

Step 4Give it the prompt

Paste this into the assistant and answer its questions. It explains what it is about to do before each step, and asks before installing anything.

You are not expected to read this. It is written for the machine, and it is long because it spells out the things that otherwise go wrong. Press Copy and paste it — understanding it is optional.

Copy everything below — instructions for the assistant iOS 6 Siri Remastered
I want you to set up the self-hosted server for "iOS 6 Siri Remastered", a
jailbreak tweak that brings Siri back to life on a jailbroken iPhone or iPad
running iOS 6. Apple retired the service the original Siri called, so the
tweak points the device at a small server on the local network instead. You
are running on the machine that is going to BE that server.

HOW I WANT YOU TO WORK
- Tell me in plain language what you are about to do before each step.
- Ask me before you install anything or change a system setting.
- Never run sudo without first telling me what the command does.
- If something fails, show me the real error instead of guessing at it.
- Assume I have never used Docker or Ollama. Explain, briefly, as you go.

WHAT WILL BE INSTALLED
1. Docker, including Docker Compose. macOS and Windows: Docker Desktop.
   Linux: docker.io plus docker-compose-plugin, or Docker's own repository.
2. Ollama, from https://ollama.com. It runs the language model, directly on
   this machine, NOT inside a container.
3. One language model: gemma4:e4b. That is what this software was built and
   tested on, so use it unless I ask for something else.
4. The server stack itself: two Docker containers. "mynah-server" is a
   FastAPI service on port 8807, which is the one the iPad talks to.
   "mynah-stt" is faster-whisper, which turns recorded speech into text.

STEPS

1. Look at this machine and tell me what it is: operating system, processor,
   how much RAM, and whether there is an NVIDIA GPU. Say plainly whether it
   is comfortable for this. If it is a Raspberry Pi or has under 8 GB of
   RAM, warn me that answers will take tens of seconds, and only then offer
   a smaller Ollama model as an alternative -- otherwise do not raise the
   subject of model choice at all.

2. Install Docker if it is not already there. Verify with:
       docker --version
       docker compose version
   Both must print a version. If the second one fails, Compose is missing;
   install docker-compose-plugin (some distributions call it
   docker-compose-v2). On Linux, add me to the docker group so I am not
   typing sudo constantly, and tell me I must log out and back in for that
   to take effect.

3. Install Ollama if it is not already there, then pull the model and list
   what is installed:
       ollama pull gemma4:e4b
       (this model needs Ollama 0.20.0 or newer -- if the pull is refused,
        update Ollama first, then retry)
       ollama list

   ON LINUX ONLY, and this catches everyone: Ollama listens on 127.0.0.1 by
   default, and a Docker container counts as a different machine, so the
   server will start, look healthy, and fail every single question. Fix it
   one of two ways -- either set Environment="OLLAMA_HOST=0.0.0.0" under
   [Service] via `sudo systemctl edit ollama`, then daemon-reload and
   restart it; or leave Ollama alone and put this machine's own LAN address
   into OLLAMA_URL in step 5. On macOS and Windows nothing needs changing,
   because Docker Desktop already resolves host.docker.internal.

4. Download and unpack the server bundle, into a folder I choose (ask me
   where; somewhere durable, not /tmp):
       curl -O http://repo.theadipost.com/ios6-siri-server.tar.gz
       tar xzf ios6-siri-server.tar.gz
       cd ios6-siri-server
       cp .env.example .env
   That copy is required, not optional: docker compose reads .env and stops
   with an error if it is missing. Read .env.example before editing -- every
   setting is documented inline in it -- and note the docs/ folder beside it,
   which has the long-form SERVER-SETUP, API-KEYS and TROUBLESHOOTING
   documents if you need more detail than I have given you here.

5. Edit .env. It is plain NAME=value lines, no quotes, no spaces around the
   equals sign. This file is the ONLY place the model and the API keys are
   configured -- there are no such fields on the iPad. The settings that
   matter:
       MYNAH_MODEL=      gemma4:e4b, exactly as `ollama list` prints it
       OLLAMA_URL=       http://host.docker.internal:11434 is correct on
                         macOS and Windows; on Linux see step 3
       SERVER_PORT=      8807. Change it only if something already has that
                         port, and then tell me the new number
       DEFAULT_UNITS=    imperial (Fahrenheit, miles) or metric
       DEFAULT_CITY=     ask me for my town. This is what "the weather" and
                         "restaurants near me" mean when I do not name a
                         place. DEFAULT_LAT and DEFAULT_LON are optional and
                         make "near me" sharper
       PUBLIC_BASE=      LEAVE THIS BLANK. The server works out its own
                         address from the device's request. Setting it wrong
                         is a common way to break images
       TMDB_API_KEY=     optional. Unlocks the movies card
       WOLFRAM_APPID=    optional. Richer answer card, with plots
   Ask me once, in passing, whether I already have a TMDB key or a Wolfram
   AppID, and put them in if I do. Do not send me off to sign up for either:
   both are free but entirely optional, and six of the seven cards need no
   key at all. Either can be added months later with a restart.

6. Start it, and warn me first that the very first start downloads container
   images and a speech model and can take several minutes:
       ./start.sh
       ./start.sh logs

    Use ./start.sh, NOT `docker compose up -d`. On a machine with a usable
    NVIDIA GPU, plain compose silently leaves the GPU out: the speech
    container comes back on the processor, everything gets slower, and
    nothing reports a fault. start.sh detects the GPU and picks the right
    override. If you ever need to check which image is actually running:
       docker inspect -f '{{.Config.Image}}' mynah-stt
    A name ending -cuda is the GPU image; -cpu is not.
   Watch the log until it settles, then stop watching with Ctrl-C.

7. Verify, in this order, and show me the output of each one:
       curl http://localhost:8807/healthz
   Expect JSON containing "status":"ok". If it says "stt":"unreachable", the
   speech container is probably still downloading its model -- wait a few
   minutes and check `./start.sh logs`.

       curl "http://localhost:8807/debug?q=weather+in+London"
       curl "http://localhost:8807/debug?q=AAPL+stock"
   /debug runs the complete pipeline except transcription, from typed text.
   Each should return JSON with a "speak" line and a "cards" array. If these
   two work, then everything except the microphone works, and anything still
   wrong afterwards is between the iPad and this machine. This is the single
   most useful diagnostic on the whole server; remember it.

       curl http://localhost:8807/config
   Reports what the server actually believes it is configured with. Any keys
   come back redacted to their last four characters.

8. Find this machine's address on the local network and tell it to me
   clearly:
       macOS:   ipconfig getifaddr en0
       Linux:   hostname -I
       Windows: ipconfig, and read the IPv4 Address of the active adapter
   A local address starts 192.168., or 10., or 172.16 through 172.31.
   Anything starting 127. is the machine talking to itself and is wrong.
   Then make sure the port is reachable from outside this machine: if
   there is a firewall (ufw on Linux, the application firewall on macOS,
   Defender on Windows), open TCP 8807 and tell me exactly what you changed.

9. Make it survive a reboot, and tell me what you did:
       - Docker starting at boot or login (systemctl enable docker on Linux;
         the "start at login" setting in Docker Desktop otherwise)
       - Ollama the same (systemctl enable ollama on Linux)
       - Tell me to give this machine a static address or a DHCP reservation
         in my router, because if the number changes Siri stops working one
         morning for no visible reason
       - If this is a laptop, tell me how to stop it sleeping. Siri only
         works while this machine is awake.

10. THE DEVICE, IF I GIVE YOU ITS ADDRESS. Ask me whether I installed
    OpenSSH on the iPad and, if I did, ask for its address. With it you can
    finish the job instead of handing it back to me. Without it, skip to 11.

    An iOS 6 device runs an SSH server old enough that a current client
    refuses it outright, so you need these flags every time -- if you get
    "no matching host key type" or "no matching key exchange method", this
    is why, not a wrong password:
       ssh -o HostKeyAlgorithms=+ssh-rsa            -o PubkeyAcceptedAlgorithms=+ssh-rsa            -o KexAlgorithms=+diffie-hellman-group14-sha1            root@
    The login is root / alpine unless I tell you I changed it.

    With that working, do these and tell me the result of each:
    a. Check the tweak is installed:
          ls /Library/MobileSubstrate/DynamicLibraries/SiriRemastered.dylib
       If it is missing, tell me to add http://repo.theadipost.com/ as a
       source in Cydia and install "iOS 6 Siri Remastered", then re-check.
    b. Write the server address into the tweak's settings, so I do not have
       to type it on a touchscreen. The file is
          /var/mobile/Library/Preferences/com.aditya.ios6siriremastered.plist
       Set ServerURL to http://:8807 and Enabled
       to true. It is a binary plist; if the device has no usable plist
       editor, copy it to this computer, edit it here, copy it back, and
       chown it back to mobile:mobile. Do NOT invent other keys.
    c. Reload the daemon so it picks the settings up:
          killall assistantd
    d. Tell me to hold the Home button and ask "what is the weather".
       If something is wrong, create /var/mobile/Media/sr-log.txt on the
       device, have me ask again, then read that file -- the tweak writes
       what it did into it. Delete the file when we are finished.

11. Finish by printing, as the last thing you say, exactly what I have to
    type on the iPad. If you did step 10 there is nothing left to type and
    you should say so. Otherwise there is only one thing, and this is it:
        Settings -> iOS 6 Siri Remastered -> Server URL
        http://<this machine's LAN address>:8807
    Plain http://, never https:// -- an iOS 6 device cannot validate a
    modern certificate and https will never work. Include the port. No
    trailing slash. That is the whole of the device setup: the rest of that
    pane is an Enabled switch, my town and units, and a switch per card,
    all of which have sensible defaults.

THINGS TO KNOW WHILE YOU WORK
- The iPad and this machine must be on the SAME network. Guest Wi-Fi and
  separate VLANs exist specifically to stop devices reaching each other, and
  they will silently break this.
- Do not port-forward 8807 and do not expose this to the internet. The
  server has no authentication by design, and iOS 6 cannot encrypt anything,
  so everything between the device and the server is plain text on the LAN.
- The server has to be running for Siri to answer. There is no cloud
  fallback and no queue; if the machine is off, Siri is silent.
- The first question asked after any restart is slow, because the language
  model and the speech model both load into memory on first use. Ten seconds
  to a minute is normal and is not a fault.

There is a second prompt for when something is wrong later, on the prompts page.


Prefer to do it yourself? The full walkthrough — nine steps, every command explained

Before you startWhat you’ll need

Two machines, on the same Wi-Fi, and nothing else. No Apple ID, no developer account, and no API keys — the assistant is fully usable without signing up for anything.

The device

System
iOS 6.0 – 6.1.6, jailbroken
Must have
Siri (an iPhone 4S/5, iPad 3/4 or mini)
From Cydia
MobileSubstrate · PreferenceLoader
Tested on
iPad 4 · iOS 6.1.3

Both MobileSubstrate and PreferenceLoader are ordinary Cydia packages and are pulled in automatically when you install the tweak, so in practice you only need to check that Siri itself exists on the device. If Settings has no Siri switch, this device never had it and the tweak has nothing to hook.

Only one part of this is demanding: the language model. Everything else — the small web service, the speech container, the optional search engine — is light enough to be beside the point. So when you are judging a machine, judge it on whether it can hold and run the model. That is the whole question.

The computer

Anything that runs Docker
Mac · Linux · Windows with WSL2 · a NAS · a Raspberry Pi 4 or newer
Memory
4 GB minimum, 8 GB comfortable — the model wants ~3.5 GB of it
Disk
5 – 10 GB, mostly the language model
GPU
Optional, but it is what makes answers fast — and its memory is what lets you run a better model
Network
The same local network as the device
Same network, really

The device talks to the server directly, over your LAN. If the iPad is on the guest Wi-Fi and the computer is on the main one, nothing will ever connect — guest networks exist precisely to stop devices reaching each other. Same SSID, same VLAN, no client isolation.

It also has to be a machine that stays on. Siri works while the server is running and does not while it is not; a laptop that sleeps at night is a Siri that stops answering at night.

The one real requirementWhich computer runs it

This needs a computer in your house that is switched on when you talk to Siri. That is the whole requirement, and it is the part people miss.

It does not have to be a “server” in any formal sense. There is no domain name to buy, no static address, no port to forward, no account to open, and nothing to expose to the internet. A laptop sitting open on a desk is a perfectly good server for this. So is the desktop you already use, the NAS in the cupboard, or a £60 single-board computer on a shelf.

What the machine has to be is on, awake, and on the same Wi-Fi as the iPad at the moment you hold the home button. Nothing else about it matters much — and the difference between the options below is only how long you wait for an answer.

The candidates

Excellent, and the least work

A Mac with Apple Silicon — M1, M2, M3 or M4

The easiest good answer. Ollama uses the Mac's own GPU with no configuration whatsoever — no drivers, no toolkit, no override file — and the tested model is genuinely snappy on one: once it is warm, the answer starts arriving about as fast as you can put the iPad down. Even the base 8 GB machines are fine. Docker Desktop's host.docker.internal works out of the box, so the Linux networking footnote further down never applies to you.

The one catch is sleep. A Mac that has gone to sleep is a server that is not answering. If it is a laptop, keep it plugged in and set System Settings → Lock Screen so the display can sleep but the machine does not, or simply leave caffeinate -s running in a Terminal window for as long as you want Siri available. On a Mac mini or a desktop, turn off automatic sleep in Energy and forget about it.

Transcription still runs on the processor rather than the Mac's GPU — the speech container cannot reach Apple's GPU — but on Apple Silicon that is a second or two for a short question, which nobody notices.

The best it gets

A homelab box, or any PC with an NVIDIA GPU

If you already have a machine with a real graphics card in it, put the server there. The GPU makes transcription close to instant with the override file in step 5, and, more importantly, the card's memory is what lets you run a model several times larger than a laptop can hold. That is the difference between an assistant that picks the right card and one that also talks like a person.

A homelab machine is also already on all the time, which is the other half of the problem solved.

Depends entirely on which NAS

A NAS that runs Docker

Tempting, because it is already on all the time and already runs containers. Whether it works comes down to what is inside it, and NAS boxes vary far more than their price suggests.

A NAS with a modern Intel or AMD processor and 8 GB or more is a genuinely good home for the small web service, the speech container and the search engine. Those parts are light. The language model is the part that will hurt: it wants around 3.5 GB to itself, and a NAS is usually already several gigabytes into its RAM running everything else you put on it. Check what is actually free before you count on it.

A NAS with an ARM processor — common in the cheaper models — will run the containers and then be painfully slow at the model, in the same way a Raspberry Pi is, and usually without the option of adding memory.

A reasonable split, if you have both: let the NAS keep doing what it is good at, and put the model on whichever machine in the house has the most memory or a graphics card.

Cheap, silent, and slow — honestly slow

A Raspberry Pi 4 or 5, with 8 GB

This works, and there is a real appeal to it: a few watts, no fan, no noise, and it can live behind the router forever. But be clear-eyed about the speed. A Pi has no GPU worth using here, so both the transcription and the language model run on its processor.

In practice, on a Pi 5 with 8 GB, expect the whole round trip — transcribe, think, fetch the data, answer — to take somewhere in the region of half a minute for a short question, and longer for anything the model has to write a paragraph about. On a Pi 4 it is slower again, and a smaller model is the only lever you have; it will then misunderstand you more often. This is the one machine where it is worth swapping the model.

That is fine for “what’s the weather” or “what’s the score”, where you ask and then go and do something else. It is tiring for conversation. If you go this route, use a 64-bit OS, boot from an SSD rather than a microSD card, and keep the 8 GB model — 4 GB will swap and turn seconds into minutes.

Already on, which counts for a lot

A NAS that runs Docker

A Synology, UGREEN, QNAP, TrueNAS or Unraid box is an appealing home for this, because the one thing it definitely is, is switched on. Anything with a normal Intel or AMD processor and 8 GB of memory behaves like the desktop row in the table below. Check two things first: that its Docker package (Container Manager, Container Station, or plain docker compose over SSH) can run a Compose file of your own, and that the processor is not one of the low-end ARM chips some cheaper units ship with — those will run the containers and then crawl.

Ollama does not have to live on the same box. If the NAS is modest but there is a desktop elsewhere in the house, run the server on the NAS and point OLLAMA_URL at the desktop's address instead.

Free, if it is in the cupboard already

Any spare PC or laptop running Linux

A 2015 desktop with 8 GB and no graphics card is a completely respectable machine for this, and an old laptop has the pleasant property of a built-in battery for power cuts. Install a plain Debian or Ubuntu, follow the steps below, and read the Linux notes carefully — the OLLAMA_HOST footnote in step 2 is the one thing that catches everybody. Close the lid and it will suspend unless you tell it not to.

What the wait actually feels like

All of these assume the tested model and a warm start. The very first question after a start is always slower, on every machine, for the reason explained in step 5. Treat them as the shape of the thing rather than a benchmark.

MachineWhat asking a question feels like
Mac with Apple Silicon A couple of seconds, most of it transcription. Close to how Siri felt when it worked.
PC with an NVIDIA GPU The fastest of the lot, and the only place a much larger model is worth running.
Desktop or NAS, x86, no GPU, 8 GB Several seconds. Unremarkable, in the good sense.
Raspberry Pi 5, 8 GB Around half a minute for a short answer, and you will notice it. Fine for the weather; tiring for chat.
Raspberry Pi 4, 8 GB Slower again, and a smaller model gets things wrong more often. It works. That is the honest claim.
You can change your mind about all of this

None of it is a commitment. The server is a folder with a docker-compose.yml in it; moving it to a different machine is copying the folder, running docker compose up -d there, and typing the new address into Settings on the iPad. Start on whatever you have.

The shape of itHow the pieces fit

You hold the home button and ask a question, exactly as you always did. The tweak records what you said and posts the audio to your server. The server turns it into text, works out what you wanted, fetches the live data from a public source, and sends back JSON. The device draws that JSON with Apple's own Siri card code — nothing here is a reskin.

The deviceRecords the utterance, draws the native cards
——→
Your serverTwo Docker containers, plus Ollama on the host machine
——→
Public dataWeather, scores, quotes, places — fetched by the server

Plain HTTP over your LAN on the left; ordinary HTTPS to the open internet on the right. Apple is nowhere in the diagram.

Three programs do the work, and you install them in that order:

  • Docker — runs the two containers so you never install Python or model runtimes by hand.
  • Ollama — runs the language model, on the machine itself rather than in a container.
  • The server stackmynah-server, the service the device talks to on port 8807, and mynah-stt, which turns speech into text.

Step 01Install Docker

Docker packages the server and its dependencies into containers, so starting it is one command instead of an afternoon. Docker Compose is the part that starts several containers together from a single file; on current versions it ships with Docker itself.

macOS and Windows

Install Docker Desktop from docker.com. On Windows, accept the WSL2 backend when the installer offers it. Open the app once after installing, and turn on Start Docker Desktop when you log in in its settings — otherwise the server does not come back after a reboot.

Linux (Debian or Ubuntu)

The quickest route is your distribution's own packages:

sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker

Then add yourself to the docker group so you are not typing sudo in front of everything, and log out and back in for it to take:

sudo usermod -aG docker "$USER"

Package names wander between distributions: if apt cannot find docker-compose-plugin, yours may call it docker-compose-v2. If it has neither, or its Docker is ancient, install Docker Engine from Docker's own repository instead — those steps are in docs/SERVER-SETUP.md inside the bundle you download in step 3.

Either way, check it

docker --version
docker compose version

Both must print a version number. If the first works and the second says compose is not a docker command, you have Docker without Compose — install docker-compose-plugin, or docker-compose-v2 if that is what your distribution ships.

Step 02Install Ollama, pull a model

Ollama is what actually runs the language model on your machine. It reads the question, decides which kind of answer it is — weather, a score, a ticker, a restaurant — pulls the details out, and phrases the sentence Siri speaks. Install it from ollama.com: there is a normal installer for macOS and Windows, and a one-line script for Linux.

Then pull the model. This is the one iOS 6 Siri Remastered was built and tested on, and there is no decision to make here:

ollama pull gemma4:e4b

Ollama 0.20.0 or newer is required for this model — the tag will refuse to pull on anything older. If it complains, update Ollama and try again. Other Ollama models work too, but gemma4:e4b is the one this was built and tested against.

When it finishes, check that it landed — the name in this list, tag and all, is the name the server wants:

ollama list

Any other Ollama model works too, if your machine suits a different one: pull it, put its name in MYNAH_MODEL, restart, done. Nothing else in the setup depends on which one you chose. But you do not need to think about it now, and the tested one is the one to start with.

Linux: the one that catches everyone

Ollama listens on 127.0.0.1 by default, which means “this machine only”. A Docker container counts as a different machine, so the server will start, look healthy, and fail every single question. Tell Ollama to listen on all interfaces:

sudo systemctl edit ollama.service

Add these two lines in the editor that opens, save, and restart:

[Service]
Environment="OLLAMA_HOST=0.0.0.0"
sudo systemctl daemon-reload
sudo systemctl restart ollama

Not using systemd? Start it by hand with OLLAMA_HOST=0.0.0.0 ollama serve. On macOS and Windows none of this applies: Docker Desktop resolves host.docker.internal to the machine hosting the container, which is what the shipped configuration already points at.

Step 03Get the server

The server is a small bundle: a docker-compose.yml, the service source in orchestrator/, an .env.example documenting every setting, and the reference documentation. Download it onto the machine that will run it and unpack it:

curl -O http://repo.theadipost.com/ios6-siri-server.tar.gz
tar xzf ios6-siri-server.tar.gz
cd ios6-siri-server

Everything from here on is run from inside that folder, because that is where docker-compose.yml lives and every docker compose command looks for it in the current directory.

Now make your own configuration file from the example:

cp .env.example .env
Do not skip that copy

The compose file reads .env, so without it docker compose up stops with an error before anything starts. Copying it is enough — the file works unedited, and every value in it is optional.

Step 04Configure it

Open .env in any text editor. It is a plain list of NAME=value lines — no quotes, no spaces around the = — and a # at the start of a line comments it out. Two settings are worth changing on the first pass; the rest have working defaults.

The two that matter

# The model you pulled in step 2, exactly as `ollama list` prints it.
MYNAH_MODEL=gemma4:e4b

# Where Ollama is. Correct as shipped on macOS and Windows.
# On Linux, this works once Ollama listens on 0.0.0.0 (see step 2);
# if you would rather not touch systemd, put the machine's own LAN
# address here instead: OLLAMA_URL=http://192.168.1.50:11434
OLLAMA_URL=http://host.docker.internal:11434

Where you are

This is the fallback for questions with no place in them — “what’s the weather”, “restaurants near me”. Naming a place in the question always wins over it, and so does the Location field on the device. Coordinates are optional but make “near me” meaningfully sharper. All three ship commented out:

DEFAULT_CITY=Springfield, IL
DEFAULT_LAT=39.7817
DEFAULT_LON=-89.6501

# imperial (Fahrenheit, miles) or metric (Celsius, kilometres)
DEFAULT_UNITS=imperial

Leave them out entirely and nothing breaks — Siri asks you to name a place rather than guessing at one.

Optional keys, if you have them

Both are free, both are covered in step 9, and both can be added months later without reinstalling anything:

TMDB_API_KEY=4f1c2b9a7d3e5f8091a2b3c4d5e6f7a8
WOLFRAM_APPID=XXXXXX-XXXXXXXXXX
SEARXNG_URL=http://host.docker.internal:8088

The rest

SettingDefaultWhat it is for
SERVER_PORT8807 The port the device connects to. Change it only if something else on the machine already has 8807 — and then use the new number in the device’s Settings too.
PUBLIC_BASEblank Leave it blank. The server learns its own address from the device’s request, so images work without you typing an IP anywhere. Set it only behind a reverse proxy.
WHISPER_MODELfaster-distil-whisper-small.en The speech model. English-only, small and accurate for one-sentence commands. Bigger ones are slower and rarely better here.
WHISPER_COMPUTE_TYPEint8 int8 on a processor, float16 on an NVIDIA GPU. The GPU override file sets this for you.
WHISPER_TTL300 Seconds of quiet before the speech model unloads to give the memory back. It reloads on the next question.
MYNAH_RESTAURANT_RADIUS2000 How far to look for restaurants, in metres. Raise it in the countryside, lower it in a dense city.
MYNAH_STAGE_BUDGET3.5 Seconds allowed for fetching a card’s images before the card is sent anyway. Slow images keep downloading and are ready next time.
MYNAH_IMG_CACHE_MAX64 MB How large the poster and logo cache may grow before the oldest files are swept.
Changes need a restart

Editing .env does nothing on its own — the running container still holds the old values. Every edit is followed by ./start.sh, which is fast once the images exist.

Step 05Start it

From the folder with docker-compose.yml in it:

./start.sh

That is the one command to remember. It works out whether this machine has a graphics card it can actually use, starts the containers the right way for the answer, waits until the server is genuinely ready, and tells you if anything in your .env would have broken it.

Use ./start.sh, not docker compose up -d

Plain docker compose up -d does start the stack, and on a machine with no graphics card it is the same thing. On a machine with one it quietly leaves the GPU out — the speech container comes back on the processor, and everything you say takes a second or two longer than it should, with nothing anywhere reporting a fault.

It is not a hypothetical: it is how the author's own server spent a week running transcription on the CPU beside an idle graphics card. If you ever suspect it, ask Docker what it actually started:

docker inspect -f '{.Config.Image}' mynah-stt

A name ending -cuda is the GPU image; -cpu is not.

The first start is slow, and only the first

Docker has to download the images, build the server, and pull down the speech model — several minutes on a decent connection. Later starts take a couple of seconds. Then the first question you ask is slow again, because the language model and the speech model both load into memory on first use. That one can take anywhere from ten seconds to a minute. It is not broken; it is warming up.

Watch what it is doing. -f follows the log as it happens, and Ctrl-C stops watching without stopping the server:

docker compose logs -f mynah-server

The handful of commands worth remembering:

./start.sh                             # start, or restart after a change
./start.sh ps                          # is everything running?
./start.sh logs                        # follow the log
./start.sh down                        # stop everything
./start.sh --build                     # after editing the server itself

Every one of those is a thin wrapper over the equivalent docker compose command, so nothing is hidden from you — but the wrapper keeps the graphics-card decision consistent, which is the part that is easy to get silently wrong.

Both containers are declared restart: unless-stopped, so Docker brings them back after a crash and after a reboot — as long as Docker itself starts at boot, and Ollama does too (sudo systemctl enable ollama on Linux; the installer handles it elsewhere).

If the machine has an NVIDIA GPU

Everything runs on the processor by default, and that is a perfectly normal way to run it: transcribing a three-second question takes one to three seconds on a modern CPU. A GPU makes that part close to instant, and changes nothing else — the language model is Ollama's business, not the containers'.

With an NVIDIA card, its drivers, and the NVIDIA Container Toolkit installed, add the GPU override file to the command:

docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d

That swaps in the CUDA image and switches the compute type to float16. Everything else is inherited unchanged. AMD cards and Apple Silicon GPUs are not supported for transcription; those machines use the processor, which works.

Step 06Check that it works

Before involving the iPad at all, prove the server is healthy. On the server machine:

curl http://localhost:8807/healthz

You want something like this:

{"status":"ok","stt":"Systran/faster-distil-whisper-small.en",
 "llm":"gemma4:e4b","search":"duckduckgo","movies":"needs TMDB_API_KEY"}

"stt":"unreachable" means the speech container is still downloading its model or failed to start — give it a few minutes, then read docker compose logs -f mynah-stt.

Now the part that saves the most time. /debug takes a typed question and runs it through the entire pipeline apart from transcription, so it tests the model, the intent routing, the data sources and the card building in one go — no device, no microphone:

curl "http://localhost:8807/debug?q=weather+in+London"
curl "http://localhost:8807/debug?q=AAPL+stock"
curl "http://localhost:8807/debug?q=who+won+the+Yankees+game+last+night"

Each should return JSON with a speak line and a cards array. If these work, everything except the microphone works, and any problem left is on the network between the two machines.

You can also ask the server what configuration it is actually using. Keys come back redacted to their last four characters, so you can confirm you typed one correctly without it being printed:

curl http://localhost:8807/config

Step 07Find your LAN address

The device needs the server machine's address on your own network. On macOS, where en0 is usually Wi-Fi:

ipconfig getifaddr en0

On Linux — this may print several, and you want the one on your LAN:

hostname -I

On Windows, look for the “IPv4 Address” line under your active adapter:

ipconfig

A local address almost always begins 192.168. or 10., and occasionally 172.16. through 172.31.. Anything starting 127. is the machine talking to itself and will never work from the iPad.

Confirm it from a different computer on the same Wi-Fi, which is the same trip the device will make:

curl http://192.168.1.50:8807/healthz

If that fails while localhost works, a firewall is in the way. On Linux with ufw: sudo ufw allow 8807/tcp. On macOS and Windows, allow the incoming connection when the system asks — and if you dismissed that prompt weeks ago, find it in the firewall settings.

Pin the address while you are here

Home routers hand out addresses that change after a reboot. Give the server machine a static address, or a DHCP reservation in your router — otherwise Siri stops working one morning for no visible reason, and the reason is that the number moved.

Step 08Set up the device

Now the iPad. In Cydia, go to Sources → Edit → Add, enter the repository address, then find iOS 6 Siri Remastered under Tweaks and install it:

http://repo.theadipost.com/

Cydia will pull in MobileSubstrate and PreferenceLoader if they are not already there. When it finishes, respring.

Open Settings. There is a new row, iOS 6 Siri Remastered, with everything the tweak knows about the world inside it.

Server

FieldWhat to put in it
Server URL Your machine’s address from step 7, with the port: http://192.168.1.50:8807. Plain http://, never https://. Include the port. No trailing slash. A bare 192.168.1.50:8807 is accepted too — the tweak adds the http:// for you.
Enabled The master switch. Turn it off and Siri goes back to being stock iOS 6 Siri, which is to say it stops working — but it stops working the way Apple left it, with nothing hooked. Note that the tweak stays completely inert until a Server URL is set, whatever this switch says.

Location and Units

Location is a place name, not a GPS fix — Springfield, IL or a neighbourhood is plenty. It is what “the weather” and “restaurants near me” mean when you do not name a place, and it overrides the server’s DEFAULT_CITY. Naming a place in the question beats both.

Units picks Fahrenheit and miles, or Celsius and kilometres, and is sent with every request.

Cards

Six switches, one per kind of result card: Answers & Maths, Weather, Sports, Stocks, Movies and Restaurants. Turning one off does not turn the subject off — Siri still answers out loud, just without drawing the card. It is the switch to reach for if a particular card ever misbehaves on your device.

They ship on. If the Restaurants switch reads Off before you have touched it, flip it on and back to where you want it, so the setting is written explicitly.

Web Cards is a seventh switch and it ships off. It uses a web view Apple built into the iOS 6 Siri card and never shipped a use for, which makes it the newest and least-proven thing here — so it is opt-in. With it on, ask “are you working?” and the status comes back drawn in it.

Actions

Siri can create a note in the Notes app. Create Notes ships off; turn it on and “make a note to buy milk” writes one. Ask without saying what it should say and it asks you, then listens for the answer.

It says it saved a note only after the Notes app confirms it really did. If the write fails, it says that instead.

Everything else Siri could once do to the device — timers, alarms, reminders, messages, calls, playing music, controlling lights — it cannot do, and it says so plainly rather than pretending. That is deliberate, not an oversight: an assistant that says “I’ve set that timer” without setting one is worse than one that admits it cannot.

API Keys

There are no key fields on the device, and no model picker. Both live on the server, in its .env file, and nowhere else.

The last group in the pane is a note rather than a form, and it says so. Two free keys unlock two things — TMDB the movies marquee, and WolframAlpha the rich answer card with its plots and tables. Every other card, plus general questions and maths, needs no key at all (see below). Both are covered in step 9, and both can be added months later without touching the device.

WhatSet it on the server asUnlocks
TMDB keyTMDB_API_KEYThe movies card
Wolfram AppIDWOLFRAM_APPIDAnswer card pods and plots
Language modelMYNAH_MODELWhich model Ollama runs. gemma4:e4b is the tested one

There is a good reason it is arranged this way, beyond keeping the pane short. iOS 6 cannot speak modern TLS, so anything typed on the device would cross your network in plain text and then sit in a plist on the iPad. In .env a key never leaves the machine it is on. The pane also makes no network calls of any kind, which is why it opens instantly on a 2012 device instead of waiting on your LAN.

Step 09Optional extras

You are finished: the device works, and everything below is a genuine extra rather than a missing piece. Three of them, none required, all of them addable months from now without reinstalling anything — each is an edit to .env and a docker compose up -d.

SearXNG — better web answers

SearXNG is a metasearch engine you host yourself: it queries the public engines on your behalf and returns the results with none of the tracking. The server uses it for open questions if you point it at one, and falls back to DuckDuckGo if you do not — so this is a genuine upgrade, not a requirement.

Put this in its own folder, in a file called docker-compose.yml:

services:
  searxng:
    image: searxng/searxng:latest
    container_name: searxng
    restart: unless-stopped
    ports:
      - "8088:8080"
    volumes:
      - ./searxng:/etc/searxng

Start it once with docker compose up -d so it writes its configuration, then open searxng/settings.yml and make sure the JSON format is enabled — it is off by default, and without it the server gets HTML it cannot read:

search:
  formats:
    - html
    - json

Restart it (docker compose restart), then tell the Siri server where it is, in .env, and restart that too:

SEARXNG_URL=http://host.docker.internal:8088

curl http://localhost:8807/healthz should now report "search":"searxng" instead of duckduckgo.

TMDB — the movies card

This is the only card gated behind a key, and the key is free. Without it, “what’s playing” still gets answered — as a plain web answer instead of the “Now Playing” marquee with poster art.

  1. Sign up at themoviedb.org/signup and verify your email; they will not issue a key until you do.
  2. Go to Settings → API, request a key, choose Developer, and fill in the form — “personal home voice assistant” and http://localhost are perfectly acceptable answers.
  3. Copy the value labelled API Key (v3 auth), a 32-character string. Not the longer “API Read Access Token”.
  4. Put it in .env as TMDB_API_KEY= and run docker compose up -d.

WolframAlpha — the rich answer card

A free AppID allows 2000 non-commercial queries a month, which ordinary use never approaches: the server only consults Wolfram for genuine computation and knowledge questions, and caches repeats.

  1. Sign up at developer.wolframalpha.com, go to My Apps, and click Get an AppID.
  2. Put the AppID in .env as WOLFRAM_APPID= and run docker compose up -d.

What it buys you is the good version of the answer card. Wolfram returns its answer as image “pods”, which Siri draws in full: ask for the integral of x squared and you get the typeset integral and a plot of the curve; ask for the population of Japan and you get the figure with its historical chart and age pyramid. This also sidesteps a limit of the card itself, where a line of text is drawn on one row and truncated with an ellipsis — an image is never truncated.

Without it, maths, unit conversions and definitions are still computed on your own machine, and factual questions still come back from web search. You get sentences instead of plots.

What works with no keys at all

Worth saying plainly, because it is unusual: you can install this, run the server, and never sign up for anything. Six of the seven cards need no key, ever.

CardWhere the data comes fromKey
WeatherOpen-Meteo — current conditions, seven-day and hourlyNone
SportsESPN’s public JSON — live and final scores, records, per-period line scores, team logosNone
AthleteESPN — headshot, number, position, birthplace, height and weight, a four-cell stat gridNone
StocksYahoo Finance — price, change, day range, market cap, 52-week range, volume, P/ENone
RestaurantsOpenStreetMap via Overpass and Nominatim; photos from Wikidata and WikimediaNone
Answers & MathsYour SearXNG or DuckDuckGo, plus maths, unit conversion and definitions computed locallyNone
MoviesTMDB — now playing, genres, posters, runtime, scoreTMDB

General conversation and arithmetic need nothing either: those are the local model and the server’s own calculator.

What it cannot do

Some things are missing because no free source for them exists, and a card that invents them would be worse than a card that omits them.

Only if you need itReaching the device from your computer

A normal installation needs none of this. Add the source in Cydia, install the tweak, type your server address into Settings. Done.

That is worth saying first, because the rest of this section is a list of developer tools and it would be easy to conclude the tweak is harder to install than it is. It is not. Everything on the device happens in Cydia and in Settings, with your fingers, and most people will never need what follows.

But two things change that. If you want to hand the setup to an AI assistant (step 2), or if something goes wrong and you need to see what the device is actually doing, then the AI — or you — needs a way to reach the iPad from a computer. Sorting that out takes ten minutes and is worth doing before you need it, because the moment you need it is the moment the device is misbehaving.

The two Cydia packages the tweak sits on

Both are declared as dependencies, so Cydia installs them for you without asking and you would normally never think about them. It is still worth knowing what they are:

SSH, over Wi-Fi

Install OpenSSH from Cydia — it is in the default sources, under Networking. It starts by itself and keeps running. That gives you a command line on the iPad from any computer on the same network.

The login is root / alpine, which is the same on every jailbroken device. passwd changes it if you are on a network you do not control.

To find the device's address, on the iPad open Settings → Wi-Fi, tap the blue arrow beside the network you are on, and read IP Address. It will look like 192.168.1.42. That number can change when the router reboots, exactly as the server's can, so pin it in the router if you find yourself looking it up often.

A modern computer will refuse an iOS 6 device

The SSH server on iOS 6 is old enough that current versions of ssh will not talk to it at all. You get no matching host key type found, or Unable to negotiate, and it looks like the device is unreachable when it is simply speaking an older dialect. Ask for the old algorithms explicitly:

ssh -o HostKeyAlgorithms=+ssh-rsa     -o PubkeyAcceptedAlgorithms=+ssh-rsa     -o KexAlgorithms=+diffie-hellman-group14-sha1     [email protected]

If it still refuses, add -o Ciphers=+aes128-cbc,3des-cbc. Rather than typing that every time, put it in ~/.ssh/config on the computer and then just say ssh ipad:

Host ipad
  HostName 192.168.1.42
  User root
  HostKeyAlgorithms +ssh-rsa
  PubkeyAcceptedAlgorithms +ssh-rsa
  KexAlgorithms +diffie-hellman-group14-sha1

Or over the cable, with libimobiledevice

If you would rather not run an SSH server on the device, or the Wi-Fi is the thing that is broken, the USB cable works. libimobiledevice is a set of open-source tools that speak to an iOS device over USB, and the log reader in particular needs nothing installed on the device at all:

brew install libimobiledevice            # macOS
sudo apt install libimobiledevice-utils  # Debian / Ubuntu

Three of its tools matter here:

Editing files on the device itself

If you have no computer to hand, install iFile from Cydia. It is a full file manager with a plist and text editor built in, so you can read the tweak's settings file or move a file out of the way without SSH at all. Its modern successor is Filza, which you will see recommended everywhere — but Filza wants a newer iOS than this, so on iOS 6 it is iFile you want.

When something is wrong

Start here. Almost everything that goes wrong is one of the six things below, and five of them are the network. If none of it fits, or you want to hand the problem to an assistant, the technical page documents the whole machine in enough detail to debug it properly.

Siri says it cannot connect, or spins forever

Nearly always the device cannot reach the server. In order:

  1. Is the server up? curl http://localhost:8807/healthz on the server machine.
  2. Is it up from the network? curl http://192.168.1.50:8807/healthz from another computer. If this fails and the last one worked, it is the firewall or the address.
  3. Is the Server URL right, character by character? Plain http://, the current LAN address, the port, no trailing slash.
  4. Are both on the same network? Guest Wi-Fi and separate VLANs block exactly this, on purpose.
  5. Has the machine’s address changed since you typed it? Check, and then reserve it in the router.
  6. Watch docker compose logs -f mynah-server while you ask something. If nothing appears at all, the request never arrived and the problem is the network, not the server.

Siri answers out loud, but no card appears

  1. Check that card’s switch in Settings → iOS 6 Siri Remastered → Cards.
  2. Movies specifically needs the TMDB key. curl http://192.168.1.50:8807/config reports "tmdb_api_key": "unset" if that is the answer.
  3. Ask the same thing of /debug and read the JSON. An empty cards array means the server decided there was no card to draw, and the spoken line usually explains why — no restaurants of that cuisine nearby, a sport that is not covered, or simple conversation, which has nothing to display.

Posters and logos come through blank

iOS 6 predates the certificate chains the modern web uses, so the device physically cannot load an https:// image. Nothing on the device can fix that. So the server does the loading instead: it fetches every poster, logo and headshot itself, resizes it to something an A6X decodes quickly, caches it on disk, and hands the device a plain http:// address pointing back at your own machine.

This is also the reason the Server URL must be plain http:// — the images are served from that same address, and an https:// one would fail for the pictures exactly as it fails for everything else.

A blank image therefore means the device could not reach the server’s image address. Paste one into a browser on another computer — they look like http://192.168.1.50:8807/img/3f2a….jpg. If it does not load there either, this is the connection problem above. If the address it was given contains the wrong host, set PUBLIC_BASE=http://192.168.1.50:8807 in .env and restart. And give a brand-new image a moment: the first fetch is a download and a resize, every one after it is a cache hit.

The first question takes forever

The language model has to be read into memory before it can answer, and the speech model unloads itself after a few quiet minutes to give the memory back. The first question after a restart, or after a lull, pays for both. Ten to sixty seconds is normal, depending on the model and the machine.

If it stays slow, the model is probably too big for the machine. Check with free -h on Linux while a question is running: if swap is climbing, the model does not fit and everything is being paged to disk, which turns seconds into minutes. Pull a smaller model, set MYNAH_MODEL to it, and restart.

It mishears you

  1. Say a short, complete sentence, with a beat of silence before and after. Trailing off is the commonest cause of a mangled transcript.
  2. Turn the television off. A decade-old microphone plus background noise costs real accuracy.
  3. Names are the hard part — teams, places, restaurants. Context helps: “what is the score in the Yankees game” transcribes more reliably than “Yankees score”.
  4. See what it actually heard. Every request logs the transcript: docker compose logs -f mynah-server, and the lines beginning [mynah] show both what was heard and which intent was chosen — which tells you whether a wrong answer came from mishearing or from misunderstanding.
  5. Still wrong? Try a larger speech model by setting WHISPER_MODEL=Systran/faster-whisper-small in .env. It is slower, and on short commands it is often no better.

Every question fails, or gets a vague answer

That shape of failure is usually Ollama. Confirm a model is actually downloaded with ollama list, and then confirm the container can reach it — this asks the server, from inside its own container, to call Ollama and report the HTTP status:

docker compose exec mynah-server python -c "import httpx,os;print(httpx.get(os.environ.get('OLLAMA_URL','http://host.docker.internal:11434')+'/api/tags',timeout=5).status_code)"

200 means the connection is good. Anything else, on Linux, is the OLLAMA_HOST=0.0.0.0 problem from step 2.

Reading the logs, and starting over

docker compose logs -f mynah-server           # follow live, Ctrl-C to stop
docker compose logs --tail 200 mynah-server   # the last 200 lines
docker compose ps                             # running? or restarting in a loop?

A container that says restarting is crashing and coming back; the error is in the log just before each restart. If things are in an unclear state, docker compose down then docker compose up -d --build is safe and keeps the downloaded speech model and the image cache. Adding -v to down throws those away too — nothing is lost permanently, but several gigabytes come down again.

Turning it off

Settings → iOS 6 Siri Remastered → Enabled, off. Siri reverts to stock behaviour immediately, on the next question, with no respring. Clearing the Server URL does the same thing. To remove it altogether, uninstall the package in Cydia; your settings are left behind, so reinstalling picks up where you left off.

If it is stranger than that

There is a second page, and it is the interesting one. It documents the whole thing properly: what happens between the home button and the card on the screen, every file the package puts on the device, exactly which functions the tweak hooks and why, every endpoint the server answers, how to read the device's log line by line, what each failure mode actually means, and what to do in the worst case — a card that takes SpringBoard down with it.

It is written to be pasted, whole, into an AI assistant, along with whatever went wrong. Give it that page and it can reason about this system instead of guessing at it.

It is also simply worth reading if you want to know how a 2012 assistant gets talked into answering from a machine in your kitchen.

Read the technical page →

Where your words go

The recording of your voice goes to one place: the server on your own network. It is transcribed there, by a model on your own disk. Nothing is sent to Apple — the tweak never opens a connection to Apple's assistant service at all, which is the reason it still works when that service does not.

What does leave your network is the lookup each answer needs, made by the server, on your behalf, and nothing more:

The language model is Ollama, on your machine. The speech model is in a container, on your machine. Neither ever contacts anyone.

One rule

Keep the server on your LAN. It has no authentication, by design, and iOS 6 cannot encrypt anything, so everything between the device and the server is plain text. Do not port-forward 8807, and do not run this on a machine with a public address.

What iOS 6 Siri Remastered does How it works, in full
Adi's Repohttp://repo.theadipost.com/
The reference documentation ships inside the server bundle: docs/SERVER-SETUP.md, docs/API-KEYS.md and docs/TROUBLESHOOTING.md. This page is the short way through the same ground.
Free, with no ads and nothing phoning home. If it earned a coffee: venmo.com/u/Aditya-Sreedhar