Autonomy Docs
Authoring

Record the Flow

Perform a journey once in a hosted browser session and let Autonomy draft the test case from it.

Recording is the fastest way to author a long flow. You perform the journey once in a browser Autonomy hosts for you, marking checks as you go, and Autonomy turns the captured trace into intent-level steps you review before saving.

Nothing is replayed. The recording is authoring input — the agent still executes the saved test case adaptively against whatever the product looks like at run time.

Availability

Recording is available for web, iOS, and Android Hosted Sessions. Each platform uses a different capture surface:

  • Web — a headless browser provisioned on Autonomy infrastructure.
  • iOS — a booted iOS Simulator on the runner host, driven via agent-device.
  • Android — a booted Android emulator on the runner host, driven via agent-device.

Local Session — recording on your own machine through the Autonomy companion, which reaches apps behind a VPN — is listed but not yet launchable.

Start a recording

  1. Go to Test Cases → New Test Case.
  2. Fill in step 1 (Details): name, platforms, and the environment the case belongs to.
  3. In step 2 (Method), choose Record the flow and continue.
  4. Step 3 (Record) is the setup screen. Set:
    • Platform — Web, iOS, or Android.
    • Capture Surface — Hosted Session (recommended).
    • For web: choose an environment and start URL. The environment supplies the start URL; override it in the field, or leave both empty to start on a blank page. Choose a viewport (Desktop 1440×900, MacBook Pro 3024×1964, or iPhone 16 Pro 393×852).
    • For iOS/Android: choose a booted device from the device picker and enter the app's bundle ID (iOS) or package name (Android). The runner must have the target device booted.
  5. Click Launch Hosted Session.

The session shows Connecting… while the browser is provisioned, then goes live.

During the session

You drive the Hosted Session directly in the page. For web sessions, four tools sit above the viewport. For native sessions, a gesture toolbar (Tap, Swipe, Long press) and hardware buttons (Back, Home, App switcher, Rotate, Keyboard) replace the direct-manipulation pointer.

Assertion toolbar

ToolWhat it captures
InspectPicks an element and attaches a check to it. Tab moves between targets, Enter selects, Escape exits. Available assertions depend on what you picked: Value equals, Is empty, Is enabled, Is visible, Is not present for inputs; Text equals, Text contains, Is visible, Is not present, URL contains for text and page checks.
Visual CompareMarks the current screen for comparison against a reference. Attach the reference afterwards — see Visual Checks.
Validate NetworkMarks a network expectation at this point in the flow.
Add noteRecords a plain-language note. Notes are treated as authoritative intent during synthesis, so use them to explain why a step matters.

Assert with the gesture, at the moment you see the thing you want to guarantee. A check captured in context becomes a better Step than one added later from memory.

Header controls: Pause / Resume to stop capturing without ending the session, Discard (click twice to confirm) to throw the Recording away, and End & review to finish and synthesize.

Element inspector (all platforms)

The Elements panel shows a live accessibility tree of the current screen. On web it reflects the DOM; on iOS and Android it reflects the platform's accessibility hierarchy (e.g. Button, Cell, NavigationBar on iOS). Use it to:

  • Verify element names and roles before asserting on them.
  • Search for an element by text or type with the search bar.
  • Click a node to highlight it on the device frame and see its attributes (identifier, label, rect, hittable state).

The tree refreshes automatically after each input batch and can be manually refreshed with the reload button.

Device State

The Device State panel lets you change device-level state during a recording — dark mode, location, permissions, clipboard, app state, and more. Open it from the toolbar above the viewport.

Each change is captured as a device_state event in the trace and synthesized into a Device State step. The step label shows the human-readable description (e.g. "Switch to dark mode", "Grant camera permission") — never a generic fallback.

Supported facets

Not every facet works on every platform. The table below shows what is verified to work on current runtimes:

FacetiOSAndroidWeb
Appearance (light / dark)
Location
Network (airplane / wifi)✅ Wi-Fi only
Animations
Permission
Permission (camera, notifications)
Permission deny
Biometric✅ (fingerprint)
App state (fresh install)✅*
Clipboard
Push notification
Media (photo library)

