Repository navigation
Release 0.28 Changes
xsyetopz edited this page Oct 13, 2026
·
1 revision
This page records the changed behavior and the fixes of the 0.28 release.
The additions and the removals are on Release 0.28.
- The eval cases guard a protected file with a file-state
regexgrader (kept-<path>) on its final content. They do not use aBashtext grader, because command text cannot tell a write from a read.just evalalways passes--keep-temp, so each run keeps its sandbox andtrace.jsonl. -
just evalandjust eval-variantstop before the first run when they run in the Bash sandbox of Claude Code. An example of such a run is! just eval. In the sandbox, the model calls of the runs use its proxy. Runs stopped on a model call until the 600 s timeout of the case. - The git ask and the write ask also read a quoted heredoc as commands.
They do so when a loop,
xargs, or a shell runs its lines. Examples arebash -c "$c"in awhile readloop,| sh,source /dev/stdin, andsh -c "$(cat)". They also read a here-string given to a shell, and a git subcommand from a variable or fromxargsgets the git ask. Before, agit stashin the brief of thetest-runnerscript got no ask. - The git ask and the write ask read code in any language that a program other than the shell runs.
Examples are
python3 - <<'EOF',node -e '...', and a heredoc written to a file thatpython3then runs. They have no parser for the language, and they read the words of the code. Soos.system("git stash")gets the git ask, and a protected path that the code names gets the write ask. - The git ask and the write ask read the script file that a command runs, such as
python3 x.pyorbash run.sh, except in a test run. A shell script is read as shell, and a file in another language gives an ask only for the commands in it. -
dotclaude-eval-compareadds no--scaffoldand no--allow-tools Bash,Write,Edit, because each one runs the scripts or the tools of a suite as the user. Add them in the options for suites that you trust.just eval-variantadds both for the suite of this repository. Theeval-compareskill no longer grantsBash(dotclaude-eval-compare *), so Claude Code asks you before each run. A bound in the form--max-cost-usd=Nis kept, and no second bound is added. - With the
backendoptioncloakbrowser, aWebSearchthat falls back to the built-in tool gives Claude a notice with the reason, such as a bot check. The notice tells Claude to tell you. - The
drive-web-browserskill loads theagent-browserguide through the new bindotclaude-browser-guide, which cuts the guide at 40,000 characters and names the command for the rest. A timeout or a failed run gives its reason, and only a missing binary gives the install text. - The eval cases
destructive-ask,big-file-subagent, andlibrary-docsno longer name the graded behavior in the prompt.destructive-asknow asks the agent to free disk space in a project whose large files are a customer export and a database. It no longer needs a question. A report that removes nothing is also right.report-countno longer names its script intasks.md. - The wiki has the shape of the Claude Code docs: an overview, a quickstart, a reference page for each plugin,
Hooks,Troubleshooting, andUndocumented-Reads. That last page gives the source of each read of undocumented data and how it breaks. The old release pages are inwiki/archive/. - CI runs
just checkwith Claude Code 2.1.296, andjust labruns the lab of each plugin that has atests/folder. The repository hasCONTRIBUTING.md,SECURITY.md,CODE_OF_CONDUCT.md, issue and pull request templates, anddependabot.yml. - Each plugin manifest has
$schema,keywords, andhomepage, and its description is the same text as in the marketplace. Thebackendoption ofdotclaude-browserlists its values,agent-browserandcloakbrowser. - The lab bins take flags in place of custom env vars:
dotclaude-sandbox --dir DIR(also--cleanandtools/start-run.ts) anddotclaude-capture --upstream URL.dotclaude-sandboxfindsclaudeonPATHonly, and the capture proxy readsANTHROPIC_BASE_URLwhen--upstreamis not set. - For contributors: the sandbox, the request capture, the settings schema, the start measure, and the usage report moved from
tools/intodotclaude-labanddotclaude-sessions.just sandboxgives--plugin-dirfor each plugin of the checkout, andDOTCLAUDE_SANDBOX_PLUGINSis removed.dotclaude-sandboxmakes each--plugin-dirabsolute, becauseclauderuns in the sandbox project and skips a relative folder.just measurepasses the start bounds oftools/limits.tstodotclaude-start, and the usage report no longer readsverdicts.jsonl.just debug-agentsrunsdotclaude-sandbox --check-frontmatter. - For contributors: the tests are in one folder for each feature, such as
tests/dotclaude/guard/, in place of file names with a shared prefix. - When the headless browser of
dotclaude-browserfails or gets no search results, such as a bot check, the built-inWebSearchanswers the call. Before, the hook denied the call, and a session could end with no answer. - The size bounds that equaled the current file size are gone (
STYLE_MAX_BYTES,VARIANT_MAX_BYTES, andSKILL_DESCRIPTION_MAX_CHARS). Size targets intools/limits.tsreplace them. The targets areCLAUDE.mdat most 6 KB. Skill metadata has 150 to 300 bytes for each skill, and skill bodies have 2 KB to 8 KB. The skill metadata of all skills has a target of 5 KB to 8 KB and a ceiling of 15 KB. The first request has a target of 8 KB to 16 KB. A size above a high bound fails, and a size below a low bound is reported. - dotclaude is tested on Claude Code 2.1.296, and the minimum version is 2.1.296, because the settings schemas are of that version.
The
introsection of the system prompt has one text since 2.1.295, andCLAUDE_CODE_INTRO_FRAMEis gone. - The core plugin has five agents:
debugger,implementer,investigator,reviewer, andtest-runner. Each agent has amaxTurnsvalue, amodel, and aneffortin its frontmatter, andweb-researcheris merged intoinvestigator. - The core plugin follows the plugin layout of the Claude Code docs.
hooks/register.mjsis the one hooks module,features/<name>/holds the code of each part, andlib/holds the shared code. - Each file has 300 lines or fewer, and each test file 500 lines or fewer. A test fails on a file over its bound.
- Runtime JavaScript in
plugins/is.mjson Node. A test fails on another script type, except the hook-lab.test.tsfiles. - For contributors:
just measuresizes the start of a session and prints the figures.just capturelogs and sizes the requests of Claude Code, andjust schemawrites the settings schemas.just start-runcaptures and measures the start of a clean sandbox session in one command.just debug-agentsfails when the debug log names an unknown frontmatter field.just eval-variant REFruns the eval cases on the checkout and on a variant at a git ref.just evaltakes eval options such as--case NAME.just eval-variantcopies the results of the variant arm toplugins/dotclaude/evals/results/variant-REF-TIMESTAMP/before it removes the worktree. - For contributors:
pnpminstalls the pinned toolchain (Biome, markdownlint-cli2, and TypeScript) frompnpm-lock.yaml..node-versionpins Node 22.18.just lintand CI also lint the Markdown. - For contributors: the repository has no Bun.
The tests run with
node --test(just testorpnpm test), and the scripts oftools/run on Node.pnpminstalls theyamlparser that the eval-case test readscase.yamlwith. -
just schemareads Claude Code 2.1.296 only. The tables of older versions are removed, because each build renames the minified helpers. The schema check of a definition now reads the object and record helpers from the table, so a lazy record such asenvkeeps itsobjecttype. - Each
catchinplugins/now names the error that it expects, such asENOENTorSyntaxError, and rethrows the others. A classic hook that crashes still lets the call continue, and it writes the error to stderr. The guard ofdotclaudeno longer keeps an empty list of GitHub owners for the session after a failedghcall. It asksghagain at the next check. - Windows:
codegraph,openspec, andclaudestart throughcmd.exewhen they are.cmdfiles. An argument with%,!,", a line break, or an end\is refused there, becausecmd.exeexpands%before it reads quotes. A missingcodegraphadds no session line,dotclaude-sandboxsetsUSERPROFILEfor the child, andreadTailreturnsnullfor a folder. - CI runs
just ci, which isjust checkwithout the type check, because Claude Code writes.claude-plugin/types/only when an interactive session loads the plugin.
-
Release 0.28: the additions and the removals of
0.28. - Archive: the index of the archived pages.
- Start
- How dotclaude Works
- Add-On Plugins
- How Claude Code Works
- Reference
- Rationale
- Evidence
- Development
- Archive