LINEヤフー、エージェント向けiOS/Android操作CLI「sim-use」をオープンソースで公開
sim-use:エージェントに目と手を持たせる開発ツール
LINEヤフーのチームは、エージェントがiOSとAndroidの画面を見てタップし結果を検証できるクロスプラットフォームCLI「sim-use」をオープンソースとして公開した。画面をoutlineと呼ぶ独自のテキスト形式に変換し、24 KBのJSONが1.2 KBになりトークン消費は1/20に抑えられる。記事ではoutline、quadtreeプローブ、daemon、クロスプラットフォーム設計、マルチタッチの5つの技術判断を解説している。
sim-useはSwift製のmacOS向けCLIで、iOSはidb(FBSimulatorControl)経由でシミュレータに接続し、accessibility treeの取得とHIDイベント注入で操作する。Androidはデバイス上でAccessibilityServiceを動かし、adb forward経由でHTTP APIを公開するbridge APKを使う。画面はoutlineに変換され、@Nや#idといった短いセレクタでタップできる。多くの場合、1画面は数百トークンに収まるという。
outlineはLINEニュースのページで、JSONの24 KB・約1,600行に対し1.2 KB・30行足らずになった。座標を丸めて要素を決定的に並べるため、同じ画面は必ずバイト単位で一致し、操作前後をテキストdiffで比較できる。ツールが要素に意味を付けず、tab barのような推論はエージェントに任せる方針も採っている。リスト検出は高さと間隔の2経路で行い、スコアは cellCount × consistency × roleBonus × widthBonus で決める。
iOSではUITabBarなどでaccessibilityChildrenが空になるが、objectAtPoint:のhit-testでは要素が見つかる。そこで160×80の長方形seedから始める自己適応型quadtreeを使い、XPC往復の回数を抑えて漏れた要素を回収する。seedを長方形にしたことで、LINEニュースのプローブ回数とwall timeは20%減った。--min-cell-sizeを14ptに下げると小さなアイコンも拾え、レイテンシ中央値は470msから520msになった。
CLIの起動コストは、デバイスごとの常駐daemonで削減する。iOSでは1回あたり約200ms、Androidでは約150msから10msに短縮された。一方でバージョン不一致、シミュレータの停止、stdin入力との衝突といった問題が生じ、_pingによる版数確認や統一エラー、daemonBypassフラグで対処している。
クロスプラットフォーム面では、デバイス識別子から自動でiOSかAndroidを判定し、iOS専用の5コマンド(key、key-combo、key-sequence、stream-video、batch)をトップレベルから外してsim-use ios配下に移した。マルチタッチはSimulatorKitのIndigoHIDMessageForMouseNSEventを9引数で呼ぶ方法で実現し、iOS 18.6と26.2で動作した。7MBのバイナリに数百行のSKILL.mdを加えるだけで導入でき、GitHubで公開されている。
UIツリーをoutlineに圧縮する設計や、quadtreeプローブ、daemon化の判断が実測値つきで示され、エージェント向けCLI設計に応用しやすい。
出典: LINEヤフー Tech Blog · techblog.lycorp.co.jp