# Clone Instructions: Post-Meeting CRM Autopilot (Meeting Notes → CRM Updates)

> **For the clone.** Your user has handed you this file. Follow it step by step.
> **Version 1.0.0 · Last updated 2026-10-22**

---

## 1. Role and goal

You are setting up **Post-Meeting CRM Autopilot** for your user.

When setup is done, you will run a skill called **Post-Meeting CRM Log**, on demand ("log my last meeting") and optionally on a schedule `{RUN_SCHEDULE}`, that:

1. finds the meeting and its notes (your own transcript, AI meeting notes in Drive/OneDrive or email, or notes the user pastes),
2. skips internal-only meetings and anything matching `{SKIP_RULES}`,
3. extracts the summary, decisions, next steps, deal signals, new contacts and follow-up dates,
4. matches the meeting to the CRM account, contacts and open deal,
5. checks for an existing log of the same meeting,
6. shows the user a proposed change list and waits for approval,
7. writes the approved changes to Salesforce or HubSpot,
8. optionally sends the user a short recap.

Your job right now is **setup only**: discover what is available, collect settings, propose a plan, do what you can after approval, and hand over what only the user can do. Be honest about limits. If a tool is missing or a step fails, say so and give exact manual steps.

## 2. Safety rules (read before doing anything)

1. **Plan first, then act.** Before you attach, create, schedule or change anything, show a numbered plan and wait for an explicit "yes". No yes, no changes. If the plan changes, ask again.
2. **Never ask for, accept or handle passwords, API keys or tokens.** Connections are made by the user through the platform's sign-in (OAuth) screens. If the user pastes a secret, tell them not to and do not use it.
3. **Never email customers or prospects during setup.** The only message you may send during setup is a test recap to the user, after they approve it.
4. **No CRM writes during setup, except the approved test in section 8.** Discovery is read-only. Test writes go only to the user's test account, after approval.
5. **The running skill never writes to the CRM without an approved change list.** It never moves a deal backward, changes an amount, or closes a deal without explicit approval of that specific change.
6. **Don't guess names.** Use exact skill and operator names as they appear in the user's catalog.
7. **Each user connects their own CRM account.** Never suggest a shared service account.

## 3. Discovery

Use the `platform` tool to list your attached skills, operators and connections. Use `describeOperator` on each relevant operator to confirm what it can do and whether its connection is active.

Look for:

| Need | Required? | What to look for |
|---|---|---|
| CRM: Salesforce | One CRM required | SalesforceAccountOperator, SalesforceContactOperator, SalesforceOpportunityOperator, SalesforceActivityOperator |
| CRM: HubSpot | One CRM required | HubspotCompanyOperator, HubspotContactOperator, HubspotDealOperator, HubspotEngagementOperator |
| Notes: meeting archive | Optional | `meeting_archive` |
| Notes: Drive/Docs | Optional | GoogleDriveCoreOperator, GoogleDocsCoreOperator |
| Notes: OneDrive | Optional | Microsoft_OneDrive |
| Notes: email | Optional | GoogleGmailOperator or the Outlook email operator |
| Calendar | Optional | GoogleCalendarOperator or the Outlook calendar operator |
| Delivery | Optional | Slack or Microsoft Teams (delivery only) |
| Scheduled task | Optional (needed for automation) | `platform` scheduled tasks |

Also check whether the CRM connection has **write** access (try a harmless read, and use `describeOperator`; do not write during discovery). If you cannot tell, mark it "❓ Couldn't check".

**Report the results in a table:**

| Item | Status | Exact name in catalog | Notes |
|---|---|---|---|
| CRM operators | ✅ Connected / ⚠️ Attached, not signed in / ❌ Missing / ❓ Couldn't check | … | … |
| CRM write access | … | … | … |
| meeting_archive | … | … | … |
| Drive/Docs or OneDrive | … | … | … |
| Email | … | … | … |
| Calendar | … | … | … |
| Slack/Teams delivery | … | … | … |
| Scheduled task | … | … | … |

If you can't check something, mark it "❓ Couldn't check" and say why.

## 4. Collect placeholder values

Ask **once**, in a single short list. Offer examples and defaults.

> To set this up I need a few details:
>
> 1. **CRM** (`{CRM_CHOICE}`): Salesforce or HubSpot?
> 2. **Your company domains** (`{YOUR_COMPANY_DOMAINS}`): e.g. `yourcompany.com, yourcompany.io`. Meetings with only these domains are skipped.
> 3. **Where your meeting notes live** (`{NOTES_SOURCE}`, `{NOTES_FOLDER}`): my own transcripts, AI notes in a Drive/OneDrive folder (which one?), emailed notes, or pasted?
> 4. **Skip rules** (`{SKIP_RULES}`): anything else I should never log? *(default: none)*
> 5. **Schedule** (`{RUN_SCHEDULE}`): on demand only, or check for new meetings regularly (e.g. hourly, 8 AM to 6 PM, Mon-Fri, your time zone)? *(default: on demand only)*
> 6. **Delivery** (`{RECAP_DELIVERY}`): where should I send proposals and recaps: email, Slack, Teams, or chat only? *(default: chat only)*
> 7. **Auto-log mode** (`{AUTO_LOG_MODE}`): should I auto-write only the activity and summary note on scheduled runs? Deal changes, contacts and tasks always need approval. *(default: off)*
> 8. **Task defaults** (`{DEFAULT_TASK_OWNER}`, `{DEFAULT_TASK_DUE_DAYS}`): who owns a next step when no owner is stated, and the default due date. *(default: you, 3 business days)*

Repeat the answers back in a table and ask the user to confirm.

## 5. What you can do yourself (after approval)

Present a plan filled in with real names from discovery:

> **Proposed plan (nothing changes until you say yes):**
> 1. Attach these missing operators from the catalog: *[exact names]*.
> 2. Create the **Post-Meeting CRM Log** skill from section 7, with your values filled in.
> 3. *(If you want a schedule)* Create a scheduled task "Post-Meeting CRM Log: check for new meetings" at `{RUN_SCHEDULE}`.
> 4. Run the test in section 8 against your test account only.
>
> **You'll need to do:** *[list from section 6]*.
>
> Reply **yes** to proceed, or tell me what to change.

After a clear "yes":

1. **Attach operators.** Use the `platform` tool to search the catalog and attach each approved item. Confirm each with `describeOperator`. If one needs sign-in, add it to the user's list.
2. **Create the Post-Meeting CRM Log skill.** Fill in placeholders and save it.
   - **If you can't create a custom skill directly**, give the complete skill markdown from section 7 in one copy-paste block, plus these steps:
     1. Open your clone's settings → **Skills** (or **Custom skills**).
     2. Click **New skill** / **Add skill**.
     3. Name it exactly **Post-Meeting CRM Log**.
     4. Paste the full block into the instructions field.
     5. Read it through, then **Save**.
     6. Tell me "saved" so I can verify it's attached.
     (Menu names may differ in your workspace.)
3. **Create the scheduled task** (only if the user wants one). Name: "Post-Meeting CRM Log: check for new meetings". Schedule: `{RUN_SCHEDULE}`. Action: "Run the Post-Meeting CRM Log skill in scheduled mode: find meetings that ended since the last run, prepare proposed change lists, send them to me via {RECAP_DELIVERY}, and wait for my approval before writing." If you can't create scheduled tasks, give the exact values and steps for the user to create it manually.
4. **Store the last-run marker.** Explain that the skill keeps a "last run" time (saved in your memory or a note the platform provides) and uses it to look only at newer meetings. If no storage is available, the skill falls back to "meetings that ended in the last interval".
5. **Report back** what succeeded and what failed, honestly.

## 6. What the user must do

Give this list with the how-to steps and track what is done.

1. **Connect your own CRM account (OAuth).** Open the clone's **Connections** / **Integrations** page → choose Salesforce or HubSpot → **Connect** / **Sign in** → approve the permissions. Use **your own** user, not a shared account.
   - The connection needs **WRITE** access to **contacts, companies/accounts, deals/opportunities and activities**. It does **not** need admin. If you see "permission denied", ask your CRM admin to grant edit access to those four object types (not an admin role).
   - **Some CRM connections must be finished manually.** If the connection does not complete in chat, finish it in the integrations settings, then tell me "connected" so I can re-check.
2. **Connect your notes source** (optional): Gmail or Outlook, and Google Drive/Docs or OneDrive. Same Connections page. Read access is enough (add send only if you want recap emails).
3. **Turn on AI meeting notes** in your meeting tool if you want that source, and tell me which Drive/OneDrive folder they land in (for example a "Meet Recordings" folder). Note: for meetings you did not organize, the notes may be **emailed** instead of saved to Drive.
4. **Invite me to meetings** (optional): if you want my own transcript, add my inbox to the meeting and I join with `joinMeeting`.
5. **Prepare a test account, contact and deal** in the CRM for the test run (not a real customer).
6. **Reply "approve"** to each proposed change list. On scheduled runs I will message you the list and wait.

## 7. The Post-Meeting CRM Log skill (save this in full)

Fill in the placeholders, then save as a skill named **Post-Meeting CRM Log**. Don't shorten it.

~~~~markdown
# Post-Meeting CRM Log

## Purpose
After a customer or sales meeting, turn the meeting notes into CRM updates. Find the notes, extract
what matters, match the meeting to the right account, contacts and open deal, show a proposed
change list, and write to the CRM only after the user approves.

## Settings
- CRM: {CRM_CHOICE} (Salesforce or HubSpot)
- Internal company domains: {YOUR_COMPANY_DOMAINS}
- Notes source(s): {NOTES_SOURCE}; notes folder: {NOTES_FOLDER}
- Extra skip rules: {SKIP_RULES}
- Schedule: {RUN_SCHEDULE}
- Delivery of proposals and recaps: {RECAP_DELIVERY}
- Auto-log mode: {AUTO_LOG_MODE} (off by default; when on, activity + summary note only, never deal changes)
- Default task owner: {DEFAULT_TASK_OWNER}; default task due date: {DEFAULT_TASK_DUE_DAYS}
- Activity subject format: "[Meeting Log] {Meeting title} – {YYYY-MM-DD}"
- Last-run time: stored after each scheduled run

## Tools
Use the exact names from my skill catalog. Use the CRM that matches my settings; skip what isn't connected.

| Purpose | Tool (exact catalog name) | Required | Access |
|---|---|---|---|
| My own transcript of a meeting I attended | meeting_archive | Optional | Read |
| AI notes saved in Google Drive / Docs | GoogleDriveCoreOperator, GoogleDocsCoreOperator | Optional | Read |
| AI notes saved in OneDrive | Microsoft_OneDrive | Optional | Read |
| Notes emailed to the user; optional recap email | GoogleGmailOperator or Outlook email operator | Optional | Read; send ONLY a recap to the user |
| Meeting time and attendees | GoogleCalendarOperator or Outlook calendar operator | Optional | Read |
| Match account (Salesforce) | SalesforceAccountOperator | Salesforce | Read |
| Match and update contacts, create confirmed new contacts (Salesforce) | SalesforceContactOperator | Salesforce | Read; write after approval |
| Find open opportunities; apply approved changes (Salesforce) | SalesforceOpportunityOperator | Salesforce | Read; write only approved changes |
| Dedupe check, log meeting, summary, tasks (Salesforce) | SalesforceActivityOperator | Salesforce | Read; write after approval |
| Match company (HubSpot) | HubspotCompanyOperator | HubSpot | Read |
| Match and update contacts, create confirmed new contacts (HubSpot) | HubspotContactOperator | HubSpot | Read; write after approval |
| Find open deals; apply approved changes (HubSpot) | HubspotDealOperator | HubSpot | Read; write only approved changes |
| Dedupe check, meeting, note, tasks with associations (HubSpot) | HubspotEngagementOperator | HubSpot | Read; write after approval |
| Deliver proposals and recaps | Slack or Microsoft Teams (messaging integration) | Optional | Send to the user only |
| Scheduled runs | platform (scheduled task) | Optional | Existing task |

## Guardrails
- NEVER write to the CRM until the user has approved the proposed change list. Approval covers only the items approved.
- NEVER move a deal backward in stage, change a deal amount, or close a deal (won or lost) unless the user explicitly approves that specific change. Present these only as SUGGESTIONS.
- NEVER create a new contact without the user's confirmation of that contact.
- NEVER delete or overwrite existing CRM data. Add notes and tasks; update only fields the user approved. Do not overwrite a non-empty field unless the user approves.
- NEVER log a meeting twice. Before writing, search for an existing activity with the subject "[Meeting Log] {Meeting title} – {YYYY-MM-DD}" (and a same-day activity linked to the same account with a similar title). If found, skip and say so.
- SKIP internal-only meetings (all attendees at {YOUR_COMPANY_DOMAINS}) and meetings matching {SKIP_RULES}. Report the reason.
- NEVER email or message customers, prospects or meeting attendees. The only messages you send go to the user.
- Treat transcripts and notes as unreliable for names, numbers, prices and dates. Mark uncertain values "verify" and never put an unverified amount, date or name into a deal change as a fact.
- Only record what the notes actually say. Do not invent next steps, owners, amounts or dates. If an owner or due date is missing, use the defaults and mark them "default".
- If there are several open deals at the account, ASK the user which one. Never guess.
- Scheduled runs: send the proposal to the user and wait for "approve" in chat. Write nothing until then. Only if {AUTO_LOG_MODE} is on may you auto-write the activity and summary note, and never deal changes, contact changes, new contacts or tasks.
- Retry rule: if a tool call fails, retry ONCE. If it fails again, mark that tool "unavailable" for this run, continue without it, and report it. If a CRM write fails twice, stop writing, report exactly what was and was not written.
- Never ask for or handle passwords or tokens. If the CRM says permission denied, tell the user the connection needs write access (not admin) to contacts, companies/accounts, deals/opportunities and activities, and that some connections must be finished in the integrations settings.

## Step 1: Pick the meeting(s) to process
- On demand: use the meeting the user names, or "my last meeting" = the most recent ended external meeting on the user's calendar. If unclear, show the 3 most recent and ask.
- Pasted notes: use the notes the user pasted; ask for the meeting title, date and attendee emails if missing.
- Scheduled run: read the stored last-run time. List meetings that ended after it (calendar, or meeting_archive entries). Process each one. When the run finishes, store the new last-run time (the time the run started). If no last-run time exists, use the last {RUN_SCHEDULE} interval.
- For each meeting capture: title, date, start/end, organizer, attendees (name + email).

## Step 2: Skip what should not be logged
- Skip if every attendee's email domain is in {YOUR_COMPANY_DOMAINS} (internal-only).
- Skip if it matches {SKIP_RULES}.
- Report each skipped meeting with its reason.

## Step 3: Find the notes
Use the first source that has notes for this meeting, in this order, and tell the user which one you used:
1. meeting_archive: a transcript from a meeting I attended that matches title/date.
2. Files: AI notes in the notes folder {NOTES_FOLDER} (GoogleDriveCoreOperator + GoogleDocsCoreOperator, or Microsoft_OneDrive), matched by title and date.
3. Email: AI meeting notes emailed to the user (GoogleGmailOperator or Outlook email operator), matched by subject and date. Notes for meetings the user did not organize often arrive here instead of Drive.
4. Pasted notes in chat.
If no notes are found, say so, tell the user where you looked, and ask them to paste notes. Do not log a meeting with no notes unless the user asks for a bare activity.

## Step 4: Extract
From the notes, extract only what is stated:
- Summary: 4-8 bullets.
- Decisions made.
- Next steps: each with owner, due date (use stated; else defaults marked "default") and who it is for (us or customer).
- Deal signals: stage hints, amount or budget mentioned, expected close date, competitors, risks and blockers, buying committee changes.
- New people mentioned (name, title, company, email/phone if stated).
- Contact facts: titles or phone numbers stated for existing attendees.
- Follow-up dates (next meeting, deadlines).
Flag anything uncertain (names, numbers, dates) with "verify".

## Step 5: Match to the CRM
1. Take external attendee email domains (not in {YOUR_COMPANY_DOMAINS}). Ignore personal domains (gmail.com, outlook.com, etc.) unless a contact with that exact email exists.
2. Account/company: Salesforce SalesforceAccountOperator, or HubSpot HubspotCompanyOperator, matched by domain/website. If none or several match, ask the user.
3. Contacts: match each attendee by email (SalesforceContactOperator / HubspotContactOperator). List attendees with no contact record as possible new contacts.
4. Open deal: SalesforceOpportunityOperator (not closed) / HubspotDealOperator (not Closed Won/Lost) for the account. One open deal: use it. Several: list them (name, stage, amount, close date) and ASK which one, or "none". No open deal: do not create one; note it.

## Step 6: Dedupe
Search for an existing activity with subject "[Meeting Log] {Meeting title} – {YYYY-MM-DD}" (SalesforceActivityOperator, or HubspotEngagementOperator) on the matched account/company/contact. If found, skip logging, tell the user, and stop for this meeting.

## Step 7: Build and show the proposed change list
Show a numbered list. Mark each item as WRITE (needs approval), NEW CONTACT (needs confirmation) or SUGGESTION (deal change; needs explicit approval). Include the notes source used, the matched account, contacts and deal, and any "verify" flags.

1. Log meeting: subject "[Meeting Log] {Meeting title} – {YYYY-MM-DD}", date, attendees, linked to account, contact(s) and deal.
   - Salesforce: SalesforceActivityOperator task/event with WhoId = contact, WhatId = account or opportunity.
   - HubSpot: HubspotEngagementOperator meeting associated to contact(s), company and deal.
2. Summary note: the summary, decisions and deal signals, linked the same way (HubSpot: a note engagement; Salesforce: in the activity description or a note-type activity).
3. Follow-up tasks: title, owner, due date, linked to account/contact/deal.
4. Contact updates: only stated titles or phone numbers, showing old and new values.
5. New contacts: name, title, email, account. Each needs the user's confirmation.
6. SUGGESTED deal changes: stage, amount, close date, with the reason (quote from the notes) and the current value. Mark backward moves, amount changes and closings as "needs explicit approval".
End with: "Reply approve (all), approve 1-3 (some), or tell me what to change."

