t1385: Add 11 chat platform integration agents with privacy/security assessments#2771
Conversation
…curity assessments Add subagent documentation for Telegram, Signal, WhatsApp, iMessage/BlueBubbles, Nostr, Slack, Discord, Google Chat, MS Teams, Nextcloud Talk, and Urbit. Each doc follows the simplex.md pattern with: YAML frontmatter, Quick Reference, architecture diagram, installation, bot API integration (TypeScript/Bun), detailed security considerations (encryption, metadata, push notification privacy, AI training data policies), aidevops integration patterns, Matterbridge bridging notes, and limitations. Add comprehensive cross-platform privacy comparison matrix to opsec.md covering all 18 messaging platforms with columns for encryption, metadata exposure, AI training policy, open-source status, and self-hosting capability. Includes threat model recommendations and AI training risk summary table. Update AGENTS.md domain index, subagent-index.toon, and matterbridge.md Related section with cross-references to all new platform docs. Closes #2747
|
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. 📒 Files selected for processing (13)
✨ 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 |
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 significantly expands the documentation for integrating with various chat platforms, providing detailed guides for bot development and critical security considerations. It aims to equip users with the necessary information to understand the privacy implications of each platform, including their encryption models, metadata handling, and AI training policies, thereby enabling more informed decisions when choosing communication tools. Highlights
Changelog
Activity
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
|
Accept worker versions for discord.md and msteams.md (already reviewed/merged). Keep our urbit.md (more detailed). Keep our AGENTS.md and subagent-index.toon (superset of all platforms).
🔍 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:58:45 UTC 2026 Generated by AI DevOps Framework Code Review Monitoring |
|
There was a problem hiding this comment.
Code Review
This pull request significantly expands the documentation for communication platform integrations by adding detailed guides for Discord, Google Chat, iMessage/BlueBubbles, Microsoft Teams, Nextcloud Talk, Nostr, Signal, Slack, Telegram, and Urbit. These new documents cover setup, architecture, API integration, security considerations (including E2E encryption status and AI training policies), and Matterbridge integration where applicable. The changes also update the main AGENTS.md and subagent-index.toon files to reflect these new services, and opsec.md is enhanced with comprehensive privacy comparisons and AI training risk summaries for all messaging platforms. Review comments highlight critical security vulnerabilities, such as a command injection in the Telegram bot example and missing webhook verification in the Google Chat bot, along with insecure handling of sensitive credentials in example configurations for Discord, MS Teams, and Slack. Other feedback includes improving type safety in Urbit bot code, robustly handling potentially undefined values in iMessage bot code, and correcting an invalid Adaptive Card property in MS Teams documentation.
I am having trouble creating individual review comments. Click here to see my feedback.
.agents/services/communications/telegram.md (523-526)
The example code for the /run command is vulnerable to critical command injection. It uses Bun.spawn to execute a shell command constructed by interpolating user-supplied input (command) into a string passed to bash -c. An attacker can break out of the intended command and execute arbitrary shell commands on the host system. This pattern can introduce a command injection vulnerability if the input is not thoroughly sanitized. Ensure robust input validation and sanitization are in place before executing external commands. To avoid command injection vulnerabilities when constructing shell commands dynamically, do not use eval. Instead, use a bash array to build the command and its arguments safely.
const proc = Bun.spawn(
["runner-helper.sh", "dispatch", command],
{ stdout: "pipe", stderr: "pipe" }
);
References
- To avoid command injection vulnerabilities when constructing shell commands dynamically, do not use
eval. Instead, use a bash array to build the command and its arguments safely.
.agents/services/communications/google-chat.md (169-172)
The Google Chat webhook handler example does not verify the authenticity of incoming requests. Google Chat sends an Authorization bearer token with every request, which should be verified to ensure the request originated from Google. Without this verification, an attacker who discovers the webhook URL can send forged events to the bot, potentially bypassing access controls or triggering unintended actions.
async fetch(req) {
if (req.method !== "POST") {
return new Response("Method not allowed", { status: 405 });
}
const authHeader = req.headers.get("Authorization");
if (!authHeader || !authHeader.startsWith("Bearer ")) {
return new Response("Unauthorized", { status: 401 });
}
// Note: In production, verify the bearer token using google-auth-library
.agents/services/communications/google-chat.md (362-363)
The documentation highlights that webhook verification is recommended but not enforced, posing a security risk. The provided example code for the webhook handler does not include this verification. It's critical to implement X-Goog-Channel-Token verification to prevent spoofing and unauthorized requests, especially since the URL is public. When documenting security practices, explicitly emphasize the preference for secure tools (e.g., gopass) over less secure alternatives (e.g., plaintext files), even if the alternatives are permitted with restrictions.
References
- When documenting security practices, explicitly emphasize the preference for secure tools (e.g., gopass) over less secure alternatives (e.g., plaintext files), even if the alternatives are permitted with restrictions.
.agents/services/communications/discord.md (164)
Using the non-null assertion operator ! on process.env.DISCORD_APP_ID can lead to runtime errors if the environment variable is not set. It's safer to add an explicit check or provide a fallback default value to prevent unexpected behavior.
.agents/services/communications/discord.md (475)
The botToken field in the configuration example is shown as an empty string. Although the 'Store securely' section mentions gopass or credentials.sh, it's crucial to explicitly state in a note near this configuration snippet that sensitive values like botToken should never be hardcoded or stored directly in this JSON file in a production environment. When documenting security practices, explicitly emphasize the preference for secure tools (e.g., gopass) over less secure alternatives (e.g., plaintext files), even if the alternatives are permitted with restrictions.
References
- When documenting security practices, explicitly emphasize the preference for secure tools (e.g., gopass) over less secure alternatives (e.g., plaintext files), even if the alternatives are permitted with restrictions.
.agents/services/communications/google-chat.md (161)
Using process.env.GOOGLE_CHAT_SA_KEY_PATH directly with no fallback or explicit check can cause runtime errors if the environment variable is not defined. Consider adding a check or a default value for robustness.
.agents/services/communications/imessage.md (231-233)
The example code for sending a message via the BlueBubbles API passes the BB_PASSWORD secret as a query parameter in the URL. Secrets in query strings are often logged in plaintext by web servers, proxies, and browser history, increasing the risk of credential leakage. The BlueBubbles API supports the Authorization header, which should be used instead to pass the password securely. When documenting security practices, explicitly emphasize the preference for secure tools (e.g., gopass) over less secure alternatives (e.g., plaintext files), even if the alternatives are permitted with restrictions.
await fetch(`${BB_URL}/api/v1/message/text`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": BB_PASSWORD
},
References
- When documenting security practices, explicitly emphasize the preference for secure tools (e.g., gopass) over less secure alternatives (e.g., plaintext files), even if the alternatives are permitted with restrictions.
.agents/services/communications/imessage.md (226)
The expression handle?.address suggests that handle might be null or undefined. If handle is indeed null, isAuthorized(undefined) would be called, which might not behave as expected or could lead to errors. It would be safer to explicitly check if handle.address exists before passing it to isAuthorized.
if (!handle?.address || !isAuthorized(handle.address)) { res.sendStatus(200); return; }
.agents/services/communications/msteams.md (263-266)
Directly accessing process.env variables (MSTEAMS_APP_ID, MSTEAMS_CLIENT_SECRET, MSTEAMS_TENANT_ID) without explicit checks or default values can lead to runtime errors if these environment variables are not set. It's good practice to validate their presence.
.agents/services/communications/msteams.md (304-305)
The fontType: "Default" property is not a standard or recognized property for TextBlock elements in Adaptive Cards version 1.5. This could lead to the property being ignored or causing rendering issues in Teams clients. Adaptive Cards typically use fontType: "default" or fontType: "monospace".
.agents/services/communications/msteams.md (740)
The clientSecret field in the configuration example is shown directly. While the 'Store Credentials' section advises using gopass or credentials.sh, it's important to explicitly note here that sensitive values like clientSecret should never be hardcoded or stored directly in this JSON file in a production environment. When documenting security practices, explicitly emphasize the preference for secure tools (e.g., gopass) over less secure alternatives (e.g., plaintext files), even if the alternatives are permitted with restrictions.
References
- When documenting security practices, explicitly emphasize the preference for secure tools (e.g., gopass) over less secure alternatives (e.g., plaintext files), even if the alternatives are permitted with restrictions.
.agents/services/communications/slack.md (205-206)
Directly accessing process.env variables (SLACK_BOT_TOKEN, SLACK_APP_TOKEN) without explicit checks or default values can lead to runtime errors if these environment variables are not set. It's good practice to validate their presence.
.agents/services/communications/slack.md (588-589)
The botToken and appToken fields in the configuration example are shown directly. While the 'Install and Obtain Tokens' section advises using gopass or credentials.sh, it's important to explicitly note here that sensitive values like these should never be hardcoded or stored directly in this JSON file in a production environment. When documenting security practices, explicitly emphasize the preference for secure tools (e.g., gopass) over less secure alternatives (e.g., plaintext files), even if the alternatives are permitted with restrictions.
References
- When documenting security practices, explicitly emphasize the preference for secure tools (e.g., gopass) over less secure alternatives (e.g., plaintext files), even if the alternatives are permitted with restrictions.
.agents/services/communications/urbit.md (448)
The type assertion (node as { post: { author: string; contents: { text?: string }[] } }).post bypasses TypeScript's type safety. If the incoming node structure is not guaranteed to match this type, it could lead to runtime errors. Consider adding runtime checks or a type guard to safely access properties, especially when dealing with external data.



Summary
opsec.mdcovering all 18 messaging platforms with threat model recommendationsPrivacy Assessment Highlights
Files Changed
.agents/services/communications/{telegram,signal,whatsapp,imessage,nostr,slack,discord,google-chat,msteams,nextcloud-talk,urbit}.mdopsec.md(privacy matrix),AGENTS.md(domain index),subagent-index.toon,matterbridge.md(Related section)Closes #2747