AI-powered iPhone home screen organizer. One command to scan, score, and fix your layout over USB.
Project description
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 |
Prove read/write works (changes nothing) |
unjiggle backup |
Save current layout |
unjiggle restore |
Undo any changes |
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.
The write path is validated on iPhone 16 Pro, iOS 26. Every write is preceded by a verified backup and an optional round-trip safety test.
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)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file unjiggle-0.3.0.tar.gz.
File metadata
- Download URL: unjiggle-0.3.0.tar.gz
- Upload date:
- Size: 382.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1522803bda43fa1c201d6cce35de842ac7f6069095666d0f49d5a4d6363327e
|
|
| MD5 |
c86eab213e776624bc2accef155fe5e6
|
|
| BLAKE2b-256 |
a2dec6ee5b57fcd3a870c931db615e4b0bca857952b3e423fafce83f52c11ef9
|
Provenance
The following attestation bundles were made for unjiggle-0.3.0.tar.gz:
Publisher:
publish.yml on chungty/unjiggle
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
unjiggle-0.3.0.tar.gz -
Subject digest:
a1522803bda43fa1c201d6cce35de842ac7f6069095666d0f49d5a4d6363327e - Sigstore transparency entry: 1204393834
- Sigstore integration time:
-
Permalink:
chungty/unjiggle@b25224197d6baf6809ad3ee51555d66f57d88b36 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/chungty
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b25224197d6baf6809ad3ee51555d66f57d88b36 -
Trigger Event:
push
-
Statement type:
File details
Details for the file unjiggle-0.3.0-py3-none-any.whl.
File metadata
- Download URL: unjiggle-0.3.0-py3-none-any.whl
- Upload date:
- Size: 69.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48f26858001e443eb9913616fc3094a711880632207fd1f840dc771178aeed46
|
|
| MD5 |
f4f04a276ec523e51759134350906c05
|
|
| BLAKE2b-256 |
b32e0cad37c18fae6dc4303967e227fe8f70395f8dcf8687739e24ee49679cc4
|
Provenance
The following attestation bundles were made for unjiggle-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on chungty/unjiggle
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
unjiggle-0.3.0-py3-none-any.whl -
Subject digest:
48f26858001e443eb9913616fc3094a711880632207fd1f840dc771178aeed46 - Sigstore transparency entry: 1204393851
- Sigstore integration time:
-
Permalink:
chungty/unjiggle@b25224197d6baf6809ad3ee51555d66f57d88b36 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/chungty
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b25224197d6baf6809ad3ee51555d66f57d88b36 -
Trigger Event:
push
-
Statement type: