Roadmap¶
What skill-lens does today, what is being considered next, and what it will
deliberately not do.
What's shipped¶
Organised by what it does, not by when it arrived. For the change-by-change history, see
CHANGELOG.md,
which cz bump generates from the commit history.
| Capability | Where it is documented |
|---|---|
| Skill discovery, eval cases, assertion kinds and per-check scoring | CLI, Eval files |
Running a skill that already has an evals/evals.json, with no YAML |
Reading evals.json |
| The gate, its exit codes, the JSON report, and what a failing case shows | Gating and exit codes |
| Real agents through PydanticAI and LangChain, one run through both | Runners |
| Installed products as the runner and as the judge, with no API key | Product runners |
| Mock tools, shared tool libraries, and per-call mock returns | Mock tools |
| Which tools were called, in what order, and with what arguments | Declaring tools and scoring the trajectory |
| A rubric-based judge with per-check evidence | Judging output quality |
offered cases, which measure whether the agent reached for the skill |
Did the agent reach for the skill? |
Comparative runs: two arms, --repeat, the delta, --min-delta |
Comparative evals |
| Workspaces, bundled files, and sandboxed script execution | The workspace, Running bundled scripts |
| Token, cost and latency budgets, a token stop for a runaway case, and a spend ceiling for a whole run | Budget limits and pricing, The spend ceiling |
| Repository defaults, including a self-hosted model endpoint | Configuration |
| Scaffolding a suite, and importing a real MCP server's tools | init, mcp-import |
| The eval-writing skill, as a plugin for Claude Code, Copilot, VS Code, Codex and Cursor | Installing it |
JUnit and Markdown reporters, --concurrency, the composite action |
CI integration |
| Releases derived from commit history, published over Trusted Publishing | Releasing |
What's next¶
Nothing here is committed to a date.
- A per-skill
min_delta.per_skill_minalready sets a pass rate per skill, but the required improvement is one number for the whole run, so one weak skill sets the bar for all of them. - Efficiency regression gates. The delta already reports the token, cost and latency differences between the arms, but nothing gates on them: a skill that got more expensive without getting better still passes.
- An explicit
--baseline-ref <rev>.--baselinetakesnoneorprevious; there is no way to compare against a revision you choose. - Flagging checks that fail in both arms. A check that passes in both is already flagged as low signal. One that fails in both is reported as "no change", which is true and unhelpful.
Not planned¶
- An HTML reporter. Nothing consumes it. The console, JSON, JUnit and Markdown reporters already cover the terminal, a machine-readable record, CI test panes, and GitHub's step summary and pull-request comments.
- Process or subinterpreter pools. A run waits on the network, not on the CPU, so more
cores buy nothing. The orchestrator is typed against
concurrent.futures.Executor, so swapping the pool is a small change if that ever stops being true. - A results dashboard, authoring skills, or running skills in production. All three are stated non-goals: the tool is a CI gate whose contract is an exit code, and the skills it measures stay inputs to it. See Scope and non-goals.
Development milestones¶
| Milestone | Contents | Status |
|---|---|---|
| M0 | Scaffolding, config, CLI skeleton, release plumbing | shipped |
| M1 | Loaders, protocols, FakeRunner, assertion evaluator, orchestrator, console + JSON reporters, gating |
shipped |
| M2 | PydanticAI runner, trajectory + budget evaluators, cost/latency capture, cassette test tier | shipped |
| M3 | LLM-as-judge evaluator (per-check verdicts), triggering evals with negative controls | shipped |
| M4 | Comparative evals: --baseline/--repeat, delta reporting, --min-delta gating |
shipped |
| M5 | CI/CD polish: JUnit XML + Markdown reporters, GitHub Action, bounded concurrency | shipped |
| M6 | Real-execution tools: sandboxed built-in toolset, file-produced/json-schema assertions, bundled files and run_script |
shipped |
| M7 | DX: failing cases explain themselves, --case, init batch mode and workspace case, versioned example, quickstart |
shipped |
| M8 | LangChain runner and judge ([langchain] extra); runner matrix |
shipped |
| M9 | Product runners: copilot, claude-code, a configured cli; product judge |
shipped |
The rename to skill-lens¶
The project's original name could not be registered on PyPI — the registry folds separators
and look-alike characters before comparing, which collapsed it onto the existing project
skilleval. The distribution, the command, the config file and the Python package all moved
to skill-lens together. The GitHub repository keeps its name.