All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
channels inspectcommand to open the channel dashboard- Channel push notification support via
extrasin message data - Unified
--startand--endflags for all history commands (ISO 8601, Unix ms, or relative e.g."1h","30m")
statscommand moved to top-level (was underapps)- Streamlined flag architecture and unified output formatting across all commands
- BREAKING: Auth flags (
--api-key,--token,--access-token) removed — useably loginor environment variables (ABLY_API_KEY,ABLY_TOKEN,ABLY_ACCESS_TOKEN) instead
- Various quality-of-life improvements including better error messages, corrected help examples, and more reliable channel rule handling
- Built-in MCP server
- Signed config and signature support for HMAC authentication in Web CLI
- ISO8601 UTC timestamps and sequence numbers to long-running commands
--show-othersflag tochannels presence entercommand- Multi-room support to
rooms messages subscribecommand - Time-based filtering flags to
rooms messages historycommand
- Reorganized logs commands for better discoverability and removed channel-lifecycle duplication
- Standardized naming conventions across commands (BREAKING CHANGE - see migration notes below)
- Standardized success confirmation messages for create operations
- Confirmation prompts now accept both 'y' and 'yes' for better user experience
- History limit defaults now consistent between channels and rooms commands
- Web CLI auto-connect detection with signed config in rate limiter
- Web CLI consistent secret priority and domain-scoped credential clearing
- App ID resolution now only matches on name, preventing incorrect matches
- Queues delete command error handling
- channels/presence/enter no longer unnecessarily calls presence.get
- rooms list JSON error handling
- Inconsistent exit codes - now ensures non-zero on all errors
- rooms occupancy get no longer forces process.exit(0)
To improve consistency and clarity across the CLI, we've standardized parameter names in several commands. If you have scripts or automation that use these commands, please update them accordingly:
Parameter Naming Changes:
apps delete [ID]→apps delete [APPID]- Now explicitly usesAPPIDfor clarityintegrations delete RULEID→integrations delete INTEGRATIONID- More accurately reflects that integrations are not rulesqueues delete QUEUENAME→queues delete QUEUEID- Changed to use ID instead of name for consistency
Command Changes:
rooms messages subscribe ROOM→rooms messages subscribe ROOMS- Now supports multiple rooms (space-separated)- Logs commands reorganized:
apps logscommands moved tologstop-level- Removed duplicate channel-lifecycle commands from channels namespace
- All log commands now consistently under
logsnamespace
What You Need to Do:
If you're using any of these commands in scripts or CI/CD pipelines:
- Update parameter names to match the new conventions
- Update command paths for reorganized logs commands
- Test your scripts to ensure they work with the new naming
Example Updates:
# Before (0.15.x)
ably apps delete my-app-123
ably integrations delete rule-456
ably queues delete my-queue-name
ably rooms messages subscribe my-room
# After (0.16.0)
ably apps delete my-app-123 # APPID parameter
ably integrations delete integration-456 # INTEGRATIONID parameter
ably queues delete queue-id-789 # QUEUEID parameter
ably rooms messages subscribe room1 room2 # Multiple rooms supportedThe interactive CLI will continue to guide you through the correct parameter names, but programmatic usage should be updated to match the new conventions.
To improve consistency and clarity across the CLI, we've standardized parameter names in several commands. If you have scripts or automation that use these commands, please update them accordingly:
Parameter Naming Changes:
apps delete [ID]→apps delete [APPID]- Now explicitly usesAPPIDfor clarityintegrations delete RULEID→integrations delete INTEGRATIONID- More accurately reflects that integrations are not rulesqueues delete QUEUENAME→queues delete QUEUEID- Changed to use ID instead of name for consistency
Command Changes:
rooms messages subscribe ROOM→rooms messages subscribe ROOMS- Now supports multiple rooms (space-separated)- Logs commands reorganized:
apps logscommands moved tologstop-level- Removed duplicate channel-lifecycle commands from channels namespace
- All log commands now consistently under
logsnamespace
What You Need to Do:
If you're using any of these commands in scripts or CI/CD pipelines:
- Update parameter names to match the new conventions
- Update command paths for reorganized logs commands
- Test your scripts to ensure they work with the new naming
Example Updates:
# Before (0.15.x)
ably apps delete my-app-123
ably integrations delete rule-456
ably queues delete my-queue-name
ably rooms messages subscribe my-room
# After (0.16.0)
ably apps delete my-app-123 # APPID parameter
ably integrations delete integration-456 # INTEGRATIONID parameter
ably queues delete queue-id-789 # QUEUEID parameter
ably rooms messages subscribe room1 room2 # Multiple rooms supportedThe interactive CLI will continue to guide you through the correct parameter names, but programmatic usage should be updated to match the new conventions.
- Public Preview version notice displayed across all CLI modes
- Release status information to version command
- Improved support commands for web CLI mode with proper link display
- Consolidated terminal connection logic to prevent duplicate WebSocket connections
- Refactored exit handling for more consistent behavior across commands
- Fixed spaces cursors
get-allcommand hanging issue - Fixed chat occupancy
getcommand hanging issue - Fixed initial command execution in split terminal mode
- Fixed initial command being sent when resuming sessions
- Prevented duplicate WebSocket connections in terminal server
- Improved command cleanup and exit code handling
- Added
.envto.gitignoreto prevent committing secrets - Applied Prettier formatting across entire codebase and enforced in CI
- Centralized chat command cleanup logic
- Removed obsolete test scripts and dependencies on Sinon
- Improved test mode detection using
isTestMode()helper - Fixed various flaky e2e and integration tests
- Bumped the
@ably/chatversion to 1.0.0 - Renamed the
roomIdparameter forroomscommands toroomfor consistency.
- Setting the
--endpointflag orABLY_ENDPOINTenvironment variable correctly sets the endpoint SDK client option - Setting the
ABLY_CONTROL_HOSTenvironment variable correctly sets the Control API client hostname
- Add
ablyEndpointandablyControlHostprops to the AblyCliTerminal react component
- Enhanced auth info display functionality to only hide when API key or token is explicitly provided (#81)
- Updated auth info tests to support async methods for improved consistency
- Resolved security vulnerability by updating @types/node-fetch to fix form-data dependency issue
- Added missing
awaitkeywords for asyncshowAuthInfoIfNeededcalls throughout codebase - Fixed "Unknown App" display issue by fetching and caching missing app names dynamically
- Improved interactive mode test assertions to expect
>prompt instead of$ - Ensured correct default behavior in configuration handling
- Refactored auth info display based on code review feedback for cleaner implementation
- Updated interactive mode prompt from
$toably>for better brand consistency (#54)
- Web CLI tests now use TERMINAL_SERVER_URL environment variable for better test configuration
- Enhanced repository URLs to match new repository name across documentation
- Added an AI_START_HERE.md file.
- For chat rooms,
rooms messages getis nowrooms messages history
- Runtime errors now return more useful error messages when environment variables are not set.
- Fixed spaces cursor connection stability issues.
- Fixed various Web CLI terminal connection and UI issues.
- Improved the terminal session and resume stability in message handling.
- Improved functionality of the API key selection flow.
- Improved AI assistant instructions.
- Added
endpointoption, to allow use with custom endpoints and dedicated environments.
- For chat rooms,
rooms messages reactions addis nowrooms messages reactions send
- Race conditions in session storage to ensure smoother reconnection and consistent handling
- Interactive mode improvements:
- Added helpful feedback when typing "ably" in interactive mode
- Improved welcome messages across all CLI modes
- Enhanced help display and SIGINT handling in interactive mode
- Allow help command in interactive mode
- WebSocket control message prefix protocol client implementation
- Hidden test:wait command for testing purposes
- Multi-project workspace documentation improvements
- Restructured help system and promoted support commands
- Improved Ctrl+C handling during command execution
- Updated help instruction in interactive mode
- Enhanced anonymous mode command restrictions in web CLI
- Prevented terminal clearing in interactive mode and web terminals
- Fixed handling of binary WebSocket messages in client
- Resolved test failures in CI
- Fixed interactive mode tests and documented exit codes
- Web CLI help command now properly displays help content when using
--helpflag - Fixed padding issue that was cropping the bottom line of the terminal in Web CLI
- Resolved race condition in React Web CLI sessionId tests for better test reliability
- Fixed flaky test timing issue in manual reconnect test
- Enhanced Web CLI mode restrictions with separate handling for authenticated and anonymous users
- Authenticated users can now access control plane commands (e.g.,
auth:keys:list,apps:list) - Anonymous users are restricted from privacy-sensitive and authentication-required commands
- Authenticated users can now access control plane commands (e.g.,
- Wildcard pattern support for command restrictions (e.g.,
config*,mcp*) - Clearer error messages that guide users to appropriate actions (login or install locally)
- Domain-scoped credential storage for enhanced security
- React Web CLI unit test failures
- CI reliability improvements around rate limits
- Web CLI mode now properly differentiates between authenticated and anonymous states
- Credentials are now properly scoped per domain, preventing cross-domain credential access
- Anonymous Web CLI users cannot access commands that might expose other users' activity
- Refactored client creation methods to provide type-specific alternatives
- Deprecated
createAblyClient()method in favor of:createAblyRestClient()- ReturnsPromise<Ably.Rest | null>createAblyRealtimeClient()- ReturnsPromise<Ably.Realtime | null>
- This eliminates the need for type casting and improves type safety
- All 50+ command files updated to use the appropriate method
- All test files updated to match new method signatures
- Deprecated
- Web CLI authentication support with credential validation UI
- Auto-update notifications to inform users about new CLI versions
- Auto-completion support for improved command discovery
- Standardized topic command display with
BaseTopicCommand - Restricted mode for Web CLI to handle anonymous users
- User agent header (
ably-cli) in all data and control plane requests - Reconnection attempt counter that resets on manual reconnect
- Line break between countdown and install instructions in reconnection display
- Presence CLI regression where commands were not working correctly
- Meta channel names for connection lifecycle logs (now use
[meta]connection.lifecycle) - Multi-line JSON handling in connection lifecycle tests
- E2E test failures for web-cli application with proper authentication scenarios
- Playwright E2E tests for rate limiting and server disconnection scenarios
- Credentials no longer baked into test builds
- Various linting errors across the codebase
- Consistent authentication recommendations when not logged in
- Help and list commands now have standardized output format
- Obsolete TODO comments that have been completed
- Old test skip logic that was no longer needed
- Updated React Web CLI README to reflect server separation
- Default to public CLI endpoint in development
- Updated GitHub Actions to use checkout@v4
- Added release workflow for automated releases
- Updated CONTRIBUTING.md with release workflow documentation
- Ensured README is properly visible in npm package
- Explicitly linked to README in npm package configuration
- Resolved npm package publishing issues
- Cleaned up old Markdown files
- Fixed global installs that were broken by npm link issues
- Included README in npm package
- Initial patch release after v0.7.0 with minor fixes
- Fixed critical security vulnerabilities in dependencies:
- Updated
brace-expansionto 1.1.12+ and 2.0.2+ to fix ReDoS vulnerability - Updated
tar-fsto 2.1.3+ to fix directory traversal vulnerability - Applied pnpm overrides to enforce secure versions across all transitive dependencies
- Updated
- BREAKING: Complete removal of all server-related code from git history
- Git history has been rewritten to remove all traces of terminal server implementation
- Repository size reduced by 71% (from 68MB to 20MB)
- All old branches and tags that referenced server code have been removed
- Contributors will need to re-clone the repository after this update
- Fixed environment-dependent test skips by correcting environment variable names
- Updated .env.example to remove obsolete variables
- Ensured all tests run consistently in CI environments
- Added placeholder file (server/REMOVED.md) to indicate server code has been moved
- Added comprehensive documentation for the server migration process
- Removed all server-related files from git history including:
- Server directory and all its contents
- Docker configurations
- Terminal server scripts
- Server-specific tests and documentation
- Removed unnecessary test skip logic that was checking for environment variables
- BREAKING: Terminal server functionality has been moved to a separate private repository (
@ably/cli-terminal-server).- Removed server-specific dependencies and configurations
- Updated documentation to reflect the separation
- Web CLI now connects to the production endpoint
wss://web-cli.ably.comby default
- Instructions in CONTRIBUTING.md for Ably engineers to test against local terminal server
- Server directory and all terminal server implementation code
- Server-related test files that were specific to server implementation
- The terminal server is now maintained in a private repository
- Web CLI functionality remains fully operational using the production terminal server endpoint
- For local development against terminal server, see CONTRIBUTING.md
- Enhanced Web CLI with improved connection status display and animations.
- Support for Docker container development with
pnpm dev:container. - Improved bench tooling for performance testing.
- Self-contained connection-status overlay with tests for Web CLI.
- Postinstall notice for better user experience.
- Support for
--filteroption to the pnpm test runner. - Split-screen support planning in terminal.
- Defer first WebSocket connection until terminal is visible.
- Add inactivity timeout for web connections.
- New convenience development commands.
- Improved UI styling and state persistence in Web CLI.
- Enhanced example UI with integrated CliDrawer component.
- Optimized prepare script to avoid redundant build steps.
- Improved specificity for terminal server connection resume functionality.
- Switched from npm to pnpm as the preferred package manager.
- Web CLI no longer reconnects automatically for idle connections.
- Silenced React terminal noise and added opt-in debug logging.
- Addressed numerous CI and build issues.
- Fixed flakey tests in various test suites.
- Resolved CPU issues with Ora spinner.
- Fixed restricted shell parsing error.
- Resolved history command issue with API key environment variable and silent failures.
- Fixed terminal issues related to color support in Docker containers.
- Improved reconnection stability.
- Fixed hijack messages leaking into terminal interface.
- Fixed TypeScript errors in Web CLI e2e tests.
- Made Docker capability tests compatible with different Docker API versions.
- Resolved React unit test drift from implementation.
- Fixed package mismatch issues.
- Removed messageId argument from room reactions.
- Comprehensive AI Assistance guidelines (
.cursor/rules/AI-Assistance.mdc). - Mandatory development workflow definition (
.cursor/rules/Workflow.mdc,CONTRIBUTING.md). - Detailed
Debugging.mdandTroubleshooting.mdguides indocs/. - Formalized
CONTRIBUTING.mdin the root directory.
- Significantly restructured and enhanced
docs/Testing.mdwith clear strategies, examples, and folder structure. - Refactored
.cursor/rules/for clarity, consistency, and improved AI guidance. - Updated
README.mdto link to new contribution and workflow documents. - Standardized documentation file naming (
Title-Case-With-Hyphens.md). - Simplified
Product-Requirements.md.
- Persistent failures in Web CLI Playwright E2E tests related to incorrect WebSocket URL usage (
examples/web-cli/src/App.tsx). - Corrected inaccurate release dates in previous
CHANGELOG.mdentries. - Minor typos and formatting inconsistencies in documentation.
- Apache 2.0 LICENSE file.
- Project Structure documentation.
.editorconfigfor IDE formatting consistency.- Initial test strategy and proposed test coverage.
- Improved terminal server with timestamps in logging.
- Enhanced error handling in
AblyCliTerminal.tsx. - Improved project documentation organization and clarity.
- Applied consistent formatting across all files via
.editorconfig.
- Terminal server regressions following TypeScript/lint fixes.
- React mismatch issues in Web-CLI.
- Fixed variable redeclaration in
channel-rules/update.ts. - Ensured bottom line of terminal is always visible and resize works correctly.
- Fixed dependency issues in
package.json. - Various linting errors.
- Dependency update (vite 6.2.4 to 6.2.6).
- Various linting issues and improvements across the codebase.
- Ensured test runs are supported with GitHub Actions.
- Improved consistency of
process.exit()usage (usingthis.exit()). - Fixed
unicorn/no-array-push-pushlinting error.
- ESLint v9 compatibility and standardized configuration.
- Mocha support for testing framework.
- "Did you mean" functionality for command suggestions via
command_not_foundhook.
- Updated oclif dependencies for consistency.
- Support for
--verboselogging flag. - MCP Server section to
README.md.
- Formatting in
Product-Requirements.md.
- Experimental Model Context Protocol (MCP) server (
src/mcp/mcp-server.ts).
- Bug in Control API access for MCP server.
- Dependency update (vite 6.2.4 to 6.2.5).
- React Web CLI component (
packages/react-web-cli). - Terminal server for Web CLI (
scripts/terminal-server.ts). - Example Web CLI implementation (
examples/web-cli). - Standardized stats display service (
src/services/stats-display.ts). --web-cli-helpcommand.
- Standardized CLI command status reporting.
- Improved help command intuitiveness.
- Refactored handling of interactive commands and history in Web CLI.
- Updated Cursor rules to reference
Product-Requirements.md. - Improved build dependability.
- Various bugs related to Web CLI (Ctrl-C handling, prompt behavior, history).
- Prevented exit from terminal with Ctrl-C (SIGINT) in Web CLI server.
ably apps switchcommand.
- Improved handling of missing API keys and access tokens.
- Added missing
switchcommand toably appstopic help.
- Screenshot to
README.md.
- Improved welcome screen with ASCII logo and colorization.
- Ensured alias commands show errors for invalid requests.
- Ably AI Agent integration (
ably help ask). - Support for follow-up questions (
--continue) with the AI agent. ably help contact,ably help support,ably help statuscommands.
- Ensured consistent help output when topic commands are called without subcommands.
- Improved alias handling and error display for invalid commands.
- Ensured
--control-hostargument works for all commands. - Replaced colons with spaces in
ably channels occupancyand `