← TinyGPT · docs · devlog · roadmap · speedup
source: docs/learn/app-intents-comparison.md · view on GitHub ↗

App Intents comparison for Planner v7

Status: research landed 2026-06-07
Supports: docs/prds/factory-planner-v7-tools-in-prompt.md

Sources

Executive summary

Apple App Intents is not a small global verb taxonomy. It is closer to a typed action framework:

The main lesson for v7: do not encode apps as tool names and do not treat targets as loose strings. Use a small verb set, but make entities and enums first-class in the schema.

App Intents taxonomy summary

Apple’s action model has three layers.

First, there is the generic action layer. AppIntent is the base capability: it exposes app functionality to Siri, Shortcuts, Spotlight, widgets, and other system experiences. Each intent has a human-readable title, a description, parameters, a parameter summary, and a perform() method.

Second, Apple has specialized action families. The public docs list protocols such as OpenIntent, DeleteIntent, SetValueIntent, ShowInAppSearchResultsIntent, SnippetIntent, URLRepresentableIntent, AudioPlaybackIntent, CameraCaptureIntent, PlayVideoIntent, LiveActivityStartingIntent, and WidgetConfigurationIntent. This is the closest thing to a verb taxonomy, but it is an extensible protocol hierarchy, not a fixed command vocabulary.

Third, Apple has assistant schemas for Siri and Apple Intelligence. The docs tell developers not to adopt AssistantIntent directly; instead they use the AssistantIntent(schema:) macro. That is a strong hint that Apple wants common domains to map into system-owned schemas rather than every app inventing names.

Apple’s noun model is as important as its action model. AppEntity exposes app-specific concepts like notes, trails, files, documents, photos, or settings. Entities have persistent IDs and display representations. Queries retrieve entities by ID, provide suggestions, and support spoken or typed resolution.

Parameterization is typed. Use @Parameter for inputs, AppEnum for static choice sets, AppEntity for app data, and query providers for dynamic options. Apple also has APIs for missing values, user choice, and confirmation.

Discovery is explicit. AppShortcut phrases, titles, descriptions, display representations, and shortcut metadata train the system’s matching behavior and make shortcuts available without user setup.

Proposed v7 taxonomy recap

The current v7 PRD proposes ten verbs:

Current verbIntended role
readPull information from a source
actExecute an action against a target
composeDraft text or structured content
askAsk the user for clarification
saySpeak or show a response
recallQuery long-term memory
waitWait for a condition
navigateOpen an app, URL, file, or view
scheduleCreate a time-bound action
searchSearch across a scope

This is directionally right: bounded verbs, tools in the prompt, and apps as values instead of retrain-only tool names. The weak spot is that several verbs mix action type with source type. Apple avoids that by separating action, entity, query, and enum schemas.

Mapping table

v7 verbApp Intents equivalentConfidenceNotes
readEntityQuery, AppEntity, result-returning AppIntentHighApple treats retrieval as entity resolution/query, not as a generic read verb.
actAppIntent, plus specialized protocolsMediumToo broad. Apple uses domain-specific intents or protocols like SetValueIntent / DeleteIntent.
composeApp-specific AppIntentMediumApple has no generic compose protocol; apps expose actions such as create/export/send.
askrequestValue, requestChoice, requestConfirmationHighRename to clarify intent: missing value, disambiguation, or confirmation.
sayIntentDialog, returned IntentResult, snippetsMediumApple treats response as result/dialog, not an independent verb. Still useful for Pace voice UX.
recallNo direct App Intents equivalent; closest is entity query over indexed app dataLowMemory is our runtime feature. Keep it, but model it as a query source.
waitProgressReportingIntent, long-running intent modesMediumApple has progress/foreground continuation patterns, not a generic wait verb.
navigateOpenIntent, OpenURLIntent, URLRepresentableIntentHighRename to open. Apple naming is clearer and narrower.
scheduleApp-specific calendar/reminder intentsMediumNo generic scheduling protocol in App Intents docs; still useful for agent planning.
searchEntityStringQuery, EntityPropertyQuery, ShowInAppSearchResultsIntentHighFold into query unless the output is explicitly opening search UI.

