active/slack-report/SKILL.md
Generate incremental Slack digests for channels, topics, and categories.
npx skillsauth add kevinslin/skills slack-reportInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Create a Slack report for a named stream such as super-agent by scanning the requested Slack channels, collecting only messages newer than the last successful check, merging the findings into that day’s report file, writing a short top-level summary, and writing the new watermark only after the report is complete. When the user asks for a Google Doc version, also write the report into a persistent Google Doc and reuse that same doc on later runs.
The report input is:
title: report title, used for the watermark file namechannels: Slack channels to scantopic: the subject to prioritize while readingcategories (optional): ordered buckets such as announcements, updates, feedbackoutput (optional): markdown by default; when the user asks for a Google Doc or gdoc, write both the markdown report and the Google Doc$DOCS_ROOT from the environment when set.$DOCS_ROOT to ~/code/openai/0/notes when the environment variable is unset.$DOCS_ROOT/report$DOCS_ROOT/report/[report-title]/$DOCS_ROOT/report/[report-title]/[yyyy-mm-dd].md## Update Log section at the end of the report and append one line for each successful write or merge.Use the helper script for deterministic report-path handling:
python3 ./scripts/report_state.py report-path --title "<report-title>"
report-path prints JSON with the resolved docs root, report directory, report file path, and local report date.
~/.llm/skills/slack-report/~/.llm/skills/slack-report/[report-title]_last_updated~/.llm/skills/slack-report/[report-title]_gdoc_urlKL {Report Title} and persist its URL only after the first successful write.Use the helper script for deterministic timestamp handling:
python3 ./scripts/report_state.py window --title "<report-title>"
python3 ./scripts/report_state.py report-path --title "<report-title>"
python3 ./scripts/report_state.py gdoc-url --title "<report-title>"
python3 ./scripts/report_state.py write --title "<report-title>" --timestamp "<end-iso>"
python3 ./scripts/report_state.py write-gdoc-url --title "<report-title>" --url "<google-doc-url>"
window prints JSON with the state file path, the effective start/end ISO timestamps, and Slack-compatible oldest_ts / latest_ts values. gdoc-url prints JSON with the persisted Google Doc URL, if any.
./scripts/report_state.py window --title "<report-title>"../scripts/report_state.py report-path --title "<report-title>"../scripts/report_state.py gdoc-url --title "<report-title>".KL {Report Title}, then persist its URL with ./scripts/report_state.py write-gdoc-url --title "<report-title>" --url "<google-doc-url>" after the first successful write.slack_read_channel when the channel list is known and bounded.slack_search_public when keyword filtering will substantially reduce noise.slack_search_public_and_private only when the user explicitly wants private coverage or has already consented.## Summary section so it reflects the merged report, not just the newest delta## Update Log section## Summary section near the top of the daily markdown report before the category sections.froge subagent when froge is available in the current Codex session.froge and request a short 2-4 sentence summary that is opinionated, technically informed, entertaining, and still genuinely useful.froge is unavailable or fails, write a direct high-signal summary yourself in a normal voice and note that fallback in your run notes.# [Report title]
- [last updated time]
## [today report]
## [yesterday report]
## 2026-03-11 Report as a daily block that contains that day's summary, categories, and items. Insert the newest day's block immediately after the title and last-updated line so the doc reads newest-to-oldest.- [last updated time] line with the current run time## [date] Report block if it already exists, otherwise insert a new block at the top## Update Log line at the end of the markdown daily file, for example - 2026-02-27 11:10 PST: merged 4 new items from 2026-02-27 09:00 PST to 2026-02-27 11:10 PST../scripts/report_state.py write.announcements: launches, milestones, invitations, trackers, POR changes, enablement noticesgeneral feedback: bugs, UX complaints, reliability issues, approval friction, connector mismatchesgmail feedback: Gmail-specific auth, scope, send-email, write-action, or connector behaviortips: how-to advice, settings, workarounds, model overrides, recommended promptsusecases: real workflows, demos, success stories, examples of valueIf a message fits multiple categories, place it in the most decision-useful one and mention the overlap in the description when needed.
Use this Markdown shape for each dated report section:
## Summary
[2-4 sentence summary of the current report]
## [yyyy-mm-dd Report]
## [category]
### [title]
- source: [Slack permalink](https://openai.slack.com/archives/...)
- time: [posted timestamp]
[description]
When the user asks for a Google Doc, the cumulative doc should start with:
# [Report title]
- [last updated time]
End each markdown daily file with:
## Update Log
- 2026-02-27 10:54 PST: created report from 2026-02-26 10:54 PST to 2026-02-27 10:54 PST
Descriptions should be short and concrete:
The summary should be short and decision-useful:
froge subagent output when available; otherwise use concise direct fallback text$DOCS_ROOT/report/[report-title]/.source values as explicit Markdown links, not bare URLs. This preserves clickability in downstream conversions such as Markdown -> HTML -> Google Docs, where plain URLs may not be auto-linked.testing
Audit an OpenClaw maturity-scorecard surface into an evidence-backed component score report. Use when given a surface from an OpenClaw maturity-scorecard.md and asked to score coverage, quality, readiness, or generate a detailed surface report plus per-component subreports.
tools
Turn an existing concrete spec into a reusable generic spec template. Use when asked to create a generic spec, template spec, reusable implementation template, or generalized version of a spec from a specific implementation such as one plugin, channel, integration, feature, or PR.
data-ai
Trace how something works with an investigator subagent and a skeptical reviewer subagent.
development
Write or review high-quality OpenClaw developer documentation.