Communication tools (comms toolset)¶
AbstractRuntime’s AbstractCore integration can expose an optional comms toolset (email, WhatsApp, Telegram). These tools are executed as durable tool calls via EffectType.TOOL_CALLS:
- tool requests/results are recorded in the ledger (src/abstractruntime/core/models.py)
- execution is controlled by the configured ToolExecutor (src/abstractruntime/integrations/abstractcore/tool_executor.py)
This document covers what is implemented in this repo: toolset gating + wiring. Provider credentials/config are defined by AbstractCore tools.
Implementation pointers (this repo):
- toolset gating: src/abstractruntime/integrations/abstractcore/default_tools.py
- tool execution: src/abstractruntime/integrations/abstractcore/tool_executor.py
Enable (opt-in)¶
The comms toolset is disabled by default. Enable it via env vars (checked by default_tools.comms_tools_enabled()):
ABSTRACT_ENABLE_COMMS_TOOLS=1(enable email + WhatsApp + Telegram)ABSTRACT_ENABLE_EMAIL_TOOLS=1(email only)ABSTRACT_ENABLE_WHATSAPP_TOOLS=1(WhatsApp only)ABSTRACT_ENABLE_TELEGRAM_TOOLS=1(Telegram only)
Discover what gets enabled¶
python - <<'PY'
from abstractruntime.integrations.abstractcore.default_tools import list_default_tool_specs
comms = [s for s in list_default_tool_specs() if s.get("toolset") == "comms"]
print([s.get("name") for s in comms])
PY
Wire into a runtime (local tool execution)¶
import os
from abstractruntime.integrations.abstractcore import MappingToolExecutor, create_local_runtime
from abstractruntime.integrations.abstractcore.default_tools import get_default_tools
os.environ["ABSTRACT_ENABLE_COMMS_TOOLS"] = "1"
tool_executor = MappingToolExecutor.from_tools(get_default_tools())
rt = create_local_runtime(provider="ollama", model="qwen3:4b", tool_executor=tool_executor)
Notes:
- Install extras: pip install "abstractruntime[abstractcore]" (or abstractruntime[mcp-worker]).
- In untrusted deployments, prefer passthrough tools so a host/worker boundary approves and executes tool calls (PassthroughToolExecutor in src/abstractruntime/integrations/abstractcore/tool_executor.py).
- For local bridge-owned delivery flows, ApprovalToolExecutor can auto-run the Telegram send tools while requiring approval for email, WhatsApp, unknown tools, and write/command-style tools by default.
Credentials/config (provided by AbstractCore)¶
The actual comms tools live in AbstractCore:
- email + WhatsApp: abstractcore.tools.comms_tools
- Telegram: abstractcore.tools.telegram_tools
AbstractRuntime does not store secrets in run state. Secrets should be supplied as environment variables in the process that executes the tool calls.
Practical starting points (provided by AbstractCore; see pyproject.toml for the minimum supported version):
- Email:
- ABSTRACT_EMAIL_ACCOUNTS_CONFIG=/path/to/emails.yaml (YAML/JSON config), or ABSTRACT_EMAIL_{IMAP,SMTP}_* env vars
- Passwords are resolved indirectly via *_PASSWORD_ENV_VAR (default: EMAIL_PASSWORD)
- Repo template (this repo): emails.config.example.yaml (static examples: OVH + Gmail)
- WhatsApp (Twilio):
- defaults use TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN
- Telegram:
- transport selection via ABSTRACT_TELEGRAM_TRANSPORT (tdlib default, or bot_api)
- bot token default env var: ABSTRACT_TELEGRAM_BOT_TOKEN
Security and privacy notes¶
- Tool calls and results are durable: message bodies, recipients, and response metadata may be persisted in the ledger and/or checkpoint vars.
- Keep secrets out of tool arguments; prefer env-var resolution. Even when a tool accepts
*_env_varparameters, those should be names, not secret values. - Treat run storage and ledgers as sensitive when enabling comms tools.
See also¶
integrations/abstractcore.md— AbstractCore wiring (LLM_CALL,TOOL_CALLS)provenance.md— tamper-evident ledger