Skip to content

v0.2.0 — first release

Latest

Choose a tag to compare

@github-actions github-actions released this 26 Jul 20:58
· 4 commits to main since this release

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_find and fs_grep run 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