
Security News
Deno Goes the Way of the Dinosaur
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.
A/B harness for things a coding agent uses (MCPs, CLIs, scaffolds, prompts). Drives Claude Code against a fixed corpus and produces comparable reports.
The eval engine behind tex-mex and (eventually)
other audience-specific eval plugins. This repo is both:
tex-eval npm package — a Node CLI that spawns Claude Code
against a corpus, measures four behavioral metrics per task, runs an
LLM-as-judge for completion, and writes comparable reports.theDakshJaitly/tex. Today
it ships one plugin (tex-mex); more land here as audiences are
wedged.If you're trying to use tex to evaluate something, you almost certainly want a plugin, not the engine directly. Skip to For users.
If you're trying to build a new audience-specific plugin or wire tex into CI, read on after that.
A scaffold whose pitch was less context via curated routing shipped 5 design iterations over 5 days. All held 10/10 completion. Most improved navigation precision 2–2.5×.
But every variant increased tokens_loaded. The best one was
+177% above baseline — 5,622 tokens vs 2,030. The scaffold's whole
pitch was less context. The candidate would have shipped silently
without the harness.
Decision: shelved, not shipped. Full report:
eval-reports/0.3.0-alpha.md.
This is what tex is for. It doesn't decide for you. It surfaces the contradiction loudly enough that "ship it" stops being the default.
You want the tex-mex plugin. Inside Claude Code:
/plugin marketplace add theDakshJaitly/tex
/plugin install tex-mex@tex
Then /tex-mex to run an eval. Two questions, then it does the work.
Full pitch and details: plugins/tex-mex/README.md.
A tex-cli plugin is on the roadmap. Until it lands, the engine
supports the CLI workflow directly — see For plugin authors / CI
below and use tex run --subject cli:<path>.
The engine's subject loaders for mcp and prompt are stubbed for
v1.1. Use --subject none as a control today; the diff against a
fixture that hand-wires your MCP into .claude/settings.json is the
manual workaround.
The engine ships as the tex-eval npm package. Install:
npm install -g tex-eval
tex --version
tex --help
You also need to be logged into Claude Code (claude /login once,
cached in your keychain). No API key required by default.
# Verify the pipeline
tex smoke
# Scaffold a starter corpus (cli or scaffold templates)
tex init --kind scaffold --var scaffold_name=foo --var scaffold_purpose="..."
# Validate
tex validate corpus
# Run
tex run --label baseline --subject scaffold
# Compare
tex diff results/baseline/report.json results/candidate/report.json
| Command | What it does |
|---|---|
tex init --kind <cli|scaffold> --var ... | Scaffold a starter corpus + fixture. mcp and prompt are stubbed for v1.1. |
tex validate [<dir>] | Load corpus, report errors. Exit non-zero on failure. |
tex run --label <name> --subject <arg> [--auth oauth|key] [--task <id>] | Run the corpus; write results/<label>/report.{json,md} |
tex diff <baseline.json> <candidate.json> | Markdown diff to stdout + eval-reports/ |
tex smoke [--auth oauth|key] | One no-op task against the bundled fixture |
tex detect [<path>] | Classify a directory as mcp / cli / scaffold / etc. |
--subject accepts a shorthand (none, scaffold, cli:<path>,
mcp:<config>, prompt:<path>) or a path to a JSON SubjectConfig.
| Metric | What it measures |
|---|---|
tokens_loaded | Approximate token count of files the agent actually read (chars/4). |
navigation.precision | Read-files ∩ expected-files / read-files |
navigation.recall | Read-files ∩ expected-files / expected-files |
time_to_first_output_ms | Wall-clock from spawn to first agent text |
completion.overall_score | LLM-judged pass rate across binary rubric criteria, scaled 0–10 |
Deliberately decoupled. A change can improve one and regress another — the per-task table tells you which, the aggregate table tells you how much, the rubric breakdown tells you why.
--auth oauth (default) uses your Claude Code subscription. Spawned
sessions inherit your CLAUDE.md / hooks / plugin context — that's
~18.8k tokens of "pollution" per session, constant across compared
runs, so deltas remain meaningful but absolute scores aren't portable.
--auth key opt-in requires ANTHROPIC_API_KEY and prepends --bare
to every spawn, stripping all of that. Real money. Portable scores.
Recommended for CI and published benchmarks.
tex diff warns when comparing reports with mismatched auth modes.
Full semantics: docs/headless-cc-notes.md.
See docs/getting-started.md for the end-to-end
walkthrough. Short version:
id: my-task
fixture: code-repo
prompt: |
Specific, evidence-checkable task the agent should perform.
expected_context_files:
- ROUTER.md
- patterns/foo.md
success_criteria:
- id: stable-id
text: A binary, evidence-checkable claim.
# ... at least 3 criteria
# Optional per-task overrides:
driver_model: haiku
budget_usd: 0.10
The describe-a-fail discipline: for every criterion, you should be able
to state in one sentence what failure looks like. If you can't, the
criterion is too vague and the eval will be noise. The tex-mex skill
enforces this; the bare CLI trusts you.
If you want to ship a /plugin install-able experience for a specific
audience (CLI users, MCP authors, prompt-layer iterators), copy the
shape of plugins/tex-mex/:
plugins/<your-plugin>/
.claude-plugin/plugin.json # plugin manifest
skills/<your-plugin>/SKILL.md # the audience-shaped UX
bin/tex # shim → CLAUDE_PLUGIN_DATA/node_modules/.bin/tex
hooks/hooks.json # SessionStart: npm install tex-eval
package.json # tex-eval as a dependency
README.md # audience-facing pitch
Then add an entry to .claude-plugin/marketplace.json
at this repo's root.
Plugin docs: docs/v1-spec.md for the design
rationale; Claude Code plugin reference
for the manifest schema.
tex/
├── README.md ← you are here
├── .claude-plugin/
│ └── marketplace.json ← lists plugins for /plugin marketplace add
├── plugins/
│ └── tex-mex/ ← the mex-flavored plugin
├── bin/tex.ts ← engine CLI entry (compiled to dist/bin/tex.js)
├── harness/ ← engine source (typescript)
├── templates/ ← cli + scaffold starter corpora used by tex init
├── corpus/ ← engine's own dogfood corpus (5 mex-shaped tasks)
├── fixtures/code-repo/ ← engine's own dogfood fixture (mex-scaffolded billing svc)
├── docs/
│ ├── v1-spec.md ← engine design doc
│ ├── getting-started.md ← end-to-end CLI walkthrough
│ └── headless-cc-notes.md ← Claude Code driver / auth details
├── eval-reports/ ← committed historical eval artifacts
│ ├── 0.3.0-alpha.md ← the headline story (the +177% regression)
│ └── v1-validation/ ← v1 ship validation artifacts
└── test/ ← engine tests
--auth key for portable absolute scores.tokens_loaded is a chars/4 approximation, not a real
tokenizer. Relative measurements across runs are stable; absolute
counts are off-by-some-percent.mcp and prompt subject loaders are stubbed for v1.1. cli,
scaffold, and none are real.mcp and prompt subject loaders; tex sync-fixture
for snapshot-based workflowstex-cli plugin (CPP / agent-facing CLI audience)Split from mex on 2026-05-07. tex was originally mex's internal eval harness — including the +177% token-regression evaluation that got that work shelved. Carved out so the harness can be useful elsewhere.
FAQs
A/B harness for things a coding agent uses (MCPs, CLIs, scaffolds, prompts). Drives Claude Code against a fixed corpus and produces comparable reports.
We found that tex-eval demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.

Security News
On Front Lines’ Early Adopters: CISO podcast, Andrew Becherer shares lessons from Datadog, weighs the long-term costs of AI-built tools, and explains how founders can actually gain a CISO’s trust.