model-discipline is a Hermes plugin for bounded, verifier-first workflows.
It is designed for smaller local models that should not be trusted with broad open-ended tool access. Instead of asking the model to improvise every step, the plugin gives it a narrow action surface:
- choose a runbook
- start a workflow
- execute a declared stage
- run verification
- route to a repair path
- publish only when allowed
For weaker but faster local models, reliability often comes from reducing action-space entropy rather than increasing prompt cleverness. This plugin pushes work into:
- deterministic scripts
- explicit artifacts
- explicit workflow state
- verifier checks
- guarded publication
The plugin is intentionally limited. It is not a general automation framework. It is a disciplined runtime for runbooks that are authored ahead of time.
Enable the plugin toolset with:
hermes chat --toolsets model_disciplinepython cli.py --toolsets model_discipline
The plugin registers:
discipline_list_runbooksdiscipline_get_runbookdiscipline_start_workflowdiscipline_statusdiscipline_execute_stagediscipline_verifydiscipline_repairdiscipline_publish
discipline_list_runbooksdiscipline_get_runbookdiscipline_start_workflowdiscipline_execute_stagediscipline_verifydiscipline_repairif neededdiscipline_publishonly when verification is green
A simple reporting-oriented runbook:
- collect inputs
- prioritize items
- render briefing
- verify
- publish
A simple repo-analysis runbook:
- inventory repo files deterministically
- render a markdown report
- verify output
~/.hermes/plugins/model-discipline/
__init__.py
hooks.py
models.py
runtime.py
schema.py
storage.py
tool_api.py
runbooks/
scripts/
templates/
fixtures/
docs/
Runtime state is stored under:
~/.hermes/model-discipline/runs/~/.hermes/model-discipline/sessions/
Add:
- a runbook YAML file under
runbooks/ - stage/verifier scripts under
scripts/<runbook-name>/ - optional templates under
templates/<runbook-name>/ - optional fixtures under
fixtures/<runbook-name>/
Keep runbooks sane:
- explicit stages
- explicit read/write paths
- verifier-first
- bounded params
- guarded publish steps
- no hidden chat-memory dependencies
The plugin ships with self-tests under tests/.
Run them from a Hermes checkout with:
python3 -m pytest /home/sam/.hermes/plugins/model-discipline/tests -q