Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions .agents/skills/slack-connector-functions/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
---
name: "slack-connector-functions"
description: "Use when building or modifying Slack Deno SDK workflows in this repository and the user asks to integrate an external SaaS, create/update/read records in another tool, send external email/SMS, schedule meetings, manage issues/tasks/incidents, or avoid implementing OAuth/API authentication by using Slack Platform connector functions."
---

# Slack Connector Functions

Guide Slack Deno SDK workflow work in this repository toward official Slack
Platform connector functions when they can replace custom authentication and
external API code.

## When to Use

Use this skill when the user request involves a Slack workflow that performs an
action in an external service, especially:

- Creating, updating, selecting, copying, sending, or resolving items in
supported SaaS tools.
- Adding rows to spreadsheets, creating calendar events, sending email or SMS,
creating issues, opening support tickets, updating CRM records, or triggering
incidents.
- Asking to integrate with GitHub, Jira, Linear, Google Workspace, Microsoft
365, Salesforce, Zendesk, PagerDuty, ServiceNow, Asana, Notion, or another
service listed in Slack's connector catalog.
- Asking to avoid building OAuth, token storage, refresh logic, or bespoke API
client code for an external service.

## When Not to Use

Do not propose a connector as the main approach when:

- The requested service or operation is not in the current official connector
catalog.
- The workflow needs fine-grained API behavior, custom pagination, complex
search, transformation-heavy reads, or multi-call orchestration beyond a
connector's inputs and outputs.
- The app must own external OAuth tokens, call a private API, or use a
tenant-specific API surface that Slack connectors do not expose.
- The workflow is intended for Slack Connect external users; Slack documents
connector workflows as home-team-only in this context.
- The work is Slack-native only, such as posting a message, creating a channel,
opening a form, or updating a canvas. Prefer Slack functions for those.

## Decision Flow

1. Identify the external service, desired operation, expected inputs, expected
outputs, and whether the user is trying to avoid custom authentication.
2. Check the current official connector catalog before coding:
https://docs.slack.dev/tools/deno-slack-sdk/reference/connector-functions/
3. If a connector matches the requested operation closely, propose it before
implementing a custom function that calls the external API directly.
4. Confirm operational constraints: connected account, admin approval, execution
identity, write scope, destructive side effects, audit needs, and failure
behavior.
5. Decide between:
- Connector function: supported service and operation, simple step-level
action, auth handled by Slack connector setup.
- Slack function: Slack-native action.
- Custom function: unsupported connector, custom business logic, complex API
behavior, or repo-owned auth is required.
6. When implementing, wire the connector as a workflow step with `addStep`, keep
local validation and i18n patterns from this repository, and run the repo's
Deno checks.

## Implementation Guidance

- Re-check official docs for the selected connector immediately before
implementation because connector availability and signatures can change.
- Inspect the connector page's Facts, Input parameters, Output parameters,
Authentication, and Usage info sections.
- Check `import_map.json`; this repository currently imports `deno-slack-sdk/`
and `deno-slack-api/`, but connector usage may require adding the current
Slack connector module import from the official docs.
- Prefer composing connector steps in `workflows/` over adding a custom external
API client in `functions/` when the connector fully covers the user need.
- Keep workflow inputs explicit and typed with `Schema` where possible.
- For write operations, add a confirmation or review step when the action
affects money, contracts, hiring, production operations, customer records, or
destructive changes.
- Do not store connector credentials in `.env`; connector account connection is
handled through Slack Platform connector setup, while repo `.env` should
remain for this app's own configuration.

## References

- `references/connector-catalog-summary.md` for supported service categories and
representative connector examples.
- `references/adoption-checklist.md` for the connector-vs-custom-function
decision checklist.
- `references/implementation-notes.md` for repo-specific implementation and
validation notes.

## Output Expectations

When using this skill, respond with:

- Whether a Slack connector should be proposed and why.
- The likely service and connector function name when identifiable.
- Any constraints or risks the user must confirm before implementation.
- The implementation location in this repo, usually `workflows/` and only
sometimes `functions/`.
- The validation commands to run, usually `deno task fmt`, `deno task lint`,
`deno task check`, and `deno task test`.
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Connector Adoption Checklist

Use this checklist before choosing a Slack connector function over a custom
function with external API calls.

## Fit

- The user request is part of a Slack Deno SDK workflow.
- The target service appears in Slack's official connector catalog.
- The requested operation is a close match to a listed connector function.
- The connector's inputs can be supplied by workflow inputs or previous steps.
- The connector's outputs are sufficient for the next workflow step or final
response.

## Authentication and Ownership

- The user wants to avoid implementing OAuth, token refresh, secret storage, or
an external API client.
- The team accepts Slack connector account setup as the authentication path.
- The implementation does not require storing external service credentials in
`.env`.
- The owner of the connected account and its permissions are clear.

## Safety

- The action's side effects are understood.
- Destructive, financial, hiring, contractual, production, or customer-data
changes have a confirmation or approval step.
- Failure handling is defined, including what message or fallback path users
see.
- Audit expectations are clear enough for the workflow's risk level.

## Constraints

- The workflow is not intended for Slack Connect external users.
- Workspace admin approval requirements are understood.
- Rate limits, connector-specific restrictions, and required external-service
permissions have been checked in the official docs.
- The connector is available in the user's Slack plan and workspace context.

