Skip to main content

Plugin author

bablobanov

alice-voice❖ Community★ 7

Private Yandex Alice voice input for Hermes, with replies in Telegram. Disclosure — off until you set enabled: true and allow_gateway_injection: true; then, while the Telegram gateway is connected, it listens on 127.0.0.1 (port 8788 by default) for webhooks forwarded by your own HTTPS reverse proxy. The secret URL path (ALICE_WEBHOOK_SECRET) is the only authentication: Yandex request signatures are not checked, and the skill and account IDs in the request can be forged by anyone who has the URL. Each accepted request becomes a user message in one fixed Telegram DM session and runs with that session's tools; approvals stay in Telegram and slash commands are refused. Leaving owner_user_id empty accepts any Alice account presenting the URL.

Voice
telegram_dashboard_probe❖ Community★ 5

One pinned Telegram message with the state of your Hermes on one phone screen: gateway, backup, config drift, the cron ticker and its jobs, whether the Telegram channel is deaf, whether the agent sees its rules and whether its memory writes stand unapproved, account limits and version. Read-only, no LLM calls, nothing to press. Disclosure — Claude and Codex limits come from Hermes' own account-usage fetcher, called every tick (which, like /usage, may refresh OAuth tokens through Hermes' own auth code); at most once per limits_refresh_seconds (default 900 s) the Grok weekly pool is read from https://cli-chat-proxy.grok.com/v1/billing and /v1/settings with the xai-oauth token Hermes resolves (which, like any Hermes request to xAI, may refresh that OAuth token and save it to auth.json, or clear a dead one, through Hermes' own auth code), sending the header x-xai-token-auth xai-grok-cli that identifies the request as the Grok CLI (an undocumented xAI host Hermes itself does not use), and Kimi Code windows from the kimi-coding base URL /v1/usages with the kimi-coding key Hermes resolves (which, like any Hermes key lookup without a usable key in .env or the environment, may save Hermes' credential pool back to auth.json once when loading it changes something, e.g. a placeholder key in .env) and a User-Agent of claude-code/0.1.0 (undocumented provider surfaces), and up to four operator-configured limits_sources, if set, each with one GET to http on loopback only (127.0.0.1, localhost or ::1), with no proxy and no redirect, optionally sending Authorization: Bearer with the value of an environment variable the operator names (never a *_BOT_TOKEN one); every tick the tail of HERMES_HOME/logs/errors.log (the last 256 KB; the whole file, up to 4 MB, until the first successful read) is read for Gemini HTTP 429 lines, of which only the time, limit, retry and model are kept, and for the engine's own 'Failed to send Telegram message' lines, of which only the time is kept, never the message text; with a memory provider configured, the last 256 KB of the same log are also read for the engine's warnings about that provider, of which only the time and whether one says unavailable are kept; every tick HERMES_HOME/cron/jobs.json is read for each job's id, name, enabled flag, state, times, status and failure streak (never prompt, script, deliver, skills or the model) and the ticker's marker files for their epoch, and HERMES_HOME/cron/executions.db is opened read-only (sqlite3 mode=ro with PRAGMA query_only, in a worker under the tick's deadline) for the job_id, status, delivery_outcome and time columns of failed or undelivered runs, never the error column; the engine's error texts are reduced to the kind of the error in a word and never reach the screen or the record; the connected Telegram adapter's public property send_path_degraded is read every tick, and, as a capability and not a contract, four private attributes of the live adapter object (_updates_received_total, _polling_generation, _polling_last_progress_monotonic, _polling_generation_started_monotonic) are read as attributes, nothing is called on it, and an adapter without them shows no data for that line; every tick HERMES_HOME/state.db is opened read-only the same way for the newest saved system prompt of each platform the running gateway lists in HERMES_HOME/gateway_state.json, and the project context files the engine would load (.hermes.md or HERMES.md in that directory and each parent up to the git root, the AGENTS.override.md / AGENTS.md / agents.md chain from the git root down, CLAUDE.md, .cursorrules and .cursor/rules/*.mdc; up to 4 MB each, links followed as the engine follows them) are read from the directory that prompt names (else the engine's TERMINAL_CWD or the gateway's working directory), and .hermes.md, HERMES.md and the AGENTS names also from the gateway's working directory and HERMES_HOME, which may be outside HERMES_HOME; to tell whether the prompt carries them as they are on disk; only a verdict, the file names, sizes and times are kept, never the prompt's or a file's text; every tick HERMES_HOME/memories/MEMORY.md and USER.md (up to 4 MB each) are read to count their characters against the limits, the waiting writes in HERMES_HOME/pending/memory and pending/skills (up to 2,000 files) for their names and times and, of the memory ones (up to 256 KB each), each add's target and length, and the time of HERMES_HOME/skills/.curator_ledger.jsonl; never a notebook's, an entry's or a waiting write's text, and nothing there is written; the private hermes_cli.version_info._cached_version_info and the signature of agent.prompt_builder._read_text_with_timeout are read from modules the gateway already imported, and nothing is called or changed on them; the release check keeps only each release's version and publication time and downloads, installs or replaces nothing; config.yaml is read through Hermes' own YAML parser for the memory limits, switches, approval gate and provider name, skills.write_approval and each platform's skip_context_files; the plugin's own code never reads the Telegram bot token and never writes vendor credential files (Hermes' auth code it calls for Grok and Kimi may, as said above), and no request the plugin's own code sends with a token in a header follows a redirect; the latest Hermes release is read from api.github.com without a token at most once per 15 minutes (releases/latest with the last answer's ETag; the release list releases?per_page=100 only when Latest names another version); an operator-configured drift_command, if set, runs as a subprocess; the delivery record is written under HERMES_HOME/plugin-data/.

Automation

← Back to the catalog