Hi Subagents! 👋
The headline: Subagents are no longer black boxes. Click on a task tool call in the UI and see exactly what you delegated — prompt, description, model, session ID, the whole story.
delegate_task → task: From Mystery to Transparency
Before v3.3.0, spawning a subagent meant sending it off into the void. You gave it a prompt, crossed your fingers, and waited. Want to know what instructions you actually sent? Tough luck — delegate_task kept its secrets.
Now with task:
- Click to inspect: Every
tasktool call is clickable in the UI. One click reveals the full context. - ctx.metadata(): Subagent tasks now store title, description, prompt, category, model — everything you need.
- storeToolMetadata(): Tool calls aren't just executed; they're documented.
Delegation isn't a leap of faith anymore — it's observable, debuggable, transparent.
Also Shipped
CLI: --port, --attach, --session-id, --on-complete, --json flags for run
Opus 4.6: Auto effort=max via anthropic-effort hook
Plugin safety: plugin_load_timeout_ms, safe_hook_creation, safeCreateHook()
ACP (Zed): 18x session.prompt → promptAsync fix
MCP config: Reads both ~/.claude.json and ~/.claude/.mcp.json
UserPromptSubmitHooks: Now fires on every prompt
Compaction: TODO preservation improved
Cascade cancel: Parent deletion cancels child subagents
Windows: Multiple crash fixes
Desktop app: Cross-platform path support
Migration: System modularization
LFG ulw ulw! 🔥
What's Changed
Features
- cli: extend run command with port, attach, session-id, on-complete, and json options
- config: add plugin_load_timeout_ms and safe_hook_creation experimental flags
- shared: add safeCreateHook utility for error-safe hook creation
- register anthropic-effort hook in plugin lifecycle
- add anthropic-effort hook to inject effort=max for Opus 4.6
Bug Fixes
- mcp-loader: also read ~/.claude/.mcp.json for CLI-managed user MCP config
- look-at: remove isJsonParseError band-aid (root cause fixed)
- tools: switch session.prompt to promptAsync in delegate-task and call-omo-agent
- hooks: switch session.prompt to promptAsync in all hooks
- background-agent: switch session.prompt to promptAsync
- core: switch compatibility shim to promptAsync
- shared: switch promptWithModelSuggestionRetry to use promptAsync
- hooks: fire UserPromptSubmitHooks on every prompt, not just first (#594)
- mcp-loader: read user-level MCP config from ~/.claude.json (#814)
- skill-loader: filter discovered skills by browserProvider (#1563)
- skip ultrawork injection for plan-like agents (#1501)
- migration: stop task_system backup writes (#1561)
- rewrite dedup recovery test to mock module instead of filesystem
- use lazy storage dir resolution to fix CI test flakiness
- wire deduplication into compaction recovery for prompt-too-long errors (#96)
- register compaction todo preserver
- add compaction todo preserver hook
- avoid invented compaction constraints
- ensure truncated result stays within maxLength limit
- cascade cancel descendant tasks when parent session is deleted (#114)
- update session-manager tests to use factory pattern
- use character limit instead of sentence split for skill description (#358)
- allow string values for commit_footer config (#919)
- use ctx.directory instead of process.cwd() in tools for Desktop app support
- normalize resolvedPath before startsWith check
- expand ALLOWED_AGENTS to include all subagent-capable agents
- boulder continuation now respects /stop-continuation guard
- anchor .sisyphus path check to ctx.directory to prevent false positives
- use platform-aware binary detection (where on Windows, which on Unix)
- allow dash-prefixed arguments in CLI run command
- don't fallback to system 'sg' command for ast-grep
- allow dash-prefixed arguments in CLI run command
- make model migration run only once by storing history in _migrations field
- explicitly pass encoding/callback args through stdout.write wrapper
- test: remove shadowed consoleErrorSpy declarations in on-complete-hook tests
- address cubic 4/5 review issues
- test: mock SDK and port-utils in integration test to prevent CI failure
- clear race timeout after plugin loading settles
- index: wrap hook creation with safeCreateHook + add defensive optional chaining (#1559)
- config-handler: add timeout + error boundary around loadAllPluginComponents (#1559)
- trim whitespace from tool names to prevent invalid tool calls
- allow Prometheus to overwrite .sisyphus/*.md plan files
- hooks: add defensive null check for matcher.hooks to prevent Windows crash (#441)
- respect user-configured agent models over system defaults
- respect user-configured agent models over system defaults
- guard against undefined modelID in anthropic-effort hook
Refactoring
- migration: split model and category helpers (#1561)
- migration: extract agent and hook maps (#1561)
- extract context window recovery hook
- migrate delegate_task to task tool with metadata fixes
Documentation
- add comprehensive local testing guide for acp-json-error branch
Other Changes
- Merge pull request #1620 from potb/acp-json-error
- Merge pull request #1621 from code-yeongyu/fix/814-mcp-config-both-paths
- Merge pull request #1616 from code-yeongyu/fix/814-user-mcp-config
- Merge pull request #1618 from code-yeongyu/fix/594-user-prompt-submit-fires-once
- Merge pull request #1615 from code-yeongyu/fix/1563-browser-provider-gating
- Merge pull request #1584 from code-yeongyu/fix/441-matcher-hooks-undefined
- Merge pull request #1614 from code-yeongyu/fix/1501-ulw-plan-loop
- Merge pull request #1613 from code-yeongyu/fix/1561-dead-migration
- Merge pull request #1610 from code-yeongyu/fix/96-compaction-dedup-recovery
- Merge pull request #1611 from code-yeongyu/fix/1481-1483-compaction
- Merge pull request #1607 from code-yeongyu/fix/358-skill-description-truncation
- Merge pull request #1608 from code-yeongyu/fix/114-cascade-cancel
- Merge pull request #1606 from code-yeongyu/fix/658-tools-ctx-directory
- Merge pull request #1605 from code-yeongyu/fix/919-commit-footer-v2
- Merge pull request #1593 from code-yeongyu/fix/prometheus-plan-overwrite
- Merge pull request #1604 from code-yeongyu/fix/957-allowed-agents-dynamic
- Merge pull request #1594 from code-yeongyu/fix/boulder-stop-continuation
- Merge pull request #1603 from code-yeongyu/fix/1269-windows-which-detection
- Merge pull request #1601 from code-yeongyu/fix/899-cli-run-dash-args
- Merge pull request #1602 from code-yeongyu/fix/1365-sg-cli-path-fallback
- Merge pull request #1597 from code-yeongyu/fix/899-cli-run-dash-args
- Merge pull request #1595 from code-yeongyu/fix/tool-name-whitespace
- Merge pull request #1592 from code-yeongyu/fix/issue-1570-onetime-migration
- Merge pull request #1590 from code-yeongyu/feat/run-cli-extensions
- Merge pull request #1585 from code-yeongyu/fix/1559-crash-boundary
- Revert "Merge pull request #1578 from code-yeongyu/fix/user-configured-model-override"
- Merge pull request #1578 from code-yeongyu/fix/user-configured-model-override
- Merge pull request #1564 from code-yeongyu/feat/anthropic-effort-hook
- Merge pull request #1543 from code-yeongyu/feat/task-tool-refactor
Full Changelog: v3.2.4...v3.3.0