* On iOS, clearing app state uninstalls and reinstalls the app. System apps cannot be cleared. After a clear, the app is gone — any subsequent step must relaunch it.

On Android, airplane mode is blocked on API 36 emulators; Wi-Fi toggling works normally. Web permissions are unsupported as browsers lack CLI/automation commands for managing permissions.

The panel disables options that are unsupported on the current platform and shows the specific reason when you hover over them. If you try to run a test case with an unsupported device-state precondition, the run fails with a clear error — it never silently skips.

Test identity

Every recording session is provisioned with a throwaway identity so signup and login flows work without touching real accounts.

  • Email is provisioned automatically and free. The panel shows the address, copies it on click, and surfaces incoming messages inline — including the OTP — so you can complete a verification step without leaving the session.
  • SMS is not provisioned automatically. Receivable numbers are scarce and metered, so the panel shows Get SMS number and leases one on demand from your organization's configured SMS provider. The lease is released when the session ends.

If a form only wants digits in a phone field, you do not need a lease. Leave it to the agent's filler policy at run time and reserve leases for flows that actually receive a code.

From Recording to Steps

When you click End & review, the Recording moves to synthesizing. Autonomy reads the captured trace and drafts Steps using the standard step vocabulary. Its rules:

  • Every check you marked becomes an Assert, Visual Compare, or Validate Network Step. Checks are never dropped.
  • Credential-like fields (email, password, OTP, verification code) become agent-chosen values instead of the literal you typed.
  • Fields you filled from environment configuration keep the {{env.VAR_NAME}} form.
  • Targets containing numbers or currency symbols are described rather than quoted, so Pay $50.00 becomes the checkout button.
  • Repeated navigations to the same URL merge into one Step.
  • Ambient page context is discarded; your notes are kept and take priority over raw capture detail.
  • Native verbs are platform-aware: taps on iOS say "Tapped", clicks on web say "Clicked".

The Recording then reaches drafted and the wizard advances to step 4 (Steps), where the drafted Steps appear in the editor with the Recording available in a side panel for reference. Edit, reorder, and delete freely, then continue to Review and save.

Export

After synthesis, the drafted Steps can be exported from the source panel in three formats:

FormatFileDescription
Autonomy JSON.jsonThe canonical step list with full metadata. Importable back into Autonomy.
Maestro YAML.yamlA Maestro-compatible flow file for teams migrating from or comparing against Maestro.
Playwright Script.spec.tsA runnable Playwright test script with page-object–style selectors.

Click Export to download the file, or use the copy button next to each format to copy the content to clipboard.

Practical notes

  • Nothing is saved as a Test Case until you finish the wizard. Discard ends the session and keeps nothing.
  • Re-recording is cheaper than repairing a bad trace. If the journey went wrong halfway, discard and start again.
  • Keep one Recording to one journey. Long sessions that wander through several flows synthesize into Step lists nobody wants to review.
  • Native sessions are single-tenant: only one session per device at a time. If the dashboard shows a stale session, close it from the session panel before starting a new one.

Troubleshooting

The session never goes live

Web: Confirm the start URL is reachable from the public internet. A Hosted Session cannot reach localhost, a private IP, or a VPN-only host. Use a preview deployment or staging URL, or wait for Local Session support.

iOS/Android: Confirm the target device is booted and that the runner host has agent-device on PATH. Check agent-device list --platform ios --json (or android) to verify the device appears as booted.

The OTP never appears in the identity panel

The product must send to the provisioned address, so paste the address from the panel rather than typing one from memory. If the message is slow, wait in the session rather than ending it — the panel updates live.

The drafted steps miss a check I made

Checks are only captured through the toolbar. Clicking around to verify something visually does not record an assertion. Re-record the section and use Inspect at the moment of the check.

The drafted steps contain a literal password

Synthesis rewrites credential-like fields when it can identify them. If a field is unusual, edit the step and replace the value with an agent-chosen instruction before saving.

On this page