Repository navigation
Releases
Releases · youdede/toolkit
v0.8.0
Changed
- Skills, subagents, and commands are about 130 words shorter each. The rules for declining a request, stopping for missing inputs, and refusing an instruction embedded in evidence are now three ordered directions under
## Reply paths, kept in one source file and copied into 392 payloads. A reply no longer has to name one of four situation labels. - Related links now cover most of the catalog: 125 new
composesWithpairs, so 118 artifacts that stood alone point to the artifacts they hand work to or receive it from. An artifact whose text names another by slug is always linked to it. - The thirty subagents that review a set of paths now search before they read: each brief lists the calls, keywords, and file patterns to look for, opens the highest-risk candidates first, and reports the ones it did not open with the search that found them.
- A subagent handed a request that belongs to the neighbour its description names now says so and stops instead of reviewing it.
- Every subagent description now says what sets it apart: the signals in a request that should select it, and the neighbour to use instead (
Not for X; use <slug>). Before, 35 of 62 ended with the same sentence, so an agent choosing a specialist had nothing to go on. - Nine skills that analyze and then change the repository (
define-domain-language,debug-systematically,assess-mutation-test-value,build-repository-quality-gates,simplify-code-with-invariants,enforce-typescript-module-boundaries,request-independent-code-review,evaluate-code-review-feedback,verify-completion-evidence) can be asked for the analysis alone: they report, change nothing, and list the changes they would have made as proposals. - Thirty subagents can review a set of paths as they stand, not only a diff. Without a baseline they derive the missing invariant, contract, or policy from the code, label it inferred, and list every supplied path they did not open, instead of stopping for missing inputs. Their turn budget is up to four turns higher, capped at sixteen.
- Every subagent reports findings in one format: an id, a category, a severity, a confidence, the claim, each cited file as
path:start-end, the quoted evidence, what would prove the claim wrong, the impact, and the smallest next action. Severity is one scale (Critical,High,Medium,Low) and confidence is one scale (Demonstrated,Supported,Suspected), so results from several specialists can be merged and sorted.Blockingis no longer a severity, and missing evidence lowers confidence instead of severity. - Commands state which steps ask for your permission and what happens when you deny one. The tools a command declares are pre-approved for the turn that invokes it; they never limited what the command could run, and the catalog no longer describes them as an allowlist.
/re-pin-mcp-toolsno longer pre-approves file edits. The pre-approval covered only the turn before you confirm the digest, which is the one turn where the command forbids edits.- Five commands (
/preflight-change-environment,/audit-repository-instructions,/assemble-review-brief,/diagnose-ci-failure,/record-work-checkpoint) no longer open with a precondition step that checked nothing.
Fixed
packs --jsonandpack-info --jsonprint JSON instead of refusing the flag. With--target,pack-info --jsonreportsinstallableandblockingMembers.pack-inforefuses an unknown--target, and says when a pack cannot be installed on the chosen target and which required members block it.pack-info <pack> --target codexpreviously printed the pack as if it were installable.- A
--cwdthat does not exist or is not a directory is refused.doctor --cwd <missing path>answeredNo state drift found.andadd --dry-runansweredWould install. /verify-session-ledgerstops with a clear message when no ledger exists, instead of reporting an empty ledger as verified.- The
countsincatalog/artifacts.jsoninclude commands, contexts, and MCP servers, so the per-kind counts add up to the total. - Subagent profiles for Claude Code, Gemini CLI, and OpenCode carry the turn budget instruction that only the Copilot profiles had, so a specialist that runs out of turns returns partial evidence instead of being cut off.
application-security-reviewernames the six narrow specialists it routes to by their catalog slug, so the parent agent can dispatch them.configuration-semantics-reviewerno longer lists a refusal that describedconfiguration-drift-analyst.- 34 skills no longer show a one-line description cut off mid-phrase in the Codex skill list.
Integrity
Root digest: f3d6fbb3eee4829d609c9d9147755eb59d75cfb24686245eb120282e59666a25. Compare it with npx @youdede/toolkit verify-integrity.
v0.7.0
Added
youdede-toolkit search <term...>matches terms against an artifact's name, slug, summary, and refusals, and ranks a result by how many of those fields a term hit. Searching refusals finds an artifact by the thing you want prevented. Every term must match, so each one narrows the result, and everylistfilter applies to a search as well.youdede-toolkit installedlists what the installation state records for a target and scope, including prerequisites that were pulled in and artifacts no longer in the catalog. It answers what is installed, wheredoctoranswers whether what is installed still matches what was recorded.youdede-toolkit completion bash|zshprints a shell completion generated from the same tables the parser uses and from the catalog, so it cannot offer a command, flag, or value the CLI would then refuse. zsh loads the same definition throughbashcompinit.youdede-toolkit version, and the--versionspelling, report the package name and version.--versionwas previously read as an option expecting a value and exited 1.--jsononlist,search,info,installed, anddoctor. The recordslistandsearchemit are a stable summary rather than the whole manifest, becausecatalog/artifacts.jsonalready carries every field.--dry-runand--jsononremoveandremove-pack. The plan names every file that would be deleted, kept because another install also records it, or put back, and whether the settings, MCP configuration, state, and generated notice would be rewritten or removed. It is produced by the removal itself, stopped before its first write, so it cannot describe something other than what would happen, and it takes no installation lock, so it writes nothing at all. It reports the installed artifacts that still need the one being removed instead of refusing over them.docs/install.mdstates the exit codes:0when a command answered,1when it refused or failed, and what falls under each.
Changed
doctoraccepts--jsonand keeps exiting 1 when it finds drift. It previously refused the flag, and that refusal was asserted by a test; a drift check that CI runs is the one diagnostic that most needs machine-readable output.npm run validaterefuses a taxonomy value that no artifact carries. A declared value makes a filter a legitimate question whose answer is always none, which reads as an empty catalog rather than an absent dimension. What the installer and the adapters support — kinds, risk levels, targets, scopes — is not checked against the catalog's contents.catalog/taxonomy.jsonno longer declares theexpress,fastapi,flask,nestjs, andspringframeworks, which no artifact carried.list --framework expressanswered0 artifact(s).with exit 0; it is now refused with the frameworks the catalog does carry.
Fixed
- Secret history scanning reads the
git rev-list --objectsoutput that Git actually produced. Git accepts-zand ignores it before 2.47, so on the Git that Debian 12 and Ubuntu 24.04 LTS ship,npm run check:secrets:historystopped withmalformed object metadataand the release gate could not run at all. - A one-dash option is refused instead of being read as a positional word and ignored.
add <artifact> -target codexreported installing to Codex' default and wrote toclaude-code. - A word beyond the arguments a command takes is refused.
info <artifact> <other-artifact>described the first and ignored the second. listrefuses a filter value the taxonomy does not carry.list --kind hooksprinted0 artifact(s).and exited 0, so a typo in a script reported an empty catalog.infono longer accepts--target,--scope, and--cwd, andpack-infono longer accepts--scopeand--cwd. Each was accepted and read by nothing, so naming a target asked a question the answer ignored.- The multi-file install rollback test states the privilege it needs instead of failing as root, where a directory mode cannot block a write. The case still runs on the runners that gate the suite.
Integrity
Root digest: f525ef52caa89c8c033504e7f0f4c62a349d96ba0a8778831191ce470ef10eeb. Compare it with npx @youdede/toolkit verify-integrity.
v0.6.0
Added
edit-ai-draft-for-human-voiceskill: revises an AI-assisted draft toward a human voice, narrative structure first and style second, following the StoryScope study of AI fiction. A bundled script measures the draft before and after, flags numbers or names the revision added or dropped, and scores a closed-option structural rubric.assess-story-narrative-provenanceskill: scores a full English story with a narrative classifier (human-like, AI-like, or uncertain), preferring TypeSafe Jev as annotator with an agent-model fallback, and writes a JSON or HTML report with the choices that pulled the score.audit-published-content-defectsskill: finds the defects readers can see on published pages (visible markdown, unresolved placeholders, double-escaped entities, paragraphs cut after an abbreviation, repeated or untranslated passages) across a page, a sitemap, or saved HTML, fetching politely and stopping when a site blocks, and reports them grouped by kind as JSON, Markdown, or HTML.edit-ai-draft-for-human-voicecan also write an editorial review: passage-by-passage edits whose quotes are checked against the text and whose suggestions cannot add numbers or names, with a checklist of review questions for any genre.PRIVACY.mdstates that the toolkit collects no data and lists what stays on your computer and what leaves it. Claude Code plugins link it,SUPPORT.md, and the toolkit page for their directory listing.
Integrity
Root digest: f525ef52caa89c8c033504e7f0f4c62a349d96ba0a8778831191ce470ef10eeb. Compare it with npx @youdede/toolkit verify-integrity.
v0.5.0
Added
- Every Claude Code plugin folder ships a
README.mdthat lists its members and states what it runs, so each plugin can be submitted to the Claude plugin directory. - Every Claude Code plugin carries the Youdede icon for its directory listing.
Changed
- Every pack moves up one patch version, so Claude Code plugins installed from 0.4.0 pick up these changes.
- The
remote-review-evidenceplugin asks for the GitHub token as a sensitive plugin option, kept in the system keychain, instead of readingGITHUB_PERSONAL_ACCESS_TOKENfrom the environment. The npm package homepage is https://youdede.studio/en/toolkit. - Commands no longer pre-approve
Bashinallowed-tools. Claude Code now asks before each shell command a command runs.
Fixed
- Claude Code plugin hook files no longer carry a
descriptionkey that Claude Code ignores, andplugin.jsonno longer names the icon that the plugin directory finds by default. - Claude Code plugins no longer list
hooks/hooks.jsonand.mcp.jsoninplugin.json. Claude Code loads both files by default and reported a duplicate hooks file.
v0.4.0
Added
npm run release:preparederives the next version from the Conventional Commits since the last release and updates the changelog,package.json,package-lock.json,CITATION.cff, and the marketplace manifests.mcp-egress-guardblocks a call to a Youdede MCP server whose arguments name a host outside that server's declared egress, including lookalike, subdomain, userinfo, IP, and punycode forms. It binds every MCP tool in Claude Code and ships a preview Cursor adapter;secure-agent-boundaries1.2.0 includes it.- Three workflow commands (
diagnose-ci-failure,preflight-change-environment,audit-repository-instructions) and four contexts (API, migration, CI, and dependency baselines). - Preview MCP profiles for the official GitHub server (
v1.12.2, read-only reduced toolset) and Playwright MCP (0.0.82, isolated, loopback only), in the newremote-review-evidenceandbrowser-verificationpacks. - One shared command parser and capability matcher for every Bash hook (
scripts/lib/shared-hook/shell-items.mjs,capability.mjs,inline.mjs). Each hook declares what it protects as aCAPABILITYand sees through wrappers (sudo,env,xargs,find -exec,eval,sh -c), substitutions, here-documents, Git aliases, globs, brace words, and interpreter one-liners such aspython3 -c "os.system('npm publish')". A command it cannot read blocks only when it could touch what the hook protects. quality/hook-verdicts.jsonrecords the verdict of all 64 Claude Code hooks on about 2,500 inputs: hook tests, audit probes, command sequences, and everyday developer commands.npm testfails on a verdict change without a declared reason, and on a verdict that contradicts a reviewed expectation unless it is quarantined with a follow-up.
Changed
npm run check:readinessno longer requires model-judged semantic evidence to publish. Model replies vary between runs (about one case in eight changed outcome between two near-identical full runs), so a single run cannot fairly pass or fail a release. Semantic evaluation stays as an advisory maintainer test, run after prompt or case changes, and the committed receiptquality/release-evidence/is removed.- Links between artifacts have three levels: required prerequisites (the installer asks once, default yes), suggestions (one hint line after an install), and related artifacts (catalog only). Each link has a short reason that the installer prints.
catalog/artifacts.jsonandcatalog/packs.jsonmove to schema version 2 and keep every version 1 field; docs/catalog-format.md describes the format. - Every Bash hook names
shell-command-guardas a prerequisite, so a command that hides what it runs (bash -c "$X",curl … | sh) is stopped even when only one hook was requested.addinstalls it first (--no-prerequisitesopts out),removerefuses it while another hook needs it unless--force, and five packs now include it. shell-command-guardowns every program a command runs without containing it: network output run by a shell isinternet-to-shell, and any other unknown program is uninspectable. Shell setup output (eval "$(pyenv init -)"), local scripts, and static feeds pass. The other hooks leave such programs to it, which removes many false positives.- The hooks that read what a commit will take inspect
git add … && git commit,git commit -am, pathspec commits, and Git aliases instead of refusing or ignoring them. A commit in the same command asgit add -for an alias definition is refused: run them as separate commands. - Behavioral cases are written for each artifact: a concrete request with its evidence, a near miss that belongs to a neighbouring artifact, a missing input, and a boundary that crosses one of the artifact's refusals. Every skill, subagent, command, and context is covered.
- GitHub Copilot skill adapters and Gemini CLI subagent adapters are
stable, following the vendors' documentation (read 2026-09-26). Gemini CLI adapters state that Google stopped serving Gemini CLI on 2026-06-18 for free use and for Google AI Pro and Ultra. - The Cursor adapters of the three read-only MCP servers are back to
previewuntil the egress guard is verified in a live Cursor client. - The npm package no longer contains the marketplace copies or the README images: about 1.4 MB instead of 4.8 MB, with identical CLI behavior.
resume-session-workis published only for Claude Code, the only runtime where its session ledger installs.- The summaries of
mobile-release-readiness,browser-verification,session-continuity, andplan-and-verify-loopstate what their members actually check. - File-editing hooks take the project root from
CLAUDE_PROJECT_DIRwhen it is set, so acdinto a subdirectory no longer hides or wrongly blocks an edit.
Fixed
- The situation rules shared by every prompt artifact no longer contradict themselves. A request outside the artifact's purpose declines and names what fits instead, partial or informal material is worked from with its gaps recorded, and only an absent required input stops the work. A refused embedded instruction is recorded on its own line instead of being reported as a finding.
- Full static reviews found and resolved contradictions or gaps in dozens of prompt artifacts: finding thresholds that excluded defects the same brief defines, steps a supported branch cannot follow, unsafe completion rules, and output instructions that disagreed with the output contract. Every prompt artifact, commands included, now states one checkable output contract, and
check:contractsrejects a missing one or one that names an instruction section. - 139 behavioral cases now contain the code, logs, plan, or data they refer to, so a reply can be judged on the evidence.
- Generated contexts state forbidding rules as prohibitions and summary rules as "When the task calls for it", and they install where Cursor and GitHub Copilot read them (
.cursor/rules/,.github/instructions/) instead of doubled paths. commit-guardandprompt-secret-guardshare one list of 117 credential formats with the repository scan. Before, they had 7 rules and let GitHub fine-grained tokens, npm, GitLab, and Google API keys, and PGP private keys through.commit-guardalso refuses credential stores (.git-credentials,.netrc, cloud CLI credentials) and inspects content staged by the same command, aliases,git commit -nm, andcore.hooksPathoverrides.protected-branch-guardrefusesgit filter-branch,git filter-repo, andgit fast-import; follows branch switches inside one command; resolves a baregit pushthrough@{push}; and fails closed when Git cannot be read. Before, an alias, a push mapping, or a timeout could movemain.shell-command-guardblocks/bin/rm -rf /, a root among severalrmoperands, a force push after Git global options or with-fnext to--force-with-lease,bash <(curl …), a download that the same command then runs, andgit checkout -f. It no longer blocks text quoted inside an argument.- The six operation guards recognize many more publish, delete, apply, and service commands (cloud storage, Kubernetes, Terraform, Pulumi, registries, cron, launchd, systemd), npm abbreviations such as
npm publ, package runners such asnpx npm@10 publish, and value-taking global options. Several hooks no longer stall onsudo --until the runtime timeout, which let the command run. release-clean-state-guardandrelease-version-consistency-guardgate mobile store uploads (fastlane,eas submit,xcrun altool, Gradlepublish*) and check Xcode, Gradle, and Expo version sources.npm publish --access publicandnpm run build && npm publishno longer block.- The system path, user account, firewall, container privilege, and archive extraction guards recognize many more mutating commands and name the rule they apply instead of "cannot be normalized".
sensitive-file-access-guardblocks recursive searches, archives, and copies that include a protected file, and more reading tools;outbound-data-guardreads groupedcurloptions. Unquoted globs are expanded as bash does instead of blocking, sowc -l src/*.jspasses.database-query-mode-guardtreatsSELECT … INTOas a write and reads every client call;migration-safety-guardcovers more drop and reset forms and no longer blocks theTRUNCATE(x, d)function;schema-compatibility-guardhandles reserved Protobuf fields, Avro defaults, andintegertonumberwidening.ci-reference-pinning-guardandsubmodule-target-guardcheck the absolute paths Claude Code sends; before, they never fired there. Several hooks now run when invoked through a symlink instead of exiting without checking.mcp-capability-drift-guardrefuses unknown servers and tools in any letter case, recognizes plugin-scoped tools, and uses Cursor's real MCP event.- Smaller hook fixes:
transport-security-regression-guard,unsafe-deserialization-guard,test-integrity-guard,debug-artifact-guard,lint-suppression-guard,api-contract-compatibility-guard,policy-file-guard,binary-mutation-guard,generated-file-guard,phase-gate-guard,tool-output-budget-guard,completion-evidence-guard,instruction-config-integrity-guard, and aprompt-secret-guardfalse positive onsk-words. The Italian and Dutch texts of four hooks no longer change the meaning of the English source. - A Codex project-scope hook resolves its script from the Git root instead of the installing machine's absolute path, which pointed nowhere in a clone.
- The read-only MCP runtime no longer runs programs chosen by repository configuration (
core.fsmonitor,gpg.program, filter drivers), refuses credential files at any depth, and negotiates the protocol version instead of echoing it. - Installer:
add --jsonandadd-pack --jsonprint JSON, options accept--name=value,--dry-runlists...