Repository navigation
feat: move the skill-lens eval to 0.25.0 and add a resume case - #338
Conversation
skill-lens 0.25.0 runs Claude Code with a temporary home directory inside a sandbox, so the login saved in the user's home no longer reaches it and the documented command would stop at preflight. The guide now says which variable to export, and the config requires the product sandbox the same way it already requires the script sandbox. The release also closes four of the guide's known limits: every file the skill ships is delivered, hooks are recorded, and a run can stop at a spend ceiling. The guide describes each one. The results are a fresh run on 0.25.0 with both sandboxes on; the pass counts match the 0.23.0 run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The skill's main claim is that a fresh session resumes from the files an earlier session wrote. One session cannot test that, and seeding the files by hand tests reading files the author wrote. skill-lens 0.25.0 runs a case as several sessions that share one workspace, so the case lets session 1 plan three phases and stop after phase 1, and checks that session 2, told only to do the next phase, completes phase 2 in the same plan. Measured on skill-lens 0.25.0: Claude Code resumed in 4 of 5 runs and PydanticAI in 1 of 5; without the skill no run did. The guide explains each failure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review of the previous commits found that the Phase 3 regex failed a run that left Phase 3 open as not_started, and could read past the end of the section into a later one. It now accepts any status but complete and stops at the next heading of level 1 to 3; the Phase 2 regex stops there too. The second judge line asked whether the log was replaced, which the judge cannot see from the final file. It now asks for a phase 1 entry before the add and list entries. The guide no longer says each check needs session 2, that a hook "success" shows the hook did its work, or why PydanticAI lost session 1's log. The config comment and two guide paragraphs now name the token and the --product-sandbox auto flag a Claude-Code-only run needs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A fresh run of both cases on the corrected checks. Claude Code passed 2 of 5 and 4 of 5, PydanticAI 5 of 5 and 0 of 5; without the skill no run passed. Every skill hook exited 0 and printed nothing, and run by hand the same hook prints the plan, so the guide now says the hooks most likely found no script, and that this is not confirmed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Offline review against skill-lens 0.25.0 reproduced a resume-check false positive. A Phase 2 marked pending can pass when a later level-4 subsection says complete; a completed Phase 3 can pass when a later subsection says pending. The native assertion evaluator accepts both invalid fixtures. I will keep your contribution and add a narrow maintainer follow-up that binds each check to the phase's first status line, with these counterexamples as regression fixtures. The measurements will remain attributed to your original runs; the maintainer regex correction is being validated offline. |
|
@EmadMokhtar, merged with your authorship preserved and released in v3.25.2. The 0.25.0 configuration and two-session resume case are included. The maintainer follow-up binds each phase assertion to its first status line, so a child subsection cannot turn an incomplete Phase 2 or completed Phase 3 into a pass. All 17 offline fixtures match their expected outcomes in the pinned native evaluator. The guide identifies the reported measurements as preceding this assertion correction. Your CONTRIBUTORS.md entry includes this contribution. Final contributor commit: 3b25685. Assertion follow-up: 2bc4396. Release: dcdfb27. |
Follow-up to #334. This PR moves the optional skill-lens eval from skill-lens 0.23.0 to 0.25.0 and adds a second case, which tests that a fresh session resumes from its own plan.
What changed
Move to skill-lens 0.25.0 (commit
docs: move the skill-lens eval to skill-lens 0.25.0)skill-lens.toml:product_sandbox = "required", beside the existingscript_sandbox = "required", andmax_spend_usd = 10.00for the whole run. The comments name the variables Claude Code now needs.docs/skill-lens.md:skill-lens==0.25.0and says to exportCLAUDE_CODE_OAUTH_TOKEN(fromclaude setup-token) orANTHROPIC_API_KEY.A resume case (commit
feat: add a skill-lens case that resumes from its own plan)skills/planning-with-files/evals/planning-with-files.eval.yaml: a second case,resumes-from-its-own-plan. It runs as two sessions against one workspace. Each session is a new agent process with no conversation history; only the files carry over.Every check runs after session 2 and looks for the work session 2 was asked to do:
task_plan.mdmarks Phase 2complete, and does not mark Phase 3complete.progress.mdrecords theaddandlistwork, and has an entry for phase 1 before it.The checks cannot tell which session did the work, and the guide says so.
Review fixes and a re-run (commits
fix: correct the resume case's checks and the guide's claimsanddocs: report the skill-lens re-run after the review fixes)complete. Before, it failed a run that wrotenot_started.**Status:**line in a later section no longer counts.Why
skill-lens 0.25.0 runs Claude Code with a temporary home directory inside a sandbox. Without this PR, the documented command stops at preflight with exit 2, because the login saved in your home directory no longer reaches Claude Code. The release also fixed four limits #334 listed:
templates/,reference.mdandexamples.md;The skill's main claim is recovery: a fresh session resumes from the planning files. #334 could not test that, because a case was one session, and seeding the files by hand tests reading files the author wrote. 0.25.0 adds
sessions:(several sessions in one workspace).Results
One run, five runs per arm, skill-lens 0.25.0, planning-with-files v3.25.1 (
99402ce) with this PR's eval files and config, both sandboxes on (sandbox-exec, macOS). Judgeopenai:gpt-6-luna.creates-the-three-filesclaude-code,claude-sonnet-4-6creates-the-three-filespydantic-ai,openai:gpt-6-lunaresumes-from-its-own-planclaude-code,claude-sonnet-4-6resumes-from-its-own-planpydantic-ai,openai:gpt-6-lunacreates-the-three-files: Claude Code's three failures leftfindings.mdas the empty templateinit-session.shwrites. Its pass count varies between runs: the two earlier runs, on 0.23.0 and on 0.25.0, both gave 3/5.resumes-from-its-own-plan, Claude Code: session 2 resumed correctly in all five runs. The failed run wrote its phases as## Phase Nheadings instead of the template's### Phase N, so neither regex found the sections.resumes-from-its-own-plan, PydanticAI:progress.mdhad no entry for phase 1. The report does not record tool calls, so it does not show how session 1's entries were lost.in_progress, because it had no shell to run the tests it wrote.The 40 runs cost $5.87, judge included.
docs/skill-lens.mdhas tokens, cost and latency for each case.Worth a look on the skill side
CLAUDE_SKILL_DIRset, theUserPromptSubmithook prints the plan. Each hook command looks for${CLAUDE_SKILL_DIR}/scripts/skill-hook.sh, then for a copy under$HOME/.claude/, and exits 0 when it finds neither. My reading is that Claude Code 2.1.289 does not setCLAUDE_SKILL_DIRfor a skill's hooks: in its source the placeholder appears to be replaced only in the skill's text andallowed-tools. If so, the hooks work only through a personal install in$HOME. I have not confirmed this.How it was tested
python -m pytest tests/ -qon Python 3.12 with pytest and PyYAML: 984 passed, 260 skipped.skill-lens list skills/planning-with-fileswith skill-lens 0.25.0 from PyPI loads both cases.CLAUDE_CODE_OAUTH_TOKEN, as the guide says.not_started,Pending, backticked and emoji statuses,Complete, a later section with its own**Status:**line, and the untouched template. Each gave the expected result.skill-lens run skills/planning-with-files --baseline none --repeat 5 --runner claude-code --runner pydantic-ai.Known limitations
### Phase Nheadings.CLAUDE_CODE_OAUTH_TOKEN(orANTHROPIC_API_KEY) andOPENAI_API_KEY. The eval is not wired into this repository's CI.🤖 Generated with Claude Code