Skip to content

feat(settings): support preferred text size / Dynamic Type #2695

Description

@stew-codex

Problem

agent-device settings does not expose the preferred text-size / Dynamic Type category. This makes accessibility and layout QA less reproducible: an agent can observe unexpectedly large text, but it cannot inspect or restore the simulator's content-size category through the agent-device command surface.

Observed with agent-device 0.21.0 on an iOS simulator. The current workaround is to leave agent-device and call CoreSimulator directly:

xcrun simctl ui <udid> content_size
xcrun simctl ui <udid> content_size large

Driving the Settings app is possible, but it is slower and depends on localized labels and slider coordinates.

Proposed command

Add an iOS-simulator settings helper, for example:

agent-device settings text-size
agent-device settings text-size large
agent-device settings text-size accessibility-extra-large

The no-argument form should return the normalized current category. The setter should accept the categories supported by simctl ui ... content_size:

  • extra-small
  • small
  • medium
  • large
  • extra-large
  • extra-extra-large
  • extra-extra-extra-large
  • accessibility-medium
  • accessibility-large
  • accessibility-extra-large
  • accessibility-extra-extra-large
  • accessibility-extra-extra-extra-large

Exact naming can follow the existing settings-command conventions.

Scope

  • Implement the first slice for iOS Simulator by delegating to simctl ui <device> content_size.
  • Respect the active session or explicit device selection (--device / --udid).
  • Return UNSUPPORTED_OPERATION with a useful message on targets where agent-device cannot set the category.
  • Android font-scale parity can be handled separately because its values and behavior do not map exactly to Apple's categories.

Acceptance criteria

  • The current preferred content-size category can be read through CLI and structured API/MCP responses.
  • A supported category can be set on the selected iOS simulator.
  • The result reports the applied normalized category rather than only command success.
  • Invalid category values fail before mutating simulator state and list the accepted values.
  • Help text and command documentation include the new setting.
  • Tests cover parsing, device selection, success, invalid input, and unsupported-target behavior.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions