All plugins

crystallize

Spend less on repeated work in Hermes chats and cron jobs, without making your model think less: trims repeated context and tool output in chats, and lets a cron job skip its AI run when its input has not changed, with local receipts showing what each change saved. Disclosure — reads Hermes session costs, user-message counts and final cron answers (state.db, read-only), cron outcomes and job definitions (cron/executions.db, cron/jobs.json) and your config and rate cards; looks up public model prices from the active route's /models endpoint and models.dev once a day with no credentials or chat data (off with hermes crystal prices --lookup off); the optional helper, compare and check features make paid model calls through your own Hermes route; cron tuning, promote and undo run hermes cron CLI commands that edit the chosen job, choosing a helper model or deferring tools runs hermes config set (auxiliary.crystallize_chat, tools.tool_search.defer), and generated pre-run wrappers, drafted snapshot scripts (which replay the job's recorded shell commands and URL reads) and approved snapshot scripts are written under scripts/crystallize/, scripts/crystallize-drafts/ and scripts/crystallize-native/ and run as ordinary cron scripts once attached; in CLI and TUI chats posts one short status line after each turn with ctx.post_message (never on Desktop or messaging platforms; off with /crystallize line off); stores captured tool results, cache entries and receipts in its plugin-data folder; no telemetry, no credential reads, no self-update.

itsflowniumAutomationv0.6.0Updated 1 day ago

About

Spend less on repeated work in Hermes chats and cron jobs, without making your model think less: trims repeated context and tool output in chats, and lets a cron job skip its AI run when its input has not changed, with local receipts showing what each change saved. Disclosure — reads Hermes session costs, user-message counts and final cron answers (state.db, read-only), cron outcomes and job definitions (cron/executions.db, cron/jobs.json) and your config and rate cards; looks up public model prices from the active route's /models endpoint and models.dev once a day with no credentials or chat data (off with hermes crystal prices --lookup off); the optional helper, compare and check features make paid model calls through your own Hermes route; cron tuning, promote and undo run hermes cron CLI commands that edit the chosen job, choosing a helper model or deferring tools runs hermes config set (auxiliary.crystallize_chat, tools.tool_search.defer), and generated pre-run wrappers, drafted snapshot scripts (which replay the job's recorded shell commands and URL reads) and approved snapshot scripts are written under scripts/crystallize/, scripts/crystallize-drafts/ and scripts/crystallize-native/ and run as ordinary cron scripts once attached; in CLI and TUI chats posts one short status line after each turn with ctx.post_message (never on Desktop or messaging platforms; off with /crystallize line off); stores captured tool results, cache entries and receipts in its plugin-data folder; no telemetry, no credential reads, no self-update.

Spend less on repeated work in Hermes chats and cron jobs, without making your model think less.

Most of what an AI agent pays for is re-reading: every call re-sends the chat, and a scheduled job
does the same work on every run. Crystallize finds that repetition and removes it. Your model and
reasoning stay exactly as you set them, so a lower bill never comes from a weaker answer.

What it does for you

  • Skip cron runs when nothing changed. A small script reads the job's data, and the AI only runs
    when that data changes. Crystallize can draft the script from what the job has already done, and
    you review it before it's attached.
  • See what a chat keeps paying to re-read. Context Rent shows what each old tool result costs on
    every call, and lets you remove it. The AI can still read the original.
  • Tidy tool results before the AI reads them. Clean removes wasted formatting with no AI call.
  • Test lower-cost settings on a cron job safely. A trial only stays if its checks pass and it used
    less, beyond normal variation. Otherwise your earlier settings come back.
  • Stop runaway cron runs. Runaway Brake stops a run far past that job's own normal use.
  • Compare models and schedules on your own evidence, with Blind Taste Test, Model Auction and Rhythm.

Quick start

hermes plugins install itsflownium/hermes-crystallize
hermes plugins enable crystallize

It works the same in the classic CLI (hermes chat), the TUI (hermes chat --tui) and Hermes Desktop.

In the CLI and TUI

Type /crystallize in any chat. Everything the Desktop panel shows is there as text:

/crystallize                      what this chat and your cron jobs have saved
/crystallize chat on|off          turn Crystallize on or off for this chat
/crystallize chat default on      start every new chat with Crystallize on
/crystallize rent                 what this chat keeps paying to re-read
/crystallize rent remove N        stop sending result N (the AI can still read it back)
/crystallize jobs                 each cron job's cost, and whether skipping would help
/crystallize brake on|off         Runaway Brake for cron runs
/crystallize prices               this chat's model price

After each turn, a short Crystallize line shows what it's doing, for example ◆ −3.2k tok/call · /crystallize.
In the TUI it sits in the status line and updates in place; the classic CLI prints it after the turn.
It uses Hermes's own post_message, never changes the AI's answer, and /crystallize line off hides it.
Messaging chats don't get it, so Crystallize never sends anyone a message.
With plugins.isolation: host Hermes can't hand plugins a live message, so the line is skipped there; /crystallize still works.

In Hermes Desktop

Open the Crystallize panel (Capabilities → Plugins, then the Crystallize button in the status bar).

From a shell

hermes crystal tune my-job                    # trial lower-cost settings on a cron job
hermes crystal native-cron JOB_ID --draft     # draft a script that skips unchanged runs
hermes crystal rent SESSION_ID                # what a chat keeps paying to re-read
hermes crystal brake on                       # stop runaway cron runs

What to expect

Savings depend on the work. In live paired tests at unchanged reasoning, working chats of 11 messages
cost 20 to 23% less on two of three models, and 23-message chats cost 32% less on one. Short tasks saved
about 6%. On Codex, working chats saved 13 to 19%. A cron job whose data changed once in 4 checks cost 60% less on Nous and 36% less over 5 pairs on Codex. A job whose data changes on nearly every
run gains nothing and can cost a little more, so each job shows its own verdict and real cost. See when it saves, and when it can cost more.

A saving only counts between runs with the same model, provider and reasoning, taken from what each
request actually sent. Prices come from public model lists or your own rate card, so they're
estimates, not your bill. See what has been measured for live results
and their limits.

Chat and Cron

| Control | What it does | Boundary |
| --- | --- | --- |
| Chat Exact/Clean/Summary | Keeps results exact, losslessly compacts JSON whitespace, or explicitly condenses large results with the selected helper | Summary can lose meaning; file contents and errors stay exact |
| Complete task handoffs | Sends supplied text to a helper; requested file reads/writes return ordinary-host-tool plans; owned placeholders avoid retyping | Main route stays fixed; plans are pending work, not completed I/O |
| Re-read savings | Opt-in projections of eligible replayed text, with recovery and a cache-aware payback check | Reasoning and the current thinking pass are untouched; projections are not semantic proofs |
| Tool discovery | Opt-in schema deferral with host-supported discovery | Unsupported/required tool paths retain normal schemas |
| Cron input tuning | Reduces repeated instructions/tool schemas at the same model and reasoning; restores failed trials | Changed settings and uncertain evidence do not become savings claims |
| Read recipes | Learns complete read plans from traces and returns them to the normal agent | Automatic nested replay/promotion is unavailable without a verified public guard contract |
| Native cron sources | Runs a reviewed Python snapshot through public host cron controls; unchanged data can avoid inference | Explicit complete-source approval, local delivery, failure retries and configuration checks; scope and setup |
| Blind review | Presents anonymous A/B answers before model/cost reveal | A preference and structural checks do not establish correctness |
| Model Auction | Explicit bounded model comparisons on frozen recorded evidence | Different-model selection is not same-model efficiency proof |
| Rhythm | Explains observed changes and previews an explicit noncritical schedule adjustment | Confirmation, sufficient observations and declared slack are required |

Chat controls apply to the chat where you enable them, after its first prompt.
Choose a configured, provider-declared or explicitly added Hermes route. Its
authentication and current availability are unverified until a requested call.
Hermes owns authentication;
Crystallize does not read keys or OAuth stores. Helper calls incur provider
usage, including unsuccessful attempts. The main model keeps its chosen route
and reasoning.

Start with Clean, which compacts redundant formatting without a model call.
Optional summaries are checked for structured numeric values, recognizable IDs,
dates, amounts and URLs. Failed or incomplete results stay exact. A summary that
fails those checks is rejected, while its attempt cost remains in the receipt.
These checks cannot prove factual correctness or semantic equivalence.

Originals belong to their originating chat and expire after seven days.
crystal_full_result retrieves exact text; asking a helper about it requires
chat opt-in. Requested file reads/writes return non-executing plans for the normal
agent to perform through its ordinary guarded tools.
Placeholders expand only in eligible text fields before policy checks, and
cannot become commands, URLs or file paths.
Unavailable or expired reply results produce a recovery notice containing their
result ID, while the rest of the reply stays intact. Recovery never starts a paid
helper call, and only successfully recovered text receives savings credit.
On hosts exposing the public output-buffering option, replies are delivered after
placeholder expansion; this can defer streaming for the profile while the plugin
is loaded. Older hosts retain their supported output-hook contract.

See controls and recipes, Rhythm,
Model Auction and validation for
exact controls and limitations.

Evidence and cost

Crystallize separates actual cost evidence, host/list-price estimates, included
subscription usage and unknown values. An API equivalent is not a subscription's
cash cost. Token counts and character estimates are labelled separately. Chat net
subtracts helper requests, unsuccessful attempts, the main model typing hand-off input, read-backs
of originals and the routing note. It does not yet include tool schemas or the one-time cache
rewrite after removing a result, which Context Rent shows separately as a payback count. A smaller
visible message alone proves no saving.

Chat's one-read net is a current-price projection, including for earlier
turns. It applies the current main model's listed rates to recorded token
estimates, which follow words and symbols and calibrate from that model's real usage, then subtracts recorded helper costs and estimated extra-call overhead.
The panel and API identify that route and its input/output rates. Changing the
main model or rate card reprices the projection; it does not change the recorded
events or establish historical billing. Missing helper cache counts use the
highest applicable rate for the unallocated input, explicitly marked as an
upper-bound estimate. Inconsistent counts or unavailable prices remain unknown.
At the public helper boundary, ambiguous zero counters also remain unknown:
reviewed Hermes SDK versions turn absent counts into zero without presence flags.
Positive counters are retained; reported host costs, including zero, take precedence.
Missing input/output counts leave the helper cost unknown rather than inventing a
free input or output bucket.

Cron trials require comparable recorded model/provider/reasoning and observable
outcome checks. Source, task, route, tool or contract changes require fresh
validation. The normal agent handles work while evidence is rebuilt. Contracts
catch missing fields, IDs, URLs, errors and actions; they cannot prove factual
correctness or semantic equivalence. Review answers and real side effects; a pending plan does not establish either.

The former README percentage tables were small, uncontrolled and confounded
observations. They did not establish fixed-reasoning, same-model savings for
this release and have been retired. Fresh evidence must name inputs, served
routes, requested reasoning, usage basis, failures and scope. Historical numbers
do not fill missing live results.

The reproducible harness covers research, writing, data, analysis, coding and
cron fixtures. It defaults to local checks without model calls. Optional live
calls use the public facade, fresh answer-only inputs, an explicit provider
allowlist, isolated profile data, reservations and process deadlines. Synthetic JSON
indentation makes its compression ratio unrepresentative of normal workloads.
Passing it establishes observable conditions, not whole-loop quality or every
cloud provider's compatibility.

python scripts/validation_cross_domain.py --report work/validation-plan.json

The current results retain the same-route research
and cron-v2 pairs, public max-reasoning request observations and all known
failures. Smaller inputs did not establish a net saving: output/reasoning grew.
Use a new report filename for each run; existing reports are refused.

The preserved 16-attempt Nous evidence in docs/evidence/ comes from the prior
private-dependency build. It retains original failures, interrupted attempts,
unknown billing and separately labelled offline checker correction. The historical isolated
no-agent scheduler smoke proves only that narrow path. Current results add a
real reviewed monitor sequence with first/changed answers and an unchanged tick
without a model request; billing and strict reasoning comparison remain unknown. These records are not
revalidation of this public-SDK-only revision; no paid rerun was used to replace
that evidence during migration.

Commands

The manifest load floor is Hermes >=0.22.7; optional capabilities stay gated and this doesn't
promise every feature on every host. In Hermes Desktop the panel has Cron and Chat sections, and
command surfaces also work outside Desktop.

/crystallize chat on                         # enable this existing chat
hermes crystal history                       # recorded cron outcomes and usage
hermes crystal tune morning-brief             # trial input savings; reasoning stays fixed
hermes crystal tune morning-brief --status
hermes crystal tune morning-brief --undo
hermes crystal analyze morning-brief          # inspect repeated read steps
hermes crystal try morning-brief              # save/test a candidate routine
hermes crystal show morning-brief
hermes crystal promote morning-brief --mode tool  # explicit normal-host-tool plan after evidence
hermes crystal undo morning-brief
hermes crystal compatibility                  # what this install supports; no provider probes
hermes crystal prices --provider p --model m  # the list price Crystallize found for a route

Use hermes crystal <command> --help for re-read controls, anonymous comparison
review, Model Auction, Rhythm and optional delegation/tool discovery. Views and
previews do not make paid model calls. Comparisons and schedule changes have
explicit actions. Legacy lower-reasoning trials are restored and require fresh
baseline evidence; reasoning reduction is refused.

Routes and user rate cards

The model picker shows configured, public provider-declared and explicitly added
routes, with their provenance and unverified access status. Adding a route does
not sign in, activate delegation or change the main/helper model. A host-owned
call checks actual access when explicitly requested.

hermes crystal model-route
hermes crystal model-route --provider your-provider --model exact-model-id
hermes crystal rate-card
hermes crystal rate-card --file exact-route-rates.json --confirm

Crystallize looks up list prices for your exact provider and model from the route's own public
model list, then from a public catalog (models.dev). It uses a plain request
with no credentials or chat data, caches for a day, and can be turned off with
hermes crystal prices --lookup off. Codex (openai-codex) bills by subscription and publishes
no per-token price, so it uses the same model's OpenAI API list price; that lets automatic Context
Rent run there with no setup, but it isn't what your plan charges. With no known price, a paid helper stays off unless you allow
it with hermes crystal prices --allow-unpriced-helper on.

Rate cards are explicit user estimates and always win over a list price. They use declared currency/units and exact
provider/model/endpoint identity. Public provider total quotes remain separate;
unknown cache rates, request fees and tiers are not inferred. Cards never prove
actual billing. See Model Auction pricing and
public SDK boundaries before authorizing a budgeted comparison.

Routines and recovery

A routine contains only the conservative read subset before the first action.
The current public dispatch implementation does not verify the complete guard
pipeline, so automatic nested execution, routine shadow replay and pre-run/no-AI promotion
are unavailable for learned tool plans. The separate native source
workflow uses a user-reviewed standalone script through documented cron controls.
Explicit promote --mode tool installs normal-agent recipe
guidance after matching normal-run observations. Read recipes return pending guidance for the main agent's ordinary
tools. Method presence or a user setting does not enable raw dispatch. A read
recognizer remains a conservative check, not a sandbox.

Complete recorded evidence, source order, nested JSON, errors and timestamps
remain available. Oversized/unrecognized evidence falls back to the normal
agent rather than silently truncating it. Parameter bindings are explicit;
task/endpoint/schema drift requires fresh normal-agent evidence. Legacy wrapper
attachments are restored through supported public CLI fields. Unsupported toolset
restoration retains recovery records and requests an ordinary host-tool action.
Schedule changes remain explicit choices.