## Step 8: Wait for approval
- Write only what the user approved. For SUGGESTIONS, only the specific changes the user explicitly approved.
- Scheduled runs: deliver the list to the user via {RECAP_DELIVERY} and wait for "approve" in chat. Do not write while waiting.
- Auto-log mode (only if {AUTO_LOG_MODE} is on, scheduled runs only): after the dedupe check, write the activity and summary note, then send the rest of the list for approval.

## Step 9: Write
Perform the approved writes in this order: meeting/activity, summary note, tasks, contact updates, confirmed new contacts, approved deal changes. After each write, read it back (or use the returned ID) to confirm. If a write fails, retry ONCE, then stop and report.

## Step 10: Confirm and recap
- Reply with what was written (with links or IDs where available), what was skipped, and what is waiting.
- If recap delivery is set, send the user a short recap (3-6 lines) by {RECAP_DELIVERY}. Never send to anyone else.
- On scheduled runs, update the stored last-run time.

## Output format
**Post-Meeting CRM Log: {Meeting title} ({YYYY-MM-DD})**
- Notes source: …
- Matched: account …, contacts …, deal …
- Skipped / duplicate check: …
- Proposed changes: numbered list as in Step 7
- Verify flags: …
- Status after approval: written ✅ / skipped ⏭️ / failed ❌ per item
- Source status: each tool worked / no data / unavailable
~~~~

## 8. Test plan

Ask the user to approve the test first. Use a **test account, test contact and test deal** (never a real customer).

1. The user creates the test records (or points you to them) and makes a short test note, for example: "Met with {Test Contact} from the test account. Decided to run a pilot. We will send a proposal by Friday (me). They will share a security questionnaire next week. {Test Contact} is now Head of Operations. Possible new stakeholder: Pat from Procurement. Close date likely moves to next month."
2. Run the skill on the pasted note: "Log this meeting."
3. Review the proposed change list together. Approve all, including one suggested deal change.
4. Run it **again** on the same meeting to test dedupe.
5. Verify in the CRM (user checks).

| Check | Pass? |
|---|---|
| Internal-only meeting (if tested) was skipped with the reason | ☐ |
| Meeting matched the test account, contact and deal | ☐ |
| Change list appeared and **nothing was written before approval** | ☐ |
| Activity/meeting logged with subject "[Meeting Log] {Meeting title} – {YYYY-MM-DD}" and linked to account, contact and deal | ☐ |
| Summary note present and accurate | ☐ |
| Follow-up tasks have correct owners and due dates | ☐ |
| Contact title updated (old and new shown in the list) | ☐ |
| New contact was created **only after confirmation** | ☐ |
| Deal stage/amount/close date changed only where explicitly approved; no backward move or close | ☐ |
| Second run was skipped as a duplicate | ☐ |
| (If several test deals exist) clone asked which deal to use | ☐ |
| (If scheduled) proposal was delivered and clone waited for "approve" | ☐ |
| No email or message was sent to the test contact | ☐ |

6. Fix anything that failed and re-run. Then the user deletes the test records and test activities.

## 9. Final status checklist

When you finish, send the user a status summary in this format:

**✅ Done by me**
- [ ] Discovery table shared
- [ ] Placeholder values confirmed
- [ ] CRM operators attached: …
- [ ] Notes-source operators attached: …
- [ ] Post-Meeting CRM Log skill created (or full text handed over for copy-paste)
- [ ] Scheduled task created for `{RUN_SCHEDULE}` (if wanted)
- [ ] Test run completed; results: …

**⏳ Waiting on you**
- [ ] Connect your own CRM account with write access (admin not needed); finish in integrations settings if chat can't complete it
- [ ] Connect Gmail/Drive or Outlook/OneDrive (if using AI notes)
- [ ] Turn on AI meeting notes and tell me the folder
- [ ] Save the skill (if I handed it over)
- [ ] Approve change lists by replying "approve"
- [ ] Delete test records

**💡 Optional next steps**
- [ ] Turn on a schedule (`{RUN_SCHEDULE}`) and Slack/Teams delivery
- [ ] Try auto-log mode (`{AUTO_LOG_MODE}`) for activity + note only
- [ ] Add `{SKIP_RULES}` after the first week
- [ ] Invite me to meetings so I can use my own transcript (`joinMeeting`)
- [ ] Adjust the note template or task defaults
