Repository navigation
First release. An Atmosphère sysmodule plus a Python MCP server that together let
an AI agent drive a homebrew Switch: see the screen, press buttons, move files,
read save data, inspect processes and search live game memory.
A fresh install is read-only and stays that way until you raise the tier.
Installing
Extract the zip to the root of your SD card, letting folders merge, then
reboot:
atmosphere/contents/420000000000AE57/exefs.nsp
atmosphere/contents/420000000000AE57/flags/boot2.flag
atmosphere/contents/420000000000AE57/toolbox.json
config/switch-agentd/config.ini.example
On first boot the agent writes sd:/config/switch-agentd/config.ini with a
randomly generated token — you need it to connect. Check
sd:/config/switch-agentd/agent.log ends with listening on port 6060.
Then see the Installation
wiki page for connecting a client.
Highlights
- 102 tools, grouped so a session is not handed all of them at once
- Screenshots scaled to ~20% of native size by default;
screen_changed
returns an image only when something actually changed fs_findandfs_greprun on the console- Enumerate every save on the system; mount any of them read-only
- Read a running game's memory without pausing it, and narrow a value search
from tens of thousands of candidates to a handful - Module base + build ID, so an address becomes
main+0x1a2f4 - Challenge-response auth: the token never crosses the network
Safety
Three capability tiers enforced before any handler runs, dry_run on every
mutating command, confirmation tokens bound to the exact effect for destructive
ones, an on-device audit journal, and a watchdog counting boots with no client.
emuMMC is detected and reported, since it decides whether a mistake is
recoverable.
Known limitations
Please read these before filing an issue — all are documented behaviour.
- Hardware watchpoints and breakpoints arm but never fire on HOS 22.1.0. The
syscall is permitted and the encoding accepted, but no exception is delivered.
Core affinity was tested as a cause and ruled out. Use the narrowing memory
search instead. - USB transport is inert — device side only, off by default, no host client,
never tested against hardware. - One client at a time — not one command, one session.
- Register writes need a thread stopped at a debug event, not just a paused
attach. - Throughput is limited by Wi-Fi, not the protocol: 2.8 MB/s up, 4.1 MB/s down.
- Installing titles is out of scope and not implemented.
Tested on
HOS 22.1.0, Atmosphère 1.11.1, emuMMC. Other versions are untested.
sha256 c00062d9bd1052bdd9876553c6eeafc85a7b8f3b9b476c0ede76a45a46682ae7