Unjiggle
Your iPhone home screen is a mess. You know it. You've given up fixing it. Unjiggle fixes it for you.
Unjiggle is an AI-powered CLI that reads your iPhone home screen, scores your organization, roasts your app collection, writes obituaries for your dead apps, and generates share cards you'll actually want to post.
Quick Start
pip install unjiggle
Connect your iPhone via USB, then:
unjiggle go
One command. It scans your phone, scores your organization, calculates your swipe tax, and generates a share card that auto-copies to your clipboard. Cmd+V to paste into iMessage, Twitter, or Instagram.
Share Cards
Every feature generates a 1080x1350 share card that copies to your clipboard automatically. No screenshots needed — just Cmd+V.
Features
Core (no API key needed)
| Command | What it does |
|---|---|
unjiggle go |
Full experience: scan, score, archetype, swipe tax, share card |
unjiggle swipetax |
How many unnecessary swipes your layout costs per year |
unjiggle scan |
See your layout color-coded by category |
unjiggle score |
Organization score (0-100) with breakdown |
unjiggle demo |
Try it without a phone — see what the output looks like |
Viral features (works without API key, better with one)
| Command | What it does |
|---|---|
unjiggle mirror |
Personality roast from your app collection |
unjiggle obituary |
Eulogies for your dead apps |
These generate share cards with or without an API key. With Claude or GPT, the roasts are funnier and more personal. Without, you get a solid rule-based analysis.
AI-powered (needs API key)
| Command | What it does |
|---|---|
unjiggle analyze |
Deep AI observations (Claude or GPT-4.1) |
unjiggle suggest |
Interactive walkthrough — apply changes step by step |
unjiggle suggest --apply-all |
Just Fix It mode — apply everything at once |
Safety
| Command | What it does |
|---|---|
unjiggle safety-test |
Read the layout and verify a backup without changing the phone |
unjiggle safety-test --write-roundtrip |
Offer a write test that can change icons; requires confirmation |
unjiggle backup |
Save current layout |
unjiggle restore |
List backups; pass a file to attempt a restore |
Safety update in 0.3.2
Earlier versions of safety-test sent the layout back to the iPhone despite saying
the test changed nothing. Sending even an unchanged layout can make iOS add or move
icons. The default test now only reads the phone and saves a backup.
- A write test requires
--write-roundtripand a separate yes/no confirmation that defaults to No. It is not needed before using Unjiggle. - Preparing to apply changes no longer runs an extra test write.
- If the layout changes while a backup is being checked, Unjiggle stops and keeps the original backup. New verified backups do not overwrite files from the same second.
- Restore saves the phone's current layout first. If the phone does not match the requested backup afterward, the command reports failure and exits with an error. It does not retry or try another restore automatically.
- Restore refuses completely empty layouts and unsupported backup formats rather than sending them to the phone. Layouts containing only widgets are supported.
These changes do not establish a fix for icons returning on iOS 27, or a safe way to recover folders lost after resetting the Home Screen. If a test or restore has already changed your layout unexpectedly, stop further attempts and keep your backups. Backup files contain app and folder names; share them privately when seeking help.
Requirements
- macOS (USB communication with iPhone)
- iPhone connected via USB with "Trust This Computer" accepted
- Python 3.10+
- API key (optional): set
ANTHROPIC_API_KEYorOPENAI_API_KEYfor AI features. Core features and share cards work without one.
How It Works
Unjiggle uses pymobiledevice3 to communicate with your iPhone's SpringBoard services over USB. It reads the IconState (your home screen layout), enriches it with App Store metadata, and generates observations and layout suggestions.
On macOS 12-15, it can also read Screen Time data from knowledgeC.db for real app usage stats (last opened, daily opens). On newer macOS versions, it falls back to positional heuristics.
Share cards render to PNG via Chrome headless and auto-copy to your macOS clipboard.
Earlier device testing used an iPhone 16 Pro on iOS 26; it does not establish safety on other iOS versions. Applying or restoring a layout can add or move icons. A verified backup is not a guarantee that a restore will succeed, and an immediate match does not prove the layout will stay the same after a reboot.
GUI Coming Soon
A native Mac app with live preview, drag-and-drop editing, animated before/after transformations, and a slider to control aggressiveness is in development.
Sign up for early access: unjiggle.com
License
GPL-3.0 (matching pymobiledevice3)
Metadata
Release files for unjiggle 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| unjiggle-0.3.2.tar.gz | 305.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| unjiggle-0.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 377.6 kB
Release files / unjiggle-0.3.2.tar.gz
| Download URL | unjiggle-0.3.2.tar.gz |
|---|---|
| Size | 305.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
17582f7d5eaa43a69315a97cd6e81851bc19536a68cdec566adab46d9a8fac1f
|
|
BLAKE2b-256 checksum How to use checksums |
8b8430a5b281ccf1f9b83cc3a0306f8f4e435e6f017fd505be71d4079d6498d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.
Transparency logRelease files / unjiggle-0.3.2-py3-none-any.whl
| Download URL | unjiggle-0.3.2-py3-none-any.whl |
|---|---|
| Size | 72.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7eb923c3404eb1158736be9a7fc160398437abf5d375ade7049461ab5c0c04ba
|
|
BLAKE2b-256 checksum How to use checksums |
ccf968c5b0096db4309e99d6a9013a058a171c7e7a272729075c38d013c94478
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.
Transparency log