A Claude Code skill for hotel and villa-rental operators. When you change pricing, availability, or terms, it drafts a personalised notification to every partner agency at once — never staggered, never partial — so all your distribution partners are kept in sync.
Built on the WAT framework (Workflows, Agents, Tools): probabilistic AI handles reasoning, deterministic scripts handle execution.
- Pulls your partner-agency list from a Google Sheet (or env-var list) — one row per agency with name, email, language, and notes
- Drafts a personalised email per agency — never BCC, never group-send, so every partner gets a real one-to-one message
- Attaches a fresh rate card if the change is a price change — pulled live from your PMS
- Notifies everyone at the same time — no agency gets a head start
- Stops if the list is incomplete — won't send to a partial list and ask you to backfill missing contacts
- Claude Code installed
- A Gmail-compatible outbound account that can create drafts (the reference setup uses Google Workspace CLI)
- A Google Sheet listing your partner agencies, OR a comma-separated list of agency emails in your
.env - (Optional) A PMS rates tool that can produce an up-to-date rate card
-
Clone the repo into a Claude Code project:
git clone https://github.com/th1-ai/agent-notification-agent.git cd agent-notification-agent -
Copy the env template and fill it in:
cp .env.example .env
-
Edit
.claude/skills/agent-notification/SKILL.md— replace the placeholders described in Customising with the wrappers your setup uses. -
Open in Claude Code from the project root:
claude
-
Invoke the skill:
"Notify our partner agents about the new rate card."
Claude Code will pick up the
agent-notificationskill automatically.
agent-notification-agent/
├── README.md # This file
├── .env.example # Inboxes, partner list, PMS tool, etc.
├── .gitignore
├── LICENSE
└── .claude/
└── skills/
└── agent-notification/
└── SKILL.md # The skill definition
The skill file uses placeholders so it can be adapted to any email + PMS stack. Replace the following before first run:
| Placeholder | What to put | Example |
|---|---|---|
{{INBOX_PRIMARY}} |
Account that drafts the partner emails | info@yourhotel.com |
{{EMAIL_CLI}} |
Command-line wrapper to your email + Sheets provider | gws |
{{SHEET_ID_PARTNERS}} |
Google Sheet ID with the agency contact list | 1AbCdEf... |
{{PARTNER_AGENT_EMAILS}} |
Inline comma-separated fallback list | a@x.com,b@y.com |
{{PMS_RATES_TOOL}} |
Script that produces a current rate card | tools/dynamic_pricing.py |
Reference example tool paths from a Cloudbeds-based reference setup: tools/dynamic_pricing.py, tools/cloudbeds_api.py. Yours will differ.
You can do this with any text editor or with one sed pass:
sed -i '' \
-e 's|{{INBOX_PRIMARY}}|info@yourhotel.com|g' \
-e 's|{{EMAIL_CLI}}|gws|g' \
-e 's|{{SHEET_ID_PARTNERS}}|1AbCdEf...|g' \
-e 's|{{PMS_RATES_TOOL}}|tools/dynamic_pricing.py|g' \
.claude/skills/agent-notification/SKILL.mdThis is a skill-only repo, so there's no per-skill memory folder by default. If you want persistent learnings (e.g. "this agency always wants the rate card as a PDF"), add a .claude/agent-memory/agent-notification/ folder and write short notes there — Claude Code will pick them up automatically.
This skill works well alongside:
dynamic-pricing-agent— proposes the rate change that triggers a partner notificationemail-draft-agent— writes the prose if you want a more bespoke message per agencycrm-pipeline-agent— tracks any partner-sourced inquiries that come back after a rate update
MIT — see LICENSE.