WhatsApp skill package extracted from ia_orchestrator core
Project description
zafiro-skill-whatsapp
Autonomous WhatsApp skill package for the Zafiro orchestrator ecosystem.
This package is designed to run as an external skill pack with no direct imports from core app.* modules or other skill packages.
Documentation map
- Core integration guide:
docs/CORE_INTEGRATION.md - Full tools contract:
docs/TOOLS_REFERENCE.md - Skill manifest/prompt:
skills/whatsapp.md
What this package contains
- Skill manifest:
skills/whatsapp.md - Skill entry-point registrar:
zafiro_skill_whatsapp.extensions.skills.whatsapp:register_whatsapp_skill - Tool entry-point registrar:
zafiro_skill_whatsapp.extensions.tools.whatsapp_tools:register_whatsapp_tools - WhatsApp adapter split by domain (
runtime_ops,message_ops,contacts_ops,sync_ops) - Policy tools (outbound allowlist and inbound auto-reply controls)
- CLI helpers for
/wa-style commands - Local integration layer (
zafiro_skill_whatsapp.integrations) with optional host hooks
Adapter layout
adapters/whatsapp/
├── __init__.py # public facade + centralized legacy module aliases
├── __main__.py # package launcher entrypoint
├── runtime_ops/ # runtime lifecycle/state/config/types
├── message_ops/ # inbound/outbound/processing/auto-reply/queue
├── contacts_ops/ # directory/discovery/policy
└── sync_ops/ # history/contacts/all-sync orchestration
Backward compatibility: legacy imports like adapters.whatsapp.contacts,
adapters.whatsapp.outbound, adapters.whatsapp.state, etc. are exposed by
central alias registration in adapters/whatsapp/__init__.py.
Runtime note:
- The old flat runtime modules (
config,state,connection,types) were moved toruntime_ops/. - Legacy import paths remain available through centralized aliasing in
adapters/whatsapp/__init__.py.
Local-only artifacts
Keep local execution artifacts out of git (logs, data, media, plan exports). For plan files generated during local experimentation, use:
local_runtime/plans_created/
This package .gitignore excludes these folders by default:
logs/data/media/local_runtime/plans_created/
Install
From repository root:
./venv/bin/python -m pip install -e packages/whatsapp_skill
Console Testing Script
There is now a standalone console tester for this package:
Quick shortcut from repo root (recommended):
./packages/whatsapp_skill/scripts/wa.sh tools
./packages/whatsapp_skill/scripts/wa.sh tool wa_policy
./packages/whatsapp_skill/scripts/wa.sh tool save_whatsapp_contact "Gerald|50577427779|true|owner"
./packages/whatsapp_skill/scripts/wa.sh wa "status"
./packages/whatsapp_skill/scripts/wa.sh wa "sync"
./packages/whatsapp_skill/scripts/wa.sh wa "sync Zafiro"
./packages/whatsapp_skill/scripts/wa.sh wa "sync Zafiro 50 12 8"
./packages/whatsapp_skill/scripts/wa.sh repl
Direct python entrypoint (equivalent):
python packages/whatsapp_skill/scripts/wa_console.py list-tools
python packages/whatsapp_skill/scripts/wa_console.py run-tool wa_policy
python packages/whatsapp_skill/scripts/wa_console.py run-tool save_whatsapp_contact "Gerald|50577427779|true|owner"
python packages/whatsapp_skill/scripts/wa_console.py run-wa "status"
python packages/whatsapp_skill/scripts/wa_console.py run-wa "sync"
python packages/whatsapp_skill/scripts/wa_console.py run-wa "sync Zafiro"
python packages/whatsapp_skill/scripts/wa_console.py run-wa "sync Zafiro 50 12 8"
python packages/whatsapp_skill/scripts/wa_console.py repl
What it covers:
run-tool: Executes any registered WhatsApp tool from this skill package.run-wa: Executes/waadmin subcommands (on,off,status,link,unlink,actor, etc.).repl: Interactive shell where you can test tool/admin commands quickly.
/wa sync UX (recommended):
/wa sync: global adaptive sync validation./wa sync <target> [limit] [max_rounds] [wait_seconds]: one-shot target sync + archive read.- Compatibility aliases still available:
sync auto,sync oneshot,sync os,sync all.
Skill and tools
Skill name: WhatsApp
Declared tools:
save_whatsapp_contactsave_whatsapp_contactslist_whatsapp_contactssave_whatsapp_groupsave_whatsapp_groupslist_whatsapp_groupssend_whatsappread_whatsappread_whatsapp_archivereply_whatsappwhatsapp_statuswhatsapp_recoverwa_sync_autoget_group_recent_messageswa_policywa_set_autoreply(legacy compatibility)wa_allow_sendwa_block_sendwa_allow_replywa_block_replylist_whatsapp_tools
See docs/TOOLS_REFERENCE.md for exact argument formats, examples, and output semantics for each tool.
Runtime model
- Standalone defaults live in
zafiro_skill_whatsapp.integrations. - Archive/history, contacts, groups and access-rules use ORM-backed tables created by this skill.
- Data is scoped by connected WhatsApp number (multi-account safe).
- If host ORM is configured (
orm_session_factoryororm_engine_factory), tables are created/reused there. - If host ORM is not configured, the skill logs a warning and falls back to local SQLite at
WHATSAPP_LOCAL_DB_PATH. - Optional host runtime hooks can be provided with
configure_host_runtime(...)to bridge:- active-agent listing
- task execution
- effective-agent resolution
- host ORM session/engine and storage account resolver
See docs/CORE_INTEGRATION.md for a full bootstrap example and deployment checklist.
Host integration contract
- Contract metadata API:
get_host_runtime_contract(). - Contract validation API:
validate_host_runtime_contract(...). - Fail-fast API:
assert_host_runtime_contract(...).
Expected hooks by mode:
- Core shared database mode (recommended):
- required:
orm_session_factoryororm_engine_factory
- required:
- Multi-account strict mode (recommended):
- required:
resolve_storage_account_key
- required:
- Optional:
storage_schema_initializerget_active_agents,execute_task,resolve_effective_agent
Bootstrap order (recommended):
configure_host_runtime(...)assert_host_runtime_contract(...)- Load entry points and register skills/tools
Dependency contract:
- Python dependencies are installed by package manager when this skill is added:
sqlalchemy,python-magic,neonize
- System dependency required by runtime:
libmagic(OS package; must be present on host image)
Entry points
pyproject.toml exports:
zafiro.skills->whatsappzafiro.tools->whatsapp
Key environment variables
WHATSAPP_SESSION_NAMEWHATSAPP_DEVICE_PLATFORMWHATSAPP_DEVICE_OSWHATSAPP_DEVICE_VERSIONWHATSAPP_OUTBOX_DIRWHATSAPP_CONTACTS_PATHWHATSAPP_ACCESS_RULES_PATHWHATSAPP_MEDIA_DIRWHATSAPP_ACTIVE_ACCOUNT_PATHMESSAGE_ARCHIVE_PATHWHATSAPP_LOCAL_DB_PATHRECENT_SESSION_HISTORY_LIMITWHATSAPP_FORWARD_URLWHATSAPP_FORWARD_SECRETWHATSAPP_SIMULATE_TYPINGWHATSAPP_TYPING_MIN_MSWHATSAPP_TYPING_MAX_MSWHATSAPP_TYPING_MS_PER_CHARWHATSAPP_SEND_AVAILABLE_PRESENCEWHATSAPP_AUTO_MARK_READWHATSAPP_AUTO_REPLY_ENABLED
Validation checklist (current)
- No AST-level imports from
app,zafiro_skill_hostal, orzafiro_skill_media - Package imports succeed:
zafiro_skill_whatsappzafiro_skill_whatsapp.integrationszafiro_skill_whatsapp.extensions.tools.whatsapp_toolszafiro_skill_whatsapp.extensions.skills.whatsapp
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zafiro_skill_whatsapp-0.1.1.tar.gz.
File metadata
- Download URL: zafiro_skill_whatsapp-0.1.1.tar.gz
- Upload date:
- Size: 70.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a40281c9f27c8f3a07ff03c00ba1f23b0175c2abf9a30dd906dc6236178c9d18
|
|
| MD5 |
e2ee1d4e8d246d9621b7e6fa5c7251da
|
|
| BLAKE2b-256 |
ee52de5f131d1d6933a81a7d77c4a33ad9957aa1c82caf50d8efb3adae5b9cfe
|
Provenance
The following attestation bundles were made for zafiro_skill_whatsapp-0.1.1.tar.gz:
Publisher:
pypi-publish.yml on Zafiro-IA/whatsapp-skill
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zafiro_skill_whatsapp-0.1.1.tar.gz -
Subject digest:
a40281c9f27c8f3a07ff03c00ba1f23b0175c2abf9a30dd906dc6236178c9d18 - Sigstore transparency entry: 1429888364
- Sigstore integration time:
-
Permalink:
Zafiro-IA/whatsapp-skill@448b3f75b22e10a0170b8b75cd6b0ece677cd390 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Zafiro-IA
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@448b3f75b22e10a0170b8b75cd6b0ece677cd390 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file zafiro_skill_whatsapp-0.1.1-py3-none-any.whl.
File metadata
- Download URL: zafiro_skill_whatsapp-0.1.1-py3-none-any.whl
- Upload date:
- Size: 73.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b5dfa12018eee9ba4988f52447d4a45d2b8f5d30fbc2648c2ef5e2f6ca254b7
|
|
| MD5 |
ec566f61707033acaf4d5500ea1e9150
|
|
| BLAKE2b-256 |
c3c6e8e4e5cc16a7084de0f7e771e805c972bcdede60d1ff1d6cc8396a02dc79
|
Provenance
The following attestation bundles were made for zafiro_skill_whatsapp-0.1.1-py3-none-any.whl:
Publisher:
pypi-publish.yml on Zafiro-IA/whatsapp-skill
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zafiro_skill_whatsapp-0.1.1-py3-none-any.whl -
Subject digest:
6b5dfa12018eee9ba4988f52447d4a45d2b8f5d30fbc2648c2ef5e2f6ca254b7 - Sigstore transparency entry: 1429888376
- Sigstore integration time:
-
Permalink:
Zafiro-IA/whatsapp-skill@448b3f75b22e10a0170b8b75cd6b0ece677cd390 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Zafiro-IA
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@448b3f75b22e10a0170b8b75cd6b0ece677cd390 -
Trigger Event:
workflow_dispatch
-
Statement type: