do-it-core: added a single protocol voice for eight execution rules, backed by the closed-setexecution-failure-modes.tsvregistry and a consistency validator that rejects missing, mutated, duplicated, or restated rule bullets across the core skill, hooks, bridges, and satellite skills.do-it-architecture: added load-bearing architecture guidance for authority and ownership, public or persisted contracts, dependency boundaries, migration and cutover, guards, deletion, recovery, and drift.- Model-adaptive Standard advisory: strong-model hosts receive one compact
do-it-corepointer; weak, unknown, or undetected models receive the canonical rule text inline. - Architecture routing: action-shaped Heavy interface/schema,
migration/cutover, and security-boundary changes point to
do-it-architecture; explanation questions remain Light, and ordinary Heavy release work stays free of an architecture pointer. - Prompt-state ordering: Claude, Codex, Cursor, OpenCode, Pi, and Kimi now
invoke router then Heavy grill through one serialized
prompt-submithook, preventing concurrent hook scheduling from reading a stale tier; the entrypoint stays fail-open (router guidance is always emitted, grill is gated on state persistence), and state writes use a portablemkdirlock fallback with a bounded wait whenflockis unavailable. - Architecture routing precision: strong Heavy detection now uses bounded,
clause-local action/surface pairs for interface, migration, and security
work, avoiding substring joins such as
token+relationshipwhile still recognizing explicit security-boundary creation.
- New
file-sizeadvisory family inwrite-quality-lint: whole-file line count against warn (>500) and split (≥800) thresholds, nudging phase-based splits before behavior is added to oversized files. Project override via the data-only.do-it/write-quality.local.tsv(git root of the edited file) or theDO_IT_FILE_SIZE_WARN_LINES/DO_IT_FILE_SIZE_SPLIT_LINESenv vars; each level falls back independently, CRLF/no-EOL files tolerated. do-it-code-quality: new "Phases, Not Piles" section — compute → apply → audit separation, reuse before repeat, a three-question post-edit re-check, and function-length judgment guidance; scope chain gains a targeted-reads step (no whole-file reads on large files).do-it-skill-authoring: new "Where a Rule Lives" — judgment rules in skills, deterministic numbers in hooks, drift contracts in validators; the family reference table is the single prose home for hook-owned numbers.- Repo root gains
AGENTS.mdwith repo-local contributor facts (source of truth vs build artifacts, closed-set contracts, verification bar).
- Post-
0.14.1source bump with corrected README/release truth planes for the taggedv0.14.1publication path, then ship0.14.2metadata for the next independent root / OpenCode / Pi npm release. - Portable Pi smoke
npminvocation formatting cleanup on Windows path join. - Stabilize Pi bridge timeout diagnostic assertion when a setsid grandchild races process-tree cleanup against the grace timer.
- Pi package: added independently publishable
@tdwhere/do-it-piwith one TypeScript extension, shared skills/hooks, prompt templates, and ten portable package agents discovered underdo-it.*names by optionalpi-subagents. - Lifecycle: root sessions receive bootstrap/router/grill, write-quality
advice, and a soft next-turn verification reminder; child processes identified
by
PI_SUBAGENT_CHILD=1receive only the bounded subagent stance. - Runtime hardening: ToolResult content remains structured; hook execution is
async, abortable, aggregate-output-bounded, and requests Unix process-group or
Windows
taskkill /T /Ftree termination. A bounded cleanup grace closes hook pipes and reports unconfirmed descendant cleanup rather than waiting forever. Bash discovery supports Git for Windows and an explicitDO_IT_BASHoverride. - Mapping: Scout handles reconnaissance; code-mapper uses bounded trace/thorough closure with resumable frontiers instead of package-owned fixed turn, tool, or timeout budgets.
- Packages: release automation now verifies and publishes separate npm
artifacts for
@tdwhere/do-it,@tdwhere/do-it-opencode, and@tdwhere/do-it-pi; Linux and Windows CI exercise Pi build, discovery, hooks, package contents, and optional-dependency degradation.
- Root plugin: repository-root
kimi.plugin.jsoninstalls via/plugins installwith no build step — skills, commands, and five advisory hooks; custom subagents are not shipped (Kimi has no custom subagent mechanism). - Protocol:
do_it_emit_contextemits plain text under Kimi (noadditionalContext); UserPromptSubmitpromptmay be a ContentPart array; verification-gate reads sessionwire.jsonlwhentranscript_pathis absent. - Validate:
npm run validate:kimi-pluginis wired intotest,prepack, CI, and release.
- Hook script allowlists and Codex
hooks.jsoncommands now sharescripts/lib/hook-manifest.mjs; Codex hook paths fall back throughPLUGIN_ROOT→CLAUDE_PLUGIN_ROOT→.so an empty expansion cannot become/hooks/.... manifest.jsoncommonExtrasplus per-target overrides; session-dir resolution is aligned across hooks,install/manage.mjs, and the OpenCode bridge (including$KIMI_CODE_HOME/do-it-data/sessions).index.jsontotal_skillscounts runnable skills only (9); the generated_index.mddiscovery entry stays intotal_discovery_entries.
do-it-code-quality: merge-conflict hunk-by-intent rule; name a production evidence surface when shipping runtime features.do-it-verify: production-run claim shortcut; deferred-marker sweep on branch closeout.do-it-handbook: optionaldecisions.mdpromotion when a grill route settles permanently.do-it-decide: cite primary sources / capture durable research; doubt applies in-flight, not only after the diff.docs/upstream-map.md: lineage principle (convergence ≠ lineage) plus stale-name fixes and inspired-by rows for this round only.
- Direct intent wins: a why/explanation prefix no longer downgrades a concrete fix/edit request to Light; Chinese and English mixed requests have regression coverage.
- Action boundary: explicit no-write / 先不改 state persists until an actual reopen instruction, not a question about whether editing is possible.
- Opt-in retrospective: added default-off, silent, project-local redacted
feedback capture plus
do-it-retrospective on|off|status|report. Reports propose at most three lessons and never edit durable instructions without confirmation. - External actions: added a default-off Claude-only named-command
PreToolUseprofile.askrequests host confirmation;denyis an explicit stop. Codex, Cursor, and OpenCode documentation now points to their real native permission boundaries instead of claiming a universal hook veto. - Release guard: registered hook sources must be Git-tracked, so a clean checkout cannot silently omit a newly wired hook.
- Install path:
install-cursor-local.mjsno longer rewrites%USERPROFILE%into/mnt/c/...onwin32(that landed under e.g.D:\mnt\c\Users\...). WSL→Windows mirroring only runs on Linux when WSL//mnt/c/Usersis present. - Hooks registration: after local/CLI install, merge do-it entries into
user-level
~/.cursor/hooks.json(Cursor Hooks service does not load plugin-localhooks/hooks.jsontoday). - Windows hook entrypoint: all Cursor hook commands go through polyglot
hooks/run-hook.cmd <name>(never bare.sh). Cursor on Windows was opening.shpaths in the editor / “Open with” dialog instead of executing them. Runner prefers Git for Windows bash and skipsSystem32\bash.exe. - Index build:
build-index-jsonnormalizes CRLF SKILL.md frontmatter so Windows checkouts do not failname/descriptionvalidation. - Git Bash keyword match:
do_it_prompt_has_worduses pure bash on MSYS/MINGW to avoidgrep -q+pipefail“Aborted” noise. - Quality follow-ups: Windows-safe atomic
hooks.jsonreplace; no WSL multi-user/mnt/c/Usersscan; fail closed on partial multi-home install; do-it hook ownership keyed only ondo-it-cursor/hooks/; quote$/backtick paths; Windows CI isolatesUSERPROFILEfor setup/doctor.
Theme: meaning-centric rethink. Skills organize by what they mean for the task instead of a mandatory process chain. Main defense moves to write-time quality; plugin marketplace is the primary install path on all four hosts.
Eight installed skills (5 core + 3 extended):
| Bucket | Skill |
|---|---|
| Route | do-it-router |
| Write defense | do-it-code-quality |
| Review / repair | do-it-review |
| Decide | do-it-decide |
| Verify / close | do-it-verify |
| Handbook / names | do-it-handbook, do-it-context |
| Maintain | do-it-skill-authoring |
Router stays thin: pick Light / Standard / Heavy, then self-select buckets. No mandatory brainstorm → grill → plan → orch pipeline on Standard.
| Old skill | New skill |
|---|---|
do-it-grill |
do-it-decide |
do-it-brainstorm |
do-it-decide |
do-it-planning |
do-it-decide |
do-it-slicing |
do-it-decide |
do-it-review-loop |
do-it-review |
do-it-fix-loop |
do-it-review |
do-it-verification-gate (skill) |
do-it-verify |
do-it-branch-closeout |
do-it-verify |
do-it-tdd |
do-it-code-quality |
do-it-debugging |
do-it-code-quality |
do-it-architecture-scan |
do-it-code-quality |
do-it-interface-drill |
do-it-code-quality |
do-it-worktree-isolation |
do-it-code-quality |
do-it-comments-discipline |
do-it-code-quality |
do-it-codebase-design |
do-it-code-quality |
do-it-subagent-orchestration |
(removed — parent delegation contract + subagent-stance hook) |
do-it-router, do-it-handbook, do-it-context, and do-it-skill-authoring
keep their names. The verification-gate hook remains; only the skill file
was folded into do-it-verify.
grill-prompt: injects on Heavy only (or explicit grill request); Standard stays silent.grill-pretoolremoved — no PreToolUse / preToolUse plan-file gate.write-quality-lintfamilies overhauled: merged narrative comment families, raisedcase-list/edit-bloatthresholds, addedscope-chain,live-path,secret-leak,type-escape,test-fiction.- Codex / Claude / Cursor / OpenCode plugin bundles carry hooks; Codex
operators install the plugin and trust hooks under
/hooks. - Retained:
router,subagent-stance,verification-gate,write-quality-lint.
Agents reduced to 10 (from ~23). Retained set absorbs merged lenses:
- Decide:
product-strategist,architecture-strategist,plan-challenger - Write:
code-mapper,code-quality-cleaner,tdd-red-writer - Review:
reviewer,red-team-reviewer,spec-compliance-reviewer - Docs:
documentation-engineer
- Plugin marketplace is primary for Codex, Claude Code, Cursor, and OpenCode.
- Cursor ships the full 8 skills (
ALL_SKILLS), same as the other hosts. Local install must be a real copy under~/.cursor/plugins/local/(Cursor rejects external symlinks); usenode scripts/install-cursor-local.mjs. do-it setupis optional / legacy (doctor, temp-home smoke, migration).- Removed the v1 guidance to pair Codex plugin install with global setup because
plugin_hooks=false.
verification-gateturn slicing: guard against invalid user line numbers so a bad transcript offset cannot widen the evidence window incorrectly.write-qualityscan hardened for copy-pastegit grepand temp-path fallback edge cases.- Skill
references/link targets corrected so progressive-disclosure sheets resolve from installed skill paths.
- OpenCode plugin build requires
tsc(no silent skip when compile is needed). prepackexpands Cursor and OpenCode plugin builds alongside the Codex plugin and agent-bundle validation.
- Four-host adapters: Codex, Claude Code, Cursor, and OpenCode share one
workflow kernel. Cursor marketplace bundle under
plugins/do-it-cursor/; OpenCode TypeScript plugin underplugins/do-it-opencode/. - Shared skill
references/sheets (integrity, dimensions, write-quality families, per-host install notes). - Harness adapter matrix at
docs/harness-adapter-matrix.md.
- PostToolUse
comments-lintandanti-patterns-lintmerge into advisorywrite-quality-lint(single reminder per file; tier/DIM gated). Legacy wrappers exec into the merged script for one release. - UserPromptSubmit injection compressed for Standard turns.
do-it-codebase-designskill — deep-module vocabulary (module, interface, seam, adapter, leverage, locality), wired into router, architecture-scan, and review-loop.subagent-stanceUserPromptSubmit hook — compact stance reminder for delegated work.
do-it-grillanddo-it-review-looptightened with leading words and checkable completion criteria.- Handbook auto-bootstrap on Standard/Heavy greenfield code turns.
- Handbook simplified to stable project truth (invariants / architecture / glossary) plus worklog template; backlog / code-map / runtime-status templates removed.
code-mapperreturns temporary path maps only (no handbook write claim).
code-map-refreshPostToolUse hook.
- macOS CI: the
anti-patterns-linthook is now BSD-portable. The no-consumer check uses git grep's own-wword match instead of a GNU\bregex, and file paths are canonicalized withpwd -Pbefore repo-relative stripping so the/var→/private/varsymlink no longer breaks self-exclusion. The macOS hook-test job was failing on these for three releases.
- Handbook slimmed from 12 templates to 7 project-truth files. The five process
docs that duplicated skills were removed: the task-card layout now lives in
do-it-planning, the review protocol indo-it-review-loop, the dispatch contract indo-it-subagent-orchestration, the execution pipeline indo-it-router, and the handbook maintenance rules in thedo-it-handbookskill. - Three low-utilization skills consolidated (23 → 20):
do-it-grill-logfolded intodo-it-grill(Grill Log Artifact),do-it-domain-languageintodo-it-context(Domain Glossary Mode), and the optionaldo-it-visual-planningintodo-it-planning(Visual Aids); the visual companion (local browser server + render templates) moves underdo-it-planningand its templates were visually redesigned. Existing installs remove the deprecated skills on upgrade. do-it-routergains a § Restraint principle: advisory over blocking, reuse over add, no unbounded libraries, check git intent before deleting, and capabilities that auto-fire instead of requiring a/command.do-it-contextgivesCLAUDE.mda formal role in the source-of-truth hierarchy, draws theCLAUDE.md/CONTEXT.md/ handbook boundary, and can scaffold a leanCLAUDE.mdon demand (additive, never auto-write).
- Advisory nudges (one-shot, never block): after grill on durable-plan work with
no plan card, a reminder to land the plan card before implementation drifts
ahead; on established projects (
.do-it/CONTEXT.mdor handbook present) or port/restore prompts, a reminder to read existing structure / grep current code first. comments-lintnow flagsphase N,wave N, andBL-NNNstage markers astask-refcomments.
- Evidence Ledger rows for durable
.do-it/plans/<task>.mdcards. Heavy, release/install, multi-agent, and explicit durable-plan work can now track each claim by readiness target, truth plane, evidence, result, owner, and residual risk without adding another skill. - Truth-plane vocabulary for source, task worktree, integration worktree, temp install, live Codex, live Claude, package artifact, host behavior, and external blockers.
- Subagent lane status vocabulary (
assigned,running,done_with_evidence,integrated,blocking) so parent closeout can wait for, inspect, and accept delegated work instead of trusting workerDONE.
- Agent templates are model-agnostic. Source
agents/*.tomlfiles no longer pin concrete models or reasoning-effort fields, and Claude generated agents omitmodel:frontmatter so the host owns model selection. do-it-planning,do-it-verification-gate,do-it-review-loop,do-it-fix-loop,do-it-interface-drill,do-it-slicing,do-it-subagent-orchestration, anddo-it-branch-closeoutnow share the evidence-ledger, proof-path, truth-plane, and lane-status contract.- Release and maintenance docs now require source, package, temp install, live install, and host behavior readiness to be claimed separately.
code-mapperis consistently read-only. It now returns proposed handbook code-map updates to the parent instead of claiming permission to write from a read-only lane.- Live installs now manage individual do-it hook files instead of claiming the
entire
hooks/directory, so non-do-it hook integrations can coexist. scripts/validate-agent-bundle.mjsrejects model pins and host-private model/budget fields in portable agent templates and generated Claude agents.manifest.jsoncarries a0.9.xinstall-state migration range for the0.10.0minor upgrade.
index.json— generated machine-readable inventory for the do-it skill and agent surface. It records package/version metadata, skill group coverage, optional skills, and every manifest-backed skill/agent entry with source and target paths.scripts/build-index-json.mjs— builds and validates the root inventory frommanifest.json, skill frontmatter, and agent TOML descriptions. Wired intonpm run build:generatedand package validation.- Install tests now cover cross-device staged replacement (
EXDEV) and the generated index/docs cleanup contract.
index.jsonis included in the npm package file list so external runtimes and marketplaces can discover do-it's installed skill/agent surface without loading everySKILL.md.- Removed the stale
install/migrations/note directory from the package. Install-state migrations remain active inmanifest.jsonandinstall/migrate.mjs; the removed file was historical human documentation.
install/manage.mjsnow falls back to copy-and-remove when replacing a staged managed target fails withEXDEV, which can happen when temp/staging and the target install root are on different filesystems.
install/migrate.mjs— version-migration logic (parseMinor,matchesFromRange,needsMigration,applyMigrationAction,applyMatchingMigrations) extracted frominstall/manage.mjsas pure, importable functions.tests/install/manage.test.mjs— 14 tests covering the migration logic plus the end-to-end install flow: fresh install, re-install from an older state version (migration +*.pre-migrate.jsonbackup), and codex/claude target independence. Newnpm run test-install, wired intonpm test.scripts/check-skill-links.mjs— fails when aSKILL.mdreferences a`do-it-*`skill or command that does not exist, or a skill directory is missing frommanifest.json. Newnpm run check:skill-links, wired intonpm test.do-it-router§ Integrity — a canonical principle: a failure is a clue to trace to a root cause, not a symptom to make disappear. Names the cover-up patterns (swallowed exception, weakened/deleted assertion, skipped/deleted test, commented-out failing code, hiding fallback, edited evidence).do-it-debugging,do-it-fix-loop,do-it-verification-gate, and the subagent dispatch contract reference it; therevieweragent treats a cover-up as a Blocking finding.do-it-visual-planning/templates/plan-card.htmlandreview-report.html— content-fragment templates that reuse the existing browser-companion frame and CSS; section order matchestask-card-template.mdand review-loop severity grouping.- CI
testjob now also runs onmacos-latest, guarding the bash hooks against BSD/GNU tool divergence (find,printf,date).
hooks/verification-gate.shblock reasons rewritten as short single-instruction sentences. The verbose "for example a line whose content is the literal phrase…" meta-explanation that caused the model to echo the reason back verbatim is removed.hooks/verification-gate.shscopes edit / evidence / review-loop detection to the current turn — the transcript lines after the last user message. A verification command or review-loop trace from an earlier turn can no longer satisfy a later unverified turn. The tail window is raised 80 → 400 lines (turn scoping removes the staleness cost of a larger window).applyMigrationActionnow throws on an unknown migration action instead of logging and skipping it — a malformed manifest fails loud rather than leaving a half-migrated state.manifest.jsonmigrations gain0.7.xand0.8.xentries.do-it installanddoctornow report the install-state version of every manifest target, surfacing codex/claude cross-host version drift that a single-target run otherwise hides.do-it-subagent-orchestrationRequired Prompt Contract gains anintegrity stancefield, propagating the integrity principle into every dispatched subagent.do-it-routeranddo-it-planningnow point atdo-it-handbookandtask-card-template.mdso the handbook skeleton is discovered and reused instead of ignored.
do_it_emit_block/do_it_emit_contextemit valid JSON via aprintffallback whenjqis unavailable. Previously a jq-less host silently dropped the Stop-hook block decision and context reminders entirely.- The 0.8.0 known limitation where a stale
review-looptrace in a long session could let a later review-needing turn pass silently — resolved by the current-turn scoping above. - Stale session directories under the runtime sessions base are pruned after
DO_IT_SESSION_TTL_DAYS(default 7) of inactivity (do_it_prune_stale_sessions, run once per session fromrouter.sh), instead of accumulating without bound.
- New PostToolUse hook
hooks/anti-patterns-lint.sh— advisory scan after everyEdit|Write|MultiEditfor three coarse code-quality anti-patterns: large bashcaselists (≥10 consecutive*"..."*branches → suggests data-driven externalisation), newly-exported JS/TS symbols with no other-file consumer (incl.export default function/class), and ≥5-line code blocks duplicated from a same-directory neighbour. Never blocks; emits onesystem-reminderper file. Implementation uses portable grep+sed (no gawk-specificmatch(... , arr)three-arg form) so it runs on macOS's bundled BSD awk just like the 0.7.2-era hooks. - New task pointer protocol:
.do-it/runtime/pointeris a single-line file holding the active task slug.do-it-planninganddo-it-brainstormwrite it when creating a durable artifact;do-it-branch-closeoutclears it;do-it-routerreads it before routing. Defined once indo-it-router§ Task Pointer; other skills short-reference. - Tests:
tests/hooks/anti-patterns-lint.test.sh(12 cases incl.export defaultcoverage) and 4 new cases intests/hooks/verification-gate.test.shlock in the new behaviors.scripts/test-hooks.shgains a dim-aware grill suppression case + counter-case so the newhooks/grill-prompt.shconsumer ofdim_touches_codeis exercised.npm run test-hooksnow exercises the fulltests/hooks/*.test.shsuite (router, comments-lint, anti-patterns-lint, verification-gate, common).
- DIM_ dimensions are now actively consumed* (the 0.7.0 "维度正交化" design finally lands). Each of the five session-state dimensions has at least one explicit consumer:
dim_touches_code→hooks/grill-prompt.shsuppresses Standard-tier implicit triggers when the prompt has no code object (discussion turn).dim_crosses_packages→do-it-architecture-scanskill: mandatory trigger when set.dim_breaks_interface→do-it-interface-drillskill (mandatory trigger) andhooks/verification-gate.sh(requires the inline-review marker to nameinterface/contract/schema/api).dim_needs_tdd→do-it-tddskill: mandatory trigger when set.dim_needs_review_loop→do-it-review-loopskill (mandatory trigger) andhooks/verification-gate.sh(requiresreview-loop/review-quick/review-deep/review-adversarialmention in the recent transcript before a "done" claim passes).- The canonical one-liner for reading a dimension (and the "missing state degrades to tier-only" fallback) lives in
do-it-router§ Reading dimensions.docs/routing-matrix.mdupdated to match: MAY → SHOULD.
do-it-fix-loopswitches default posture from "see-one-fix-one" to "collect all findings → root-cause → batch or pointwise". The Standard tier sequence now requires a writtenBatch vs Pointwise Decisioncovering every finding before editing. The Red Flag entry that previously forbade multiple unrelated fixes in one commit is removed; the new red flag is going one-by-one without a written root-cause decision.do-it-review-loopcorrespondingly requires reviewers to emit findings as a complete batch, not stream them.do-it-comments-disciplineSKILL.md trimmed from 373 lines to 119 (~68% reduction), keeping the 5 allowed categories (one example + one near-miss each), the 6 forbidden families (one bad line + one fix per family), the review checklist, the hook keyword reference, escape hatch, and output shape. Thecomments-linthook strength is unchanged (still advisory) — the bet is that a smaller SKILL gets read by the agent at all.- 23 subagent TOML files lose their duplicated
Common protocol:block (~4-5 lines per agent, ~120 lines total). Replaced with a single line pointing atdo-it-subagent-orchestration§ Required Prompt Contract, which already defines the canonical dispatch contract. The shared boilerplate now lives in exactly one place.
hooks/verification-gate.shno longer falls back to a rawtail -n 5of the JSONL whenjqdoes parse but the last assistant frame is tool-only with no text content. The fallback only fires whenjqis missing; withjqpresent, an empty result is treated as "agent said nothing this turn" and the gate stays silent. Prevents a false-positive block where the newdim_breaks_interfaceattestation check would see leaked text from earlier turns and refuse to find the interface keyword on its own line.- Documented
Reading dimensionsindo-it-router§ now distinguishes the hook layer (calldo_it_session_state_getfromhooks/lib/common.sh, which already honours the 5-level env-var path search) from the agent layer (judge mandatory triggers from prompt content; do not query state at runtime). The earlier shipped one-liner pointed at a path that is incorrect under the plugin-install env layout. - Each mandatory-trigger sentence inside
do-it-tdd,do-it-interface-drill,do-it-architecture-scan, anddo-it-review-loopnow carries an explicit Light-tier escape clause and points atdo-it-router§ Mandatory-trigger escape clauses.dim_needs_tddis no longer treated as a forced ceremony on docs/config edits. .do-it/runtime/pointerprotocol is reframed as a best-effort hint: read consumers MUST verify the referenced artifact exists, and the document explicitly addresses branch-switch, concurrent-write, and<closed>-sentinel edge cases.do-it-comments-disciplinegains aVerification (pass criteria)section and aTrigger Eventsection that the 373→119 slim accidentally dropped; the Anti-Pattern Hook Keywords list is reconciled withhooks/comments-lint.sh(adds曾经,fix:,bugfix,hotfix,patched,FIXME,XXX; splitshistoryandfix-narrativeinto separate families to match the hook's_record_familycalls).do-it-review-loopanddo-it-fix-loopnow cross-link explicitly: review-loop step 8 names the batch contract fix-loop operates on; fix-loop'sBatch vs Pointwise Decisionreferences review-loop step 8 as the source of the complete finding list.README.md,README.zh-CN.md, anddocs/release.mdcarry the new0.8.0tarball filename and anUpgrading to 0.8.0section. The READMEs also gain a paragraph describing the new advisoryanti-patterns-linthook.
dim_needs_review_loopenforcement inhooks/verification-gate.shreadsTAIL_BUF(last 80 JSONL lines) and accepts any historicalreview-loop/review-quick/review-deep/review-adversarialmention. In a long session with multiple distinct review-needing turns, a later turn can inherit an older trace and silently pass. Tightening this requires alast_review_seen_atsession-state timestamp; tracked as follow-up, not blocking 0.8.0.dim_breaks_interfaceattestation inhooks/verification-gate.shaccepts any inline-review marker that mentionsinterface/contract/schema/api— best-effort signal, not a semantic check. A marker likeinline-review: schema validation looks finesatisfies the gate even on a non-schema change. The signal is intentionally generous; the reviewer / fix-loop is the real gate.
- Claude Code plugin hooks now run on macOS's bundled Bash 3.2 by removing
Bash 4.3 nameref usage (
local -n) from keyword loading and prompt matching. - Hook scripts avoid a few GNU-only assumptions on macOS (
sha1sum,dirname --,stat --,cat --, and template-lessmktemp).
- Tightened selected do-it skills with shorter trigger metadata and explicit stop, red-flag, and verification guidance for closeout, fix-loop, delegation, worktree isolation, grill logging, and skill authoring.
- agent-skills method absorption. Rewrote selected
addyosmani/agent-skillsmethods into do-it-native workflow policy without vendoring upstream text or adding installed upstream skill names. - Skill anatomy hardening.
do-it-skill-authoringnow defines the minimum installed-skill structure: trigger, tier/process, stop conditions, common rationalizations, red flags, and verification evidence. - Core workflow density. Planning, slicing, TDD, debugging, interface drill, review-loop, architecture scan, verification-gate, and context now carry stronger anti-skip, boundary, dependency, and proof-quality rules.
docs/upstream-map.mdrecords theagent-skillssource idea to do-it destination mapping.docs/maintenance.mddocuments external workflow absorption, skill anatomy, and generated-artifact ownership rules.- README and README.zh-CN acknowledge
agent-skillsas method inspiration and state the rewrite-not-vendoring boundary.
- Codex agent schema repair. Removed the unsupported
output_budgettop-level field from Codex-installedagents/*.toml; subagent response budgets now live indo-it-subagent-orchestration. - Agent bundle validation. Added
scripts/validate-agent-bundle.mjsand wired it intonpm test,build:claude-agents,build:codex-plugin, andprepackso source agents, manifest inventory, Claude output, and the Codex plugin bundle cannot drift silently. - 0.7.0 release metadata. Package, manifest, plugin metadata, release docs, and README upgrade notes now describe the 23-skill / 23-agent surface.
- Codex plugin marketplace distribution under
.agents/plugins/marketplace.jsonandplugins/do-it/, generated byscripts/build-codex-plugin.mjsfrommanifest.json. - Codex global hook install assets: default Codex setup now manages
hooks/and roothooks.jsonsoUserPromptSubmit,PreToolUse,PostToolUse, andStopcan invoke do-it hooks from${CODEX_HOME:-$HOME/.codex}.
- Skill frontmatter descriptions now use trigger-first
Use when...wording while preserving the existing Problem/Fix body content. brainstormis no longer an escape keyword, so explicit brainstorm prompts continue through router, grill, and verification gates.- Release and maintenance docs now distinguish Codex global setup, Codex plugin marketplace discovery, and Claude Code plugin hooks.
- Codex-compatible agent TOML. Removed the Claude-only
claude_modelfield from Codex-installedagents/*.toml.scripts/build-claude-agents.mjsnow owns the Claude model map and still emitsmodel: sonnetfor the brainstorm lenses andcode-mapper. - Brainstorm two-core redesign.
do-it-brainstormnow starts fromproduct-strategistandarchitecture-strategist, then dynamically adds task-fit supplemental lenses. Product strategy clarifies product boundary, core goal, requirement shape, and option tradeoffs. Architecture strategy separates core foundation from extension modules and names what should close in the current stage. - Brainstorm discovers; grill converges. Brainstorm output now centers on
Requirement Shape,Product Boundary,Core Goal,Options,Architecture Foundation,Extension Modules, andMust Resolve In Grill. Grill owns convergence; brainstorm does not collapse options into a final answer.
agents/product-strategist.toml— required product core brainstorm lens.agents/architecture-strategist.toml— required architecture core brainstorm lens.
skills/do-it/do-it-brainstorm/SKILL.md— replaces the fixed four-persona flow with product + architecture cores, dynamic supplements, discussion-first mode, and option tradeoff output.commands/do-it-brainstorm.md— documents default dual cores, explicit lens selection, and discussion-first usage.skills/do-it/do-it-grill/SKILL.md— consumesMust Resolve In Grillinstead of the legacy per-lens question list.- README, README.zh-CN, release, and maintenance docs updated for the 0.6.1 compatibility and brainstorm contract.
- Re-run
do-it setupordo-it installto refresh live Codex agent TOML. After upgrade,rg -n "claude_model" ~/.codex/agentsshould not match do-it-managed Codex agent files. - No project artifact migration is required. Existing 0.6.0 brainstorm files remain readable by humans, but new artifacts use the 0.6.1 section names.
- Brainstorm before grill. Initial
do-it-brainstormsupport wrote one artifact per task at.do-it/brainstorm/<task>.md. The lens model and section contract were replaced by the 0.6.1 product + architecture core design above. - Grill convergence mode.
do-it-grillreads the brainstorm artifact when one is open, lifts execution-blocking items into candidate premises, and flips brainstormstatus: open→convergedonce each decision is resolved in the grill log. Light tier still uses single-thread grill; Standard / Heavy must consume the brainstorm. - Project handbook bootstrap. New
do-it-handbookskill scaffolds.do-it/handbook/with twelve generalized templates (invariants, architecture, code-map, glossary, backlog, runtime-status, maintenance, task-card-template, plus three workflow files). Templates are skeletons with placeholders; the bootstrap is additive and never overwrites. - Persistent code map.
code-mappernow writes the "Current Implementation Locations" section of.do-it/handbook/code-map.mdwhen the handbook exists, so future sessions read instead of re-derive. A newcode-map-refreshhook marks that section stale on barrel / migration / route / workspace-manifest edits.
skills/do-it/do-it-brainstorm/SKILL.md— initial divergent brainstorm pass before grill convergence.skills/do-it/do-it-handbook/SKILL.mdplus twelve templates undertemplates/andtemplates/workflow/.agents/ceo-reviewer.toml,ux-designer.toml,end-user-advocate.toml,ops-sre.toml— supplemental read-only brainstorm lenses. Their Claude model handling moved out of Codex TOML in 0.6.1.commands/do-it-brainstorm.md,commands/do-it-handbook.md.hooks/code-map-refresh.sh— PostToolUse marker that prepends<!-- stale: true; reason: ... -->to.do-it/handbook/code-map.mdon structural-file edits. Idempotent (replaces, does not stack).
scripts/build-claude-agents.mjs— builds Claude agent Markdown from Codex TOML. Claude-only model selection moved into the generator in 0.6.1.agents/code-mapper.toml— adds a Handbook Write Target / Claude Code Adapter section indeveloper_instructions. Output target shifts from inline-only to.do-it/handbook/code-map.md"Current Implementation Locations" when the handbook exists.skills/do-it/do-it-grill/SKILL.md— adds "Convergence after brainstorm" section and Light / Standard / Heavy consumption rules.hooks/grill-prompt.sh— when.do-it/brainstorm/*.mdhas any file withstatus: openand tier is Standard / Heavy, appends a convergence-mode pointer to the grill reminder.hooks/hooks.json— registers PostToolUse forcode-map-refresh.sh.manifest.json— registersdo-it-brainstormanddo-it-handbookskills, plus the initial brainstorm lens agents.
- No breaking changes for 0.5.x users. Existing
.do-it/grill/,.do-it/plans/, and.do-it/CONTEXT.mdpaths are unchanged. - The new
.do-it/brainstorm/directory is additive; grill ignores it on Light tier and works as before when no brainstorm artifact exists. - The new code-map refresh hook only acts when
.do-it/handbook/code-map.mdalready exists; projects that have not run/do-it-handbookare unaffected.
- Flow reduction. Standard prompts no longer default to
grill -> planning -> review-loop. The router now tells agents to use an inline modification map, add grill only when the decision actually needs it, and select review depth by risk. - Non-sticky question state. Router now records
last_prompt_kind=question|work, so a question turn can bypass grill/gate for that turn without suppressing the next implementation turn. - Decision-triggered grill.
grill-promptno longer fires just because an intent verb appears. Standard grill triggers only on uncertainty, explicit grill requests, or long input that also has a plan/spec hint. Heavy still auto-grills. - Lighter plan gate.
grill-pretoolonly requires.do-it/plans/*for Heavy work or explicit durable-plan requests. Standard source edits may use an inline modification map. Existing plan partial edits are no longer blocked just because the edited fragment lacks## Grill. - Risk-budgeted review.
do-it-review-loopnow spells out local Light / docs-only review, at most one focused Standard reviewer, and two default Heavy release/workflow lenses: skill quality and install/release readiness.
scripts/test-hooks.sh— regression coverage for question-state recovery, reduced grill triggers, Heavy two-signal behavior, long-inputlength + hint, Standard vs Heavy source plan gates, and existing-plan partial edits.npm run lint-hooksandnpm run test-hooks;npm testnow runs both.
hooks/router.sh— separates prompt kind from grill state, records durable plan requirement, and updates Standard/Heavy reminders.hooks/grill-prompt.sh— removes intent-only trigger, changes long-input trigger fromlength OR hinttolength AND hint, and changes reminders to fact-first / one-question guidance.hooks/grill-pretool.sh— scopes hard plan gates to Heavy or explicit durable-plan work.hooks/verification-gate.sh— checkslast_prompt_kind=questioninstead of relying ongrilled=skip-question.do-it-grill,do-it-grill-log,do-it-planning, anddo-it-verification-gate— align the contract around fact verification, one user decision at a time, andkind: fact|decisiongrill-log items.- README, routing, release, and migration docs updated for 0.5.1 behavior and tarball examples.
- Sharper triggering.
hooks/router.shandhooks/grill-prompt.shno longer fire on single CJK characters (做,改,加,修,审, …) and use ASCII word-boundary matching, sofixno longer matchesprefixandaddno longer matchesaddress. Heavy tier requires ≥2 heavy signals to upgrade. - Same-session de-dup. Grill emits at most once per session unless the
user explicitly asks again (
重新 grill/re-grill/再 pressure-test/重新审视). Re-implementing in the same conversation no longer eats tokens on a repeat 5-step template. - Question / discussion mode. Prompts ending in
?/?/吗/呢or matching the question hints get auto-classified Light, suppress grill, and bypass the verification gate. "你觉得 X 怎么样?" is no longer treated as an implementation request. - Pointer-mode grill output. Standard-tier grill emits ~60-token pointer reminders; full 5-step template is preserved for Heavy tier.
DO_IT_DEBUG=1is now first-class. Each hook decision (escape, skip, question, tier, trigger, evidence detection) emits one structured stderr line. Default is silent.- Session state JSON. Hook invocation counters and tier history are
persisted under
${CLAUDE_PLUGIN_DATA}/sessions/<id>/state.json.do-it doctor --session=<id>pretty-prints it. - Verification-gate is more honest. Reads only the last assistant message for completion language; passes through turns with no Edit/Write/MultiEdit calls; respects question / discussion turns. Evidence pattern expanded to cover pytest, mypy, tsc, eslint, ruff, biome, cargo, go.
- Auto-migrate.
do-it installdetects 0.4.x install state and silently upgrades it;pre-migrate.jsonbackup is left in place. Use--no-migrateto refuse and exit code 2.
hooks/data/*.tsv— keyword tables are now data-driven (intent verbs, uncertainty words, heavy/light signals, escape words, long-input hints, question hints).hooks/lib/keywords.shis a thin loader.hooks/data/SCHEMA.md— file format and maintenance checklist for the tsv tables.hooks/lib/debug.sh—do_it_debughelper for structured stderr trace whenDO_IT_DEBUG=1.do_it_prompt_has_word,do_it_prompt_is_question,do_it_session_state_get/set/inc,do_it_session_summaryinhooks/lib/common.sh.- New skills:
do-it-context(withCONTEXT-FORMAT.md) anddo-it-grill-log(per-task grill artifact under.do-it/grill/<task>.md). scripts/lint-hooks.sh— shellcheck on hook entry points;npm run lint..github/workflows/lint.yml— CI shellcheck on push / PR.install/manage.mjs—--session=<id>flag for doctor;--no-migrateflag for install;needsMigration/runMigrationwith manifest-declared migration actions; pre-migrate state backup.manifest.jsonmigrationsfield — declarative migration actions (remove-state-entry,rename-state-key).
hooks/router.sh— question short-circuit, ≥2-heavy-signal upgrade rule, compact ≤80-token system-reminder. Full Heavy / Standard / Light recommendations have moved into the corresponding skill SKILL.md files.hooks/grill-prompt.sh— same-session de-dup; Heavy tier emits full template, others emit pointer; explicit re-grill phrase detection.hooks/verification-gate.sh— last-assistant-only completion scan; no-edit pass-through; question pass-through; expanded evidence patterns.hooks/grill-pretool.sh— debug instrumentation only; behavior unchanged.skills/do-it/do-it-grill/SKILL.mdrewritten to "ask one premise at a time, anchor terms, falsify before debating, sediment to CONTEXT.md / grill log".skills/do-it/do-it-planning/SKILL.md— Planning Sequence step 2 now requires reading.do-it/grill/<task>.mdand resolving anypendingpremise before finalizing the plan.skills/do-it/do-it-verification-gate/SKILL.md— new "Inputs" section requiring.do-it/grill/<task>.mdreview at closeout.
- Single-character CJK intent verbs (
做,改,加,写,修,审,搭) from the default intent-verbs table. - ASCII whitespace hacks (
add,add,test,should,could,might,doc) — replaced by word-boundary matching, which handlesaddress/prefix/releasedcorrectly without manual padding.
do-it install detects 0.4.x install state and silently migrates. Behavior is
additive only; the auto-migrate is mostly bookkeeping (state version bump + new
skills do-it-context, do-it-grill-log).
- Claude Code target.
do-itnow ships as a Claude Code plugin alongside the Codex install. Use/plugin marketplace add tdwhere123/codex-workflowthen/plugin install do-it, ordo-it install --target=claudefrom the CLI. - Hook-driven workflow. On Claude, the three core skills (router, grill,
verification-gate) auto-trigger via UserPromptSubmit, PreToolUse, and Stop
hooks. No slash commands to memorize. Escape hatch: include
yolo,直接做,skip grill, or/do-it-skipin the prompt. - Problem/Fix skill descriptions. All 17 SKILL.md descriptions rewritten
in the
Problem: ...; Fix: ...shape so Claude's implicit-summon path stays reliable when hooks are bypassed.
.claude-plugin/plugin.jsonandmarketplace.json— Claude plugin metadata with a self-hosted marketplace pointing at the repo root.hooks/— four hook scripts (router.sh,grill-prompt.sh,grill-pretool.sh,verification-gate.sh) plus shared library (lib/common.sh,lib/keywords.sh).commands/do-it-skip.md— the only slash command; explicit escape hatch.scripts/build-claude-agents.mjs— convertsagents/*.tomltodist/claude/agents/*.md. Runs automatically ondo-it install --target=claudeand viaprepack.manifest.json— newtargetsblock describing each host's install root, agent file extensions, extras, and pre-install scripts.manage.mjs—--target=<name>and--with-optionalflags.package.json— newinstall:claude/doctor:claude/build:claude-agentsscripts;prepackruns the agent build.
do-it-delivery-loopskill — folded into the Heavy path ofdo-it-routerplusdo-it-planning. Recorded inmanifest.deprecatedTargets; existing 0.3.x installs have it cleaned up on upgrade via legacyHashes.
do-it-visual-planning— was a default skill; now requires--with-optionalto install. Existing installs are not auto-removed but drop out ofdoctor's managed set; rerundo-it install --with-optionalto keep it managed.
- All remaining 17 SKILL.md descriptions rewritten in
Problem: ...; Fix: ...shape. manage.mjsrewritten around aninstallRootabstraction;codexHomeis nowinstallRoot, computed from the active target'srootEnv/rootDefault.CODEX_HOMEcontinues to work for codex; newCLAUDE_PLUGIN_ROOT_OVERRIDEfor claude target.assertManagedTargetShapenow acceptsextras(top-level dirs/files added by target config) and the agent target extension is target-driven (.tomlfor codex,.mdfor claude).
- Codex install is byte-equal with 0.3.x except for
do-it-delivery-loop(deprecated, removed on upgrade) anddo-it-visual-planning(now optional; unchanged on disk but no longer in the managed set unless--with-optional). - State files: codex still uses
.do-it-install-state.json; claude uses.do-it-install-state-claude.jsonto avoid collision when both targets are installed. - Existing 0.3.x codex users:
do-it-delivery-loopwill be removed on upgrade (legacyHash matches).do-it-visual-planningwill not be auto-removed but will fall out of the managed set; reinstall with--with-optionalor remove manually.
npm install -g @tdwhere/do-it@0.4.0
do-it install # codex (default)
do-it install --target=claude # claude (or use marketplace)To keep do-it-visual-planning as a managed skill on codex:
do-it install --with-optional