## Decision

Prefer a connector when the fit is high and authentication should be handled by
Slack Platform setup.

Prefer a Slack function when the action is Slack-native.

Prefer a custom function when the connector catalog does not cover the
operation, the flow needs complex API orchestration, or this app must own
external auth and API behavior.
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Slack Connector Catalog Summary

Source:
https://docs.slack.dev/tools/deno-slack-sdk/reference/connector-functions/

Checked: 2026-04-24

Slack connector functions are workflow steps for external services. The catalog
is broad and changes over time, so treat this file as an orientation aid, not a
complete authority. Always verify the selected connector in the official docs
before implementation.

## Common Categories

- Task, project, and issue tracking: Asana, Jira Cloud, Linear, GitHub, GitHub
Enterprise Server, GitLab, ClickUp, Monday, Workast, Wrike.
- Calendar, meeting, email, and messaging: Google Calendar, Google Mail, Google
Meet, Microsoft Outlook Calendar, Microsoft Outlook Email, Microsoft Teams,
Zoom, Webex, Twilio, Dialpad, RingCentral.
- Files, documents, spreadsheets, and knowledge: Google Sheets, Microsoft Excel,
Microsoft OneDrive, Microsoft OneNote, Box, Dropbox, Notion, Guru, Lucid,
Miro, Smartsheet.
- CRM, support, and ITSM: Salesforce, Zendesk, Intercom, ServiceNow.
- Incidents and operations: PagerDuty, FireHydrant, Rootly, LaunchDarkly, Travis
CI, Snyk.
- HR, recruiting, onboarding, contracts, and signatures: Greenhouse, Lever,
SmartRecruiters, Deel, DocuSign, Adobe Sign, Dropbox Sign.
- Marketing, forms, surveys, and content: Mailchimp, SurveyMonkey, Typeform,
Loopio, Giphy.
- Finance and business operations: Ramp.

## Representative Operations

- Create: issues, tasks, projects, events, records, folders, tickets, incidents,
campaigns, pages, meetings.
- Update: issues, tasks, spreadsheet rows, worksheet rows, feature flags,
incidents, tickets, records.
- Select/read: spreadsheet rows, worksheet rows, records, incidents, spend
requests, campaign reports.
- Send: email, SMS, signature requests, status updates, campaigns.
- Copy/move/delete/archive: files, documents, folders, pages, spreadsheet rows,
boards.

## Useful Examples

- Google Sheets: `add_spreadsheet_row`, `select_spreadsheet_row`,
`update_spreadsheet_row`, `delete_spreadsheet_row`.
- Microsoft Excel: `add_worksheet_row`, `select_worksheet_row`,
`update_worksheet_row`, `delete_worksheet_row`.
- GitHub: `create_issue`, `update_issue`.
- Jira Cloud: `create_issue`, `edit_issue`.
- Linear: `create_issue`, `update_issue`, `add_comment`, `create_project`.
- Salesforce: `create_record`, `read_record`, `update_record`, `delete_record`,
`run_flow`.
- Zendesk: `create_ticket`, `update_ticket`, `add_tags`.
- PagerDuty: `create_incident`, `resolve_incident`, `escalate_incident`,
`send_status_update`, `update_incident`.
- Google Calendar: `create_event`, `update_event`, `add_to_event`.
- Outlook Calendar: `create_event`.
- Zoom: `create_meeting`.

## Keep Current

Before implementation, open the target connector page and confirm:

- Service namespace and function name.
- Input parameter names, required fields, and accepted Slack data types.
- Output fields needed by later workflow steps.
- Authentication and account connection requirements.
- Usage notes, limitations, or workspace/admin approval requirements.
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Implementation Notes for This Repo

This repository is a Slack Deno SDK template with workflows, functions,
triggers, i18n, and validation patterns.

## Repo Context

- Slack SDK imports are configured in `import_map.json`.
- Example workflow code lives in `workflows/example_workflow.ts`.
- Custom function code lives under `functions/`.
- App manifest configuration lives in `manifest.ts`.
- Localized messages live in `locales/en.json` and `locales/ja.json`.

## Implementation Pattern

1. Start in `workflows/` and try to model the external SaaS operation as a
connector `addStep`.
2. Add custom functions only for validation, Slack-specific preparation,
post-processing, or unsupported logic.
3. Keep user-visible errors and labels aligned with the repository's i18n
conventions.
4. Add or adjust workflow inputs rather than hard-coding service identifiers
when users need reuse.
5. Update `manifest.ts` only when the workflow/function set or Slack scopes
actually change.
6. Do not add outgoing domains for a connector unless custom API calls are also
introduced.

## Docs to Recheck

- Connector catalog:
https://docs.slack.dev/tools/deno-slack-sdk/reference/connector-functions/
- Connector guide:
https://docs.slack.dev/tools/deno-slack-sdk/guides/creating-connector-functions/
- Function types overview:
https://docs.slack.dev/tools/deno-slack-sdk/guides/creating-functions/

## Validation

Run the relevant checks after changes:

```bash
deno task fmt
deno task lint
deno task check
deno task test
```

If connector imports are added, run `deno task check` against the changed
workflow files and verify that `import_map.json` uses the current import path
from the official Slack docs.
Loading
Loading