Skip to content

v2.0.0 — Soft-Enforcement Delegation (BREAKING)

Choose a tag to compare

@barkain barkain released this 08 Apr 09:03

Note: This is a re-tag of v1.18.0 as a major release to honor semver. The same code, tagged honestly. v1.18.0 shipped earlier today with breaking changes that should not have gone out under a minor bump — v2.0.0 makes the contract change explicit.

⚠️ BREAKING CHANGES

Removed /workflow-orchestrator:bypass command

commands/bypass.md is deleted. The command was an escape hatch from the old hard-blocking enforcement and is no longer needed under soft enforcement (nothing to bypass). Anyone with it in muscle memory or in scripts will get "command not found".

Hard-blocking delegation enforcement removed

The delegation hook no longer blocks tool calls — it nudges. Workflows that relied on the framework physically preventing direct tool calls (Bash, Edit, Write, etc.) now find those calls go through. See "Soft enforcement" below for the new behavior.

system-prompts/workflow_orchestrator.md removed

Anyone using claude --append-system-prompt \"\$(cat ~/.claude/system-prompts/workflow_orchestrator.md)\" is broken. The full orchestrator logic now lives inline in commands/delegate.md and is loaded on-demand by the slash command.

Tool allowlist removed

There is no longer an allowlist to maintain. The hook tracks only the 8 stable work primitives (Bash, Edit, Write, Read, Glob, Grep, MultiEdit, NotebookEdit); new Claude Code tools never trigger nudges. Anyone who customized the allowlist needs to delete those customizations.

Output style loading mechanism changed

output-styles/technical-adaptive.md is now loaded natively from plugin.json's outputStyles field instead of via a SessionStart hook. Custom integrations that injected the output style themselves should remove that injection.


Highlights

This release replaces the brittle hard-blocking delegation enforcement with a soft, adaptive nudge system, simplifies team-mode selection to a single rule, and ships the lean SessionStart injection that lands ~6.6K tokens off every session start.

Soft enforcement (no more allowlist)

`hooks/PreToolUse/require_delegation.py` no longer blocks tool calls. It emits per-turn escalating stderr nudges based on `.claude/state/delegation_violations.json`:

Violations Message Tokens
0 (silent) 0
1 `delegate?` ~2
2 `nudge: use /workflow-orchestrator:delegate for multi-step work` ~12
3–4 `WARNING: N direct tool calls bypassing delegation. Use /workflow-orchestrator:delegate .` ~25
5+ Strong reminder explaining what's being lost ~55

The counter resets each turn and zeros when `/workflow-orchestrator:delegate` runs. Subagents are immune (`CLAUDE_PARENT_SESSION_ID` / `CLAUDE_AGENT_ID` set).

Stable work-tool surface — only the 8 stable primitives are tracked: `Bash`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `MultiEdit`, `NotebookEdit`. New Claude Code tools never trigger nudges, so the framework no longer needs allowlist maintenance every time Anthropic ships a new tool.

`python_posttooluse_hook.py` (Ruff/Pyright) is now the only remaining hard-blocking hook. `validate_task_graph_compliance.py` and `validate_task_graph_depth.py` are advisory-only.

One-rule team-mode selection

Deleted the `team_mode_score` scoring table from `commands/delegate.md`. New rule:

If `TeamCreate` is in your available tools → `execution_mode: "team"`. Otherwise → `"subagent"`. No scoring, no exceptions.

The previous scoring logic was the off-ramp that caused the planner to rationalize its way into sequential subagent mode even when teams were available.

Team-mode persistent teammate fix

Teammate `Agent(team_name=...)` calls must NOT use `run_in_background: true`. Background Agent tasks exit on completion and are not persistent swarm members, leaving the tmux session empty. Subagent-mode spawns still use `run_in_background: true`.

Lean SessionStart (~6.6K token savings)

  • Three SessionStart hooks consolidated into a single `inject_all.py` Python process
  • Stub orchestrator (`orchestrator_stub.md`, ~1.1KB) on startup
  • Full orchestrator logic loaded on-demand by `/workflow-orchestrator:delegate` (lives inline in `commands/delegate.md`)
  • Output style loaded natively from `plugin.json` `outputStyles` field — no hook injection required

Documentation

  • README walkthrough refreshed with team-mode demo: 4× speed gif and 4 new screenshots showing plan mode → dependency graph → tmux swarm view → completion
  • Updated: `README.md`, `CLAUDE.md`, `docs/hook-debugging.md`, `docs/ARCHITECTURE_QUICK_REFERENCE.md`, `docs/environment-variables.md`, `docs/plan-explore-parallel-processing.md`, `docs/validation-schema.md`

Full diff: v1.16.0...v2.0.0