Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add peters/horizon --skill horizon-speechgit clone --depth 1 https://github.com/peters/horizonWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/peters/horizon/horizon-speech)<a href="https://agentmods.dev/skills/peters/horizon/horizon-speech"><img src="https://agentmods.dev/badge/skills/peters/horizon/horizon-speech/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/peters/horizon/horizon-speech"><img src="https://agentmods.dev/badge/skills/peters/horizon/horizon-speech.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00050 | $0.01772 |
| Opus 5.5 | $0.00020 | $0.00709 |
| Sonnet 5.5 | $0.00010 | $0.00354 |
| Haiku 4.5 | $0.00005 | $0.00177 |
Grade A, and why
horizon-speech scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 158 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Horizon speech input check
This skill uses local audio diagnostics. Horizon has no speech MCP tool. Do not treat dictation as an MCP-controlled capability.
Run this when a user says dictation "types the wrong thing", produces text they never said, or produces nothing.
Read this first
Whisper-family models hallucinate fluent, plausible text when fed silence.
Given a digitally silent recording, NB-Whisper will confidently emit something
like Esther Smith, forfatter — grammatical, idiomatic, and completely
unrelated to the user. The output looks like a model, accent, or dialect
problem. It is almost always a capture problem.
So: measure the capture level before touching models, languages, or config. Never conclude "the model is bad at your accent" until step 3 shows real signal.
A user cannot tell these apart from the transcript alone. That is the whole reason this skill exists.
1. Compare configured device against reality
When HORIZON_HOME is set and not empty, Horizon looks for its config only in
that folder (config.yaml, then config.yml) and ignores every location
below. Otherwise it checks, in order, $HOME/.horizon/, then
$XDG_CONFIG_HOME/horizon/, then a relative horizon.yaml/horizon.yml in the
working directory. Resolution keys off HOME on every platform — Windows
included; USERPROFILE is never consulted, so a native Windows launch without
HOME set falls back to the relative path. Confirm which file is actually live
before trusting it, or you may inspect a config Horizon never loaded.
Read features.speech from that file:
input_device: ""means the system default input is used.- A non-empty name is matched case-insensitively: exact, then substring, then a normalized identity key.
If the configured name matches no present device, Horizon falls back to the system default and only logs a warning. The user never sees it. A config naming a microphone that is no longer plugged in therefore looks like it works. Check the name against the live device list before anything else.
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago Changed · +2 lines 0979389e608f
- 7d ago Changed · +3 lines 35ed641f6283
- 27d ago First seen · 153 lines · 50 tokens per session scan A cc8f29a138b6
horizon-speech is a skill published in the GitHub repository peters/horizon (717 stars, last pushed today), licensed MIT. It adds 50 tokens to every session and 1,772 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-19.
Other skills, from other repositories
form-validate
A checker for 1C managed forms, which are the user-interface screens used in 1C applications. It looks for broken structure, duplicate identifiers, invalid data links, and incorrect command references.
interface-validate
A checker for the XML file that defines the command menu of a 1C subsystem. It checks the file’s structure, sections, command links, and duplicate entries.
meta-validate
A checker for 1C configuration metadata, the structured definitions that describe objects such as catalogs and documents. It validates exported metadata XML for structural errors.
mxl-validate
A checker for MXL table-document layouts, which are 1C templates used for printed or tabular output. It checks structural links, indexes, named ranges, merged cells and palette references.
rust-check
Run cargo check on the current Rust project to find compile errors.
moli-webfetch
Fetch, inspect, crawl, and capture live, JavaScript-rendered websites with Moli. Use when Codex needs current web content, web research, fact lookup, link following, a bounded crawl, client-rendered or response-gated content, network diagnostics, or a standalone HTML, Markdown, JSON, semantic-tree, viewport or…