Skip to content

feat(mobile): message the Bestie from Siri and Shortcuts - #9517

Open
brow wants to merge 5 commits into
mainfrom
mobile-siri-bestie-dm
Open

brow wants to merge 5 commits into
mainfrom
mobile-siri-bestie-dm

Conversation

@brow

@brow brow commented Nov 15, 2026 •

Copy link
Copy Markdown
Collaborator

Adds a Message my Bestie action for Siri and Shortcuts. Siri asks what to say, confirms with the Bestie's name ("Send “…” to Astra?"), and posts the message in your DM with the Bestie, without opening Buzz. The Bestie's reply arrives as a normal notification, in the same DM the Home star opens.

This is the iOS 16+ App Shortcut from ADR 0005. Follow-ups, not in this PR: the iOS 27 messages.sendMessage schema intent, naming other recipients, a separate "Start a chat with my Bestie" intent for a new Solo chat, and opening Buzz with a draft when a send fails.

How it works

  • The App Intent runs without opening the app and hands the text to Dart over a method channel. It waits up to 20 s for Home to say it is ready, and runs one send at a time.
  • A background launch already starts the Flutter engine and builds Home (ADR 0004 records the measurement). So a small QuickSendHost, which the app hands Home as an invisible background widget, takes the send. Nothing is reimplemented natively.
  • Before confirming, Swift asks Dart for the saved Bestie's pubkey and name; the send then goes to exactly that agent, so a choice this phone hasn't synced yet is caught at the confirmation.
  • The send reuses the Home star's lookup for the Bestie DM (opening it with the relay's find-or-create DM command when it isn't loaded) and posts with the same SendMessage the composer uses.
  • If Buzz has been in the background past its 5 s grace period, the relay session has closed its socket. The send reopens it, then lets the normal background pause start over.
  • A message the relay rate-limits is retried (up to 3 tries); the relay turned it away, so a retry can't duplicate it. Any other failure isn't retried, since the message might have landed.
  • The confirmation is pinned to the community and account it was shown in: if Buzz switches either before the message goes out, the send is refused.
  • If the send fails, or Buzz can't tell whether it landed (no answer from the relay), the message is saved as the Bestie DM's composer draft, after any draft already there, and Siri says so ("Buzz isn't sure that sent. Check your Bestie DM before trying again." when the outcome is unknown). A successful send leaves the draft alone. Limits: if the DM can't be found or opened, there is nowhere to save it and Siri says the message wasn't saved, and the app being killed mid-send isn't covered.
  • Refusals (no Bestie, offline, empty or too long, switched community) come back as a short message Siri reads.

Regressions

  • Nothing existing changes behavior: the host only answers this method channel, and the action does nothing until someone runs it. Its bugs stay inside the quick send path.
  • The Home star's DM lookup moved into cachedBestieConversation unchanged, so the star behaves as before.
  • A composer that is open on screen now shows a draft another writer saved for it (here, a failed quick send) instead of overwriting it with the next keystroke. It listens without rebuilding, and its own saves are ignored.
  • A background wake pays the cost of starting the app's Dart code, which iOS already does for this launch.

Before / after

Before: no Buzz actions in Shortcuts After
Shortcuts Library before Shortcuts Library after, listing Buzz Dev under Apps
Asks what to say Confirms (names the Bestie) Sent
Prompt Shows "Send “…” to Bestie's name?" (capture omitted: it shows an internal agent name) Sent

The DM result and a demo video show internal names, so they're shared internally rather than here.

