コンテンツにスキップ

Bajutsu

Natural-language-driven, determinism-first E2E testing on a backend-agnostic driver — one scenario format and one deterministic runner, where a platform is just a backend. AI authors and investigates; a machine decides pass or fail.

ホーム

Bajutsu(馬術)は、自然言語で書いた、あるいは記録したテストシナリオを受け取り、アプリを操作し(タップ、入力、スワイプ、待機)、結果を機械が検証できるアサーションで確かめます。プラットフォームに依存する箇所は一つだけで、それは UI を操作するバックエンドです。バックエンドを差し替えれば、同じシナリオが別のターゲットで動きます。

核となる姿勢

  • AI は著者であり失敗の調査役であって、判定者では決してない。 AI はシナリオを書くことと失敗を調べることを助けますが、run は完全に決定的で、合否は機械によるアサーションだけから決まります。モデルは判定に関わりません。
  • 二つのティア。 ティア1は AI による実操作(探索と著述)、ティア2は CI を守る決定的なランナーです。
  • 決定性の最優先。 固定の sleep は使わず、条件待ちだけを使います。曖昧なセレクタは、最初に一致したものをタップせず、その場で失敗します。
  • プラットフォームは一つのバックエンド。 決定的なコアは特定のプラットフォームを前提としません。バックエンドを足すか差し替えれば、同じシナリオ形式とランナーと CLI が、変わらないまま新しいプラットフォームを対象にします。

状況(pre-alpha)

決定的なコア、AI の著述ループ(recordcrawl)、evidence サブシステム、codegen、自己修復の triage は、いずれも実装済みでユニットテストも揃っており、シミュレータは要りません。iOS の idb / XCUITest バックエンドはシミュレータ上で end-to-end に検証済み、Android(adb)バックエンドはエミュレータ上で end-to-end に検証済みで、web(Playwright)バックエンドは Linux のゲートでブラウザに対して決定的な run を動かします。

クイックスタート

uv sync --group dev                                       # .venv と依存と開発ツール
bajutsu record --target <name> --goal "..." [--out f.yaml]  # ティア1: AI が探索して記録
bajutsu run    --target <name> [--scenario f.yaml]          # ティア2: 決定的な合否

Getting started のチュートリアルが、導入からユニットテスト、シナリオ、実機実行、レポートまでを順にたどります。Mac のないマシンでは、web トラックが同じループをブラウザ(Playwright backend)に対してたどります。Xcode も Simulator も要りません。

機能のハイライト

  • AI で著述recordcrawl がアプリを探索し、手で直せるシナリオを書きます。
  • 決定的なランナー:条件待ち、安定度のはしご、曖昧なときは推測で進めず失敗するセレクタ。
  • evidence サブシステム:スクリーンショット、UI 階層、ネットワークを、指定したポリシーで取得します。
  • 自己修復の triage:AI が失敗を調べ、修正案を出します。CI の経路の外です。
  • codegen:シナリオを、同等のネイティブテスト(iOS 向け XCUITest、web 向け Playwright、Android 向け UI Automator)に変換します。
  • MCP と web UI:MCP クライアントから、あるいはローカルの serve UI から Bajutsu を操作します。

バックエンドとプラットフォーム

プラットフォーム バックエンド 状況
iOS シミュレータ idb / XCUITest 実機上で end-to-end に検証済み
Web Playwright Linux のゲート上で end-to-end に検証済み
Android adb エミュレータ上で end-to-end に検証済み
Flutter (予定)

さらに詳しく