Repository navigation
v2.2.0
First major release since v1.0.0. Headline change is a full rework of slack messages list pagination around four direction/cursor flags, with reliable cursor-based incremental reads for AI agents. The Claude Code plugin is also now bundled in this repo instead of living in a separate one.
Upgrading instructions
Reinstall the CLI to pick up the new flags (editable mode means future updates are just git pull):
uv tool install -e .If you had the Claude Code plugin installed from the old fprochazka/claude-code-plugins marketplace, uninstall it and install the bundled one:
claude plugin uninstall slackcli@fprochazka-claude-code-plugins
claude plugin marketplace add fprochazka/slackcli
claude plugin install slackcli@fprochazka-slackcliIf you're upgrading from a previous install of the bundled plugin, just refresh it:
claude plugin marketplace update fprochazka-slackcli
claude plugin update slackcli@fprochazka-slackcliThe bundled skill is updated to teach Claude the new flag set and cursor idioms.
Breaking changes
slack messages listno longer accepts-n/--limit. Use--head N,--tail N,--after TS, or--before TSinstead.- Minimum Python raised to 3.11. Python 3.10 enters security-only in April 2026 and reaches EOL in October 2026.
New pagination model
Four direction/cursor flags replace --limit:
| Flag | Meaning |
|---|---|
--head N |
first N in window, oldest → newest |
--tail N |
last N in window (default when no flag, default count 25) |
--after TS |
next page after cursor TS (default 25, override with --head N) |
--before TS |
previous page before cursor TS (default 25, override with --tail N) |
- Composable:
--after TS --head 10,--before TS --tail 10. - Mutually exclusive pairings rejected with actionable error messages.
- Composes with window bounds:
--since,--until,--today,--last-7d,--last-30d. - Display order is always ascending — oldest on top, newest on bottom, matching Slack's UI — regardless of which direction flag you used.
Has-more reporting
Every messages list response reports has-more state so agents can walk channels or threads incrementally without losing messages or refetching:
- Text footer (shown only when something is beyond the returned slice):
- Channel:
[older: --before 1234.5678 | newer: --after 2345.6789] - Thread:
[earlier replies: --before ... | later replies: --after ...]
- Channel:
- JSON envelope:
has_more_before,has_more_after,next_before_ts,next_after_ts. Cursor fields arenullwhen the matchinghas_more_*is false — no dangling cursors.
Thread view
- Parent counts toward the requested count.
--head Nalways renders the real parent plus first N-1 replies.--tail Non an overflowing thread renders a placeholder line ([thread root message omitted — use --head to see it]) in place of the parent, followed by the last N replies.- Forward-paging a thread with
--after TS --head Nis supported;later replies:footer advertises continuation cursors correctly.
Claude Code plugin
The plugin and its marketplace now live in this repo instead of in fprochazka/claude-code-plugins. See the Upgrading instructions at the top for install and migration commands.
Infrastructure
- GitHub Actions CI runs ruff lint + format checks and
pyteston Python 3.11, 3.12, 3.13, 3.14 on every push and PR. - Releasing workflow documented in
README.md— manifests must be version-bumped in lockstep, tag only after CI is green.
Fixes
- Fixed a latent thread listing bug where the most recent reply was being shown in place of the parent (an unconditional
reversed()in message conversion). conversations.historypagination no longer assumes results are always newest-first whenoldestis set — results are sorted defensively by timestamp.has_more_*on the cursor-opposite side now correctly reportstruewhen the caller provided a cursor (e.g. paging backward via--beforenow advertises the--aftercursor to turn around).- Thread
--tailno longer counts the placeholder row in the "Found N" header. - Pagination footer shortened and relabelled;
--helpExamples render on separate lines.
Known edge cases
- Thread forward-paging with
--after <reply_ts> --head Nmay include the thread parent in the returned slice even when the cursor is strictly after the parent. Non-blocking; tracked for a patch release.