Repository navigation
Release 0.17
Released 2026-10-01 to 2026-10-02. dotclaude replaced the launcher with an output style, merged the setup skills, cut the agents from 19 to 8, and added organization rollout and larger evals. A version in parentheses marks a later patch of this line, and an entry with no version comes from 0.17.0.
Note: 0.17.1 needs Claude Code 2.1.287 or later.
-
Launcher: dotclaude no longer installs a
claudeshell function to replace the system prompt.apply-launcher.mjsis removed. To migrate from 0.16.x, run/dotclaude:setup. It removes the 0.16 function from the shell startup files and removes~/.claude/dotclaude/system-prompt.md. -
Setup skill:
/dotclaude:apply-settings-profileand/dotclaude:setup-integrationsare now/dotclaude:setup. Run/dotclaude:setup integrationsfor the integrations. -
Skill names, with no alias for the old names:
write-session-handoffis/dotclaude:handoff,run-agent-loopis/dotclaude:slices,contribute-upstreamis/dotclaude:contribute, andexplain-dotclaudeis/dotclaude:explain. -
Option names: most plugin options use one
<group>_<feature>scheme, so/configlists each group together. The groups areguard_,gate_,context_,usage_,model_,git_, andagent_guidance. For example,bash_guardis nowguard_bash,stop_gateisgate_verify, andclaude_planismodel_plan. The old names have no alias, and/dotclaude:setupmoves each value that is set to its new name. -
Agents (0.17.0, 0.17.1): dotclaude has 8 agents, down from 19, and the user briefs the new agent with a lens.
New agent Replaces Lenses and notes reviewercode-reviewer,security-reviewer,plan-reviewer,diff-reviewercode,security,plan,diff. Sonnet 5.5 athigh, also for thedifflens of a slice (0.17.1, from Opus 5.5).investigatorci-investigator,history-investigator,dependency-auditorci,history,dependencies.debuggerperformance-engineerAlso measures and improves speed and memory use. Sonnet 5.5 at high(0.17.1).implementertest-writer,docs-writerAlso writes the tests and docs of its slice. -
integration-setupagent: removed. Thesetupskill runs the integration scripts itself. -
auto-updatesswitch of the optional profile: removed. Useapply-settings.mjs --auto-update on|off. -
Settings profile: no longer removes keys that the 0.8 and 0.11 profiles wrote.
-
Output style
dotclaude: holds all working rules, at about 2.3k tokens, where a replacement system prompt of 4.3k tokens held them.-
skills/setup/profiles/system-prompt.mdis removed. - The style sets
keep-coding-instructions: true. With the lean prompt the flag has no effect, and it keeps the coding instructions only for a user who turns the full prompt back on. - The SessionStart plan note no longer holds the handoff rule, because the style holds it.
-
-
LIMITS: no longer hasskillLines,skillBodyTokens, orskillDescriptionChars, and the tests no longer check skill size. Use thecreate-agent-skillschecks for a skill. -
evals/: 8 new cases in 4 tiers, taggedtier-1totier-4, from a one-file fix to delegation,slices, and a handoff. The 15 earlier cases are removed, so earlier results do not compare with new ones. -
Claude Code version (0.17.1): dotclaude needs 2.1.287 or later.
- One version,
CLAUDE_CODEinhooks/lib/_version.mjs, replaces the separate minimum and tested versions. - The session start notice names it for an older CLI.
-
/dotclaude:setupwith auto-update on setsminimumVersionto 2.1.287 or to the running version, whichever is later. -
install-managed.mjssetsrequiredMinimumVersionto 2.1.287.
- One version,
- Auto-update:
/dotclaude:setupturns it on with thestablechannel and aminimumVersionthat stops a downgrade, or off withDISABLE_AUTOUPDATER. -
migrate.mjs(setupskill): previews and removes the 0.16 leftovers outside the settings file. It renames the old option keys in the user settings, with a backup of each changed file. -
model_plan: a picker in/config. - Organization rollout:
/dotclaude:setup managedandinstall-managed.mjs --orgwrite a managed drop-in.- Besides the personal lock, it enables
dotclaude@dotclaude, declares its marketplace, and setsenforceAvailableModelsandrequiredMinimumVersion. - The declared marketplace keeps the skill
allowed-toolsunderallowManagedPermissionRulesOnly.
- Besides the personal lock, it enables
-
docs/organizations.md(removed in 0.20.0): how to roll out dotclaude with managed settings, a strict marketplace list, plugin options for every user, budgets, and Windows limits. - Plan note: on Team and Enterprise seats, it says that the seat uses an organization budget and names the agents that run Sonnet 5.5.
- Edit-failure hook: when an
Editfails becauseold_stringmatches no text, a PostToolUseFailure hook gives Claude the closest lines of the file with line numbers. The idea comes from the DensePackedit_gate.pyhook (MIT), and dotclaude copies no code from it. - Report note: after each compaction, a SessionStart note restates the report rule of the output style (#88189). A custom output style cannot set a turn reminder.
-
LIMITS.sessionNoteChars(1000 characters): bounds the subagent conventions and the plan note. - Stale-cache notice (0.17.1): a resumed or forked session with 100k tokens of context or more and an expired prompt cache tells the user the context size and the estimated cost of the first prompt.
It suggests
/clearwith a handoff note, and it uses the new SessionStart fields of Claude Code 2.1.287. - Description test: a test fails when two skill or agent descriptions are near-duplicates by TF-IDF cosine similarity. The method comes from addyosmani/agent-skills (MIT).
- Attributions: names the projects whose ideas dotclaude reimplements, DensePack and agent-skills.
-
evals/oracle.mjs(0.17.0, 0.17.1): runs the hiddenoracle.shof each case in a copy of the kept workspace afterclaude plugin eval --keep-temp. It adds anoraclegrader and the input, output, cache-read, and cache-write tokens of each run. It also reads a workspace that the CLI sealed, opens the seal only to copy the workspace, and then closes it again. -
evals/report.mjs(0.17.1): gives the cost for each pass for each arm, which is all spend (failed trials included) divided by the trials that passed. It also names the graders that failed in each case, with counts. - Role cases, tag
tier-5(0.17.1), each with a hidden test oracle:-
t5-review: a commit with three planted defects and a right loop that looks wrong. -
t5-debug: a test that fails only after another test, from shared state in a third module. -
t5-slice: a specified feature across four files.
-
- Held-out groups (0.17.1), written blind like groups
atoc:- Group
d(evals-heldout/d/) has 10 harder cases. Each is a git repository with 18 to 37 files and several traps that interact, with up to 80 turns. Groupsatocwere at their ceiling (27 of 30 cases passed every trial in both arms). - Group
e(evals-heldout/e/) has 10 more hard cases from dossier parts 04 and 05 and other parts that no earlier case cites. Each is a git repository with 20 to 38 files, and six hold uncommitted user work that must survive. - No agent has run group
doreyet.
- Group
- Subagent conventions: 1k characters, down from 2.7k.
- Descriptions: each skill and agent description is at most 200 characters, about 150 for most. It says what the item does, then when to use it, then what it is not for.
-
slices: a slice withrisk: highgets a secondreviewerwith thecodelens. - Model lock: allows Sonnet 5.5 at
higheffort, and still deniesxhighandmax. The release charts of Anthropic show that Sonnet 5.5 athighcosts about as much as Opus 5.5 one level lower for about the same score. -
setupskill: links its integrations reference fromSKILL.md. - Bash guard, temp and ignored paths: no longer asks for a bulk remove in a temp folder or in a gitignored path.
This covers
rm -ron$TMPDIRand$CLAUDE_CODE_TMPDIRpaths, andfind -deleteorfd -x rmin an ignored folder. A path that overlaps the project, a folder with tracked files, a link-following search, and a reassigned temp variable still ask. - Bash guard, inline scripts: reads the code of an inline
python,node,perl, orrubyscript without its comments and strings. A word such asrmtreein a comment or a docstring no longer causes a warning, and a comment such as# don'tno longer hides a real remove after it. - Bash guard, discards:
git checkout --,git checkout .,git restore, andgit reset --hardask only when the paths they overwrite have uncommitted changes. They also ask when an earlier command in the line can restore changes (git stash pop,patch,git apply). - Stop gate: ignores edits to dotfile config paths, such as
.prettierrcand.github/workflows/ci.yml. Its reasons are shorter, because Claude Code can send a Stop reason two times (#96909). -
Agentmodel-lock deny reason: one sentence. - Compaction hooks: do nothing for a subagent. Claude Code can send a subagent compaction with no agent fields (#91910), so dotclaude also finds a subagent from its transcript path. Before, a subagent compaction could replace the saved prompts of the main session.
- Output style, MRE (0.17.1): tells Claude to show the MRE itself (command, test, or code) and its output in the reply.
Before, it said "Report it with its output", and replies gave the results without the command that made them.
In 3
t1-false-alarmruns on Sonnet 5.5, 0 replies showed the command before the change, and 3 did after it. - Output style, follow-ups (0.17.1): tells Claude to state a gap or a follow-up as a fact, with no offer such as "If you want it, say so".
In the 0.17.1 re-run, 3 of 20 Sonnet 5.5 replies to
t1-fixended with such an offer. -
revieweranddebugger(0.17.1): use Sonnet 5.5 athigh, not Opus 5.5. In the 0.17.1 evals, Sonnet 5.5 athighpassedt5-reviewin 20 of 20 trials and the debug cases in 40 of 40, at 52% to 56% of the cost of Opus 5.5 for each pass. The cases are at the ceiling for both models, so harder reviews are not tested. - Eval graders (0.17.1):
t1-false-alarmhas two judges. One checks that the reply says the bug did not reproduce and that nothing changed, and the other checks that the reply shows the command with its output. A right reply without the command now fails only the second. Thet1-fixgraderreproduced-firstacceptsWriteas well asEditafter the first test run, and it is now aregexgrader on the trace, becausetool_ordertakes only one tool. - Dossier (0.17.1): a new part, Claude Mods, records the plugin hooks modules of Claude Code 2.1.287 and the plan for a dotclaude mod in 0.18.
- CI (0.17.1): runs the tests on Windows too, and a
.gitattributesfile keeps LF line endings on Windows checkouts.
-
hooks/lib/_system-prompt.mjs, and the session-start notices about the shell function and the system-prompt copy. - The agents
code-reviewer,security-reviewer,plan-reviewer,diff-reviewer,ci-investigator,history-investigator,dependency-auditor,performance-engineer,test-writer,docs-writer, andintegration-setup. -
expand-inline-skill.mjs(0.17.1): aUserPromptSubmithook. Claude Code 2.1.287 tells Claude about each skill named in a message, and it lets theSkilltool run a user-only skill that the user typed.
-
git reset --hard <commit>: asks when the commit has a file that git does not track now but that exists on disk, because the reset overwrites it. -
rm -rin a temp project: with an absolute path into a project under a temp folder, it gets the project checks. Before, the temp-folder shortcut let it run. A temp path whose variable can complete the name of the project, for example/tmp/pr$xfor the project/tmp/proj, also gets them. -
rm -rof untracked files in the project that git does not ignore: warns, as for tracked files, because git cannot restore them. -
find /tmp -maxdepth 1 -name 'ojd-*' -exec rm -rf {} +(0.17.1): asked when the project was in/tmp, the usual case on Linux. A name-filtered remove with-maxdepth 1in a temp folder that holds the project now runs when no name matches the project entry in that folder. The Linux CI job failed on this. -
node --test(0.17.1): did not count as a check, so the Stop hook still said that no check ran after the last edit. In the 0.17.1 evals, 64 of 200 replies to code tasks mentioned the note. Anodecommand with only flags before--testnow counts. - Last message (0.17.1): in
claude -p, the Agent SDK, and subagents, the caller gets only the last message. When a Stop hook sent Claude back after a full report, the short second reply replaced the report. The Stop and SubagentStop notes now tell Claude to make its last message the full report there. -
CLAUDE_CONFIG_DIR:apply-settings.mjs,apply-claude-md.mjs, andstatus.mjsuse it for the user scope. Before, they wrote to and read~/.claudealso when Claude Code used another folder. -
just sandbox: givesclaudea sandboxHOME, so/dotclaude:setupin it cannot change the shell startup files of the user. It also removes the session variables of the Claude Code session that starts it (DOTCLAUDE_*,CLAUDE_PLUGIN_*, the session ID, and theenvvalues of the real settings). Before, they leaked into the sandbox, and the sandbox showed a wrong "settings profile is out of date" notice. -
scripts/usage-report.mjs: counted the first streamed record of each message, whose output count is near zero. It now counts the record with the largest output, once for each message, and subagent output was undercounted by up to four times. It also gives the output tokens and the messages with no final record, whose count is a lower bound. -
evals/report.mjs: scored thewith-onlygraders in both arms without a word when the files of a case were gone, as for an old result file. It now prints a warning for each such case. For a one-case result it printedNaN%and left out the comparison with the run without the plugin. It now gives the pass rate and the difference, and it says that one case gives no interval. - Eval commands in the Development page (
docs/development.md): set--judge-model sonnet, because the default Haiku judge failed a rightt4-slicesreply 3 times out of 3. -
evals-heldout/README.md: its judge is now Sonnet 5.5, not Opus 5.5, because a model prefers its own output. -
/dotclaude:slices: let Claude end its setup with a choice between the loop and a direct change, and recommend the direct change (one of three Opus 5.5 eval runs). The skill now asks the user to approve the slice list, with at most one sentence of advice. It also writes the loop files with theWritetool, so that the user can review them and thet4-slicesorder grader sees them. - Windows (0.17.1): the CI job had 75 failures, then 5.
-
apply-settings.mjsandapply-claude-md.mjsdid not find their profiles, because they read their folder from the URL path (/D:/...). They now useimport.meta.dirname. - The Bash guard did not see temp paths.
It now reads command paths as Git Bash does (
/tmpis the folder thatTEMPnames,/c/is the driveC:), compares temp folders with/separators, and knows the Windows temp folder. The temp remove check of the agent budget uses the same rules. - The ledger, the nested instruction note, the status line, the instruction size note, and the search guard now give paths below the project with
/. With\, the checks for dot folders and.claude/failed on Windows. -
exclude-session-filesasks git for the path below the top level, because a short name such asRUNNER~1made the path comparison fail. - The Bash guard asked before a
gitdiscard in a clean folder that-Corcdgave with a~inside the name, such asRUNNER~1. Only a~at the start of the name now makes the folder unknown, because Bash expands~only there. - Tests write paths in commands with
/, setUSERPROFILEbesideHOME, and expect native paths. Tests that run a#!/bin/shstub or a mode 000 folder run only on POSIX systems.
-
- Setup skill (0.17.0): tells Claude to report the paths that the scripts print, because
CLAUDE_CONFIG_DIRcan move them from~/.claude. It also tells Claude that an empty "keep" answer keeps no built-in switch. - Plan docs (0.17.0):
docs/models.mdtold how to set the plan for a login throughCLAUDE_CODE_OAUTH_TOKEN, because that login caches no account (removed in 0.20.0). - Markdown lint (0.17.1): all tracked Markdown passes markdownlint.
evals-heldout/and thedotclaude-browserskills get the prompt-file rules ofskills/. Thec-already-fixedprompt puts the email address in backticks, so it is not a bare URL. Incontribute, step 1 of the procedure was inside the<procedure>HTML block and did not render as a list item.
Previous: Release 0.16 · Next: Release 0.18
- Overview
- Quickstart
- Install
- Plugins
- Settings
- Hooks
- Troubleshooting
- Undocumented reads
- Development
- Design
- Decisions
- Changelog
- Other