FURPS Chatbot Ecosystem - status-im/status-wiki GitHub Wiki
FURPS: Chatbot Ecosystem
Functionality
- Support a range of bot types, including:
- Broadcaster bots: emit messages to a defined audience or channel
- Listener bots: respond to or process events from specific sources
- Assistant bots: provide contextual or task-based help
- Event responder bots: react to time-based or triggered events
- Community tools: Example polls, moderation bots, onboarding flows (TBD)
- Enable rich conversational interaction:
- Command parsing (example:
/poll)
- Inline responses with markdown and button components
- Conversation threading:
- Replies are grouped under the invoking message (threaded view)
- Bot interactions maintain state scoped to the conversation context
- Example:
- When a user sends a command (e.g.
/poll), all bot responses to that command are grouped under it, not scattered in the main flow.
- If a user replies to a bot message, the reply is nested or linked clearly to the original message.
- Bots can manage and track conversation state within a thread, instead of treating each message as independent.
- Support local, privacy-preserving execution using sandboxed runtimes (e.g. QuickJS)
- Integration with Waku for decentralised messaging transport
- Support for both interactive and passive bot modes.
- Example: notify on events vs. respond to prompts
- Granular permissions model for bots
- Bots must declare their requested capabilities in a structured manifest. All permissions are opt-in and controlled by the user. Categories include:
- Message Access:
None: Can only see direct mentions (default)
Recent: Can access all messages in a single thread from the point they were installed
Full Chat: Can access the entire chat history and new incoming messages
- Media Access:
- Read image attachments, audio, and documents
- No microphone or camera access
- Identity Access:
- View public identity information (chat key, ENS name, wallet address, (DID?))
- Request user cryptographic signatures (user-prompted only)
- Default: No identity access
- Network Access:
- Fully blocked by default
- Can be enabled to:
- Perform outbound HTTP requests
- Use webhooks or polling
- May be restricted to allowlisted endpoints
- Network-active bots should be flagged in the UI!
- Channel Access:
Thread-only (default) (specific 1:1, group, or community chat)
Multi-Chat (explicit user-granted chat list)
Global (rare, requires strong justification and visual warnings)
- Interaction Scope:
Passive: (default) Can only respond when mentioned or invoked
Reactive: Can reply to any message within its allowed message scope
Proactive: Can initiate conversations or send messages without being triggered (e.g. scheduled alerts, background monitoring)
- Execution Mode Declaration:
- Visual badges should indicate elevated permissions
- User Controls & Transparency:
- Explicit consent prompts at install/use
- In-app dashboard for reviewing and revoking bot permissions
- Bots must appear in participant lists for any chat they observe
- Auditability: all granted permissions clearly visible to the user
- The model should include:
- Permission Dashboard for users to audit and adjust what each bot can access at any time.
- Default Deny Policy — bots should be granted no permissions by default unless explicitly approved.
- Visual Indicators (e.g. shield icons or labels) to show when a bot is running with elevated or risky permissions.
Usability
- Simple, intuitive UX for invoking bots via @ mentions, commands (
/help), or emoji triggers (🦄🪄)
- Configurable responses with markdown support and buttons
- Visual distinction between bot messages and human messages (e.g. icon or style)
- Bot messages should include distinctive icons, badges (e.g. 🤖), or alternate message bubble styling.
- Optionally, bots may use a clearly marked name prefix or display tag (example
[BOT]) to signal automation.
- Clear onboarding and affordances for recognising bot profiles
- When a bot is first added or encountered, users should see a clear explanation of what the bot does and what permissions it requests.
- Bot profiles should indicate their role and include a description, optional usage examples, and runtime information (permissions).
- Tooltips or UI overlays can reinforce that an account is a bot and not a human participant.
- Option to mute, block, or rate bot usefulness
- Unified invocation pattern across mobile and desktop
- Support for localisation (i18n) and accessibility (a11y) including screen-reader friendly commands, high-contrast modes, and keyboard navigation.
Reliability
- Bots should execute reliably without crashing the app or stalling conversations
- Fallback behaviour for unsupported or untrusted scripts
- Resilience to malformed bot responses (e.g. excessive output or infinite loops)
- Message retries if connectivity fails (especially in asynchronous contexts)
- Logs for debugging (only client-side for local bots)
Performance
- Minimal resource overhead for local bot execution
- Fast message response (within 500ms ideal target for local bots)
- Efficient caching and load-time for embedded runtimes (e.g. lazy loading QuickJS context)
- Optional execution limits (e.g. JS runtime memory/time constraints)
- Optimised serialisation for Waku transport if used
Supportability / Security
- Bots MUST be sandboxed, with no access to local files, device sensors, or identity unless explicitly granted
- Developers should be able to easily write, package, and share bots with a clear manifest format
- Support version pinning and interface stability for long-term bot compatibility
- Encourage open-source or auditable bot packages
- Bots should be reviewed and rated by the community where applicable
- Transparent permission declarations must be enforced
- Support deterministic execution (for repeatable test/debug flows)