Skip to content

Add slack-summarizer extension #18959

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
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
13 changes: 13 additions & 0 deletions extensions/slack-summarizer/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules

# Raycast specific files
raycast-env.d.ts
.raycast-swift-build
.swiftpm
compiled_raycast_swift

# misc
.DS_Store
4 changes: 4 additions & 0 deletions extensions/slack-summarizer/.prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"printWidth": 120,
"singleQuote": false
}
3 changes: 3 additions & 0 deletions extensions/slack-summarizer/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Slack Summaries Changelog
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: Title 'Slack Summaries' in CHANGELOG.md doesn't match 'Slack Summarizer' in package.json title field

Suggested change
# Slack Summaries Changelog
# Slack Summarizer Changelog


## [Initial Version] - {PR_MERGE_DATE}
70 changes: 70 additions & 0 deletions extensions/slack-summarizer/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Slack Summarizer – Raycast Extension

Summarize any Slack channel or thread directly from **Raycast** using OpenAI.
Perfect for catching-up after vacations, keeping stakeholders in the loop, or turning noisy discussions into succinct, bullet-point briefs.

---

## ✨ Features

| Command | What it does |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| **Summarize Slack Channel** | Picks every standalone message and thread in a channel over the last *n* days and generates a concise digest. |
| **Summarize Slack Thread** | Takes a single thread URL (or timestamp) and produces an executive summary, highlighting decisions & next steps. |
| **Open in HTML** *(Thread)* | Renders the markdown summary in a clean HTML sheet—handy for sharing or copy-pasting elsewhere. |

Both commands respect a **custom OpenAI prompt** so you can fine-tune tone, detail level, language, etc.

## ⚙️ Requirements

- A **Slack workspace** where the Raycast Slack App can be installed with the scopes below.

- An **OpenAI API key**.

### Slack OAuth scopes

`channels:read`,
`channels:history`,
`groups:read`,
`groups:history`,
`im:read`,
`im:history`,
`mpim:read`,
`mpim:history`,
`users:read`,
`search:read`

> The extension uses a PKCE OAuth flow; **no server is required**.
> Tokens are stored in Raycast’s local secure storage.

## Setup

### Raycast Preferences
Open Raycast → *Extensions* → *Slack Summarizer* and set:

| Preference | Description |
| ---------------------------- | ------------------------------------------------------ |
| **OpenAI API Key** | `sk-...` key from your OpenAI dashboard |
| **Default OpenAI Model** | E.g. `gpt-4.1`, or `o3` |


### Authorize Slack
Launch either command; the first run triggers an OAuth browser window.
Select the workspace → grant the requested scopes → done.

## 📝 Custom Prompt Tips

The *Custom Prompt* preference is pre-pended to every request.
Examples:

* `Provide a short TL;DR at the top, then bullet points.`
* `Focus only on action items and decisions; omit pleasantries.`

## 🚧 Limitations

* Large channels (> 1,000 messages) may hit Slack rate limits – exponential back-off is built-in, but huge digests can take time.
* Slack attachments (files, images) are ignored; only text is summarized.

## 📜 License

MIT © 2025 – Contributors.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions extensions/slack-summarizer/eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const { defineConfig } = require("eslint/config");
const raycastConfig = require("@raycast/eslint-config");

module.exports = defineConfig([
...raycastConfig,
]);
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading