workflow-toolbox
v0.183.0Toolbox for Claude Code's Workflow tool — author deterministic multi-agent workflow scripts (workflow-composer, with the @workflow-toolbox compile-time pattern toolkit as its standard library), scaffold a build-clean workflow skeleton from a spec (toolkit-scaffold), diagnose a failed run from its journal and decide whether resumeFromRunId helps (workflow-debugger), re-verify the runtime surface after a Claude Code upgrade (upgrade-canary), run a bias-free multi-lens analysis of any subject when relevant (independent-analysis), and run a deep-grounding pass that collects and verifies evidence against the real sources before asserting or analyzing (deep-grounding), and install, check, and migrate editable, versioned copies of the plugin's own rules and agent definitions into a project's or user's config directory (adopt). Ships the independent-analysis workflow that skill triggers (domain-agnostic adversarial multi-lens analysis), a Stop hook that auto-surfaces a finished Workflow run's cost + traceability audit report (always a notice; grabs the session when the run looks like trouble, was degraded by a silently-denied tool call, or requested external delegation whose agents show no real external-CLI invocation), and a tracker-agnostic actionability Stop gate that blocks only while startable work remains with nothing running, paired with a Planka producer that writes the snapshot it reads automatically from board-reading tool calls (never a guess: it stays silent on a partial read or on a project with no Depends-on convention). Also ships the pilot agent suite (pilot / pilot-orchestrator / pilot-watchdog) and the pilot-wave composer skill for driving tracked task-tracker cards by delegation, plus a conditional SessionStart hook that injects a generic delegation ladder where a project does tracked/delegated work and points at the delegation-chain skill (a non-user-invocable reference on spawn shapes, the upward report chain, wake signals, and what each shipped watcher/guard does and does not cover) before a delegation decision is made. Ships two Planka kanban skills for any project that wants board-based task tracking: planka-tracking (onboard a project — create the board, migrate an existing progress.md into cards, write the pointer) and what-next (propose the logical next step from that board, or from progress.md/conversation when there's no board), both requiring only a reachable planka MCP server.
By Frederic ThomasLicense: FSL-1.1-ALv21 GitHub starsUpdated 5 days ago
Directory evidence
- Runtimes
- Claude Code
- Parsed components
- 20 skill or MCP entries
- Source updated
- Sep 18, 2026
- Manifest status
- Canonical path parsed
The directory validates manifest shape and source location. It does not execute the plugin or provide a security endorsement. Review the indexing methodology →
Install workflow-toolbox for Claude Code
claude plugin marketplace add IchenDEV/agent-plugin-mkt
claude plugin marketplace update agent-plugin-marketplace
claude plugin install workflow-toolbox@agent-plugin-marketplacePaste and run these commands in a terminal with Claude Code. They add and refresh the PluginsMP catalog, then install this plugin.
The installer fetches third-party code from the source repository shown on this page. This directory validates manifest structure and source location, but does not perform a security audit; review the manifest, components, and source before installing.
Get the source manually
git clone https://github.com/home-dev-lab/workflow-toolboxClone the source repository, then follow its setup instructions to add the plugin to a compatible client. The plugin root is plugin/.
Plugin files
├── .claude-plugin/plugin.json├── skills/adopt/SKILL.md├── skills/artifact-server/SKILL.md├── skills/changelog/SKILL.md├── skills/deep-grounding/SKILL.md├── skills/delegation-chain/SKILL.md├── skills/external-lane/SKILL.md├── skills/independent-analysis/SKILL.md├── skills/lesson-harvest/SKILL.md├── skills/pilot-wave/SKILL.md├── skills/planka-tracking/SKILL.md├── skills/quality-gate/SKILL.md├── skills/sdk-pilot/SKILL.md├── skills/second-opinion/SKILL.md├── skills/stale-card-sweep/SKILL.md├── skills/toolkit-scaffold/SKILL.md├── skills/upgrade-canary/SKILL.md├── skills/what-next/SKILL.md├── skills/workflow-composer/SKILL.md├── skills/workflow-debugger/SKILL.md└── .mcp.json
Included Skills19
Invoke ONLY when you are about to install, check, refresh, or propose adopted editable copies from workflow-toolbox into a config or project directory and need the versioned, fingerprinted path, or when the user explicitly asks to "adopt the delegation rules", "install the workflow-toolbox rules as editable files", "install project copies of the pilot agents", "adopt the pilot watchdog into this project", or "check my adopted workflow-toolbox rules/agents for updates". Write ONLY on request; never run automatically. Not for authoring workflows or composing a pilot wave.
Use when handing the user a report or artifact path and a clickable localhost or tailnet link should be provided, or when the user asks how to configure, inspect, stop, or restart the server.
Invoke after changing plugin code or published toolkit package source, and before committing, to write the Unreleased changelog entry and any required changeset without exposing private tracker ids.
Invoke when you are about to assert a checkable claim or start a non-trivial analysis, design, diagnosis, or recommendation and need to ground it against the real sources before committing. Ask "where could the evidence for this be?", read the relevant sources, follow their leads recursively, and report conclusions with evidence tiers plus any residual unknowns. Use this **PROACTIVELY** when you catch yourself answering from memory, from a single source or angle, or when a result beats your expectation and could skip verification.
Load this BEFORE spawning a delegate, arming a watcher, or reasoning about what wakes a session. Consolidates the downward spawn chain (anonymous/named/isolated, and what each shape costs an observer or a worktree), the upward report chain (what actually reaches a spawner and what silently doesn't), who wakes whom (and what wakes nothing), and the watchers/guards this plugin ships with an explicit "does NOT cover" column for each. Not a task to run — a reference to consult before a delegation decision, so the same question isn't re-answered from scratch every time.
Use when asked to delegate an implementation/review to an external lane, launch an opencode lane, or brief a lane.
Invoke when you are about to commit to a non-trivial design, plan, decision, claim, architecture, root-cause theory, or change set and want it stress-tested by fresh, conversation-blind analysis, or when the user says "are you sure?", "what am I missing?", "did we forget anything?", or "make sure no angle is forgotten". Run the bundled independent-analysis workflow so missing angles surface and refute-first verifiers kill plausible-but-wrong ones. Use this **PROACTIVELY** when you may be moving fast or confirming a prior.
Invoke **PROACTIVELY** whenever you are integrating a closed pilot or executor report — nobody will ask you to — to get its "## Lessons for the memory" section without rereading the whole file. Extract candidate lesson items verbatim and return a distinct verdict for three cases: the section says "None.", the section is missing entirely, or the section carries content. Detection and extraction only: never write to a knowledge base, invent wording, classify a fiche, or decide whether to persist the lesson.
Invoke when you are about to drive tracked cards end-to-end through delegated execution and need to compose the environment brief, select the cards, and spawn the adopted `pilot` or `pilot-orchestrator`, or when the user says "run these cards", "pilot this wave", "spawn a pilot for this ticket", or "set up the orchestrator for these". Keep the main session as the arbiter and wake-up relay, require adopted project copies first, and if they are missing, propose `adopt` before spawning. Not for a single mechanical edit.
Invoke ONLY when the current project is not yet managed by Planka and you are about to onboard it to board-based tracking, or when the user says "onboard this project to Planka", "set up the board here", "start tracking tasks on Planka", or "track my tasks on a kanban board". Create the project, board, lists, and labels through the `planka` MCP, migrate any existing .claude/progress.md zero-loss into cards, and write .claude/planka.json. Requires a reachable `planka` MCP server; do not run without it.
Invoke when measuring toolkit quality, preparing a release Quality section, tightening a ratchet, or turning the current quality baseline into tracker debt cards.
Expose the experimental wt-pilot-runner for one tracked card when the user explicitly wants to exercise or evaluate the SDK lifecycle. Explain when to use it instead of the supported adopted pilot-wave harness, launch it detached with a card file and worktree, and watch its receipts.
Get one independent, read-only second opinion for difficult, ambiguous, high-risk, or stuck coding and reasoning problems. Automatically uses GPT-6 Astra when GPT-lane consent and its runtime are available, otherwise Claude Fable when its scoped quota permits. The main session keeps the task, edits, verification, and final decision.
Invoke **PROACTIVELY** whenever you are about to close a task-tracker card — nobody will ask you to — to check whether its diff already covered the defect another open card still describes. Also invoke when the user says "sweep for stale cards", "check what this closes", or "did this diff subsume anything else". Shortlist candidates from the changed files, then judge each one against the diff. Advisory only: flag candidate cards with a comment; never close, move, or rewrite them. Not for card creation or age-triggered dormant-card sweeps.
Invoke ONLY when you are about to turn a job description into a new build-clean `.workflow.ts` skeleton through the toolkit path, or when the user says "scaffold a workflow", "start a new workflow", "generate a workflow skeleton", "set up a .workflow.ts", "wire these patterns together", or "use the toolkit to build a workflow". Pick the patterns, write the small JSON spec, run `workflow-toolbox scaffold`, then fill in placeholders and build plus check the result. Not for deep one-off authoring guidance, debugging a failed run, or re-verifying the runtime after an upgrade.
Invoke ONLY when you suspect Claude Code may have upgraded, when you are about to cut a plugin release, or when the user says "run the upgrade canary", "did the update break the workflows", "re-check the runtime surface", or "what changed in the runtime". Re-verify both runtimes the toolkit depends on: the interactive `claude` binary and the SDK-bundled one. Run the full matrix only when versions changed since the last pass, when forced, or when the last verdict failed. Maintainer tool only; requires this repo's `toolkit/` tree plus local Claude Code auth.
Invoke when you have just finished a chunk of work or need the next recommendation grounded in the tracked backlog, or when the user types /what-next or asks "what's next", "what should I tackle now", or "what comes after this". Read the project's Planka board through .claude/planka.json when the `planka` MCP is reachable, otherwise fall back to .claude/progress.md, plus the current conversation and any existing knowledge index such as `MEMORY.md`. Read-only: propose a next step, never mutate the board, `progress.md`, or task state.
Invoke ONLY when you are about to build, generate, repair, or restructure a workflow for Claude Code's Workflow tool and need authoring guidance or code changes, or when the user says "I want a workflow that…", "turn this process into a workflow", or "set up a multi-agent pipeline", or needs help picking orchestration patterns or tuning model, effort, or agentType routing. Write or repair the workflow artifact through the `@workflow-toolbox` path for repeatable work or the raw single-file path for one-offs. Not for debugging a specific failed run or re-verifying runtime drift after an upgrade.
Invoke when you are diagnosing a workflow run that errored, returned a wrong or partial result, or seems stuck, or when the user asks "why did my workflow fail", "debug my workflow run", "the workflow errored / died", "can I resume this run", or "what happened in run wf_…". Read the on-disk run journal first, use per-agent transcripts only as fallback, classify the failure mode, and say honestly whether `resumeFromRunId` will replay cached work or save nothing. Not for authoring or restructuring a workflow script, or for checking runtime drift after a Claude Code upgrade.
MCP servers1
- command
- node
- args
- ${CLAUDE_PLUGIN_ROOT}/bin/wt-wake-channel.mjs
MCP configuration uses runtime-provided plugin path placeholders such as ${PLUGIN_ROOT} or ${CLAUDE_PLUGIN_ROOT}. Review the manifest for the runtime-specific expansion rules.
Plugin manifests1
{
"name": "workflow-toolbox",
"displayName": "Workflow Toolbox",
"version": "0.183.0",
"description": "Toolbox for Claude Code's Workflow tool — author deterministic multi-agent workflow scripts (workflow-composer, with the @workflow-toolbox compile-time pattern toolkit as its standard library), scaffold a build-clean workflow skeleton from a spec (toolkit-scaffold), diagnose a failed run from its journal and decide whether resumeFromRunId helps (workflow-debugger), re-verify the runtime surface after a Claude Code upgrade (upgrade-canary), run a bias-free multi-lens analysis of any subject when relevant (independent-analysis), and run a deep-grounding pass that collects and verifies evidence against the real sources before asserting or analyzing (deep-grounding), and install, check, and migrate editable, versioned copies of the plugin's own rules and agent definitions into a project's or user's config directory (adopt). Ships the independent-analysis workflow that skill triggers (domain-agnostic adversarial multi-lens analysis), a Stop hook that auto-surfaces a finished Workflow run's cost + traceability audit report (always a notice; grabs the session when the run looks like trouble, was degraded by a silently-denied tool call, or requested external delegation whose agents show no real external-CLI invocation), and a tracker-agnostic actionability Stop gate that blocks only while startable work remains with nothing running, paired with a Planka producer that writes the snapshot it reads automatically from board-reading tool calls (never a guess: it stays silent on a partial read or on a project with no Depends-on convention). Also ships the pilot agent suite (pilot / pilot-orchestrator / pilot-watchdog) and the pilot-wave composer skill for driving tracked task-tracker cards by delegation, plus a conditional SessionStart hook that injects a generic delegation ladder where a project does tracked/delegated work and points at the delegation-chain skill (a non-user-invocable reference on spawn shapes, the upward report chain, wake signals, and what each shipped watcher/guard does and does not cover) before a delegation decision is made. Ships two Planka kanban skills for any project that wants board-based task tracking: planka-tracking (onboard a project — create the board, migrate an existing progress.md into cards, write the pointer) and what-next (propose the logical next step from that board, or from progress.md/conversation when there's no board), both requiring only a reachable planka MCP server.",
"author": {
"name": "Frederic Thomas",
"email": "[email protected]"
},
"repository": "https://github.com/home-dev-lab/workflow-toolbox",
"license": "FSL-1.1-ALv2",
"keywords": [
"workflow",
"multi-agent",
"orchestration",
"subagents"
],
"userConfig": {
"executor_lane_consent": {
"type": "boolean",
"title": "Allow executor lane",
"default": false,
"required": false,
"description": "Account consent is the ceiling and project settings may only narrow it."
},
"lane_skills": {
"type": "string",
"title": "Executor lane skills",
"default": "",
"required": false,
"description": "Comma- or newline-separated Claude skill names allowed in external OpenCode lanes."
},
"lane_models": {
"type": "string",
"title": "Executor lane models",
"default": "openai/gpt-5.6-luna,openai/gpt-5.6-terra,openai/gpt-5.6-sol,openai/gpt-6-astra",
"required": false,
"description": "Comma- or newline-separated exact provider/model allow-list for external OpenCode lanes."
},
"artifact_server": {
"type": "boolean",
"title": "Enable artifact server",
"default": true,
"required": false,
"description": "Start or attach the per-session artifact-server monitor."
},
"artifact_server_roots": {
"type": "string",
"title": "Artifact server roots",
"required": false,
"description": "Comma- or newline-separated name=path or bare-path roots; unset uses project-local defaults."
},
"artifact_server_port": {
"type": "number",
"title": "Artifact server port",
"required": false,
"description": "First candidate port; unset derives a stable per-user port from 48000-48999."
},
"artifact_server_idle_grace_s": {
"type": "number",
"title": "Artifact server idle grace",
"default": 600,
"required": false,
"description": "Seconds to retain dead-session registrations before shutdown."
},
"artifact_server_deny": {
"type": "string",
"title": "Additional artifact deny patterns",
"default": "",
"required": false,
"description": "Comma- or newline-separated basename glob patterns added to the security deny list."
},
"planka_mcp_url": {
"type": "string",
"title": "Planka MCP URL for SDK pilots",
"default": "",
"required": false,
"description": "HTTP MCP endpoint of the Planka board that SDK pilots and the SDK orchestrator use. Empty: no board tools."
},
"second_opinion_fable_max_pct": {
"type": "number",
"title": "Second-opinion Fable quota ceiling",
"default": 90,
"required": false,
"description": "Refuse a Fable second-opinion call when its weekly scoped usage percentage is at or above this value."
},
"lane_orphan_cleanup": {
"type": "string",
"title": "Attributed lane orphan cleanup mode",
"default": "observe",
"required": false,
"description": "observe journals would-clean evidence without signaling; enforce terminates exact re-verified attributed lane orphans."
},
"lane_stall_minutes": {
"type": "number",
"title": "Lane worktree stall threshold",
"default": 10,
"required": false,
"description": "Minutes without a worktree write before a still-running supervised lane is reported to its owner with evidence; it is never killed for this condition."
},
"release_branch": {
"type": "string",
"title": "Release branch",
"default": "",
"required": false,
"description": "Release branch guarded at push time when the remote default branch is unavailable. Empty falls back to main/master."
},
"configDir": {
"type": "string",
"title": "Claude configuration directory",
"default": "",
"required": false,
"description": "Absolute plugin-store root. Empty uses CLAUDE_CONFIG_DIR, then the session home."
},
"livenessDir": {
"type": "string",
"title": "Running-work liveness directory",
"default": "",
"required": false,
"description": "Absolute liveness-record directory. Empty uses XDG_STATE_HOME/wt-liveness or the home state directory."
},
"suiteRoot": {
"type": "string",
"title": "Running-work suite root",
"default": "",
"required": false,
"description": "Absolute root containing configured worktrees and reports. Empty uses .claude under the session project."
},
"extraRoots": {
"type": "string",
"title": "Additional running-work roots",
"default": "",
"required": false,
"description": "Comma- or newline-separated absolute roots trusted for external lanes."
},
"pollMs": {
"type": "number",
"title": "Running-view polling interval",
"default": 2000,
"required": false,
"description": "Milliseconds between snapshots while the What is running pane is open."
},
"activeWindowMin": {
"type": "number",
"title": "Running-work activity window",
"default": 10,
"required": false,
"description": "Minutes for which durable activity evidence remains current."
},
"linkBase": {
"type": "string",
"title": "Running-work artifact URL",
"default": "",
"required": false,
"description": "Optional https: or http://localhost static server base URL serving artifacts below suiteRoot."
},
"plankaBaseUrl": {
"type": "string",
"title": "Planka browser URL",
"default": "",
"required": false,
"description": "Optional browser-facing Planka base URL used for card links."
},
"plankaConfigFile": {
"type": "string",
"title": "Planka environment file",
"default": "",
"required": false,
"description": "Optional absolute environment file from which BASE_URL is read when Planka browser URL is empty."
}
},
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-check-commit-signatures-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-lane-saturation-hook.mjs\"",
"timeout": 5
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-lane-consent-gate-hook.mjs\"",
"timeout": 5
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-live-config-tree-guard-hook.mjs\""
}
]
},
{
"matcher": "SendMessage",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-probe-claim-guard-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-unquoted-tool-glob-guard-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-pipestatus-bash-only-guard-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-find-newermt-format-guard-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-git-commit-backtick-guard-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-var-colon-modifier-guard-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-merge-chain-guard-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-merge-target-guard-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-concurrent-test-guard-hook.mjs\"",
"timeout": 5
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-piped-gate-exit-code-guard-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-missing-package-script-guard-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-main-guard-hook.mjs\""
}
]
},
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-rule-convention-guard-hook.mjs\""
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-pilot-guard-hook.mjs\""
}
]
},
{
"matcher": "StructuredOutput",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-verifier-cli-guard-hook.mjs\""
}
]
},
{
"matcher": "Agent",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-spawn-shape-guard-hook.mjs\""
}
]
},
{
"matcher": "Agent",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-spawn-capability-guard-hook.mjs\""
}
]
},
{
"matcher": "Agent",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-spawn-channel-guard-hook.mjs\"",
"timeout": 5
},
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-spawn-readonly-guard-hook.mjs\"",
"timeout": 5
},
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-nested-spawn-guard-hook.mjs\"",
"timeout": 5
}
]
},
{
"matcher": "Workflow",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-workflow-model-guard-hook.mjs\"",
"timeout": 5
}
]
},
{
"matcher": "Agent",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-isolated-spawn-report-path-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-pgrep-env-dump-guard-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-prior-art-launch-guard-hook.mjs\""
},
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-plugin-release-record-guard-hook.mjs\"",
"timeout": 5
},
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-version-guard-hook.mjs\"",
"timeout": 5
},
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-gate-evidence-guard-hook.mjs\"",
"timeout": 5
},
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-release-push-evidence-guard-hook.mjs\"",
"timeout": 5
}
]
}
],
"PostToolUse": [
{
"matcher": "Agent",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-observer-pairing-guard-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-verifier-cli-guard-hook.mjs\""
}
]
},
{
"matcher": "SendMessage|Agent|Task",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-outbound-guard-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-adopt-check-hook.mjs\""
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-check-commit-signatures-hook.mjs\""
}
]
},
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-stale-date-guard-hook.mjs\""
}
]
},
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-shipped-twin-check-hook.mjs\""
}
]
},
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-rule-edit-horizon-hook.mjs\""
}
]
},
{
"matcher": "Write|Edit|MultiEdit",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-propagation-reminder-hook.mjs\""
}
]
},
{
"matcher": "mcp__planka__get_board|mcp__planka__find_cards",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-actionable-snapshot-producer-hook.mjs\"",
"timeout": 10
}
]
},
{
"matcher": "mcp__planka__get_board",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-label-intent-producer-hook.mjs\"",
"timeout": 25
}
]
}
],
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-hook-registration-drift-hook.mjs\"",
"timeout": 15
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-delegation-ladder-hook.mjs\"",
"timeout": 5
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-session-start-registry-hook.mjs\"",
"timeout": 15
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-adopt-check-hook.mjs\"",
"timeout": 15
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-env-prerequisite-drift-hook.mjs\"",
"timeout": 10
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-unsynced-buffer-hook.mjs\"",
"timeout": 5
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-memory-index-check-hook.mjs\"",
"timeout": 20
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-lane-consent-check-hook.mjs\"",
"timeout": 15
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-guard-recurrence-hook.mjs\"",
"timeout": 10
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-artifact-server-context-hook.mjs\"",
"timeout": 3
}
]
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-hook-registration-drift-hook.mjs\"",
"timeout": 15
}
]
}
],
"SubagentStop": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-outbound-guard-hook.mjs\""
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-stop-hook.mjs\""
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-registry-heartbeat-hook.mjs\"",
"timeout": 15
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-actionable-gate-hook.mjs\"",
"timeout": 5
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-queue-not-empty-gate-hook.mjs\"",
"timeout": 5
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-lesson-harvest-hook.mjs\"",
"timeout": 15
}
]
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/wt-escalation-journal-hook.mjs\"",
"timeout": 5
}
]
}
]
}
}For maintainers
If you maintain this plugin, link to this source-backed listing from your README so users can review its manifest and indexed components.
[workflow-toolbox on Agent Plugins Marketplace](https://pluginsmp.com/plugins/workflow-toolbox)