Agent Templates
Sales call prep agent

AI sales call prep agent that briefs reps before every meeting

Reads tomorrow's calls from Google Calendar, mines past Granola notes and Attio history for context, and delivers each rep a prep brief in Slack, scoped to the calls that rep actually owns.

Sales call prep agent
Sample Agent for Acme
May 22 · 10:00 AM ·
47s
Prep me for my 2pm call with Datadog
J
Checking Google Calendar for upcoming meetings
Fetch upcoming meetings
googlecalendar_list_events
Pull prior Granola notes
granolamcp_query_granola_meetings
Look up Attio deal
attio_search_records
Brief: Alex Chen at Datadog
Attio deal
"$45k Enterprise — Stage: Proposal"
2 prior calls in Granola, brief DM'd to Slack
Result
1 external meeting in next 30 minutes
Brief DM'd 15 minutes before call start
Message Claude...
Trusted by teams shipping agents to production
Sales call prep agent
Sample Agent for Acme
May 22 · 10:00 AM ·
47s
Prep me for my 2pm call with Datadog
J
Checking Google Calendar for upcoming meetings
Fetch upcoming meetings
googlecalendar_list_events
Pull prior Granola notes
granolamcp_query_granola_meetings
Look up Attio deal
attio_search_records
Brief: Alex Chen at Datadog
Attio deal
"$45k Enterprise — Stage: Proposal"
2 prior calls in Granola, brief DM'd to Slack
Result
1 external meeting in next 30 minutes
Brief DM'd 15 minutes before call start
Message Claude...

How the agent assembles per-rep context and delivers a brief in five steps

A real working agent you can deploy

This repo uses a single AE_EMAIL env var to identify the authenticated rep. In production, pass each rep's real identifier on every Scalekit call, and send them an authorization link whenever their connector status is not ACTIVE.

01
Authorize, then orchestrate
run_flow.py
Every connection is authorized once via a one-time link. Scalekit refreshes tokens for you across all four connectors. ensure_authorized() calls get_or_create_connected_account for each service at startup; if any connector is not ACTIVE it prints a magic link and exits. Set POLLING_MODE=true to run continuously every POLL_INTERVAL_MINUTES.
run_flow.py
connect = ScalekitClient(
    env_url=SCALEKIT_ENV_URL,
    client_id=SCALEKIT_CLIENT_ID,
    client_secret=SCALEKIT_CLIENT_SECRET,
)

def ensure_authorized(connector):
    account = connect.actions.get_or_create_connected_account(
        connection_name=connector,
        identifier=CONNECTOR_USERS[connector],
    )
    if account.status != "ACTIVE":
        link = connect.actions.get_authorization_link(
            connection_name=connector,
            identifier=CONNECTOR_USERS[connector],
        )
        print(f"Authorize {connector}:\n{link}")
        sys.exit(1)

for connector in ["googlecalendar", "granolamcp", "attio", "slack"]:
    ensure_authorized(connector)
02
Poll calendar for upcoming meetings
run_flow.py
03
Fetch prior Granola notes
run_flow.py
04
Look up Attio deal context
run_flow.py
05
Synthesize brief and DM the rep
run_flow.py

Agents that prep every call, without the auth plumbing

Four things you'd otherwise build: Calendar OAuth, Granola MCP tokens, Attio credentials, Slack auth. Handled.

1
Install
npx @scalekit-inc/cli setup
# select your coding agent
# enable scalekit MCP server on coding agent
terminal
npx @scalekit-inc/cli setup
# select your coding agent
# enable scalekit MCP server on coding agent
terminal
npx @scalekit-inc/cli setup
# select your coding agent
# enable scalekit MCP server on coding agent
terminal
npx @scalekit-inc/cli setup
# select your coding agent
# enable scalekit MCP server on coding agent
terminal
npx @scalekit-inc/cli setup
# select your coding agent
# enable scalekit MCP server on coding agent
2
You have the Scalekit authstack plugin installed (AgentKit + SaaSKit skills and MCP auth). Before coding, auto-load the AgentKit skills relevant to connectors (Google Calendar, Granola MCP, Attio, Slack) and use the Scalekit MCP server to validate tool calls instead of hand-written API logic.

Poll Google Calendar for upcoming external meetings. For each, query Granola for prior call notes with the attendees and look up the matching Attio deal via the appropriate AgentKit connector tools. Synthesize a five-section prep brief and DM it to the rep in Slack fifteen minutes before the call. Ask before using write tools (sending the Slack DM); read-only steps (calendar, Granola, Attio) run without asking.
Why choose Scalekit

Delegated identity. Not service accounts.

Credentials never touch agent code or LLM context. The agent acts as the user, not as a shared bot.
Delegated OAuth - Agent reads your calendar, your inbox — scoped to the authorizing identity, not org-wide.
Credentials outside agent runtime  -  Tokens never touch agent code or LLM context. Both failure modes covered.
Token lifecycle automatic  -  Refresh, expiry, rotation across all connectors. One SDK call. Zero management code.
200+ prebuilt connectors  -  Google, Slack, HubSpot, GitHub, Jira, Notion, Salesforce — same auth pattern everywhere.
Try other Agent Templates

Prebuilt agents you can ship today

Each one runs on delegated identity, scoped per user.

GTM
CRM AI agent
Turn each Granola call transcript into a HubSpot record update, a drafted Gmail follow-up, and a Slack recap.
SALES
Deal intelligence agent
Score Gong call risk with an LLM, cross-reference the Attio record, and DM each owner their at-risk deals in Slack.
SALES
Outbound prospecting agent
Search Apollo for ICP matches, rank them, draft personalised Gmail outreach, and log every send to Google Sheets.
GTM
HubSpot to Slack updates agent
Watch HubSpot deal stage changes and post structured updates to the right Slack channel. Reps stop checking the CRM all day.
ENGINEERING
Engineering standup agent
Pull commits from GitHub and GitLab, track Jira issue movement, and post a per-engineer standup brief to Slack.
OPS
Email-to-calendar scheduling agent
Read scheduling intent out of Gmail threads, resolve mutual free time, and create the Google Calendar event.

Build your own
multi-connector agent

Add connectors. Change the LLM. Same delegated auth pattern.