Disclosures and catalog readiness

  • Reads profile-scoped session history/costs (state.db), cron outcomes
    (cron/executions.db), job definitions (cron/jobs.json), configuration,
    public provider declarations and explicit route/rate-card configuration.
    History reads are read-only; route lists do not probe credentials.
  • Stores captured arguments/results, originals, caches, contracts, comparison
    answers, receipts and diagnostics under
    <hermes home>/plugin-data/crystallize/. Originals can contain sensitive text.
    Complete Cron evidence is additionally bounded to 256 payloads of at most
    500,000 UTF-8 bytes each; previews remain separate, and evicted evidence fails
    completeness checks.
    Receipt export redacts common credential forms; arbitrary sensitive content
    is not guaranteed to be removed.
  • Price lookup makes plain HTTPS GET requests to public model lists (the route's own /models and
    models.dev), sending no credentials or chat data. Turn it off with hermes crystal prices --lookup off.
  • Helper/comparison features send supplied data through a host-owned model
    route on the relevant opt-in/explicit action. Public provider quote logic may
    consult host-owned metadata; explicit rate cards remain estimates. There is no independent credential
    reader or telemetry service.
  • Automatic nested read replay and file execution are disabled on the audited
    host. Plans leave these calls to the normal agent's ordinary approved tools.
    Background text helpers are bounded; timeouts can still incur provider usage.
  • Explicit tuning/recovery edits supported cron fields through public CLI
    children scoped to the profile and stripped of the verified YOLO bypass.
    Unsupported toolset edits become normal-agent plans; automatic pre-run/no-AI
    promotion is refused. Rhythm changes schedules only through its confirmed path.
  • Fetch caching is opt-in, profile-scoped, time-limited and applied after normal
    tool policy checks. Shared namespaces need matching authorization/freshness.
    Credential-bearing arguments are not cached.
  • Private Hermes pricing/inventory/dispatch/cron-update dependencies have been
    removed. Prices come from provider quotes, public list prices for the exact route and explicit
    user cards. No rates are inferred from totals or another provider. Public boundaries explain unsupported features and
    the independently audited, hash-pinned public API contract.
  • No self-updater, token-refresh implementation, credential store or runtime
    patch of Hermes core is introduced. The catalog bundle
    is preparation only. Admission needs a separate
    upstream PR, exact-pin validation and maintainer merge; no listing or
    marketplace compliance is claimed.

Develop

Standalone tests use isolated SQLite storage and local fakes, without a
signed-in Hermes profile:

python -m pip install -r requirements-dev.txt
python -m pytest -c tests/pytest.ini --rootdir tests tests
node --check desktop/plugin.js

Host checks can skip when Hermes modules are absent; skipped checks are not
provider passes. Validate a reviewed exact commit with
hermes plugins validate /absolute/pinned-checkout --install-deps and retain all
warnings. The validation guide documents the separate
root-authorized live workflow and billing/reasoning limits.

MIT licensed.

README from the reviewed commit fc34138; it updates when the author re-pins.

More by itsflownium

4 plugins by itsflownium in the catalog.

itsflowniumgambitPlay chess in a Hermes terminal or Desktop pane, understand mistakes, and replay or practice public Chess.com and Lichess matches. Disclosure — runs a locally installed Stockfish executable (the path you set in plugin settings, or one found on PATH) as a subprocess that inherits Hermes' environment; fetches public games for a username you enter from api.chess.com and lichess.org; uses your configured Hermes model for each opponent move; and in Coach mode the Desktop pane automatically sends coaching requests into the bound chat when it is idle, each starting a model turn.Communitytoolsitsflowniumhermes-agent-builderGuided Desktop workspace in BOTS: tailored questions, reference files, editable instructions and capabilities, version comparisons, model-only trials, and native Bot Chat handoff. Saves specialists as separate Hermes profiles and installs the Builder companion plugin into its own bot profile. Disclosure — "Talk to Builder" auto-creates a hermes-builder profile cloned from the active profile with copied .env/auth.json and copies+enables this plugin there outside the catalog installer (uninstall does not remove that copy); "Save agent" creates new profiles the same way and rewrites their tool/skill selection.CommunityDesktop appitsflowniumletheTake one chat off the record with /lethe: nothing reaches memory, your profile or skills, the transcript is deleted, and a river shows every write it kept out. Use an external memory provider? Copy this into a Hermes chat and replace <PROVIDER> with yours: Extend my local Lethe plugin (~/.hermes/plugins/lethe) so off-the-record chats also skip my <PROVIDER> memory provider's per-turn sync, session-end extraction and save tools when store.is_on(session_id) is true. Show me the diff, add a test, then run hermes gateway restart. Disclosure — Deletes the off-the-record chat's transcript (and its compression chain) from Hermes's session database via SessionDB.delete_session when the chat ends, on /lethe-end or /lethe-forget, or from the Desktop panel's Delete transcript now (unless keep_transcript is on); while on, it blocks memory, user-profile and skill writes plus provider tools whose names look like saves, and adds a fixed off-the-record note to each turn's context; external memory providers' per-turn sync is not blocked.Communitymemory

Developer Mode

Explore built-in Hermes toolsets and actions.

HermesAgent

Developer?

Create a Hermes extension for Desktop or agent workflows.

Developer Section