All plugins

terraform-drift

Compare pinned Terraform provider and module versions with the public registry. Disclosure — tools are on for every Hermes surface, including the gateway. Stop a surface with hermes tools disable --platform <name> terraform-drift, or the plugin with hermes plugins disable terraform-drift. Nothing is written under plugin-data/terraform-drift, and there is no key. Only the directory you name is read, and only .tf, .tf.json, and .terraform.lock.hcl. Symlinks and .. are refused, and .env, tfvars, .terraform, backend values, and hashes are not returned. The provider pin is the lock version, not the required_providers constraint. A module pin is an exact version only. GET calls only registry.terraform.io and, for a github.com source, raw.githubusercontent.com CHANGELOG.md. Redirects and proxy variables are ignored. A timeout or failed read leaves latest empty and is not called current. Semver orders versions, so 1.10.0 is newer than 1.9.0. The digest text is not sent and no cron job is created. known keeps newer versions, and omitting it does not call rows new today. There is no approval card. Before the call, name the directory and say there is no init, plan, apply, or state write. Cron, yolo, and approvals off can still run this read. MIT, no daily cap, requires Hermes >=0.21.4.

TakeshiTGALToolsv0.1.0Updated 13 days ago

About

Compare pinned Terraform provider and module versions with the public registry. Disclosure — tools are on for every Hermes surface, including the gateway. Stop a surface with hermes tools disable --platform <name> terraform-drift, or the plugin with hermes plugins disable terraform-drift. Nothing is written under plugin-data/terraform-drift, and there is no key. Only the directory you name is read, and only .tf, .tf.json, and .terraform.lock.hcl. Symlinks and .. are refused, and .env, tfvars, .terraform, backend values, and hashes are not returned. The provider pin is the lock version, not the required_providers constraint. A module pin is an exact version only. GET calls only registry.terraform.io and, for a github.com source, raw.githubusercontent.com CHANGELOG.md. Redirects and proxy variables are ignored. A timeout or failed read leaves latest empty and is not called current. Semver orders versions, so 1.10.0 is newer than 1.9.0. The digest text is not sent and no cron job is created. known keeps newer versions, and omitting it does not call rows new today. There is no approval card. Before the call, name the directory and say there is no init, plan, apply, or state write. Cron, yolo, and approvals off can still run this read. MIT, no daily cap, requires Hermes >=0.21.4.

terraform-drift

Compares pinned Terraform provider and module versions in one folder with the public Terraform Registry, and quotes breaking or security lines from the changelog. HashiCorp's terraform-mcp-server is a general registry client. This plugin only compares the pins in one folder with the public versions.

Install

Two commands, then the first request.

hermes plugins install --no-enable file:///absolute/path/to/hermes-plugin-terraform-drift
hermes plugins enable terraform-drift

Then ask: Which Terraform providers and modules in this folder are out of date?

The model should call tool_search with "outdated terraform provider and module versions" and then terraform_drift with directory set to the folder. The result has pin, latest, relation, registry_status, and highlights. latest is set only when registry_status is ok. relation behind means the exact pin is below the highest stable version. 1.10.0 is newer than 1.9.0.

There is no approval card. Before the call, write the directory path and that the call only reads .tf files, .tf.json files, and .terraform.lock.hcl plus the public registry, with no terraform init, plan, apply, or state write.

Example of that message:

Directory: /srv/infra
Call: read .tf, .tf.json, and .terraform.lock.hcl, then GET the public registry. No terraform init, plan, apply, or state write.

The tools are on for every Hermes surface, including the gateway. Turn one surface off with hermes tools disable --platform <name> terraform-drift. Disable the plugin with hermes plugins disable terraform-drift.

Requires Hermes >=0.21.4. There are no Python packages to install.

What the read includes

Provider pins come from .terraform.lock.hcl. The constraint in required_providers is not the installed pin. Module versions are not in the lock file. A module is pinned only when version is an exact version such as 5.0.0 or = 5.0.0. A range such as ~> 5.0 stays pin_unknown even if the registry answers.

A .tf.json file is read for module source and version and for required_providers source and version. Other JSON values, including a variable default, are not returned. A .tf.json file that cannot be read leaves the comparison unknown.