Testing

  • Added test, quick_send_test.dart journey: Home reports ready; Siri's Bestie lookup is refused with no Bestie, then returns the chosen Bestie's pubkey and name; a send confirmed for another community is refused; an empty send is refused without publishing; a send while Buzz is backgrounded and its socket closed reconnects, opens the DM with the Bestie, survives a rate-limited first try, posts the message in that DM tagged to the Bestie, and hands the session back to its background pause; a second send goes to the same DM and leaves the person's draft there as it was; a send whose answer is lost is reported as unsure and kept in that draft after the person's own text, with its mentions; a socket that drops just before the message goes out keeps it too; leaving Home reports unready. Removing the rate-limit retry, the community check or the draft save fails it.
  • Extended the composer's share-delivery journey: a draft saved by another writer while the composer is open shows in the composer and survives the next keystroke, and survives an ordinary send that was pending when it arrived and then fails. Removing the composer's listener or its revision bump fails it.
  • iPhone 17 Pro simulator (iOS 27), Builderlab community with a Bestie, automated with AXe:
    • Cold: Buzz terminated, ran the action from Shortcuts, the confirmation named the Bestie, "Sent.", and the message was in the Bestie DM with its reply. No Solo chat was created.
    • Warm: Buzz in the background for 10 s, ran it again, "Sent.", same DM.
    • At-risk flows: sent a typed message from the DM composer, went back to Home, and the Home star reopened the same DM.
  • just mobile-check mobile-test passes.

buzz-review-completed

Adds a Message my Bestie App Intent and App Shortcut. Siri asks what to
say, names the Bestie in its confirmation and posts the message in the
person's DM with the Bestie, without opening Buzz. A background launch
already builds Home, so a small host widget answers the intent over a
method channel, reopening the relay session if the app's background
grace period had closed it. ADRs 0004 and 0005 record the engine and
intent decisions.

Signed-off-by: Tom Brow <tomb@squareup.com>
@brow

brow commented Nov 15, 2026

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 15, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-15T05:38:32.348623Z 00e4a2e Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2bcccf80fc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mobile/ios/Runner/QuickSend.swift Resolved
When a quick send fails or Buzz can't tell whether it landed, its text is saved as the Bestie DM's composer draft, after any draft already there, and Siri says so. A successful send leaves the draft alone. An open composer now shows a draft saved by another writer instead of overwriting it.

Signed-off-by: Tom Brow <tomb@squareup.com>
@brow

brow commented Nov 15, 2026

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cf3c20afdd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

The send and the DM lookup now catch every failure, including a socket that drops just before publishing, and each draft save first checks the confirmed community. An open composer counts a draft another writer saves as a new revision, so a pending ordinary send that fails can't restore over it.

Signed-off-by: Tom Brow <tomb@squareup.com>
@brow

brow commented Nov 15, 2026

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: be396a0e80

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

… up in

Capture the scope before the Bestie and profile awaits and check it
after, so a community switch mid-lookup can't pair one community's
Bestie with another's scope.

Signed-off-by: Tom Brow <tomb@squareup.com>
@brow

brow commented Nov 15, 2026

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. What shall we delve into next?

Reviewed commit: 00e4a2edb2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@brow
brow marked this pull request as ready for review November 15, 2026 05:36
@brow
brow requested a review from a team as a code owner November 15, 2026 05:36
@brow
brow deployed to codex-review November 15, 2026 06:22 — with GitHub Actions Active
@github-actions github-actions Bot added the codex-security-review-current The posted Codex security review matches its recorded range. label Nov 15, 2026
@github-actions

Copy link
Copy Markdown

🔐 Codex Security Review

Note: This is an automated, security-focused review generated by Codex.
Use it as a supplement to human review; false positives are possible.

Scope

  • Exact PR diff: 69742376a9b1b15da62295f54a053913540722c1...00e4a2edb24d7042d3d83753366fe65f83be0c3e
  • Model: gpt-6.1-sol

💡 Click "edited" above to see earlier reviews for this PR.


Review Summary

Overall Risk: NONE

No concrete security, correctness, or reliability findings were identified in the authorized PR range.

Findings

No concrete security, correctness, or reliability findings were identified.

Notes

  • Review used read-only source inspection. Builds and tests were not run, and iOS background behavior was not verified on a device.

Generated by Codex Security Review |
Requested by: @brow |
Workflow run

This branch was successfully deployed

1 active deployment
codex-review — 00e4a2ed Deployed Nov 15, 2026 by brow via Run Codex Security Review #15242
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

codex-security-review-current The posted Codex security review matches its recorded range.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants