Tironian docs
Everything you need to go from install to a small model answering your routine requests. If something here is unclear or wrong, open an issue.
Install
You need Hermes Agent 0.22.3 or newer, signed in to any model provider.
hermes plugins install angelraph/tironian hermes plugins enable tironian
In Hermes Desktop you can also use the install link: Install in Hermes Desktop. Desktop shows what the plugin contains and asks before installing. To see the Tironian page, switch on its Desktop part in Capabilities, Plugins.
Your first report
hermes tironian report
or /tironian report in any session. Tironian reads your Hermes history read only, groups your requests into task families and shows how much of your work repeats and what it cost over the last 30 days. Nothing is sent anywhere and nothing is spent.
Your Tironian report · 47 sessions · 47 requests 64% of your requests are recurring tasks (30 requests). Top task families: faa990c09 largest files · folder 10 req · 6 good · needs 19 more good examples f7fe4b2c3 recent files · folder 8 req · 8 good · needs 17 more good examples
A family becomes trainable at 25 good examples by default. Keep using Hermes normally: every good turn counts. You can speed things up with /tironian good after an answer you liked.
Your first model
- Set up the trainer once:
hermes tironian trainer setup. It creates Tironian's own environment and installs the Modal client. - Add your Modal token (see On Modal) and check it:
hermes tironian trainer check. The check uses no compute. - Train:
hermes tironian train <family> --follow. You see the example counts and the cost before anything starts. - Load the model in Hermes (see Loading a model), then test it:
hermes tironian eval <student>. - If it passes, try it in shadow mode:
hermes tironian shadow <family>. When it agrees with your model often enough,hermes tironian promote <family>and switch on Let promoted students answer in the plugin settings.
On Modal
Modal rents GPUs by the second. Tironian uses your own account, so your data and your bill stay yours.
- Create an account at modal.com. The free Starter plan includes monthly credit (a small amount without a card, more with one).
- In Modal, open Settings, API Tokens, New Token.
- Paste the two values into Settings, Plugins, Tironian in Hermes Desktop, or add them to Hermes's
.env:
MODAL_TOKEN_ID=ak-... MODAL_TOKEN_SECRET=as-...
A run on an L4 GPU costs about $0.15 for a 1.7B model (my runs: 180 examples, about ten minutes, $0.14). max_usd_per_run (default $1.00) is enforced as a timeout on the GPU job, so a run can never cost more. The first run builds the training image, which adds a few minutes. See Cost for an estimate based on your own numbers.
On your own GPU
With an NVIDIA card, training is free and nothing leaves your machine.
hermes tironian trainer setup --local hermes config set plugins.entries.tironian.settings.train_backend local
The local option installs PyTorch and the training libraries into Tironian's own environment (a few GB). A 1.7B model trains comfortably on 8 GB of GPU memory.
Dry run
hermes tironian train <family> --backend dry-run --follow
Runs the whole job pipeline, from dataset to status updates to a placeholder model file, with no compute at all. Useful for trying Tironian out and for its own tests. A dry-run model is not a real model and can't pass a test.
Loading a model
Trained models are saved as GGUF files under Tironian's data folder; hermes tironian students prints the paths. Tironian loads the model for you: if you run Ollama it registers it there, using the same prompt format it was trained on, and Hermes's own local model server works too. Tironian talks to http://127.0.0.1:8080/v1 by default and switches to Ollama's http://127.0.0.1:11434/v1 when only Ollama has the model. Any other OpenAI-compatible server works if you set student_endpoint.
Any OpenAI compatible server works too: Ollama, LM Studio or a llama.cpp server you run yourself. Set student_endpoint to its address.
Slash command
| Command | What it does |
|---|---|
/tironian | Status: what's learned, answered locally, saved |
/tironian report | Recurring tasks and spend in your history |
/tironian families | Each family, its status and last test |
/tironian good [note] | The last answer was right; learn from it |
/tironian bad [note] | The last answer was wrong; never learn from it |
/tironian off · on | Stop or resume learning from this conversation |
/tironian train <family> | Build the dataset and show the cost; asks before starting |
/tironian shadow|promote|demote <family> | Change what a family's model is allowed to do |
/tironian why | Why the last request did or didn't go to a small model |
CLI
| Command | What it does |
|---|---|
hermes tironian status | Summary |
hermes tironian import [--days 90] | Read history read only and rebuild families |
hermes tironian report | The report |
hermes tironian families | Families and their status |
hermes tironian dataset <family> | Build a dataset without training |
hermes tironian trainer setup [--local] | Create the trainer environment |
hermes tironian trainer check | Check the Modal token (no cost) |
hermes tironian train <family> [--yes] [--backend] [--follow] | Train a model |
hermes tironian jobs [--follow] · cancel <job> | Watch or stop training |
hermes tironian resume <job> [--follow] | Reattach to a Modal run whose connection was lost, with no new GPU time |
hermes tironian students | Trained models, paths, whether loaded |
hermes tironian eval <student> [--limit n] [--new-places] | Held-out test and gate verdict. --new-places tests only folders the student never trained on |
hermes tironian shadow|promote|demote <family> | Change a family's mode |
hermes tironian export <family> --out <dir> | Write a dataset you can use anywhere |
hermes tironian passport <student> · --verify <file> | A sealed record of where a student came from and what it proved, and a check that nobody changed it |
hermes tironian forget <session> | Forget one session exactly, including from any student trained on it |
hermes tironian demo | The whole loop in about 30 seconds, offline, on scripted history |
hermes tironian purge --yes | Delete everything Tironian captured |
Settings
All settings appear in Hermes Desktop under Settings, Plugins, Tironian, or set them with hermes config set plugins.entries.tironian.settings.<name> <value>.
| Setting | Default | Meaning |
|---|---|---|
capture_enabled | true | Learn from sessions |
routing_enabled | false | Let promoted models answer |
promotion_mode | shadow | Where a passing model goes first |
exclude_platforms | cron, kanban | Never learn from these |
redact_pii | true | Mask personal details as well as secrets |
retention_days | 90 | Drop recorded contexts after this |
judge_enabled | false | Use a blind judge when a student's answer differs from yours (held-out test and shadow mode) |
spot_check_rate | 0.1 | Share of a live family's requests your usual model still answers while the student is judged in the background, to catch drift. Under 85% agreement over the last 20 sends it back to shadow mode. 0 turns spot checks off |
holdout_by | place | place keeps whole folder trees and drives out of training, so the test shows whether a student learned the job or just your usual paths. session only keeps whole conversations out |
new_place_min_n | 10 | Steps on folders a student never trained on needed before a weak result there stops it serving |
answer_badge | desktop | Where to show that your own model helped with a reply: desktop shows a small proof card in Hermes Desktop, always also adds a one-line note on other platforms, off shows nothing |
base_model | qwen3-1.7b | Or qwen3-4b |
train_backend | modal | Or local |
modal_gpu | L4 | Or A10G |
max_usd_per_run | 1.0 | Hard cap per training run |
promotion_threshold | 0.85 | Lower bound the test must clear |
min_eval_n | 30 | Minimum held-out steps |
min_family_turns | 25 | Good examples before a family can train |
student_endpoint | 127.0.0.1:8080/v1 | Where the small model is served |
student_timeout_s | 25 | After this, your model answers |
Where files live
Everything is under <HERMES_HOME>/plugin-data/tironian/: the database (tironian.db), datasets/, jobs/, trained models in students/, and the trainer environment in sidecar/. Updating or removing the plugin keeps this folder, as Hermes intends for plugin data.
Troubleshooting
The report is empty
Tironian learns from sessions, so a fresh Hermes install has nothing to show yet. Use Hermes for a while, then run hermes tironian import.
A family never becomes trainable
Only good turns count. If your requests for one task are phrased very differently, they may form two smaller families; both will grow. /tironian good after answers you liked helps.
"Modal token missing" or "Token validation failed"
Check that both values are set and that the secret starts with as-. Run hermes tironian trainer check after changing them.
"the local model server doesn't list ..."
No local model server has the model yet. Install Ollama and run the test again, and Tironian will load it, or load the file into the server you use and set student_endpoint.
The model failed its test
That is the gate doing its job. The message says why (too few held-out steps, format errors or the lower bound). More data usually fixes it; train again later.
Nothing goes to the small model
Run /tironian why. Common reasons: routing is off, the family is still in shadow mode, or the request didn't match the family closely enough.
Uninstall
hermes tironian purge --yes hermes plugins remove tironian
Purge first if you want the captured data gone; removing the plugin alone keeps its data folder. Delete your Modal token in Modal's settings if you no longer need it.