Repository navigation
Shemul v2.0.0
Version 2.0.0 is a major release of Shemul that roughly doubles the feature set. Almost every new capability is additive (an optional shemul.json key or subcommand), so existing 1.0.1 configs keep working. It is a major release because command dispatch changed: bare built-in names now defer to a same-named project command (reachable explicitly via the slash form, e.g. shemul /init), and a new runtime dependency (questionary) was added.
- Release Date: June 6, 2026
- Version Code: 3
- Release type: Major
- Stability: Stable
Note on version codes: the version code (3) counts published releases (1.0.0=1, 1.0.1=2, 2.0.0=3) and is independent of the semver name. There is no 1.1.0 release; this work ships as 2.0.0.
Requirements
- Python Version: 3.9 or higher
Breaking changes
- Command dispatch precedence. A bare built-in name (
init,ls,info,help,doctor,schema) now runs your project/global command of that name when one exists, instead of always running the built-in. Use the slash form (shemul /init) to force the built-in. Configs that did not define commands with these names are unaffected. - New runtime dependency:
questionary(for interactive prompts). Installed automatically by pip.
See the migration guide: doc/migration-1.0.1-to-2.0.0.md.
Changes
- Cross-OS command engine: per-command
osoverrides, top-levelbininterpreter maps, and magic variables ({{os}},{{arch}},{{python}},{{shell}},{{sep}},{{home}}). - Update notifier: non-blocking PyPI/manifest version check with 24h cache and opt-out controls;
shemul updateandshemul version --code. - Optional background auto-update: when enabled, a detached
pip install -U shemulruns after an update is found (opt-in, skipped for editable installs). - Settings store and
shemul settingscommand to enable/disable preferences such asauto_update. - Interactive CLI UI: arrow-key Yes/No for
confirm/dangerprompts, a checkboxshemul settings
editor, aninittemplate picker, and a "did you mean?" command picker. Falls back to the typed
prompt automatically when there is no TTY (CI/pipes) or whenSHEMUL_NO_INTERACTIVEis set. - System vs project commands: a leading slash runs the built-in explicitly (
shemul /init,
/settings,/about, …). Bare names now prefer a project/global command of the same name, so you
can define your owninit/test/etc. and still reach the built-in via/name. - New
aboutscreen (shemul /about): a styled panel with the version, version code, a live
update-status line (up to date / update available / offline), and project links. - Version codes: monotonic integer release code for easy update checks.
sshort alias via opt-in installer (shemul alias install|status|remove) with conflict detection.- Task orchestration:
needsdependencies,pre/posthooks, andparallelgroups. - Active
runtimeawareness and opt-in safe execution (shell: false/exec: [...]). - Plugin API via the
shemul.pluginsentry-point group with a customrunnerper command. - Extended
shemul doctorchecks (OS, interpreters, alias, update reachability).
Affected Files
src/shemul/*(new:platforms.py,planner.py,plugins.py,updater.py,alias.py,settings.py)src/shemul/schema.jsonpyproject.tomlREADME.md,ARCHITECTURE.md,AGENTS.md,doc/*CHANGELOG.md