All plugins

gleif

lei_lookup, lei_parents, lei_children, lei_search, and lei_isin return LEI records, ISINs, or name candidates. A parent is an official record, a reporting exception, or an explicit miss. Disclosure — sends the LEI, legal name, or ISIN you type to api.gleif.org (GLEIF) over HTTPS with no key, and does not follow redirects or use an HTTP proxy; tools stay on for every surface, including an empty gateway allowlist; the opt-in 08:00 job spends 0 tokens and does not fire until a scheduler serves this profile; local delivery keeps a line under cron/output and empty stdout sends nothing; removal leaves the cron job, scripts/gleif-watch.py, and plugin-data/gleif/watch.json; no GLEIF logo.

TakeshiTGALToolsv0.1.0Updated 6 hours ago

About

lei_lookup, lei_parents, lei_children, lei_search, and lei_isin return LEI records, ISINs, or name candidates. A parent is an official record, a reporting exception, or an explicit miss. Disclosure — sends the LEI, legal name, or ISIN you type to api.gleif.org (GLEIF) over HTTPS with no key, and does not follow redirects or use an HTTP proxy; tools stay on for every surface, including an empty gateway allowlist; the opt-in 08:00 job spends 0 tokens and does not fire until a scheduler serves this profile; local delivery keeps a line under cron/output and empty stdout sends nothing; removal leaves the cron job, scripts/gleif-watch.py, and plugin-data/gleif/watch.json; no GLEIF logo.

LEI Record

LEI Record reads one Legal Entity Identifier, or a legal name, from the public GLEIF API. A parent answer is an official parent record, a reporting exception, or an explicit miss. The plugin does not guess a parent from a name.

Install and first call

From this directory, with Hermes 0.21.4 or newer:

hermes plugins install "file://$PWD" --enable
hermes plugins enable gleif
hermes gleif call lei_lookup --json '{"lei":"335800LUOBQQY1UPKZ54"}'

No API key is required. The command prints one JSON object. parents is not_requested on that call. golden_copy is the publish date from the response. caution is empty when registration.status is ISSUED and entity.status is ACTIVE.

What the API allows

The LEI data terms of use are at https://www.gleif.org/en/meta/lei-data-terms-of-use/. Access to the API is free. There is no individual contract and no account. The LEI data is under CC0 1.0: https://creativecommons.org/publicdomain/zero/1.0/legalcode. The terms say the data is provided AS IS and that Swiss law applies. Do not present this plugin as a GLEIF product. Do not bypass a technical limit. This plugin does not use the GLEIF trademark or logo. The catalog draft prints the plugin name gleif in large type. It does not reproduce the GLEIF logo or wordmark.

The API description is at https://www.gleif.org/en/lei-data/gleif-api. Reporting exception reasons are listed at https://www.gleif.org/en/lei-data/access-and-use-lei-data/level-2-data-reporting-exceptions-2-1-format. The API documentation at https://documenter.getpostman.com/view/7679680/SVYrrxuU says: Rate limiting is currently set at 60 requests, per minute, per user, for all users. Responses read on 2026-11-03 carried no rate-limit header. This process waits one second between its own requests. It does not retry. A 404 is returned as read and is not requested again.

There is no daily cap. A list call reads page 1, 2, or 3, with five rows on a page. A later page stays unread. The morning list holds at most ten LEIs. A response body over 1,000,000 bytes is not read to the end. That result is truncated.

Parent records

lei_parents reads the LEI record first. It then reads the direct parent and the ultimate parent.

An HTTP 200 on the parent URL is an official parent record. Quote that parent LEI and legal name. The reporting-exception URL is not called when the parent record is present.

An HTTP 404 whose body says Related resource not found means that related resource is absent. It is not retried. The matching reporting-exception URL is read once. An HTTP 200 there is a reporting exception. Quote reason as published. parent_lei is null. A reason does not supply a parent name.

When the parent URL and the exception URL both return that same 404, the side is no_official_record. That is the explicit miss. A timeout, a redirect, a short body, or any other status is unknown. Do not treat unknown as a miss. The LEI record can still be ok true. parents_complete is false when either side is unknown.

A missing LEI is a different 404, lei_not_found. Parent URLs are not called.

lei_lookup with legal_name returns candidates. A name that differs after case and spacing are folded, including an accent, stays a candidate. That call does not request parents. lei_search returns legal-name candidates from the fuzzy response and does not request a parent or an LEI record. An empty candidate list says that the fuzzy search returned no legal-name candidate.

