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, tells you what's wrong (and why), and fixes it — one step at a time or all at once.
Quick Start
pip install unjiggle
Connect your iPhone via USB, then:
unjiggle go
That's it. One command. It scans your phone, scores your organization, runs AI analysis, and generates a shareable report card.
The Share Card
Unjiggle generates a Wrapped-style share card with your archetype, score, and App DNA mosaic. Screenshot it. Post it. Challenge your friends.
What It Does
unjiggle go — The full experience in one command:
- Reads your entire home screen layout over USB (226 apps, 8 pages, 14 folders... or whatever yours looks like)
- Scores your organization (0-100) across four dimensions
- Runs AI analysis that actually sees your phone: duplicate apps, abandoned apps, scattered categories, cryptic folder names
- Generates a share card with your archetype and App DNA mosaic
unjiggle suggest — Interactive AI walkthrough:
- The AI walks you through 5-7 observations, each with a specific fix
- For cleanup suggestions: choose Delete (with a Marie Kondo gratitude moment), Archive (App Library), or Keep
- Every change is previewed before applying
- Auto-backup before any write. One-command undo.
unjiggle safety-test — Prove it's safe first:
- Reads your layout, writes it back unchanged, reads again
- Verifies the result is identical
- Your phone doesn't change at all. Run this first if you're nervous.
Commands
| Command | What it does |
|---|---|
unjiggle go |
Full experience: scan, score, AI analysis, share card |
unjiggle scan |
See your layout color-coded by category |
unjiggle score |
Organization score (0-100) with breakdown |
unjiggle analyze |
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 |
unjiggle report --open |
Generate share card + full report |
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 for AI features: set
ANTHROPIC_API_KEYorOPENAI_API_KEY
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 uses an LLM to generate observations and layout suggestions.
The write path is validated on iPhone 16 Pro, iOS 26.0. 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.
The CLI validates the core value prop. The GUI is the full product.
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.1.0.tar.gz.
File metadata
- Download URL: unjiggle-0.1.0.tar.gz
- Upload date:
- Size: 373.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87d621af0798c726bea9c6e41104854177307e8f4303f42e4cb8ff461f4863b4
|
|
| MD5 |
c53fb4fc31962024016e940abf87bdb8
|
|
| BLAKE2b-256 |
2ceb45d6c388d621f4eb36982bd28e47e21f84c92503e780588a42437ae12d73
|
Provenance
The following attestation bundles were made for unjiggle-0.1.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.1.0.tar.gz -
Subject digest:
87d621af0798c726bea9c6e41104854177307e8f4303f42e4cb8ff461f4863b4 - Sigstore transparency entry: 1203895096
- Sigstore integration time:
-
Permalink:
chungty/unjiggle@27c4113305d08d892f5289bea64f6398d6d3b544 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/chungty
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@27c4113305d08d892f5289bea64f6398d6d3b544 -
Trigger Event:
push
-
Statement type:
File details
Details for the file unjiggle-0.1.0-py3-none-any.whl.
File metadata
- Download URL: unjiggle-0.1.0-py3-none-any.whl
- Upload date:
- Size: 62.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 |
bef793365bfd5d55624448bed7fd41fa266299b35e91e11ec746d9de6304dacd
|
|
| MD5 |
d07c45a24c7de7f6a0e0564eb55b2776
|
|
| BLAKE2b-256 |
c496d3b4df683655fc3a94ec372542ea973f57241b0dd74dcbecae3662e9bb6e
|
Provenance
The following attestation bundles were made for unjiggle-0.1.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.1.0-py3-none-any.whl -
Subject digest:
bef793365bfd5d55624448bed7fd41fa266299b35e91e11ec746d9de6304dacd - Sigstore transparency entry: 1203895102
- Sigstore integration time:
-
Permalink:
chungty/unjiggle@27c4113305d08d892f5289bea64f6398d6d3b544 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/chungty
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@27c4113305d08d892f5289bea64f6398d6d3b544 -
Trigger Event:
push
-
Statement type: