AI Disclosure: Strappy has been lovingly crafted for retro Apple devices by me. Also the writing in this README and associated blog post is 100% written by me. That said, the code is 100% AI generated.
Strappy AI is like Siri AI but for jailbroken iPhones running iOS 5+ and Mac OS X Tiger 10.4+. Strappy scans your home folder for SQLite databases and exposes them to an LLM through read-only tools so that you can ask questions about your text messages, calendars, notes, music, and even third- party apps.
Strappy is my personal strap-on AI harness. Strappy has a big, sassy, and very gay personality… I mean, Strappy's physical embodiment is a rainbow-colored strap-on AI harness. And like most gays, Strappy is insanely diligent, detail-oriented, and strict… like dominatrix-strict. But why? Well, to be honest, I am kind of getting bored of the monotone and direct answers we are getting from the models by default.
For the rest of the development story quoted above, see my blog post.
These videos are recorded on iOS 6 on my real iPhone 5 that I daily drive. It's fully loaded with iCloud Mail, Contacts, Calendar as well as my RSS Feeds, Podcasts, Music, iMessages, and LINE Messages. This gives Strappy plenty of "meat" to work with in terms of database contents
For the more demo videos, see my blog post.
I built the harness to have 4 modes (3 user accessible) to help limit the tools available in each mode so that smaller models do not get confused.
| Mode | Additional access |
|---|---|
| World Knowledge | Basic LLM chatbot with available web search |
| Personal Assistant | Siri AI-like experience by making your whitelisted SQLite databases available to the LLM |
| Coding Assistant | Coding Agent-like experience with 4 basic tools, read, write, edit, bash |
| Database Study | Special automated mode to ask the LLM to pre-study your whitelisted SQLite databases to save tokens in future Personal Assistant prompts |
| Tool | World Knowledge | Personal Assistant | Coding Assistant |
|---|---|---|---|
web_search |
Optional | Optional | Optional |
web_fetch |
Optional | Optional | Optional |
database_list |
— | Yes | — |
database_query |
— | Yes | — |
database_context |
— | Yes | — |
file_read |
— | — | Yes |
file_write |
— | — | Yes |
file_edit |
— | — | Yes |
bash |
Optional | Optional | Optional |
datetime_to_iso8601 |
Yes | Yes | Yes |
datetime_from_iso8601 |
Yes | Yes | Yes |
fontawesome_search |
Yes | Yes | Yes |
fontawesome_confirm |
Yes | Yes | Yes |
memory_read |
Yes | Yes | Yes |
memory_save |
Yes | Yes | Yes |
memory_delete |
Yes | Yes | Yes |
skills_list |
Yes | Yes | Yes |
skill_read |
Yes | Yes | Yes |
session_rename |
Yes | Yes | Yes |
Sources: GuidanceTools.json and
AssistantSets.json.
Strappy is a JSON HTTP client for the OpenAI Responses API. I tried to make the C core portable so it can be tested in the Linux-based Docker Container. The C "backend" handles HTTPS with libcurl, JSON with cJSON, SQLite storage, tools, the harness loop, and sends NSNotifications to the UI layer. This allowed me to keep the Objective-C UI layers thin. The UI layers are written in UIKit and AppKit, except for the primary harness/chat/prompt view which is a webview.
flowchart TB
OpenRouter["OpenRouter<br/>Responses API"] <--> Core["Portable C backend<br/>HTTP · agent/tool loop · sessions"]
ChatGPT["ChatGPT<br/>Codex Backend API"] <--> Core
Core <--> DB[("SQLite<br/>strappy.sqlite")]
Core <--> Bridge["Objective-C bridge<br/>StrappySession.m"]
Bridge <--> UI["UIKit / AppKit UI<br/>session list · WebView timeline"]
strappy_cocoa.h/c: To keep the C code portable, this is the only file that can use Apple-specific C libraries like CoreFoundationStrappySession.h/m,FileScanner.h/m: To keep C code out of the Objective-C code, these files are the only Objective-C files that can import the C "backend"- Linux test suite runs in the docker container and tests the C "backend"
Because the code is AI generated, I try to use Clang to help me as much as possible. So the warnings enabled are pretty strict. Also I configured Clang static analysis to run over the source as well. In both cases, warnings and errors are not allowed.
That being said, Objective-C and C are not like Swift. In most cases to get rid of the warnings, you just need to cast the type of number which really doesn't do anything. But oh well, I didn't pick these languages. They are just what is required to make an app work on a 20 year old version of Mac OS X.
- iOS Clang app sources: -pedantic, -Wall, -Wextra, -Wconversion, -Wsign- conversion, -Wfloat-conversion, -Wimplicit-function-declaration, -Wobjc- method-access, -Wunguarded-availability, -Wno-unused-command-line-argument, and -Wno-semicolon-before-method-body.
- iOS Clang shared sources: the same flags.
- Modern macOS Clang sources: -Wall, -Wextra, -Wsign-conversion, -Wfloat- conversion, and -Wno-semicolon-before-method-body.
- Legacy macOS GCC sources: -Wall and -Wextra.
- Linux Clang test suite: -Wall, -Wextra, -Wconversion, -Wsign-conversion, and -Wfloat-conversion.
Strappy scans your home folder for SQLite databases and does its best to identify which application made the database. It then presents the databases in a whitelisting UI so you can choose which databases the LLM should have access to.
Strappy only opens whitelisted databases and always in read-only mode:
SQLITE_OPEN_READONLY- SQLite authorizer blocking writes, PRAGMA, ATTACH, and transactions
- 100-row result limit
Query results are sent through OpenRouter to the selected model provider. Use OpenRouter Guardrails to control which upstream providers may receive your data. If you are using your ChatGPT subscription, then your data is being sent to OpenAI. Strappy makes no other network requests.
Coding Assistant can read, write, and edit files in a selected directory. Any mode can optionally enable Bash. For the Mac, install Xcode or another command- line development environment. For the iPhone, install Clang and related tools through a package manager or use the Altivec toolchain.
Warning: The coding assistant is not sandboxed in any way. Please be careful.
| Platform | Architecture | Support | Tested | Package |
|---|---|---|---|---|
| iOS | armv7/arm64 | 5+ | 6, 8, 15 | .deb; jailbreak required |
| macOS | PPC/i386/x86_64/arm64 | 10.4+ | 10.4–10.6, 10.8, 10.9, 10.14, 15 | zipped .app |
Modern macOS does a lot to protect user folders and databases. To ensure Strappy
can access all of your data, I recommend giving Strappy full disk access
permissions in System Preferences Settings. However, I had trouble getting
this setting to stick until I signed the application with a Self-Signed
certificate. So if you are still getting prompted to access folders and can't
see critical databases like Calendar, AddressBook, chat.db, etc, then ask your
favorite AI to use the security CLI to create a Self-Signed code-signing
identity, then sign Strappy. After that, remove Strappy and re-add it in the
full disk access security settings.
I may look into distributing the app already signed with my self-signed certificate but I am not sure if that will make it easier or harder to open with or without gatekeeper getting in the way.
Strappy requires either an OpenRouter API token or a ChatGPT subscription.
Note that the ChatGPT OAUTH support is unofficial and unapproved. Strappy does not try to pretend to be Codex or Pi. It identifies at itself. So far ChatGPT OAUTH and subscription-based token usage has worked for me, but it could result in your account getting banned. Proceed with caution.
You need to know whether your iPhone has a rootful or rootless jailbreak. If you don't know, try the rootful.deb file first as it will fail on rootless jailbreaks.
- Jailbreak your iPhone
- Install OpenSSH from the package manager
- Download
Strappy-X.Y.Z-iOS-rootful.deborStrappy-X.Y.Z-iOS-rootless.debfrom Releases. - Install it:
scp Strappy-X.Y.Z-iOS-rootful.deb root@iphone-ip-address:~/strappy.deb
ssh root@iphone-ip-address "dpkg -i ~/strappy.deb && rm ~/strappy.deb"Depending on how new your computer is and how old your iPhone is, you may need to manually enable older RSA algorithms in order for SSH to connect:
scp -O \
-o HostKeyAlgorithms=+ssh-rsa \
-o PubkeyAcceptedAlgorithms=+ssh-rsa \
Strappy-X.Y.Z-iOS-rootful.deb \
root@iphone-ip-address:~/strappy.deb
ssh \
-o HostKeyAlgorithms=+ssh-rsa \
-o PubkeyAcceptedAlgorithms=+ssh-rsa \
root@iphone-ip-address \
"dpkg -i ~/strappy.deb && rm ~/strappy.deb"- Download
Strappy-X.Y.Z-macOS.zipfrom Releases - Unzip it
- Optional: If your Mac has Gatekeeper and you don't want to fight with it,
run
xattr -d com.apple.quarantine ~/Downloads/Strappy-X.Y.Z-macOS.zip - Launch it (as God intended)
In Preferences:
- Add your accounts (OpenRouter and/or ChatGPT OAUTH)
- Select the models you want to whitelist
- Scan for databases and then whitelist the ones you want
- (Optional) Study databases to save tokens in future prompts
This project uses the Docker-based retro development environment Altivec Intelligence.
Altivec Intelligence is BYOSDK (Bring Your Own SDK), so you must supply the Apple SDK archives yourself. See Altivec Intelligence repo for details before building Strappy.
1. Clone repo
git clone https://github.com/jeffreybergier/Strappy-Cocoa.git
cd Strappy-Cocoa2. Pull the Docker image and install the SDKs
docker compose pull
docker compose run --rm altivec-sdk install3. Build Strappy
docker compose run --rm make clean releaseOutputs:
source/iOS/build-release/Strappy-rootful.debfor rootful jailbreakssource/iOS/build-release/Strappy-rootless.debfor rootless jailbreakssource/macOS/build-release/Strappy.zip
(Optional) Run the Linux-Based Tests for the C Backend:
docker compose run --rm make clean test| Path | Purpose |
|---|---|
source/shared |
C core, tools, storage, prompts |
source/iOS |
UIKit app and .deb packaging |
source/macOS |
AppKit app and quad-fat packaging |
source/linux |
Linux test harnesses |
Good starting points:
strappy_responses.c: harness loopstrappy_tools.c: harness toolsstrappy_db.c: database storage and retrievalAssistantSets.json: tool definitionsSystemPrompt.json: system prompt definitionsGuidanceTools.json: system prompt definitions
Sure, I will take contributions as long as you have tested on a real iPhone or Mac with a screenshot. Please follow the code of conduct.
If you want to contribute, these are the next items I plan to add myself:
- OpenAI OAUTH Support: I want to use my ChatGPT monthly plan in Strappy. This is sort of a gray area I think? So not sure how well this will work out.
- Improve macOS Coding Agent skill and toolchain: The mac already has a development toolchain in Xcode, but it changes over time. Also I need to be able to provide AltivecCore and AltivecCocoa to macs (right now the toolchain only supports iPhone)
- Add arm64 support to the iPhone development toolchain.
- Remote Access: I want to be able to access Strappy on my iPhone from my computer.
- This could be done via some sort of CLI on the iPhone that I can SSH into.
- Or, this could be done by hosting a little web server inside of Strappy
- Context Management: Currently there are checkboxes on each round to allow full manual control of context. But I want to add an option where previous prompts have all of their context ignored except the original prompt and the final answer. This should help shrink the context a lot.
Strappy is experimental personal software, not a hardened product. It is MIT licensed, 100% AI coded and 100% compiled.


0 comments
log in to comment.