mhl-testing

mhl-testing is a skill for Claude Code, Codex from mh-language/mhl-core-runtime. It costs 51 tokens per session (1,977 once invoked), scanned A, original, MIT.

Test and validate mhl programs. Use for test and describe blocks, mocking agents without calling an LLM, asserting workflow outcomes with Name.run, and reading mhl lint, mhl test or mhl run --dry-run results.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one.

Install with agentmods
npx agentmods add skills/mh-language/mhl-core-runtime/mhl-testing
Install

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.

Any agent
npx skills add mh-language/mhl-core-runtime --skill mhl-testing
Clone the repo
git clone --depth 1 https://github.com/mh-language/mhl-core-runtime

Made for: Claude Code, Codex.

Wrote 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.

agentmods badge for mhl-testing

README.md
[![agentmods](https://agentmods.dev/badge/skills/mh-language/mhl-core-runtime/mhl-testing/github.svg)](https://agentmods.dev/skills/mh-language/mhl-core-runtime/mhl-testing)
Your own site
<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.

agentmods 80×15 button for mhl-testing

Your own site · 80×15
<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>
Per session 51 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,977 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce 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

Measured today against content hash 2b268568a83d, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

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.

skills/mhl-testing/SKILL.md · 222 lines

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"))
    }
}

Read the full file on GitHub · 222 lines

Changes

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.

  1. today First seen · 222 lines · 51 tokens per session scan A 2b268568a83d

Subscribe to this mod's changes

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.

Related

mhl-testing compared with skills from other repositories

mhl-testing next to 6 skills from other repositories
ModTypeStarsLast pushLicenceScanTokensWorks with
mhl-testingmh-language/mhl-core-runtimeSkill9todayMITA51Claude Code, Codex
huggingface-llm-trainerwaybarrios/opencode-power-packSkill5515d agoMITA65Claude Code
huggingface-vision-trainerwaybarrios/opencode-power-packSkill5515d agoMITA48Claude Code
submit-github-prNVIDIA/TensorRT-Model-ConnectSkill289yesterdayApache-2.0A58Codex
huggingface-bestwaybarrios/opencode-power-packSkill5515d agoMITA49Claude Code
rag-code-reviewlyonzin/knowledge-ragSkill301yesterdayMITA83Claude Code, Codex
council-reviewalinaqi/maggySkill71124d agoMITA28Claude Code