Skip to content
Utility commands
On this page

Utility commands: project status, unreleased-commit coverage, target detection, ecosystem discovery, pull requests, and the framework's --json envelope.

#Utility commands

rlsbl includes several utility commands alongside its core release, changelog, scaffold, and check workflows. These commands handle day-to-day tasks like inspecting project state, preparing for releases, and managing machine-generated files.

#Machine output

--json is owned by strictcli, not by rlsbl: it is recognized anywhere in the argument list, on every command, and no rlsbl command declares its own. In machine mode stdout carries exactly one document -- the envelope -- and the command's data is its payload member:

{} json
{
  "interface_version": 2,
  "app": "rlsbl",
  "app_version": "0.116.0",
  "command": "status",
  "exit_code": 0,
  "payload": {"name": "rlsbl", "version": "0.116.0", "...": "..."},
  "dry_run": false,
  "writes": null,
  "preview": [],
  "preview_error": null,
  "diagnostics": []
}

A consumer reads .payload and nothing else changes about the data it finds there. writes names the write set of an update command and is null on every rlsbl command, none of which is one. Human output is suppressed in machine mode, so a parser never has to strip anything, and --quiet cannot reach the envelope. The commands that produce a payload are status, unreleased, check-name, check, monorepo graph and monorepo impact; each one declares its payload's JSON Schema, which rlsbl --dump-schema publishes verbatim.

#rlsbl commit

Create commits with an Autogenerated: true trailer that signals the commit contains machine-generated content. These commits are automatically exempted from changelog coverage checks during validation and pre-push enforcement, making them the correct way to commit selfdoc output, strictcli schema dumps, and validation cache files.

#Usage

rlsbl commit -m <message> -- <file1> [file2 ...]

#Behavior

  • Stages the specified files and commits them with the given message
  • Appends an Autogenerated: true trailer to the commit (requires git 2.32+)
  • Uses safegit if available, falls back to raw git
  • The pre-push hook recognizes the trailer and skips JSONL coverage checks for these commits

#When to use

When to use
ScenarioExample
selfdoc regenerated docsrlsbl commit -m "selfdoc: regenerate" -- README.md CLAUDE.md
Strictcli schema dumprlsbl commit -m "schema: update" -- .strictcli/schema.json
Validation cacherlsbl commit -m "cache: update .validated" -- .rlsbl/changes/.validated

#When NOT to use

Do not use rlsbl commit for human-authored changes. Those need proper changelog entries. The trailer is a signal that the commit's content was produced by a tool and carries no user-facing meaning.

#rlsbl status

Show the project's current version, git branch, last release tag, working tree cleanliness, and changelog coverage at a glance. This is the primary command for quickly assessing whether a project is ready for release or has pending work.

#Usage

rlsbl status              # plain text output
rlsbl status --json       # the envelope, with the status data in `payload`
rlsbl status --target go  # target a specific registry

#Output fields

Output fields
FieldDescription
PackageProject name (from manifest file)
VersionCurrent version per target, with source file
BranchCurrent git branch
Last tagMost recent git tag
CleanWhether the working tree is clean
ChangelogWhether CHANGELOG.md has an entry for the current version
JSONLCoverage ratio (e.g., 5/7 commits covered (2 exempted))
CIWhether ci.yml workflow exists
PublishWhether publish.yml or workflow.yml exists

When unreleased commits exist, a warning line appears:

! 3 commits ahead of v0.45.0 — run `rlsbl release run --no-allow-dirty --watch --approve-consequential` or investigate

The whole invocation is printed, not the group name: rlsbl release alone is a command group and prints help, and release run declares --allow-dirty and --watch as required booleans with no defaults.

#Monorepo awareness

When run inside a monorepo sub-project, rlsbl status automatically scopes its output to that project by filtering tags to only those matching the project's naming pattern and counting only commits that touch files the project owns. This prevents cross-project noise in workspaces with many independently-versioned packages.

#rlsbl unreleased

List commits between the last tag and HEAD with their changelog coverage status. This is the primary tool for preparing a release -- it shows exactly which commits still need JSONL entries.

#Usage

rlsbl unreleased          # plain text
rlsbl unreleased --json   # the envelope, with the coverage report in `payload`

#Output (unreleased)

Each commit in the unreleased range is listed with full details for preparing a release. The coverage status column indicates whether a corresponding JSONL entry exists, making it easy to identify which commits still need changelog entries:

  • Full SHA
  • Subject line
  • Author
  • Date
  • Whether it has a corresponding JSONL entry (covered/uncovered)

#Decision table

Decision table
SituationAction
All commits coveredReady to release
Uncovered user-facing commitsRun rlsbl changelog add --commits <hash> --description "..." --type <type>
Uncovered internal commitsRun rlsbl changelog add --commits <hash> --no-user-facing
Autogenerated commits showing as uncoveredShould not happen -- they are auto-exempted. Investigate.

#rlsbl targets

List all release targets detected in the current project directory, showing which ecosystems (npm, PyPI, Go, etc.) are active based on manifest files found. This helps verify that rlsbl will detect the correct targets before scaffolding CI or initializing a release.

#Usage

rlsbl targets

#Output (targets)

A table showing the detection status of every supported release target in the current project directory. Each row indicates whether the target's manifest file was found and which file stores the version:

Output (targets)
ColumnDescription
TargetRegistry name (npm, pypi, go, deno, zig, swift, hex, etc.)
DetectedWhether the target's manifest file was found in the project
Version fileThe file where the target stores its version

#Use case

Before running rlsbl release init or rlsbl scaffold, check which targets rlsbl will detect. If a target is missing, ensure its manifest file exists (e.g., pyproject.toml for pypi, package.json for npm).

#rlsbl discover

Search GitHub for repositories tagged with the rlsbl topic, providing an overview of the rlsbl ecosystem. Use --mine to filter results to only your own repositories, which is useful for auditing which of your projects have rlsbl configured.

#Usage

rlsbl discover          # all rlsbl-tagged repos
rlsbl discover --mine   # only your own repos

#Requirements

  • gh CLI installed and authenticated (for --mine and higher rate limits)
  • Without authentication: 60 API requests/hour
  • With authentication: 5000 API requests/hour

#Output (discover)

A table of rlsbl-tagged repositories on GitHub, sorted by last updated timestamp and paginated up to 1000 results via the GitHub Search API. With authentication, queries can use up to 5000 API requests per hour. Each row shows:

  • owner/repo -- full repository name
  • description -- repo description (truncated to 40 chars)
  • updated -- relative time since last update (e.g., 2d ago)

Results are sorted by last updated, paginated up to 1000 repos.

#rlsbl prs

List all open pull requests for the current repository, showing PR number, title, author, and branch. This provides a quick check for in-flight work before starting a release or making changes that might conflict with pending PRs.

#Usage

rlsbl prs

#Behavior

  • Shows PR count and a table of open PRs (number, title, author, branch)
  • Requires gh CLI installed and authenticated
  • Designed to be safe for hooks -- always exits 0, never crashes the session
  • If gh is not installed or not authenticated, prints a message to stderr and exits 0

#Use case

Run before releasing to check for in-flight work that might conflict with or depend on the release. This is especially important in monorepo workflows where multiple contributors may have PRs targeting different sub-projects, and a release could invalidate their base versions.

More tools from this site

  • claudestream Drive Claude Code from Python: run it as a subprocess and read its output as typed events, with async and sync sessions, sandbox policies, and tools you define in Python
  • claudewheel A TUI Claude Code Launcher that lets you have more than one profile, manage sessions lifecycle, pick the exact CC version, model to use (even older unlisted ones), pick which GitHub account to use, etc.
  • dirstat Fast, single-binary directory statistics CLI: every file under a tree grouped by format, with counts, sizes, and lines of code, as a colored terminal table or as JSON
  • fastware A batteries-included ASGI framework: msgspec JSON, a managed Granian server, dependency injection, SSE, WebSockets, auth, and a test client
  • go-toml-edit Zero-dep TOML editing library for Go with comment preservation
  • howmuchleft The fastest Claude Code statusline: context window, 5-hour, and weekly limit usage as three customizable gradient bars, rendering in about 6 ms
  • orxtra
  • pgdesign
  • predraw Declarative rendering pipeline: describe a scene in JSON and get SVG, PNG and WebP out, with light and dark style tokens, reusable components and text converted to path outlines
  • reposummary Turn a git repository's history into a Markdown journal: pick a time window or revision range and get a readable digest of what changed, optionally narrated by an LLM
  • safegit git wrapper CLI that gives each commit its own temporary index and retries ref updates on conflict, so concurrent agents share one repository
  • saferm Command-line replacement for rm that archives every deletion with a mandatory reason and the context it ran in, so deleted files can be listed, inspected and restored
  • selfdoc Static Site Generator that builds a project's documentation site directly from its source code, so the docs can never drift from the code they describe, with SEO/AEO, first-class blog, search, and cross-project linking built in
  • strictcli
  • stricttest An always-on test-isolation floor: a pytest plugin and a Go env-hygiene module that make a test suite structurally unable to reach real credentials, the real HOME, the network, or the development repository.
  • wesktop A Python framework that turns an ASGI web app into a desktop application, serving it from a local Granian server and displaying it in a native OS window via pywebview
Search