Skip to content
Tironian
Privacy and safety

Your work stays on your machine.

Until you press Train, Tironian sends nothing anywhere. This page lists exactly what it reads, keeps, masks and sends, so you can check it against the code.

Reads

Your Hermes history, opened read only. Plus what Hermes passes to its plugins during a turn.

Keeps

A local database in Hermes's plugin data folder. Recorded contexts are dropped after 90 days.

Masks

Secrets and personal details, before anything is written to disk.

Sends

Nothing, until you start a training run. Then one task's masked examples, to your own Modal account.

What it reads

  • Your Hermes history. The profile's state.db, opened read only, on first use and when you run hermes tironian import. Tironian never writes to it.
  • Each turn as it happens. The request Hermes sends to your model and the response, tool results, approvals and session events, through Hermes's public plugin hooks.
  • Its own settings and the Modal token, through Hermes's config and secret store. It never reads .env, auth.json or other tools' credentials directly.

What it stores

Everything lives in <HERMES_HOME>/plugin-data/tironian/ on your computer:

  • masked request contexts and responses, tool outcomes and grades (tironian.db),
  • datasets you build, in the Hermes ShareGPT format,
  • training job folders and the models you train, as GGUF files.

Recorded contexts older than retention_days (90) are dropped; counts and grades are kept so your statistics stay correct.

What it masks

KindExamples
Provider keysOpenAI, Anthropic, OpenRouter, Google, Stripe, Hugging Face, Modal
TokensGitHub, AWS access keys, Slack, JWTs, bearer tokens
Private keysAny BEGIN ... PRIVATE KEY block
Credentials in textpassword=, token:, user:pass@ inside URLs
Random stringsLong, high-entropy values that look like secrets
Personal detailsEmails, phone numbers, card numbers (Luhn checked), IBANs
Your machineYour home folder and login name

Masks look like [REDACTED:email]. Git hashes, UUIDs, dates, version numbers and file paths are left alone on purpose, because they are useful and not secret. A step with more than five masked secrets or personal details is kept for statistics but never trained on.

What it sends

During normal use: nothing. The router only talks to student_endpoint, which is Hermes's own local model server on 127.0.0.1 by default.

When you start a training run: Tironian's separate trainer process uploads that one family's masked training examples to a private Volume in your own Modal account, trains there, downloads the model and deletes the job's files from the Volume. Held-out examples used for testing never leave your machine.

If you switch on the judge (off by default): held-out examples are sent to whichever model you assign to the "Tironian judge" slot in Hermes. While a family is in shadow mode, that model also gets the request and both answers whenever they differ, up to a daily budget you set.

There is no telemetry, no analytics and no account.

Your controls

Do thisTo
/tironian offStop learning from the current conversation and exclude what was captured
Delete a session in HermesDelete everything Tironian kept from it
capture_enabled: falseStop capture everywhere
exclude_platformsNever learn from chosen platforms (cron and kanban by default)
hermes tironian purge --yesDelete everything Tironian captured

Promises about answers

  • Your usual model is called at most once per request, and any failure inside Tironian falls through to it.
  • A small model answers only after passing a held-out test on your own sessions, and only for its own task.
  • Every answer it gives must parse, use a tool the request offers and pass that tool's schema; otherwise your model answers.
  • After any failed or blocked step, your model finishes the turn.
  • Hermes's approvals apply to the small model's tool calls exactly as they do to your model's.
  • A model that falls back too often, or that you mark bad twice, is demoted to shadow mode by itself.

What it runs

Inside Hermes, Tironian uses only the Python standard library and installs nothing. hermes tironian trainer setup, which you run yourself, creates a separate environment in the plugin's data folder and installs the Modal client from PyPI (--local also installs the training libraries). Training runs there as its own process, only when you start it. Cron jobs, the gateway and model turns can never start a training run.

Reporting a problem

Found something that leaks, or a secret that wasn't masked? Please open an issue without including the secret itself, and describe its shape instead (for example "a key starting with xyz_ followed by 40 letters").