t1385.4: Add iMessage/BlueBubbles subagent doc#2762
Conversation
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request introduces comprehensive documentation and registration for integrating iMessage and BlueBubbles into bot workflows. It provides detailed guides on setting up macOS hosts, utilizing the BlueBubbles REST API for full-featured interactions, or the Highlights
Changelog
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
|
Warning Rate limit exceeded
⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📥 CommitsReviewing files that changed from the base of the PR and between 24491b77f185209bd13444585c8c486e7a06040d and 5b12d0c. 📒 Files selected for processing (1)
WalkthroughIntroduces comprehensive documentation for iMessage/BlueBubbles bot integration at Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Suggested labels
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🔍 Code Quality Report�[0;35m[MONITOR]�[0m Code Review Monitoring Report �[0;34m[INFO]�[0m Latest Quality Status: �[0;34m[INFO]�[0m Recent monitoring activity: 📈 Current Quality Metrics
Generated on: Tue Mar 3 04:44:24 UTC 2026 Generated by AI DevOps Framework Code Review Monitoring |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
.agents/services/communications/imessage.md (1)
406-426: Consider using bundle ID or exact match for process detection.The
check_and_restartfunction acceptsbundle_idbut doesn't use it. Usingpgrep -x(exact match) for "Messages" or leveraging the bundle ID would be more reliable.♻️ Optional: Use exact match or bundle ID
check_and_restart() { local app_name="$1" local bundle_id="$2" - if ! pgrep -f "$app_name" > /dev/null 2>&1; then + # Use exact match for reliability + if ! pgrep -x "$app_name" > /dev/null 2>&1; then echo "$(date): $app_name not running, restarting..." open -a "$app_name" sleep 5 - if pgrep -f "$app_name" > /dev/null 2>&1; then + if pgrep -x "$app_name" > /dev/null 2>&1; then echo "$(date): $app_name restarted successfully"Or use
pgrep -xconsistently, since "Messages" as an exact process name is correct for Messages.app.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.agents/services/communications/imessage.md around lines 406 - 426, The check_and_restart function takes a bundle_id but currently ignores it and uses pgrep -f on app_name which can match substrings; update check_and_restart to use a reliable detection method: either use pgrep -x with the exact process name (reference: check_and_restart and its app_name parameter) or resolve the running process by bundle id (reference: bundle_id parameter) — e.g., query the app's bundle identifier via system tools (mdls/osascript/ps + grep for kMDItemCFBundleIdentifier) or use pgrep with the exact process name, then only call open -a when truly not running; keep the existing restart logic and return codes unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.agents/services/communications/imessage.md:
- Around line 122-127: Replace the Homebrew cask suggestion for installing
BlueBubbles (the line containing "brew install --cask bluebubbles") with a
deprecation warning: state that the bluebubbles Homebrew cask has been
deprecated and will be disabled on 2026-09-01 due to a macOS Gatekeeper issue,
advise users that the Homebrew method will stop working after that date, and
instruct readers to download the DMG directly from the GitHub Releases page
(https://github.com/BlueBubblesApp/bluebubbles-server/releases) as the
recommended installation method; keep the existing "Download latest release from
GitHub" heading and link but make the DMG recommendation explicit and prominent.
- Around line 485-493: Update the table rows "Encryption (legacy)", "Encryption
(modern)", "RSA key wrapping", and "ECDSA P-256" to separate content encryption,
key-wrapping, and authentication mechanisms and clearly map each to the correct
Apple protocol (classic iMessage vs. PQ3); remove the unsupported explicit
"RSA-2048" claim and instead state "RSA-OAEP / ECIES (per Apple docs; modulus
size not specified)" and note ECIES availability since iOS 13; change "ECDSA
P-256" wording to indicate it is used for signing/authentication (not
encryption) where applicable; replace the vague "~2020" timeline with explicit
references (iOS 13 for ECIES/EC support, PQ3 for AES-256 payloads/attachments)
and keep "Contact Key Verification (iOS 17.2+)" and IDS/per-device encryption
statements as confirmed.
---
Nitpick comments:
In @.agents/services/communications/imessage.md:
- Around line 406-426: The check_and_restart function takes a bundle_id but
currently ignores it and uses pgrep -f on app_name which can match substrings;
update check_and_restart to use a reliable detection method: either use pgrep -x
with the exact process name (reference: check_and_restart and its app_name
parameter) or resolve the running process by bundle id (reference: bundle_id
parameter) — e.g., query the app's bundle identifier via system tools
(mdls/osascript/ps + grep for kMDItemCFBundleIdentifier) or use pgrep with the
exact process name, then only call open -a when truly not running; keep the
existing restart logic and return codes unchanged.
ℹ️ Review info
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📥 Commits
Reviewing files that changed from the base of the PR and between ac2beaf and 24491b77f185209bd13444585c8c486e7a06040d.
📒 Files selected for processing (2)
.agents/services/communications/imessage.md.agents/subagent-index.toon
There was a problem hiding this comment.
Code Review
This pull request introduces comprehensive documentation for iMessage integration, which is a valuable addition. The new document is well-structured and detailed. I've included one suggestion to refine the provided keepalive script, improving its robustness and adherence to the project's scripting guidelines.
| check_and_restart() { | ||
| local app_name="$1" | ||
| local bundle_id="$2" | ||
|
|
||
| if ! pgrep -f "$app_name" > /dev/null 2>&1; then | ||
| echo "$(date): $app_name not running, restarting..." | ||
| open -a "$app_name" | ||
| sleep 5 | ||
| if pgrep -f "$app_name" > /dev/null 2>&1; then | ||
| echo "$(date): $app_name restarted successfully" | ||
| else | ||
| echo "$(date): ERROR: Failed to restart $app_name" | ||
| return 1 | ||
| fi | ||
| fi | ||
| return 0 | ||
| } | ||
|
|
||
| check_and_restart "Messages" "com.apple.MobileSMS" | ||
| check_and_restart "BlueBubbles" "com.bluebubbles.server" |
There was a problem hiding this comment.
The imessage-keepalive.sh script template can be improved for clarity and robustness.
- Unused Parameter: The
check_and_restartfunction defines abundle_idparameter that is never used. It should be removed from the function definition and its calls to simplify the code. - Error Suppression: The script uses
> /dev/null 2>&1to suppress all output frompgrep. It's better to only redirect stdout (> /dev/null) and let stderr be printed. This ensures that ifpgrepfails for reasons other than not finding a process (e.g., system issues), the error message will be visible, which is crucial for debugging.
| check_and_restart() { | |
| local app_name="$1" | |
| local bundle_id="$2" | |
| if ! pgrep -f "$app_name" > /dev/null 2>&1; then | |
| echo "$(date): $app_name not running, restarting..." | |
| open -a "$app_name" | |
| sleep 5 | |
| if pgrep -f "$app_name" > /dev/null 2>&1; then | |
| echo "$(date): $app_name restarted successfully" | |
| else | |
| echo "$(date): ERROR: Failed to restart $app_name" | |
| return 1 | |
| fi | |
| fi | |
| return 0 | |
| } | |
| check_and_restart "Messages" "com.apple.MobileSMS" | |
| check_and_restart "BlueBubbles" "com.bluebubbles.server" | |
| check_and_restart() { | |
| local app_name="$1" | |
| if ! pgrep -f "$app_name" > /dev/null; then | |
| echo "$(date): $app_name not running, restarting..." | |
| open -a "$app_name" | |
| sleep 5 | |
| if pgrep -f "$app_name" > /dev/null; then | |
| echo "$(date): $app_name restarted successfully" | |
| else | |
| echo "$(date): ERROR: Failed to restart $app_name" | |
| return 1 | |
| fi | |
| fi | |
| return 0 | |
| } | |
| check_and_restart "Messages" | |
| check_and_restart "BlueBubbles" |
References
- In shell scripts, avoid blanket suppression of errors with '2>/dev/null'. For 'declare -f', redirecting only stdout ('>/dev/null') is sufficient as it does not output to stderr, allowing potential syntax errors to remain visible.
c58a8c3 to
d64ab26
Compare
…review Address CodeRabbit requested changes on imessage.md: - Fix Quick Reference encryption line to accurately describe protocol versions - Replace inaccurate encryption bullet points with table separating content encryption, key wrapping, and signing/authentication for classic vs PQ3 - Remove unsupported RSA-2048 claim (Apple docs don't specify modulus size) - Correct ECDSA P-256 as signing/authentication, not encryption/key agreement - Fix AES-256-GCM to AES-256-CTR per Apple Platform Security Guide - Add PQ3 details (Kyber-768 + P-256 ECDH, periodic rekeying)
d64ab26 to
5b12d0c
Compare
🔍 Code Quality Report�[0;35m[MONITOR]�[0m Code Review Monitoring Report �[0;34m[INFO]�[0m Latest Quality Status: �[0;34m[INFO]�[0m Recent monitoring activity: 📈 Current Quality Metrics
Generated on: Tue Mar 3 05:05:43 UTC 2026 Generated by AI DevOps Framework Code Review Monitoring |
|
This PR was superseded by the batch merge in PR #2771 (feat: t1385 — add 11 chat platform integration agents), which merged all the content from this branch. Closing as the content is already in main. |
|



Summary
.agents/services/communications/imessage.md— comprehensive subagent doc for iMessage bot integrationimessageinsubagent-index.toonunder CommunicationsWhat's Covered
Closes #2751
Summary by CodeRabbit
Documentation
Chores