Answers to the PRD questions

1. Verb count

There is no closed App Intents verb count. Apple exposes a generic AppIntent protocol and a growing set of specialized intent protocols. Treat the public specialized protocols as examples of durable action families, not as the full taxonomy.

For v7, keep the vocabulary small, but borrow Apple’s clearest specialized families: open, set value, delete / perform, search results, media, and foreground continuation.

2. Verb naming convention

Apple uses intent type names that are usually verb + noun or specialized verb protocols: OpenIntent, SetValueIntent, DeleteIntent, ShowInAppSearchResultsIntent, PlayVideoIntent. The human-facing title is described as a short title using a verb and noun in title case.

For v7, prefer verb names that are concrete English imperatives: query, open, set, perform, compose, clarify, say, wait, schedule, query_memory.

3. Entity model

Yes, v7 needs an entity model. Apple makes entities first-class because the hard part is often resolving “the thing” the user means. A string target field is too weak for held-out tools.

Use:

{
  "target": {
    "type": "app|window|element|file|url|calendar_event|memory|custom",
    "id": "stable-id-if-known",
    "label": "human-visible label",
    "query": "fallback natural-language selector"
  }
}

This mirrors AppEntity plus EntityQuery without requiring Apple framework types in the model output.

4. Same verb across many entity types

Apple generally keeps the action stable and varies the parameter/entity type. OpenIntent opens associated items; URL-representable intents/entities provide universal links; entity queries resolve app-specific objects.

For v7, do not create open_file, open_url, open_app, and open_document. Use open(target: EntityRef) and let the target type carry the distinction.

5. Disambiguation

The current ask verb matches the broad idea, but the name is too vague. Apple distinguishes missing values, choices, and confirmation. Rename ask to clarify and add kind.

{
  "verb": "clarify",
  "args": {
    "kind": "missing_value|choice|confirmation",
    "question": "Which calendar?",
    "choices": [{"id": "work", "label": "Work"}]
  }
}

6. Composition

Shortcuts composes multiple actions into workflows. App Intents expose single actions that Shortcuts can chain. The v7 plan is consistent: the model emits one structured call and the orchestrator chains calls.

Do not train v7 to emit long multi-step plans by default. Train it to emit one call plus an optional continuation_hint when it expects another step.

7. Voice mapping

Borrow App Shortcuts’ phrase discipline:

Training data should include shortcut-style phrase templates, not just developer-ish commands.

Lock v7 to this revised ten-verb set before SFT:

Revised verbReplacesWhy
queryread, most of searchAligns with EntityQuery; covers get/list/find/summarize.
performmost of actGeneric app/domain action when no specialized verb fits.
setpart of actBorrow SetValueIntent; value changes deserve a stable verb.
composecomposeKeep. Content generation is model-native.
clarifyaskMatches value/choice/confirmation resolution.
saysayKeep for voice/agent UX, but treat as response, not tool side effect.
query_memoryrecallMakes memory a query source and avoids vague nostalgia language.
waitwaitKeep for event/time coupling.
opennavigateBorrow OpenIntent; clearer than navigate.
schedulescheduleKeep as agent-level planning verb.

Drop top-level search. Use:

{"verb": "query", "args": {"source": "files", "mode": "search", "query": "invoice"}}

Use open only when the desired side effect is to show a URL, app, document, screen, or search-results surface.

Schema conventions to borrow

Action items for the v7 PRD

  1. Replace the proposed taxonomy table with the revised ten-verb set above.
  2. Add an EntityRef schema shared by all verbs.
  3. Replace ask examples with clarify(kind=...) examples.
  4. Fold search examples into query(mode=search).
  5. Rename navigate examples to open(target=...).
  6. Split act examples into perform(...) and set(...).
  7. Add shortcut-style phrase templates to Stage B data generation.
  8. Add held-out evals where the verb is known but the entity type is new.
  9. Add a destructive-action eval that requires clarify(kind=confirmation).
  10. Keep v7 implementation gated until the ANE arc and owner authorization land.