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 mh-language/mhl-core-runtime --skill mhl-testinggit clone --depth 1 https://github.com/mh-language/mhl-core-runtimeWrote 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/mh-language/mhl-core-runtime/mhl-testing)<a href="https://agentmods.dev/skills/mh-language/mhl-core-runtime/mhl-testing"><img src="https://agentmods.dev/badge/skills/mh-language/mhl-core-runtime/mhl-testing/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/mh-language/mhl-core-runtime/mhl-testing"><img src="https://agentmods.dev/badge/skills/mh-language/mhl-core-runtime/mhl-testing.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.00051 | $0.01977 |
| Opus 5.5 | $0.00020 | $0.00791 |
| Sonnet 5.5 | $0.00010 | $0.00395 |
| Haiku 4.5 | $0.00005 | $0.00198 |
Grade A, and why
mhl-testing 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 today.
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 — 222 lines — stays where its author put it; the contents beside it link to each section on GitHub.
mhl testing
Assumes the mhl-language skill. mhl tests are .mh code: a test holds describe
blocks, each a fresh scope running ordinary statements plus assertions. Tests must be
hermetic: no real model, no network, no paid call, so they can run on every change.
Validation layers
| Command | Proves | Cost |
|---|---|---|
mhl lint <path> |
syntax, types, names, imports, agent config | instant |
mhl test <path> |
behavior of tools, prompts, workflow control flow | fast, hermetic if you keep it so |
mhl run x.mh --dry-run --input k=v |
input contract and static step plan | instant, runs nothing |
mhl run x.mh |
the real thing | real agents, real effects |
mhl test recurses a directory and exits 1 on any failure. Naming a single file with no
test block is also an error. incomplete("reason") records a skip and never fails.
Treat a task as done when lint prints No problems found. and mhl test exits 0 with the
new behavior covered by a test that failed before the change.
Assertions
are_equal(actual, expected), are_not_equal(a, b), is_true(v), is_false(v),
is_null(v), not_null(v), greater_than(a, b), less_than(a, b),
greater_than_or_equal(a, b), less_than_or_equal(a, b), includes(array, value),
incomplete(reason).
are_equal is deep and order-sensitive. is_true errors on a non-bool, so compare first:
is_true(x == 1). There is no raises assertion; use try/catch and assert the
message.
Mocking agents
An agent is a subprocess, so a mock is a cheap command. Three shapes cover almost everything:
// 1. Echo: returns the built prompt, so a test can assert on its content.
agent Reviewer {
command: "echo"
args: ["${prompt}"]
}
// 2. Canned answer: a fixed response, for parsing and branching logic.
agent Classifier {
command: "sh"
args: ["-c", "printf '{\"label\":\"bug\"}'"]
}
// 3. Failure: exercises fallback and error paths.
agent Broken {
command: "sh"
args: ["-c", "echo overloaded >&2; exit 1"]
}
agent Resilient {
command: "sh"
args: ["-c", "exit 1"]
fallback: [Reviewer]
}
workflow Triage {
input title: string
var label = ""
step Classify {
self.label = json.parse(Classifier.run(prompt: title)).label
}
step Review {
log(Broken.run(prompt: title))
}
}
test mocks {
describe echo_exposes_the_prompt {
is_true(Reviewer.run(prompt: "look at ${1 + 1}").contains("look at 2"))
}
describe failure_raises_when_called_directly {
var message = ""
try {
Broken.run(prompt: "x")
} catch (e) {
message = "${e}"
}
is_true(message.contains("overloaded"))
}
describe fallback_takes_over {
are_equal(Resilient.run(prompt: "x"), "x")
}
describe a_failed_step_is_reported_not_raised {
var result = Triage.run(inputs: {title: "t"})
are_equal(result.state, "failed")
are_equal(result.step, "Review")
is_true(result.error.contains("overloaded"))
}
}
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.
- today First seen · 222 lines · 51 tokens per session scan A 2b268568a83d
mhl-testing is a skill published in the GitHub repository mh-language/mhl-core-runtime (9 stars, last pushed today), licensed MIT. It adds 51 tokens to every session and 1,977 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-11-07.
mhl-testing compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| mhl-testingmh-language/mhl-core-runtime | Skill | 9 | today | MIT | A | 51 | Claude Code, Codex |
| huggingface-llm-trainerwaybarrios/opencode-power-pack | Skill | 551 | 5d ago | MIT | A | 65 | Claude Code |
| huggingface-vision-trainerwaybarrios/opencode-power-pack | Skill | 551 | 5d ago | MIT | A | 48 | Claude Code |
| submit-github-prNVIDIA/TensorRT-Model-Connect | Skill | 289 | yesterday | Apache-2.0 | A | 58 | Codex |
| huggingface-bestwaybarrios/opencode-power-pack | Skill | 551 | 5d ago | MIT | A | 49 | Claude Code |
| rag-code-reviewlyonzin/knowledge-rag | Skill | 301 | yesterday | MIT | A | 83 | Claude Code, Codex |
| council-reviewalinaqi/maggy | Skill | 711 | 24d ago | MIT | A | 28 | Claude Code |