lei_children lists direct child records. lei_isin maps one ISIN to LEI records, or lists ISINs on one LEI. An empty complete page is the only zero. A page with a further link is not the full list.

When registration.status is not ISSUED, or entity.status is not ACTIVE, the record includes one caution line. A code outside the published lists is quoted that way. The golden copy date is golden_copy.

What is sent, and what stays here

The LEI, legal name, or ISIN you pass is sent to api.gleif.org over HTTPS. Nothing else is sent. Redirects are not followed. An HTTP proxy in the environment is not used. The read tools do not write a file.

The tools start enabled on every surface. An empty gateway allowlist still leaves them enabled, so a person who can message that surface can call them. Turn one surface off with hermes tools disable gleif --platform telegram. The CLI call still runs after that.

The watch file under plugin-data/gleif stays on this machine. It stores the LEI and the last registration status, entity status, and golden copy date. Each directory is opened from the filesystem root. A symlink under the Hermes home is refused, and the message names symlink. The first directory of an absolute path may be an operating-system alias. On macOS, /tmp and /var are aliases of a private directory. A home under those aliases is written through the real directory. A symlink on a later directory, or on the file itself, is refused.

Morning watch

This plugin does not set approval-card text. The morning job is a CLI command. Before you run it, read the watched LEI list, the 08:00 schedule, and the local-only delivery. Those are the whole change. The job compares saved status values. It does not delete a record at the API.

hermes gleif watch add 335800LUOBQQY1UPKZ54
hermes gleif watch list
hermes gleif schedule
hermes gleif status
hermes gleif unschedule

schedule accepts only local. Delivery is local only. Any other deliver target is refused before a job is created. It writes scripts/gleif-watch.py and creates one cron job named gleif-watch. The schedule is 08:00. Hermes uses the profile timezone when one is set, and otherwise the machine local time. The run has no model turn and spends 0 tokens. The job does not fire until a scheduler is serving this profile. hermes cron status says the jobs will not fire. On the default profile it prints hermes --profile default gateway install. hermes cron list prints hermes gateway install. Local delivery keeps a printed line under cron/output and sends nothing to a chat. The first successful read stores a baseline and prints no line. A later morning prints one line when registration.status or entity.status changed, with the golden copy date and the caution line when there is one. An empty script sends nothing. A failed read keeps the saved status and prints that the LEI was not read.

unschedule removes the cron job and scripts/gleif-watch.py. The watch file remains.

After hermes plugins remove, three leftovers remain: the cron job, scripts/gleif-watch.py, and plugin-data/gleif/watch.json. Copy the id from hermes gleif status or from hermes cron list before you remove the plugin. hermes cron status prints the active job count and the next run. It does not print the id. Stop the leftover job with hermes cron remove <id>. On a profile other than default, use the hermes -p <profile> prefix printed by status. Delete scripts/gleif-watch.py and plugin-data/gleif/watch.json if they are still there. hermes cron remove with no id exits 2 and the job stays.

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

More by TakeshiTGAL

34 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, and its pre_llm_call paragraph is added on those surfaces too. 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. subsidies_detail compares a corporation's published industry, capital, employee count, and address with the call text as characters, returns a cap only when the call states one, and does not estimate an award. pre_tool_call blocks subsidies_search unless keyword is contained in industry text copied from a tool result, including a list of industry strings. A company name does not pass, including when the industry text is contained in the company name. When industry text was returned and the keyword is not that text, the block does not say the industry was missing. The block says the search was not run, eligibility is not_claimed, and no award was estimated. A company name contained in business_summary does not pass as an industry keyword. That holds when the name field is absent and the summary is トヨタ自動車は自動車を製造する。: トヨタ自動車 does not pass and 自動車 does. transform_tool_result remembers industry text and returns nothing, so the tool result is unchanged. pre_llm_call adds its paragraph only on a subsidy question (補助金, 助成金, jGrants, or 募集) or when subsidies_search, subsidies_detail, or subsidies_watch_setup was called in the previous turn, and adds nothing on other turns. A company name alone or an unrelated question does not add it. The paragraph says to call subsidies_search only with industry text copied from a tool result, that eligibility is not_claimed, and not to estimate an award or write 対象です.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

Developer Mode

Explore built-in Hermes toolsets and actions.

HermesAgent

Developer?

Create a Hermes extension for Desktop or agent workflows.

Developer Section