The registry calls are GET on registry.terraform.io, for example https://registry.terraform.io/v1/providers/hashicorp/random/versions and https://registry.terraform.io/v1/modules/terraform-aws-modules/vpc/aws/versions. The changelog is GET on raw.githubusercontent.com, for example https://raw.githubusercontent.com/hashicorp/terraform-provider-random/v3.9.1/CHANGELOG.md, only when the registry's source field is a github.com repository URL. Redirects are not followed. Other hosts, including 169.254.169.254, 0.0.0.0, and 192.0.2.1, are refused. Proxy environment variables are not used. A .env file, *.tfvars, and files under .terraform/ are not read. Backend blocks and provider credentials are not returned.

Nothing is written under <HERMES_HOME>/plugin-data/terraform-drift. A symlink inside the folder is not followed. The directory path is refused before reading when its last part, or a part along the way, is a symlink. The macOS names /tmp and /var are the system aliases for /private and still allow a normal folder underneath. A path that contains .. is refused.

Morning or weekly text

terraform_drift_digest returns the text. It does not send it and it does not create a cron job. Connect delivery yourself, for example with the channel already configured in Hermes, and schedule daily or weekly with Hermes cron. Pass known from the previous seen map to hear only registry versions that are newer than that map. Omit known the first time: the text says the baseline is missing and does not claim those rows appeared today. cadence is the label daily or weekly. Raising a pin stays a human decision.

Cron, yolo, and approvals off can still run this read, because it only reads the folder and the public registry. There is no cron job to delete.

When the registry does not answer

registry_down, registry_timeout, registry_auth, registry_rate_limit, registry_http, registry_not_found, registry_body, registry_truncated, and registry_redirect all leave latest null. The summary says the comparison stays unknown. A changelog miss leaves highlights_known false and does not claim there is no breaking change.

What this plugin does not do

It does not run terraform init, plan, or apply. It does not write state or open a pull request. It does not choose Telegram or any other destination.

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

More by TakeshiTGAL

30 plugins by TakeshiTGAL in the catalog.

