🧰 Agent skills
An organiser wallpaper draws the boxes. A skill lets your assistant actually
move the icons into them.
New to agents? The Guide explains the setup in plain
language.
Wallpaper maker skill
How to use the MCP server well: creating from
your notes and gallery examples, monitor sets, sharing, icon plans,
weekly routines, and the rules that never bend. Pairs with the
arrangement skill below.
⬇ Download skill unzip wallpaper-maker.zip -d ~/.claude/skills/
Icon arrangement skill
Reads a wallpaper's screen map, works out which bay each file belongs
in, and moves the icons there. Dry-run by default, with one-command
undo.
⬇ Download skill 1 Install it unzip desktop-tidy.zip -d ~/.claude/skills/
That's the folder Claude Code reads skills from. Other agent
platforms take the same layout — a SKILL.md plus its scripts.
2 Make an organiser wallpaper Choose an organizer in Explore, such as
Weekly reset or Project runway, and customize it in the Workshop. Download the wallpaper with agent
setup; the screen map also rides along inside the PNG.
3 Ask "Tidy my icons to match ~/Pictures/desk.png"
It shows you every move before touching anything. Say yes and the
icons land in their bays.
What's in the box
desktop-tidy/
├── SKILL.md what the agent reads
├── scripts/
│ ├── desk.py map · scan · plan · undo (macOS)
│ └── tidy_windows.ps1 Windows legacy prototype — not a supported adapter
└── reference/
└── screen-map.md the map schema The macOS tool does the mechanical parts — reading the map, listing visible
files, converting wallpaper pixels into screen coordinates, driving the
OS. The agent does the judgement: that Q3-forecast-v2-FINAL.xlsx belongs in Finance and not
Scratch.
Safety
- Nothing moves without
--apply. The default is a printed plan. - Undo is written first. The macOS tool snapshots the
previous positions to
~/.fwm-desktop-tidy/. - Files are never renamed, moved on disk, or deleted. Only
their icon positions change. Script launchers are never run as part of arranging
them.
- Unsure files stay put. Anything the agent can't categorise
is left alone rather than guessed at.
Building your own integration instead? The map is public JSON — see /agents.