For Claude, Hermes, or any assistant that can run commands
Setting this up is mostly Docker, a model download and one address typed into Settings. If you would rather not do that by hand, the two prompts below hand the whole job to an AI assistant running on the computer that is going to be your server. Each one is self-contained — select the whole box, copy it, paste it, and answer its questions.
Which assistant. Anything that can run terminal commands on the machine works: Claude Code, Hermes, Gemini CLI, Codex, Continue, or a local model with shell access. What matters is that it is running on the computer that will be the server — not on your phone, and not in a browser tab with no access to the machine. A chat window with no terminal can still explain the steps, but it cannot do them for you.
These prompts tell it to ask before changing anything. That is deliberate. You should still read what it proposes.
Use this on a machine that will stay on and stay home: a spare Mac or PC, a home server, a Raspberry Pi 5. It needs Docker and about 6 GB free. The assistant will install what is missing, fetch the server bundle, start it, and tell you the address to type into the tweak's Settings on your device.
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.
Use this once it is installed and behaving oddly. It tells the assistant to gather evidence before it changes anything — the server's own health endpoint, and, if that is not enough, the log the tweak can write on the device itself.
Something is wrong with my "iOS 6 Siri Remastered" setup and I would like your
help fixing it. This is a jailbreak tweak on an iPhone or iPad running iOS 6
that makes the built-in Siri answer from a small server I run myself, instead
of Apple's retired service. There are two halves and either can be at fault:
the SERVER (Docker containers on a computer in my house) and the DEVICE (the
tweak, inside a daemon called assistantd).
HOW I WANT YOU TO WORK
- Diagnose before you change anything. Gather the evidence below FIRST.
- Tell me what each command does before you run it, in plain language.
- Never run sudo, and never edit a file, without telling me why.
- Show me real error text. Do not summarise an error into a guess.
- If the evidence does not identify the cause, say so and ask for more,
rather than changing settings speculatively.
THE FASTEST SINGLE CHECK
Run this against my server (ask me for its address if you do not have it):
curl -s http://SERVER-ADDRESS:8807/healthz
It always answers 200, even when something is broken, and the body is the
diagnosis. Read it carefully:
"serving": true the server can answer a spoken question right now
"problems": [...] anything listed here is DOWN and is your first suspect
"warnings": [...] something is working WRONGLY rather than not working
"stt".heard this must be "" (empty). The check transcribes a silent
clip, so empty is the correct answer. If it says "you",
voice filtering is off and the server will answer
questions nobody asked, triggered by background noise.
"stt".ms / "llm".ms round-trip times. Speech over ~2000ms usually means the
speech container is on the CPU instead of the GPU.
"public_base" the address the device is told to fetch card images
from. If this is localhost or a 172.x address, images
will be blank on the device.
READING THE DEVICE'S OWN LOG
An iOS 6 device has no readable system log, so the tweak writes its own, but
only when a marker file exists. To capture a fault:
1. Create an empty file on the device at /var/mobile/Media/sr-log.txt
(over SSH, or with iFile / Filza).
2. Reproduce the problem by asking Siri the thing that misbehaves.
3. Retrieve that file and read it. It records each request, the transcript
the server heard, which card types came back, and any error.
4. Delete the file when finished; that turns logging back off.
Every line is timestamped. "record START"/"record STOP" bracket one question.
WHAT THE SPOKEN ERRORS MEAN
The tweak deliberately says different things for different faults:
"I can't reach my speech service" the speech container is not running
"My speech service isn't working" it is running but failing to decode
"I can't reach my language model" Ollama is unreachable or has no model
"I couldn't reach the server" the device cannot reach the server at
all: wrong address, wrong port, or a
firewall. Check the address in
Settings, and that it starts http://
and NOT https://.
"Sorry, I didn't catch that" no speech was heard. Normal for a
silent recording; suspicious if it
happens while you are speaking.
THINGS THAT ARE NOT FAULTS
- It refuses to set timers, send messages, make calls, play music or control
smart-home devices, and says so plainly. That is correct: it genuinely
cannot do those things, and it is built never to claim otherwise.
- The first question after the server has been idle is slower, because the
model has to be loaded back into memory.
- It answers questions about itself honestly, including which model it runs.
SETTINGS ON THE DEVICE
Settings -> iOS 6 Siri Remastered. Server URL must be http:// with the port,
for example http://192.168.1.10:8807 . Each card type can be switched off
independently, which is the first thing to try if one specific kind of answer
misbehaves while everything else is fine. Two switches ship OFF because they
are newer: "Web Cards" and "Create Notes".
WHAT I WOULD LIKE FROM YOU
1. Run the health check and tell me, in plain language, what it says.
2. If that does not explain it, walk me through capturing the device log.
3. Tell me which half is at fault, the server or the device, and why you
think so, before proposing a fix.
Everything these prompts ask for is written out step by step in the setup guide, and the technical page documents every hook, endpoint and failure mode — that one is also written to be handed to an AI, if you want it to understand the system rather than just install it.
iOS 6 Siri Remastered v1.4 · Adi's Repo · http://repo.theadipost.com