TakeshiTGALjp-subsidiesJapanese subsidy search and weekly watch, built on the jGrants public API. Disclosure — Searches api.jgrants-portal.go.jp with no API key and no daily request cap; each call waits at most 60 seconds and retries at most twice, and a result is a search match, not proof that every subsidy came back. The plugin has no user list of its own: anyone you allow on your Hermes gateway can call these tools and change this profile's watch, and the agent can set up a watch by itself. In a Chatwork room listed in CHATWORK_ROOMS, everyone can call them while CHATWORK_ALLOWED_USERS is unset. The tools are on for every platform, including gateways; turn them off per platform with hermes tools. While the plugin is enabled, its skill adds one line to the skills index of every session, including surfaces where the tools are turned off. The /subsidies command is outside hermes tools; limit it with allow_admin_from or user_allowed_commands, or disable the plugin. The optional weekly watch is an unattended cron job that runs a script with no model call and is not a sandbox; delivering it to bot-chat instead runs one model turn on the fetched text. If delivery fails after the script runs, those subsidies are already marked seen and the text stays under cron/output/. Uninstall leaves the cron job, scripts/jp-subsidies-weekly-*.py and plugin-data/jp-subsidies/ until you run hermes cron remove and delete the files. The plugin does not store the name or ID of who asked. Not tested against a live gateway, with the Chatwork plugin loaded, or for result sets of several hundred rows.Communitytools1TakeshiTGALwyoming-voice-bridgeWyoming speech-to-text and text-to-speech for a Wyoming server you run (stt/tts provider `wyoming`), plus a wyoming_voice_status tool that lists the server's models and voices. Disclosure — Audio and text to speak go to the WYOMING_* host:port you set over cleartext, unauthenticated TCP (public addresses accepted). Once selected, the providers send speech in every session, including cron and webhooks. This build imports the installed package only when its file tree is the official wyoming 1.5.4 wheel, and a different tree sends nothing. This build lists no ffmpeg digest, so audio that is not already 16 kHz, 16-bit, mono WAV is not converted. wyoming_voice_status asks with one public pre_tool_call line. Choosing always stores one command_allowlist line for that same which and the same host:port list. A later call skips the question only when a person is present. cron, hermes -q, webhook, msgraph_webhook, and api_server do not send a describe, even after always. yolo and approvals off skip the prompt, and this plugin does not add a refusal for those modes. The plugin does not import Hermes approval, config, or write-guard modules. Hermes 0.21.4 does not list the skill. The v0.21.5 canary and Hermes 0.22.2 add one skill line to every session that loads the plugin, including a surface where the tools are turned off. The status tool is on for every surface, including the gateway, and a guest there can call it and approve it when a person can answer. Turn the wyoming_voice toolset off per surface with hermes tools.Communityvoice1TakeshiTGALauthor-feedEach watch run costs 0 tokens, and the unmanned run holds no tools. Read one public profile and watch one account, with profile_get, author_feed and author_watch. It reads public posts and profiles from the Bluesky social media network, which is built on the AT Protocol (atproto), without signing in. Disclosure — HTTPS GET only to public.api.bsky.app, no API key. Hermes starts the watch Python when the cron job fires. The tools are on for every surface, including gateways, and ask for no approval: anyone you allow on your gateway can call them. Turn a surface off with hermes tools. While the plugin is enabled, its skill adds one line to the skills index of every session, including surfaces where the tools are turned off. hermes author-feed schedule writes a script and creates one cron job that does not call a model. Each run costs 0 tokens and has no daily cap. Empty script output sends nothing. Delivered to local unless you pass --deliver, so no chat by default. Run hermes author-feed unschedule before removal. That removes the job and the script. A leftover job after the plugin is gone stops with hermes cron remove <id>. The scheduled script does not run under plugins.isolation: host, so that setting does not stop the watch. The author_watch tool still refuses a run that is not the saved cron job, including under plugins.isolation: host, and posts that notice on every run of the tool. The first run only records what is already there. One run reads at most the latest 3 pages and announces a new post by this account on them. When every row on those pages is new, with no saved post or mark, and the feed still offers another cursor, it also posts a possible-miss notice, at most once in 24 hours while that keeps happening. Replies, including the account's own thread continuations, are not announced. It relies on private Hermes parts, so an update can stop it. State stays in <HERMES_HOME>/plugin-data/author-feed after uninstall. Seen post URIs advance only on the saved cron job after a successful fetch. The script allows that when cron/executions.db shows that job running under the parent pid and cron/jobs.json names author-feed-watch.py. A direct run and another cron job exit 3 with no GET and no write. The author_watch tool allows that only for the saved job id. Delivery accepts origin, local, all, bot-chat, the Hermes 0.21.6 cron platform names, and public registry names that declare a cron delivery env var. A refused name can be set with hermes cron edit <id> --deliver. bot-chat places the watched account's post text in another model turn that has the profile's tools. hermes cron create cannot set a per-job tool list. A job made by 0.1.x keeps its model turn until the next schedule. On Hermes 0.21.4 and 0.21.5 this plugin does not load, and a leftover job keeps its model turn until hermes cron remove <id>. Running schedule again updates the interval and deliver target and switches an existing model job to the script.CommunitytoolsTakeshiTGALcsharp-game-editorGive it one feature for the Unity project open in your editor, and it builds the scripts, objects and scene in one plan, stops that plan when the compile reports an error CS line, and plays the scene when the compile is clean. Disclosure — Needs MCP for Unity pinned to v10.3.0, plus git and uv. Hermes starts mcpforunityserver==10.3.0 through uvx with telemetry and the update check off. Disk reads run at once. apply_plan asks once and puts back a file the plan did not name. A plan that deletes, runs editor code, can lose unsaved work or writes outside the project asks again, and that summary is sent only when every line fits the approval card; otherwise nothing is sent and confirm_risky_plan asks. unity_docs sends the query to docs.unity3d.com after Hermes asks. unity_generate can call paid providers you configured in MCP for Unity; that call was not part of the check. Tools are on by default on every surface, including the gateway. Only users the gateway admits can reach the tools, and this plugin keeps no user list of its own. Cron and a session with nobody to answer decline. Logs stay in <HERMES_HOME>/plugin-data/agent-plugin-csharp-game-editor-<hash>/logs. Stop with hermes plugins disable csharp-game-editor, or hermes tools for one surface. macOS only.Communitytools