subscribrai/subscribr-cli
Generated CLI transport and agent skill for the Subscribr Customer API.
Changelog
All notable changes to this project are recorded here.
The format follows Keep a Changelog, and this project follows Semantic Versioning.
Unreleased
2.3.1 - 2026-09-10
Fixed
- A correct
--if-matchvalue was silently altered before it reached the server, so a working request failed with a confusing validation error instead of succeeding. The CLI auto-decodes an argument that looks like JSON, and a strong ETag is quoted by definition ("abc123") — that auto-decoding stripped the required quotes, and the server then rejected the header as malformed.--if-matchand--idempotency-keynow always transmit exactly as typed; a--bodyfield or other request field still decodes JSON as before.
2.3.0 - 2026-09-01
Syncs the CLI against Subscribr's contract as deployed to production on 2026-08-31: the Video slice is now fully live, and the customer API grew past video for the first time.
Added
video replace-with-media, staging the replacement of a visual block with an image from the Team's own media library (videoReplaceWithMedia,video:edit, idempotency and concurrency both required, same as every other Review & Fix staging write). The image must be at least the video's canvas size or the request is rejected. Replacing a real-photo block spends a credit; replacing a studio slide, illustration, or stock block is free.- Seven
thumbnails boardcommands the API contract now exposes:thumbnails get-thumbnail-board,add-thumbnail-board-images,create-thumbnail-board-generation,edit-thumbnail-board-image,set-thumbnail-board-text,export-thumbnail-board-image, andassign-thumbnail-board-image-to-script. - The Review & Fix loop in the CLI addendum now tells an agent to check
edit_availability(can_start_new_pass,can_apply,edit_window_ends_at) fromvideo get-editable-contentbefore starting a new pass and again before callingapply-revision— a customer normally gets one revision round, and applying spends it.
Changed
- Retired the "may not be deployed yet" explanation for a bare
404on a Review & Fix,apply-revision, or generation operation. Main deployed the whole Video slice to production on 2026-08-31, so a bare404on any video operation now means an ordinary not-found, the same as everywhere else in the API.video_capability_unavailableandvideo_provisioning_requiredare unaffected — those are real, per-Team gates, not a deploy-status signal. RemovedVIDEO_OPERATIONS_PENDING_DEPLOYand its special-case handling inrequest(). scripts/verify_package.py's Video guard now recognizesvideoReplaceWithMediaas an ordinary edit-shaped staging write.
2.2.0 - 2026-08-28
Ships as @subscribrai/cli. Adds the Subscribr Video Review & Fix surface — reads, staging writes, and publish — plus generation (quote/create/cancel) and a generic file-download convenience.
Added
- Subscribr Video project and revision reads:
video list-projects,video get-project,video get-project-download,video get-editable-content,video get-revision-manifest,video list-overlay-templates,video get-quality-report, andvideo get-revision-pass. - Subscribr Video revision-staging and discard writes, each requiring
--idempotency-keyand--if-match:video add-overlay,video remove-staged-overlay,video update-overlay,video remove-overlay,video update-captions,video remove-music,video edit-slide-text,video regenerate-visual,video show-presenter, andvideo discard-edit. A409 revision_conflicton any of them returnserror.current_revision; retry the identical write with that value as the new--if-match. video apply-revision, which publishes the staged changes as a new, immutable video revision. Requires thevideo:publishability (staging writes requirevideo:edit); confirm with the user before calling it, then poll the returned operation withoperations get-operation.--output <path>, for any command whose response carries adownload_url(for examplevideo get-project-download). Streams the file straight to disk instead of printing the signed URL, and never sends your bearer token to the signed URL's own host.video quote-video,video create-video, andvideo cancel-video, for generating a new video.quote-videoreturnsrequired_creditsand spends nothing, so an agent can price a generation before committing to it; quote and charge always agree.create-videorequires--idempotency-key, so a replayed submit converges on the same video instead of billing twice, and returns202with an operation to poll withoperations get-operation, the same asapply-revision.cancel-videoworks at any point before the video finishes, is a harmless no-op once it has, and refunds the full charge. All three require thevideo:generateability, separate fromvideo:edit/video:publish— a token can edit and publish without ever being able to spend.- A
404on any of the 22 operations above that carries no typed Subscribr error body now explains itself: the operation may not be deployed or enabled for this Team yet, rather than a generic validation failure. A disabled-but-deployed capability still returns the typedvideo_capability_unavailableerror, unchanged; a genuine not-found on a deployed route is also typed and is not affected.README.mdand the skill's CLI addendum both say so up front.
Changed
- Renamed the Claude Code plugin from
subscribrtosubscribr-cli, and adopted the official plugin manifest schema. The Subscribr app publishes a separatesubscribrplugin for its hosted MCP connector, and the two names collided. This one is the CLI and its API skill; that one is the MCP connector. The npm package is unaffected, because the plugin manifests do not ship in it. scripts/verify_package.py's Video guard no longer checks the surface against a frozen list of nine read operations. It now enforces five shapes instead: a read must be GET, require onlyvideo:read, and carry no write safety; a staging or discard write must requirevideo:editwith both idempotency and concurrency;apply-revisionmust requirevideo:publishwith the same write safety;quote-videomust requirevideo:generatewith idempotency and concurrency both unsupported; andcreate-video/cancel-videomust requirevideo:generatewith idempotency required and concurrency unsupported.
2.1.1 - 2026-08-27
The first release with a full public project setup. No behavior changed: the CLI, its commands, and its API surface are identical to 2.1.0.
Added
AGENTS.md, so an AI agent working on this repository finds the test commands and the generated-file rule in the standard place.CONTRIBUTING.mdandSECURITY.md.CHANGELOG.md, starting with this release.CLI-REFERENCE.md, holding the request conventions, exit codes, retry and idempotency model, and the contract regeneration steps.- A Claude Code plugin manifest, at
.claude-plugin/. You can now install the skill with/plugin marketplace add https://github.com/SubscribrAI/cli, as an alternative to the npm path. A test keeps its version in step with the other manifests. (Renamed tosubscribr-cliin 2.2.0.) - Documentation for the
thumbnailsdomain, which the CLI has always shipped but never described. - npm version and license badges in the README.
Changed
- Rewrote
README.mdfor a reader who has never used Subscribr. It now explains the product first, lists what you can do with the CLI, and moves the deep technical material toCLI-REFERENCE.md. - Updated the positioning to match Subscribr today: one YouTube content engine covering research, ideas, thumbnails, scripts, and video, usable by a person or by an AI agent on the same plan.
- Pointed the repository metadata at
github.com/SubscribrAI/cli.
2.1.0 - 2026-08-27
The first release under the @subscribrai scope.
Changed
- Renamed the package from
@giltotherescue/subscribr-clito@subscribrai/cli. The command namessubscribr,subscribr-cli, andsubscribr-install-skillare unchanged. - Deprecated every version of
@giltotherescue/subscribr-clion npm, with a notice pointing at the new name.