All notable changes to Taskmaster are documented here.
TASKMASTER_VERIFY_COMMANDenv var: opt-in shell verifier that gates stop after the done token is seen. Pairs with test suites, type-checkers, or any repo-local check. Companion knobs:TASKMASTER_VERIFY_TIMEOUT(default 60s),TASKMASTER_VERIFY_MAX_OUTPUT(default 4000 bytes),TASKMASTER_VERIFY_CWD. (T1.1)- Tagged hook-injected prompts: every prompt the hook injects starts
with
[taskmaster:injected v=1 kind=<kind>]. Newtaskmaster-prompt-detect.shlib lets downstream consumers distinguish injected reprompts from real user goals. Legacy substring detection preserved for back-compat. (T1.3) - JSON session state file at
${TASKMASTER_STATE_DIR:-${TMPDIR}/taskmaster/state}/<session_id>.json, flock-protected, atomic writes. Schema v1 withstop_count,latest_user_prompt,last_verifier_run,metadatafields ready for T2/T3. (T1.2)
- Stop-count tracking moved from the bare counter file at
${TMPDIR}/taskmaster/<session_id>to the new JSON state file. Legacy counter files are absorbed on first read and deleted — no user action required. The migration is flock-protected and additive (a peer's increments are not rewound).
- Design:
docs/designs/2026-04-28-072245-fork-pattern-adoption.md - Plan:
docs/plans/2026-04-28-083546-t1-fork-pattern-adoption.md - Source review:
docs/upstream-reviews/blader-taskmaster-forks.md
- Install script now also copies hook to
~/.claude/hooks/taskmaster-check-completion.sh(user-level hooks directory), consistent with standard Claude Code hook layout. - Settings.json registration now points to
~/.claude/hooks/path by default. - Uninstall script updated to clean up from both locations.
- Hook
reasonfield now contains only the TASKMASTER_DONE signal token instead of the full completion checklist. This keeps user-visible terminal output minimal — one collapsed line rather than a wall of text. - Full completion checklist lives exclusively in SKILL.md, which is always loaded as system context. The agent already has all instructions; the reason field no longer needs to duplicate them.
- Added
last_assistant_messageas the primary done-signal detection path (faster, no transcript file parsing required). Transcript-based check is retained as fallback. - Removed
HAS_RECENT_ERRORS/stop_hook_activeescape-hatch logic in favor of the explicit TASKMASTER_DONE signal protocol. hooks/check-completion.shbrought in sync with root-level canonical source.
- Default
TASKMASTER_MAXset to 100 (previously 0 / infinite). - Moved full completion checklist from hook
reasoninto SKILL.md system context (first pass; reason still contained a short prompt). install.shmade POSIX-portable (shshebang, conditionalpipefail).
- Resolved infinite loop caused by
set -euo pipefailin sh-sourced contexts.
- Session-scoped counter with configurable
TASKMASTER_MAXescape hatch. - Subagent skip: transcripts shorter than 20 lines are ignored.
TASKMASTER_DONE_PREFIXenv var for customising the done token prefix.
- TASKMASTER_DONE signal protocol: stop is allowed only after the agent emits
TASKMASTER_DONE::<session_id>in its response. - Transcript-based done-signal detection.
- Initial release: stop hook that blocks agent from stopping prematurely.
- Completion checklist injected via hook
reasonfield. TASKMASTER_MAXloop guard.