rollout-cli
Cross-repo propagation workflow built on refactor-cli — apply a transformation across many repos at once.
What you get
- An agent-first CLI cited from teken
(
afi-cli) — the runtime package has no third-party dependencies. - A mesh identity —
culture.yaml(suffix+backend) and the matching prompt file (CLAUDE.mdforbackend: claude). - The canonical guildmaster skill kit (12 skills) under
.claude/skills/, vendored cite-don't-import, plus theremember/recallmemory skills vendored directly from eidetic-cli. Seedocs/skill-sources.md. - A build + deploy baseline — pytest, lint, the agent-first rubric gate, and PyPI Trusted Publishing wired into GitHub Actions.
Quickstart
uv sync
uv run pytest -n auto # run the test suite
uv run rollout-cli whoami # identity from culture.yaml
uv run rollout-cli learn # self-teaching prompt (add --json)
uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
CLI
| Verb | What it does |
|---|---|
whoami |
Report this agent's nick, version, backend, and model from culture.yaml. |
learn |
Print a structured self-teaching prompt. |
explain <path> |
Markdown docs for any noun/verb path. |
overview |
Read-only descriptive snapshot of the agent. |
doctor |
Check the agent-identity invariants (prompt-file-present, backend-consistency). |
cli overview |
Describe the CLI surface itself. |
Every command supports --json. Results go to stdout, errors/diagnostics to
stderr (never mixed). Exit codes: 0 success, 1 user error, 2 environment
error, 3+ reserved.
Rollout Engine
Operator vs Agent Roles
- Operator — defines the recipe, selects targets (
--org/--repos), reviews the plan output, and confirms the apply. The operator is the only party that can merge PRs. - Agent — executes the deterministic steps: resolve targets, classify repos, branch, apply scripts, bump versions, commit, push, and open PRs. The agent never merges and never makes edits not declared by a recipe.
Recipe Model
A recipe is a directory containing:
manifest.toml— metadata (name,touched_files,bump_level,changelog_text).apply.sh— idempotent script that applies the transformation.check.sh— pre-flight script that classifies a repo as done, ok, or needs-attention.
The recipe model ensures every file change is declared up-front; rollout
never writes to the worktree outside of apply.sh and the deterministic
version bumper.
Two-Phase Flow: Plan → Apply
rollout plan— dry-run. Resolves targets, classifies each as clean, already-done, or needs-attention, and renders per-repo diffs. No branches, no pushes.rollout apply— after operator confirmation (or--yes), applies the recipe to clean targets only: branch fromorigin/main, runapply.sh, bump version, commit, push, and open one PR per repo. A summary table of PR URLs is printed.
Boundary
- Rollout never merges PRs — that is the operator's responsibility.
- Rollout never makes edits not declared by a recipe's
apply.shor the deterministic version bumper. - CI is each repo's own — each target repo runs its own CI pipeline; rollout does not gate on CI results.
Make it your own
- Rename the package
rollout/and therollout-cliCLI/dist name throughoutpyproject.toml, the package,tests/,sonar-project.properties, and thisREADME.md. The name is hard-coded in ~100 places, so list every occurrence first — see thegit grepdiscovery command inCLAUDE.md, the authoritative rename procedure. - Edit
culture.yamlwith yoursuffixandbackend. - Rewrite
CLAUDE.mdfor your agent and run/init. - Re-vendor only the skills you need from guildmaster (see
docs/skill-sources.md).
See CLAUDE.md for the full conventions (version-bump-every-PR,
the cicd PR lane, deploy setup).
License
Apache 2.0 — see LICENSE.
Metadata
Release files for rollout-cli 0.9.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| rollout_cli-0.9.1.tar.gz | 273.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rollout_cli-0.9.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 310.9 kB
Release files / rollout_cli-0.9.1.tar.gz
| Download URL | rollout_cli-0.9.1.tar.gz |
|---|---|
| Size | 273.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
37efdfd7170d18fb89faa340c9a8fa4dfb5529d78ff9c6c89d663845bee81c49
|
|
BLAKE2b-256 checksum How to use checksums |
0d0b030c1675f0827808e4157a6440508bb0bd3363736a9d1ad0ffe3febdd1ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rollout_cli-0.9.1-py3-none-any.whl
| Download URL | rollout_cli-0.9.1-py3-none-any.whl |
|---|---|
| Size | 37.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
58fb51d8caa237457d631f8d62d1288e9ea0006d93377a22226a85b077216469
|
|
BLAKE2b-256 checksum How to use checksums |
81135969c7627fcc0838eba5b21cf2694398a0c27be961d42bfb4621c4324e25
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for rollout-cli 0.9.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.