Doctor
OrchestKit doctor for health diagnostics. Use when running checks on plugin health, diagnosing problems, or troubleshooting issues.
/ork:doctorOrchestKit Health Diagnostics
Argument Resolution
FLAGS = "$ARGUMENTS" # Full argument string, e.g., "--verbose" or "--json"
FLAG = "$ARGUMENTS[0]" # First token: -v, --verbose, --json, --category=X
# $ARGUMENTS[0], $ARGUMENTS[1] for indexed access (CC 2.1.59)Overview
The /ork:doctor command performs comprehensive health checks on your OrchestKit installation. It auto-detects installed plugins and validates 13 categories:
- Installed Plugins - Detects ork plugin
- Skills Validation - Frontmatter, references, token budget (dynamic count)
- Agents Validation - Frontmatter, tool refs, skill refs (dynamic count)
- Hook Health - Registration, bundles, async patterns
- Permission Rules - Detects unreachable rules
- Schema Compliance - Validates JSON files against schemas
- Coordination System - Checks lock health and registry integrity
- Context Budget - Monitors token usage against budget
- Memory System - Graph memory health
- Claude Code Version & Channel - Validates CC >= 2.1.86, detects release channel (stable/beta/alpha)
- External Dependencies - Checks optional tool availability (agent-browser)
- MCP Status - Active vs disabled vs misconfigured, API key presence for paid MCPs
- Plugin Validate - Runs
claude plugin validatefor official CC frontmatter + hooks.json validation (CC >= 2.1.77)
When to Use
- After installing or updating OrchestKit
- When hooks aren't firing as expected
- Before deploying to a team environment
- When debugging coordination issues
- After running
npm run build
Tip (CC 2.1.69+): After fixing issues found by doctor, run
/reload-pluginsto activate plugin changes without restarting your session.
Quick Start
/ork:doctor # Standard health check
/ork:doctor -v # Verbose output
/ork:doctor --json # Machine-readable for CICLI Options
| Flag | Description |
|---|---|
-v, --verbose | Detailed output per check |
--json | JSON output for CI integration |
--category=X | Run only specific category |
Health Check Categories
Detailed check procedures: Load
Read("$\{CLAUDE_SKILL_DIR\}/rules/diagnostic-checks.md")for bash commands and validation logic per category.MCP-specific checks: Load
Read("$\{CLAUDE_SKILL_DIR\}/rules/mcp-status-checks.md")for credential validation and misconfiguration detection.Output examples: Load
Read("$\{CLAUDE_SKILL_DIR\}/references/health-check-outputs.md")for sample output per category.
Categories 0-3: Core Validation
| Category | What It Checks | Reference |
|---|---|---|
| 0. Installed Plugins | Auto-detects ork plugin, counts skills/agents | load $\{CLAUDE_SKILL_DIR\}/rules/diagnostic-checks.md |
| 1. Skills | Frontmatter, context field, token budget, links | load $\{CLAUDE_SKILL_DIR\}/references/skills-validation.md |
| 2. Agents | Frontmatter, model, skill refs, tool refs | load $\{CLAUDE_SKILL_DIR\}/references/agents-validation.md |
| 3. Hooks | hooks.json schema, bundles, async patterns | load $\{CLAUDE_SKILL_DIR\}/references/hook-validation.md |
Categories 4-5: System Health
| Category | What It Checks | Reference |
|---|---|---|
| 4. Memory | .claude/memory/ exists, decisions.jsonl integrity, queue depth | load $\{CLAUDE_SKILL_DIR\}/references/memory-health.md |
| 5. Build | plugins/ sync with src/, manifest counts, orphans | load $\{CLAUDE_SKILL_DIR\}/rules/diagnostic-checks.md |
Categories 6-9: Infrastructure
| Category | What It Checks |
|---|---|
| 6. Permission Rules | Unreachable rules detection |
| 7. Schema Compliance | JSON files against schemas |
| 8. Coordination | Multi-worktree lock health, stale locks, sparse paths config |
| 9. Context Budget | Token usage against budget |
Categories 10-13: Environment
| Category | What It Checks | Reference |
|---|---|---|
| 10. CC Version & Channel | Runtime version against minimum required, release channel (stable/beta/alpha) | load $\{CLAUDE_SKILL_DIR\}/references/version-compatibility.md |
| 11. External Deps | Optional tools (agent-browser, portless) | load $\{CLAUDE_SKILL_DIR\}/rules/diagnostic-checks.md |
| 12. MCP Status | Enabled/disabled state, credential checks | load $\{CLAUDE_SKILL_DIR\}/rules/mcp-status-checks.md |
| 13. Plugin Validate | Official CC frontmatter + hooks.json validation (CC >= 2.1.77) | load $\{CLAUDE_SKILL_DIR\}/rules/diagnostic-checks.md |
Report Format
Load
Read("$\{CLAUDE_SKILL_DIR\}/references/report-format.md")for ASCII report templates, JSON CI output schema, and exit codes.
Interpreting Results & Troubleshooting
Load
Read("$\{CLAUDE_SKILL_DIR\}/references/remediation-guide.md")for the full results interpretation table and troubleshooting steps for common failures (skills validation, build sync, memory).
Related Skills
ork:configure- Configure plugin settingsork:quality-gates- CI/CD integrationsecurity-scanning- Comprehensive audits
References
Load on demand with Read("$\{CLAUDE_SKILL_DIR\}/references/<file>") or Read("$\{CLAUDE_SKILL_DIR\}/rules/<file>"):
| File | Content |
|---|---|
rules/diagnostic-checks.md | Bash commands and validation logic per category |
rules/mcp-status-checks.md | Credential validation and misconfiguration detection |
references/remediation-guide.md | Results interpretation and troubleshooting steps |
references/health-check-outputs.md | Sample output per category |
references/skills-validation.md | Skills frontmatter and structure checks |
references/agents-validation.md | Agents frontmatter and tool ref checks |
references/hook-validation.md | Hook registration and bundle checks |
references/memory-health.md | Memory system integrity checks |
references/permission-rules.md | Permission rule detection |
references/schema-validation.md | JSON schema compliance |
references/report-format.md | ASCII report templates and JSON CI output |
references/version-compatibility.md | CC version and channel validation |
Rules (2)
Diagnostic Checks — CRITICAL
Diagnostic Check Procedures
Detailed procedures for each health check category in /ork:doctor.
Incorrect:
✓ Plugins OK (no actual validation — just assumed healthy)Correct:
✓ Skills: 69/69 valid (frontmatter, token budget, links)
✗ Hooks: dist/memory-writer.mjs missing — run: cd src/hooks && npm run build
✓ Agents: 38/38 CC 2.1.6 compliant0. Installed Plugins Detection
Auto-detects which OrchestKit plugins are installed:
# Detection logic:
# - Scans for .claude-plugin/plugin.json in plugin paths
# - Identifies ork plugin
# - Counts skills/agents per installed plugin1. Skills Validation
Validates skills in installed plugins (count varies by installation):
# Checks performed:
# - SKILL.md frontmatter (name, description, user-invocable)
# - context: fork field (required for CC 2.1.0+)
# - Token budget compliance (300-5000 tokens)
# - Internal link validation (references/ paths)
# - Related Skills references exist2. Agents Validation
Validates agents in installed plugins:
# Checks performed:
# - Frontmatter fields (name, description, model, tools, skills)
# - Model validation (opus, sonnet, haiku only)
# - Skills references exist in src/skills/
# - Tools are valid CC tools3. Hook Health
Verifies hooks are properly configured:
# Checks performed:
# - hooks.json schema valid
# - Bundle files exist (12 .mjs bundles)
# - Async hooks use fire-and-forget pattern (9 async)
# - Background hook metrics health (Issue #243)
# - Windows-safe spawning (PR #645)4. Memory System
Validates graph memory with file-level integrity checks:
# Automated checks:
# - Graph: .claude/memory/ exists, decisions.jsonl valid JSONL, queue depth
# Run these commands to gather memory health data:
wc -l .claude/memory/decisions.jsonl 2>/dev/null || echo "No decisions yet"
wc -l .claude/memory/graph-queue.jsonl 2>/dev/null || echo "No graph queue"
ls -la .claude/memory/ 2>/dev/null || echo "Memory directory missing"Read .claude/memory/decisions.jsonl directly to validate JSONL integrity (each line must parse as valid JSON). Count total lines, corrupt lines, and report per-category breakdown.
See Memory Health for details.
5. Build System
Verifies plugins/ sync with src/:
# Checks performed:
# - plugins/ generated from src/
# - Manifest counts match actual files
# - No orphaned skills/agents6. Permission Rules
Leverages CC 2.1.3's unreachable permission rules detection.
7. Schema Compliance
Validates JSON files against schemas.
8. Coordination System
Checks multi-worktree coordination health (active instances, stale locks).
9. Context Budget
Monitors token usage against budget.
10. Claude Code Version
Validates runtime version against the Version Compatibility Matrix.
11. External Dependencies
Checks optional tool availability:
# Checks performed:
# - agent-browser: installed globally via skills CLI
# - Validates symlink exists at ~/.claude/skills/agent-browser
# - portless: stable named localhost URLs for local dev
# which portless 2>/dev/null && portless list 2>/dev/null
# If missing: RECOMMEND "npm i -g portless" for stable local dev URLs
# If installed but not running: WARN "portless is installed but no services registered"13. Plugin Validate (CC >= 2.1.77)
Runs claude plugin validate for official CC validation of frontmatter and hooks.json. This complements OrchestKit's custom checks (categories 1-3) with CC's built-in validator.
# Check CC version supports plugin validate (>= 2.1.77)
# If CC < 2.1.77, skip with: "Plugin validate: SKIPPED (requires CC >= 2.1.77)"
# Run official validation from plugin root
claude plugin validate
# Checks performed by CC:
# - SKILL.md frontmatter schema (required fields, types, allowed values)
# - hooks.json schema (event types, matchers, command paths)
# - Agent frontmatter schema (model, tools, skills fields)
# - File path resolution (command paths in hooks exist)Relationship to OrchestKit checks: claude plugin validate performs structural/schema validation at the CC level. OrchestKit's categories 1-3 perform deeper semantic checks (token budgets, cross-references, async patterns) that CC does not cover. Both should pass for a fully healthy plugin.
MCP Status Checks — HIGH
MCP Status Checks
Validates .mcp.json entries for enabled/disabled state and required credentials.
Check Procedure
# Checks performed:
# - Parse .mcp.json, list each server with enabled/disabled state
# - For tavily: check TAVILY_API_KEY env var OR op CLI availability
# - For memory: check MEMORY_FILE path is writable
# - For agentation: check agentation-mcp package is installed (npx --yes dry-run)
# - Flag any enabled MCP whose process would likely fail at startupIncorrect:
MCP Servers: all OKCorrect:
MCP Servers:
- context7: enabled ✓
- tavily: enabled ✗ TAVILY_API_KEY not set — will fail at startupOutput Examples
Healthy:
MCP Servers:
- context7: enabled ✓
- memory: enabled ✓
- sequential-thinking: disabled ○
- tavily: disabled ○ (enable: set TAVILY_API_KEY, see /ork:configure)
- agentation: disabled ○Misconfigured (Tavily enabled but no key):
MCP Servers:
- context7: enabled ✓
- memory: enabled ✓
- tavily: enabled ✗ TAVILY_API_KEY not set — MCP will fail at startup
Fix: set TAVILY_API_KEY or set "disabled": true in .mcp.jsonMisconfigured (agentation enabled but not installed):
MCP Servers:
- agentation: enabled ✗ agentation-mcp package not found
Fix: npm install -D agentation-mcp or set "disabled": trueReferences (10)
Agents Validation
Agents Validation
Overview
OrchestKit includes 30 specialized agents validated against CC 2.1.69 frontmatter format.
Agent Structure
src/agents/
├── backend-system-architect.md
├── code-quality-reviewer.md
├── frontend-ui-developer.md
└── ... (38 total)Validation Checks
1. Frontmatter Fields
Required fields:
name- Agent identifier (used in Task subagent_type)description- Purpose and auto-mode keywordsmodel- opus, sonnet, or haikutools- Array of allowed CC toolsskills- Array of skill names to auto-inject
Optional fields:
context- fork or inheritcolor- Display colorhooks- Agent-specific hooks
2. Model Validation
Only valid models:
# Check model values
grep "^model:" src/agents/*.md | sort | uniq -cExpected: opus, sonnet, haiku
3. Skills References
All skills in agent frontmatter must exist:
# Check skill references
for agent in src/agents/*.md; do
grep -A100 "^skills:" "$agent" | grep "^ - " | \
sed 's/.*- //' | while read skill; do
[ -d "src/skills/$skill" ] || echo "Missing: $agent -> $skill"
done
done4. Tools Validation
Valid CC tools:
- Bash, Read, Write, Edit, MultiEdit
- Grep, Glob
- Task, Skill
- WebFetch, WebSearch
- NotebookEdit
- AskUserQuestion
- TaskCreate, TaskUpdate, TaskGet, TaskList
Quick Validation
# Run full agent validation
npm run test:agents
# Or directly
./tests/agents/test-agent-frontmatter.shCommon Issues
Invalid model
model: sonnet # Valid: opus, sonnet, haikuMissing skill reference
Ensure skill exists in src/skills/ directory.
Invalid tool name
Check tool spelling matches CC tool names exactly.
Agent Registration Check (CC 2.1.50+)
Run claude agents to list all registered agents and compare against the expected count from manifests.
Gate: Only run if CC >= 2.1.50 (feature: claude_agents_cli). Skip with a note if version is older.
# Check registered agent count matches expected
expected_count=$(grep -c '"agents/' manifests/ork.json 2>/dev/null || echo 0)
registered_count=$(claude agents 2>/dev/null | wc -l | tr -d ' ')
if [ "$registered_count" -ne "$expected_count" ]; then
echo "WARN: Agent count mismatch — expected $expected_count, got $registered_count"
# List missing agents for investigation
claude agents 2>/dev/null | sort > /tmp/ork-registered.txt
ls src/agents/*.md 2>/dev/null | xargs -I{} basename {} .md | sort > /tmp/ork-expected.txt
echo "Missing agents:"
comm -23 /tmp/ork-expected.txt /tmp/ork-registered.txt
fiCheck: claude agents | wc -l should match expected agent count (38).
Model Routing
See docs/model-routing.md for per-agent model assignment rationale and version history.
Fail action: List missing agents for manual investigation. Common causes:
- Plugin not installed or not rebuilt after adding agents
- Agent frontmatter parse error preventing registration
- CC version too old (< 2.1.50) to support
claude agentsCLI
Health Check Outputs
Health Check Output Examples
Reference output examples for each /ork:doctor check category.
Channel Detection
Stable:
Channel: stable (v7.0.0)Beta:
Channel: beta (v7.0.0-beta.3)
⚠ You are on the beta channel. Report issues at github.com/yonatangross/orchestkit/issuesAlpha:
Channel: alpha (v7.0.0-alpha.1)
⚠ You are on the alpha channel. Expect breaking changes. Report issues at github.com/yonatangross/orchestkit/issuesDetection logic:
- Read version from
.claude-plugin/plugin.json(versionfield) orversion.txt - If version contains
-alpha→ alpha channel - If version contains
-beta→ beta channel - Otherwise → stable channel
Installed Plugins
Installed Plugins: 1
- ork: 103 skills, 36 agents, 173 hook entriesSkills Validation
Skills: 79/79 valid
- User-invocable: 18 commands
- Reference skills: 61Agents Validation
Agents: 38/38 valid
- Models: 12 sonnet, 15 haiku, 8 opus
- All skill references validHook Health
Hooks: 95/95 entries valid (12 bundles)
- Global: 34, Agent-scoped: 54, Skill-scoped: 7
- Async hooks: 9 (native async)
- Error Rate: 0.3%Memory System
Memory System: healthy
- Graph Memory: 42 decisions, 0 corrupt, queue depth 3Build System
Build System: in sync
- Skills: 69 src/ = 69 plugins/
- Agents: 38 src/ = 38 plugins/
- Last build: 2 minutes agoPermission Rules
Permission Rules: 12/12 reachableSchema Compliance
Schemas: 15/15 compliantCoordination System
Coordination: healthy
- Active instances: 1
- Stale locks: 0Context Budget
Context Budget: 1850/2200 tokens (84%)Claude Code Version
OK:
Claude Code: 2.1.47 (OK)
- Minimum required: 2.1.47
- All 15 features availableDegraded:
Claude Code: 2.1.44 (DEGRADED)
- Minimum required: 2.1.47
- Missing: last_assistant_message, added_dirs, Windows hooks, worktree discovery
- Upgrade: npm install -g @anthropic-ai/claude-code@latestExternal Dependencies
Installed:
External Dependencies:
- agent-browser: installed (OK)Not installed:
External Dependencies:
- agent-browser: NOT INSTALLED (optional - install with: npx skills add vercel-labs/agent-browser)Plugin Validate
Pass (CC >= 2.1.77):
Plugin Validate: PASSED
- claude plugin validate: 0 errors, 0 warningsFail (CC >= 2.1.77):
Plugin Validate: FAILED
- claude plugin validate: 2 errors
- src/skills/broken/SKILL.md: missing required field "description"
- src/hooks/hooks.json: invalid matcher pattern at hooks[3]
- Fix errors and re-run: npm run build && claude plugin validateSkipped (CC < 2.1.77):
Plugin Validate: SKIPPED (requires CC >= 2.1.77)
- Falling back to OrchestKit custom validation onlyManaged Settings Policy (CC >= 2.1.92)
OK — forceRemoteSettingsRefresh with endpoint:
Managed Settings: OK
- forceRemoteSettingsRefresh: enabled
- Remote endpoint configuredWarning — forceRemoteSettingsRefresh without endpoint:
Managed Settings: WARNING
- forceRemoteSettingsRefresh: enabled but no remote settings endpoint detected
- This will block startup if network is unavailable
- Configure a remote endpoint or remove forceRemoteSettingsRefreshInfo — not set:
Managed Settings: OK (default)
- forceRemoteSettingsRefresh: not set (falls back to cached settings)MCP connector conflict (CC >= 2.1.92 fix):
MCP Servers: WARNING
- Plugin MCP server "{name}" duplicates a claude.ai connector
- Prior to CC 2.1.92 this caused stuck "connecting" state
- Consider setting ENABLE_CLAUDEAI_MCP_SERVERS=false or renaming the plugin serverHook Validation
Hook Validation
Overview
OrchestKit uses 66 global hook entries across 15 event types, compiled into 12 bundles. This reference explains how to validate and troubleshoot hooks.
Hook Architecture
hooks.json (63 global + 22 agent-scoped + 1 skill-scoped entries)
↓
12 TypeScript bundles (dist/*.mjs)
↓
9 async hooks use fire-and-forget patternPlatform Support
| Platform | Hook Status | Notes |
|---|---|---|
| macOS | Full support | Native execution |
| Linux | Full support | Native execution |
| Windows | Full support (CC 2.1.47+) | Uses Git Bash instead of cmd.exe |
Windows support history:
- Before CC 2.1.47: All hooks silently failed on Windows (cmd.exe incompatible)
- CC 2.1.47: Fixed by executing hooks via Git Bash instead of cmd.exe
- PR #645: OrchestKit added Windows-safe spawning (no console flashing, no ENAMETOOLONG)
Cross-platform safety measures in OrchestKit hooks:
paths.tsprovides cross-platform path handling (os.homedir(),os.tmpdir(),path.join())- CRLF normalization (
\r\n→\n) in subagent-validator, decision-history, common.ts - Windows backslash path normalization in structure-location-validator
- Windows-specific test cases for paths, CRLF, and permission handling
Hook Categories
| Event Type | Count | Purpose |
|---|---|---|
| PreToolUse | 14 | Before tool execution |
| SubagentStart | 7 | Before agent spawn |
| SubagentStop | 7 | After agent completes |
| PostToolUse | 6 | After tool execution |
| Setup | 6 | Plugin initialization |
| SessionStart | 5 | Session initialization |
| UserPromptSubmit | 5 | Prompt enhancement |
| PermissionRequest | 3 | Auto-approval logic |
| SessionEnd | 3 | Session cleanup |
| TeammateIdle | 3 | Teammate idle handling |
| Stop | 2 | Conversation end |
| Notification | 2 | Desktop/sound alerts |
| PostToolUseFailure | 1 | Failed tool handling |
| PreCompact | 1 | Before context compaction |
| TaskCompleted | 1 | Task completion handling |
| Total Global | 66 |
Bundle Structure
| Bundle | Handlers | Async |
|---|---|---|
| agent.mjs | Agent hooks | No |
| hooks.mjs | Core dispatching | No |
| lifecycle.mjs | Session lifecycle | Yes |
| notification.mjs | Alerts | Yes |
| permission.mjs | Auto-approve | No |
| posttool.mjs | Post-execution | Yes |
| pretool.mjs | Pre-execution | No |
| prompt.mjs | Prompt enhancement | Yes |
| setup.mjs | Initialization | Yes |
| skill.mjs | Skill-scoped hooks | No |
| stop.mjs | Conversation end | Yes |
| subagent.mjs | Agent lifecycle | No |
Validation Checks
1. hooks.json Schema
# Validate hooks.json structure
cat src/hooks/hooks.json | jq '.hooks | keys'2. Bundle Existence
# Check all bundles exist
ls -la src/hooks/dist/*.mjs3. Async Hook Pattern
Async hooks use fire-and-forget scripts:
# 9 fire-and-forget scripts required (updated CC 2.1.47)
ls src/hooks/bin/*-fire-and-forget.mjs4. Matcher Syntax
Valid matcher patterns:
{
"matcher": "Bash", // Exact tool name
"matcher": "Write|Edit", // Multiple tools
"matcher": "*", // All tools
"matcher": "mcp__*" // Wildcard prefix
}Debug Mode (Issue #243)
Silent hooks run in detached background processes. Enable debug mode to monitor them.
Enable Debug Logging
Create .claude/hooks/debug.json:
{
"enabled": true,
"verbose": false,
"includeInput": false,
"hookFilters": []
}View Debug Logs
# Recent background hook activity
tail -f .claude/logs/background-hooks.log
# Filter by hook name
grep "unified-dispatcher" .claude/logs/background-hooks.logHook Metrics
Execution metrics tracked in .claude/hooks/metrics.json:
{
"hooks": {
"posttool/unified-dispatcher": {
"totalRuns": 42,
"successCount": 41,
"errorCount": 1,
"avgDurationMs": 150
}
}
}PID Tracking
# Check for orphaned processes
for f in .claude/hooks/pids/*.pid; do
pid=$(jq -r '.pid' "$f" 2>/dev/null)
if [ -n "$pid" ] && ! kill -0 "$pid" 2>/dev/null; then
echo "Orphaned: $f"
rm "$f"
fi
doneTroubleshooting
Hook not firing
- Check matcher pattern matches tool name
- Verify bundle exists in dist/
- Check hooks.json registration
Hook timing out
Default timeout: 120s (bash), 600s (CC 2.1.3+)
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success / Allow |
| 1 | Error (logged, continues) |
| 2 | Block (stops execution) |
Memory Health
Memory Health
Overview
OrchestKit uses graph memory for knowledge persistence. Doctor validates it with automated checks.
Automated Health Check
The memory-health.ts library provides checkMemoryHealth() which returns a MemoryHealthReport:
interface MemoryHealthReport {
overall: 'healthy' | 'degraded' | 'unavailable';
timestamp: string;
graph: {
status: TierStatus;
memoryDir: boolean; // .claude/memory/ exists
decisions: FileHealth; // decisions.jsonl analysis
graphQueue: FileHealth; // graph-queue.jsonl depth
};
}Each FileHealth includes: exists, lineCount, corruptLines, sizeBytes, lastModified.
Status Meanings
| Status | Meaning |
|---|---|
healthy | Graph memory operational, no issues |
degraded | Working but with issues (corrupt data, high queue depth) |
unavailable | Not configured or missing critical components |
Graph Memory
Local knowledge graph stored in .claude/memory/.
Validation Commands
# Check directory exists
ls -la .claude/memory/
# Count decisions
wc -l .claude/memory/decisions.jsonl
# Check graph queue depth
wc -l .claude/memory/graph-queue.jsonl 2>/dev/null
# Validate JSONL integrity (each line must be valid JSON)
while IFS= read -r line; do
echo "$line" | python3 -m json.tool > /dev/null 2>&1 || echo "CORRUPT: $line"
done < .claude/memory/decisions.jsonlHealth Indicators
- Directory exists:
.claude/memory/ decisions.jsonl: Valid JSONL, no corrupt linesgraph-queue.jsonl: Queue depth < 50 (high depth = sync backlog)- No corruption: every line parses as valid JSON
Degraded Conditions
- Corrupt lines: One or more JSONL lines fail to parse
- High queue depth: >50 pending graph operations (sync backlog)
- Missing directory: Graph memory never initialized
Troubleshooting
Graph memory missing
# Initialize graph
mkdir -p .claude/memoryThe first /ork:remember call will create decisions.jsonl.
Corrupt JSONL lines
# Find corrupt lines
python3 -c "
import json, sys
with open('.claude/memory/decisions.jsonl') as f:
for i, line in enumerate(f, 1):
try: json.loads(line)
except: print(f'Line {i}: {line.strip()[:80]}')
"High queue depth
Queue items accumulate if the stop dispatcher doesn't run (e.g., session crash). The queue-recovery hook processes orphaned queues on the next session start.
Permission Rules
Permission Rules Analysis
Overview
CC 2.1.3 added detection for unreachable permission rules. This reference explains how to diagnose and fix permission issues.
Common Issues
1. Unreachable Rules
A rule is unreachable when a more general rule already matches:
// PROBLEM: Second rule never matches
{
"permissions": [
{ "path": "**/*.md", "action": "allow" },
{ "path": "README.md", "action": "deny" } // Unreachable!
]
}Fix: Order rules from specific to general:
{
"permissions": [
{ "path": "README.md", "action": "deny" },
{ "path": "**/*.md", "action": "allow" }
]
}2. Shadowed Rules
When two rules match the same pattern with different actions:
// PROBLEM: Both match, but first wins
{
"permissions": [
{ "matcher": "Bash", "action": "allow" },
{ "matcher": "Bash", "commands": ["rm"], "action": "deny" }
]
}Fix: Use more specific matchers:
{
"permissions": [
{ "matcher": "Bash", "commands": ["rm", "rm -rf"], "action": "deny" },
{ "matcher": "Bash", "action": "allow" }
]
}3. Invalid Patterns
Glob patterns that will never match:
// PROBLEM: Typo in pattern
{
"permissions": [
{ "path": "**.md", "action": "allow" } // Should be **/*.md
]
}Validation Commands
# Check for unreachable rules
jq '.permissions // [] | to_entries | map(select(.value.action == "allow"))' \
.claude/settings.json
# List all permission matchers
jq '.permissions // [] | map(.matcher) | unique' .claude/settings.jsonBest Practices
- Order rules from most specific to least specific
- Use explicit deny rules before catch-all allow rules
- Test rules with actual tool invocations
- Review rules after plugin updates
Remediation Guide
Remediation Guide
Quick remediation steps for common /ork:doctor findings.
Interpreting Results
| Status | Meaning | Action |
|---|---|---|
| All checks pass | Plugin healthy | None required |
| Skills warning | Invalid frontmatter | Run npm run test:skills |
| Agents warning | Invalid frontmatter | Run npm run test:agents |
| Hook error | Missing/broken hook | Check hooks.json and bundles |
| Memory warning | Graph unavailable | Check .claude/memory/ directory |
| Build warning | Out of sync | Run npm run build |
| Permission warning | Unreachable rules | Review .claude/settings.json |
| Plugin validate error | CC frontmatter/hooks.json invalid | Run claude plugin validate and fix reported errors |
Troubleshooting
"Skills validation failed"
# Run skill structure tests
npm run test:skills
./tests/skills/structure/test-skill-md.sh"Build out of sync"
# Rebuild plugins from source
npm run build"Memory unavailable"
# Check graph memory
ls -la .claude/memory/"Plugin validate failed"
# Run CC's official validator (requires CC >= 2.1.77)
claude plugin validate
# Fix reported errors, then rebuild and re-validate
npm run build
claude plugin validateReport Format
Doctor Report Format
ASCII Report
Full ork plugin:
+===================================================================+
| OrchestKit Health Report |
+===================================================================+
| Version: {version} | CC: {cc_version} | Plugins: ork |
+===================================================================+
| Skills | 67/67 valid |
| Agents | 37/37 valid |
| Hooks | 87/87 entries (12 bundles) |
| Memory | Graph memory healthy |
| MCP | context7 ✓ memory ✓ tavily ○ agentation ○ |
| Permissions | 12/12 reachable |
| Schemas | 15/15 compliant |
| Context | 1850/2200 tokens (84%) |
| Coordination | 0 stale locks |
| CC Version | {cc_version} (OK) |
| Plugin Validate | PASSED (0 errors) |
+===================================================================+
| Status: HEALTHY (11/11 checks passed) |
+===================================================================+Note:
\{version\}is read frompackage.jsonat runtime.\{cc_version\}is detected from Claude Code. Counts reflect installed plugin — dynamic, not hardcoded.
JSON Output (CI Integration)
/ork:doctor --json{
"version": "{version}",
"claudeCode": "{cc_version}",
"status": "healthy",
"plugins": {
"installed": ["ork"],
"count": 1
},
"checks": {
"skills": {"passed": true, "count": 67, "perPlugin": {"ork": 67}},
"agents": {"passed": true, "count": 37, "perPlugin": {"ork": 37}},
"hooks": {"passed": true, "entries": 87, "bundles": 12, "source": "ork"},
"memory": {"passed": true, "available": ["graph"]},
"mcp": {"passed": true, "servers": {"context7": "enabled", "memory": "enabled", "sequential-thinking": "disabled", "tavily": "disabled", "agentation": "disabled"}},
"permissions": {"passed": true, "count": 12},
"schemas": {"passed": true, "count": 15},
"context": {"passed": true, "usage": 0.84},
"coordination": {"passed": true, "staleLocks": 0},
"ccVersion": {"passed": true, "version": "2.1.47"},
"pluginValidate": {"passed": true, "errors": 0, "warnings": 0, "skipped": false}
},
"exitCode": 0
}Exit Codes
| Code | Meaning |
|---|---|
| 0 | All checks pass |
| 1 | One or more checks failed |
Schema Validation
Schema Validation
Overview
OrchestKit uses JSON schemas to validate configuration files. This reference explains how to validate and fix schema issues.
Schemas
Located in .claude/schemas/:
| Schema | Validates |
|---|---|
plugin.schema.json | plugin.json |
skill files | All SKILL.md files |
context.schema.json | Context protocol files |
coordination.schema.json | Work registry and decision log |
Validation Commands
Validate All
./tests/schemas/validate-all.shValidate Specific File
# Using ajv
npx ajv validate \
-s .claude/schemas/skill files \
-d .claude/skills/doctor/SKILL.md
# Using jq for basic structure check
jq empty .claude/skills/doctor/SKILL.mdCommon Schema Errors
Missing Required Field
// ERROR: Missing "description"
{
"name": "my-skill",
"version": "1.0.0"
}Fix: Add all required fields:
{
"$schema": "../../schemas/skill files",
"name": "my-skill",
"version": "1.0.0",
"description": "Description of the skill",
"capabilities": ["capability-1"]
}Invalid Type
// ERROR: capabilities must be array
{
"capabilities": "single-capability"
}Fix: Use correct type:
{
"capabilities": ["single-capability"]
}Pattern Mismatch
// ERROR: version must match semver
{
"version": "1.0"
}Fix: Use proper semver:
{
"version": "1.0.0"
}Batch Validation
# Validate all SKILL.md files
for category in skills/*/.claude/skills; do for f in "$category"/*/SKILL.md; do
npx ajv validate \
-s .claude/schemas/skill files \
-d "$f" || echo "INVALID: $f"
doneCreating Valid Files
Use schema as a template:
# View required fields
jq '.required' .claude/schemas/skill files
# View property types
jq '.properties | to_entries | map({key: .key, type: .value.type})' \
.claude/schemas/skill filesSkills Validation
Skills Validation
Overview
OrchestKit includes 103 skills validated against frontmatter requirements and content standards.
Skill Types
| Type | Count | Frontmatter |
|---|---|---|
| User-invocable | 18 | user-invocable: true |
| Internal | 61 | user-invocable: false |
Validation Checks
1. Frontmatter Fields
Required fields:
name- Skill identifierdescription- Brief description with triggersuser-invocable- Boolean for command availability
Optional fields:
context- fork (recommended), inheritagent- Associated agent nametags- Keywords for discoveryversion- Semver versionallowedTools- Tool whitelist
2. Token Budget
Skills must stay within token limits:
- Minimum: 300 tokens
- Maximum: 5000 tokens
# Check skill size
wc -c src/skills/*/SKILL.md | sort -n3. Reference Links
All internal links must resolve:
# Check for broken references
for skill in src/skills/*/SKILL.md; do
grep -o 'references/[^)]*' "$skill" | while read ref; do
dir=$(dirname "$skill")
[ -f "$dir/$ref" ] || echo "Broken: $skill -> $ref"
done
done4. Related Skills
All skills in "Related Skills" section must exist:
# Validate related skill references
grep -h "^- " src/skills/*/SKILL.md | grep -v "http" | \
sed 's/.*`\([^`]*\)`.*/\1/' | sort -uQuick Validation
# Run full skill validation
npm run test:skills
# Or directly
./tests/skills/structure/test-skill-md.shCommon Issues
Missing frontmatter
---
name: my-skill
description: Does something useful
user-invocable: false
---Token budget exceeded
Split into SKILL.md + references/ directory.
Broken reference link
Ensure file exists at references/filename.md.
Version Compatibility
CC Version Compatibility Matrix
Overview
OrchestKit requires Claude Code >= 2.1.94. This matrix documents which CC features OrchestKit depends on and their minimum version requirements.
Feature Matrix
| Feature | Min CC Version | OrchestKit Usage | Degradation if Missing |
|---|---|---|---|
subagent_type in SubagentStart | 2.1.7 | Agent type detection in all SubagentStart hooks | Hooks fall back to prompt scanning (removed in v6.0) |
session_id guaranteed | 2.1.9 | Session tracking in all hooks | Session-scoped features fail |
Hook continue field | 2.1.7 | All hook responses | Hooks silently ignored |
| Permission rules detection | 2.1.3 | Doctor unreachable rules check | Permission check skipped |
sonnet-4-6 model | 2.1.45 | Agent model field in frontmatter | Falls back to older sonnet |
| Plugin hot reload | 2.1.45 | Live plugin updates without restart | Must restart CC after changes |
last_assistant_message | 2.1.47 | Stop/SubagentStop context capture | Missing assistant context |
added_dirs statusline field | 2.1.47 | Multi-directory project support | Single-dir only in statusline |
| Deferred SessionStart (500ms) | 2.1.47 | Hooks fire after env is ready | Race conditions on cold start |
| Agent model in Teams | 2.1.47 | Model field respected in team spawns | Model ignored, uses default |
| Worktree discovery | 2.1.47 | Skills/agents found from worktrees | Worktree sessions miss plugins |
| Background tasks in worktrees | 2.1.47 | Task tool from worktrees | Background agents fail silently |
| Windows hook execution | 2.1.47 | All hooks on Windows | Hooks silently fail on Windows |
| Windows worktree sessions | 2.1.47 | Drive letter casing match | Worktree sessions not matched |
| Improved agent memory | 2.1.47 | Higher context limits | Conservative limits apply |
Ctrl+F find in output | 2.1.47 | Search through session output | No search capability |
Shift+Down multi-line input | 2.1.47 | Multi-line prompt entry | Single-line input only |
| Memory leak fixes (8 leaks) | 2.1.50 | Stable long-running sessions | Memory grows unbounded over time |
claude_agents_cli | 2.1.50 | Doctor agent registration check | Agent registration check skipped |
| ConfigChange hook event | 2.1.50 | Detect mid-session settings changes | Stale config until restart |
| Auto-memory | 2.1.59 | Claude saves learnings across sessions | Manual CLAUDE.md only |
@import in CLAUDE.md | 2.1.59 | Modular instruction files | Single monolithic CLAUDE.md |
.claude/rules/ with paths: | 2.1.59 | Path-scoped rules per directory | All rules loaded always |
HTTP hooks (type: "http") | 2.1.63 | Observability hooks POST to remote endpoints | Falls back to command hooks (local JSONL) |
| Worktree config sharing | 2.1.63 | Project configs shared across worktrees | Manual config copy needed |
/clear resets skills | 2.1.63 | Fixes stale skill content after edits | Native since 2.1.63; no workaround needed |
| Teammate memory fix | 2.1.63 | Safe for 5+ teammate swarms | Memory grows in long team sessions |
/simplify, /batch built-in | 2.1.63 | Bundled CC slash commands | Not available |
ENABLE_CLAUDEAI_MCP_SERVERS | 2.1.63 | Opt out of claude.ai MCP servers | All claude.ai MCPs always loaded |
| InstructionsLoaded hook event | 2.1.69 | Rules materialization timing, context injection | Rules written too late, stale context |
once: true hooks | 2.1.69 | 13 skill context loaders fire once then auto-remove | Loaders fire every prompt (wasted tokens) |
permissionDecision: 'ask' | 2.1.69 | Gray-zone command escalation to user | Binary allow/deny only |
tool_use_id correlation | 2.1.69 | Pre/PostToolUse pair tracking | No correlation between pre/post |
$\{ENV_VAR\} in HTTP hooks | 2.1.69 | $TOKEN in headers works; $\{VAR\} in URLs broken since 2.1.71 (validated before expansion) — use generate-http-hooks CLI with real URLs instead | Must use command hooks for env vars |
Path-scoped rules (paths:) | 2.1.69 | 10 conditional rules scoped to file paths | All rules always loaded |
| Worktree dedup fixes | 2.1.70 | Prevents duplicate hook fires in worktrees | Hooks may fire twice |
| 74% prompt re-render reduction | 2.1.70 | CC-internal perf (no action needed) | Higher latency on re-renders |
| ~600 token skill listing savings | 2.1.70 | CC-internal (frees headroom for hook injection) | Tighter token budget |
| MCP cache invalidation | 2.1.70 | MCP tools refresh on reconnect | Stale MCP tool definitions |
/loop command | 2.1.71 | Recurring prompts on intervals (deploy watch, health monitor) | Manual re-invocation |
| Cron scheduling tools | 2.1.71 | Session-scoped cron for recurring tasks | No in-session scheduling |
| Expanded bash auto-approval | 2.1.71 | fmt, comm, cmp, seq, printf, test, etc. auto-approved | Manual approval for POSIX utils |
/debug toggle mid-session | 2.1.71 | Toggle debug logging without restart | Must restart to change log level |
settings.local.json uninstall | 2.1.71 | /plugin uninstall writes to local settings, not shared | Uninstall modifies committed settings.json |
voice:pushToTalk rebindable | 2.1.71 | Custom keybinding for push-to-talk in voice mode | Fixed keybinding |
| Background agent output path | 2.1.71 | Completion notifications include output file path | Missing output path in notifications |
| Plugin multi-instance fix | 2.1.71 | Concurrent CC instances preserve plugin installs | Plugin state lost with multiple instances |
| ToolSearch cleanup | 2.1.71 | "Tool loaded." message removed from output | Noisy ToolSearch output |
| Plugin marketplace fixes | 2.1.71 | @ref parsing and merge conflict resolution | Marketplace update/add failures |
Skill listing skip on --resume | 2.1.71 | ~600 tokens saved on session resume (no re-injection) | Skill listing re-injected on every resume |
| ExitWorktree tool | 2.1.72 | Agents can leave worktree sessions programmatically | Agents stuck in worktree until session ends |
Agent model parameter restored | 2.1.72 | Per-invocation model override via Agent tool | Model override silently ignored |
| Team agents inherit leader model | 2.1.72 | Teammates use leader's model when unspecified | Teammates fall back to default model |
/plan accepts description arg | 2.1.72 | /plan fix auth bug starts plan with context | Must type description after /plan prompt |
| Effort levels simplified | 2.1.72 | Three levels: low/medium/high (was 5-level) | Five-level effort scale |
CLAUDE_CODE_DISABLE_CRON env var | 2.1.72 | Disable cron scheduling via environment | No way to disable cron |
| Skill hooks double-fire fix | 2.1.72 | Skill-scoped hooks fire exactly once | Skill hooks may fire twice per invocation |
/clear preserves bg agents | 2.1.72 | Background agents survive /clear | /clear kills background agents |
| Agent prompt persistence fix | 2.1.72 | Agent prompt no longer deleted from settings.json | Agent prompts lost on restart |
| AlwaysAllow rule matching fix | 2.1.72 | Permission rules match commands correctly | AlwaysAllow rules may not match |
| Worktree task resume fixes | 2.1.72 | cwd restore + bg notification metadata on resume | Worktree tasks resume in wrong dir, missing metadata |
| Prompt cache fix | 2.1.72 | Up to 12x token cost reduction via improved caching | Higher token costs from cache misses |
| Expanded bash auto-approval | 2.1.72 | lsof, pgrep, tput, ss, fd, fdfind auto-approved | Manual approval for system inspection tools |
vscode://anthropic.claude-code/open | 2.1.72 | URI handler to open CC from VS Code links | No deep-link integration with VS Code |
/output-style deprecated → /config | 2.1.73 | No OrchestKit references to /output-style | None — already using /config |
Skill-file deadlock fix on git pull | 2.1.73 | Fixes hang with 89-skill plugin after git pull | CC hangs during/after git pull |
| SessionStart hooks double-fire fix | 2.1.73 | ~15 SessionStart hooks fire exactly once on resume | Hooks fire twice on --resume/--continue |
| No-op system reminder injection fix | 2.1.73 | ~2K tokens/turn recovered across 99 hooks | Empty system-reminder tags waste context |
| Opus 4.6 default on Bedrock/Vertex/Foundry | 2.1.73 | 6 opus-tier agents auto-upgrade on cloud providers | Older Opus model on cloud providers |
/context optimization hints | 2.1.74 | Actionable suggestions for context-heavy tools, memory bloat, capacity | No optimization guidance |
autoMemoryDirectory setting | 2.1.74 | Custom auto-memory storage path via settings.json | Default path only |
SessionEnd hook.timeout respected | 2.1.74 | SessionEnd hooks run to configured timeout (was hardcoded 1.5s) | SessionEnd hooks killed at 1.5s regardless of config |
CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS | 2.1.74 | Env var override for SessionEnd hook timeout | No env var control |
--plugin-dir precedence | 2.1.74 | Local dev plugins override marketplace installs | Marketplace takes precedence |
| Full model IDs in agent frontmatter | 2.1.74 | claude-opus-4-6 etc. accepted (not just opus) | Only symbolic names (opus, sonnet, haiku) |
| Managed policy precedence fix | 2.1.74 | Managed policy ask overrides user allow + allowed-tools | User rules could bypass managed policy |
| Streaming + bash prefix memory fixes | 2.1.74 | Two memory leaks fixed (streaming buffers, bash prefix cache) | RSS growth in long sessions |
| 1M context default for Opus 4.6 | 2.1.75 | No extra usage needed on Max/Team/Enterprise | Must opt-in to 1M context |
| Memory file timestamps | 2.1.75 | Last-modified timestamps for memory freshness reasoning | No staleness signal on memories |
| Hook source in permission prompts | 2.1.75 | Shows settings/plugin/skill origin when hook asks for confirmation | Opaque hook origin |
| Token estimation fix | 2.1.75 | Prevents premature compaction from thinking/tool_use over-counting | Compaction triggers too early |
| Async hook messages suppressed | 2.1.75 | Hook completion messages hidden by default (visible with --verbose) | Noisy async hook output |
| MCP elicitation support | 2.1.76 | Servers request structured input mid-task via form/URL dialog | No MCP input dialogs |
| Elicitation/ElicitationResult hooks | 2.1.76 | Intercept and override MCP elicitation requests/responses | No elicitation interception |
-n/--name CLI flag | 2.1.76 | Set display name for session at startup | No session naming at launch |
worktree.sparsePaths setting | 2.1.76 | Selective sparse-checkout for large monorepos | Full checkout in worktrees |
| PostCompact hook | 2.1.76 | Fires after compaction completes for context recovery | Only PreCompact (before) exists |
/effort slash command | 2.1.76 | Set model effort level mid-session | No effort control |
feedbackSurveyRate setting | 2.1.76 | Enterprise session quality survey sample rate | No quality feedback loop |
| Deferred tools compaction fix | 2.1.76 | ToolSearch schemas retained after compaction | Array/number params rejected post-compaction |
| Background agent partial results | 2.1.76 | Killed agents preserve partial results in context | Killed agents lose all output |
| Compaction circuit breaker | 2.1.76 | Auto-compaction stops after 3 consecutive failures | Compaction retries indefinitely |
| Stale worktree cleanup | 2.1.76 | Worktrees from interrupted parallel runs auto-cleaned | Stale worktrees accumulate |
| Worktree startup performance | 2.1.76 | Direct ref reads, skip redundant fetch | Slower worktree startup |
| Opus 4.6 64k default output | 2.1.77 | 64k default, 128k upper bound for Opus+Sonnet | 32k output limit |
allowRead sandbox setting | 2.1.77 | Re-allow read access within denyRead regions | No granular read exceptions |
claude plugin validate | 2.1.77 | Official frontmatter + hooks.json validation | Manual/custom validation only |
| SendMessage auto-resume | 2.1.77 | Stopped agents auto-resume on SendMessage | SendMessage returns error for stopped agents |
Agent resume param removed | 2.1.77 | Must use SendMessage({to: id}) to continue agents | Agent(resume=...) silently ignored |
| Background bash 5GB limit | 2.1.77 | Tasks killed at 5GB output to prevent disk fill | Unbounded background output |
/fork renamed to /branch | 2.1.77 | /fork still works as alias | Only /fork available |
| PreToolUse allow/deny fix | 2.1.77 | "allow" no longer bypasses deny rules (security fix) | allow hooks could bypass deny rules |
| Worktree race condition fix | 2.1.77 | Stale cleanup no longer deletes resumed agent worktrees | Race between cleanup and agent resume |
| --resume performance | 2.1.77 | 45% faster loading, ~100-150MB less peak memory | Slower fork-heavy session resume |
| Progress message memory fix | 2.1.77 | Progress messages cleaned up during compaction | Memory growth from accumulated progress messages |
StopFailure hook event | 2.1.78 | Hooks fire on API errors (rate limit, auth failure) | No hook on API errors |
$\{CLAUDE_PLUGIN_DATA\} | 2.1.78 | Plugin persistent state survives plugin updates | State lost on plugin update |
Agent effort/maxTurns/disallowedTools frontmatter | 2.1.78 | Plugin agents support effort, turn limits, tool restrictions | No agent-level frontmatter controls |
| PreToolUse allow bypass fix | 2.1.78 | "allow" hooks no longer bypass deny permission rules | allow hooks could bypass deny rules |
claude plugin validate enhanced | 2.1.78 | Validates skill, agent, command frontmatter + hooks.json | Basic validation only |
| Worktree skills/hooks loading fix | 2.1.78 | --worktree flag loads skills and hooks from worktree dir | Skills/hooks loaded from original dir |
--console auth flag | 2.1.79 | claude auth login --console for API billing auth | Only OAuth/API key auth |
| "Show turn duration" toggle | 2.1.79 | Turn duration visible in /config menu | No turn duration display |
/remote-control (VSCode) | 2.1.79 | Bridge session to claude.ai/code from browser/phone | VSCode-only sessions |
Multi-dir PLUGIN_SEED_DIR | 2.1.79 | Multiple seed dirs separated by platform path delimiter | Single seed directory only |
-p mode Ctrl+C fix | 2.1.79 | Ctrl+C works in print mode | Ctrl+C ignored in -p mode |
| Startup memory reduction | 2.1.79 | ~18MB less memory on startup | Higher startup memory |
rate_limits statusline field | 2.1.80 | Statusline scripts receive rate limit usage (5h/7d windows, used_percentage, resets_at) | No rate limit visibility |
source: 'settings' marketplace | 2.1.80 | Declare plugin entries inline in settings.json | Marketplace JSON files only |
| CLI tool usage detection for tips | 2.1.80 | Plugin tips detect CLI tool usage, not just file patterns | File pattern matching only |
effort frontmatter for skills | 2.1.80 | Skills declare effort level (low/high) to override model effort | No per-skill effort control |
--channels (research preview) | 2.1.80 | MCP servers push messages into active session | Pull-only MCP communication |
--resume parallel tool fix | 2.1.80 | Sessions with parallel tool calls restore all tool_use/tool_result pairs | [Tool result missing] on resume |
| Voice mode WebSocket fix | 2.1.80 | Fixes Cloudflare bot detection on non-browser TLS fingerprints | Voice mode connection failures |
| Fine-grained tool streaming fix | 2.1.80 | Fixes 400 errors through API proxies, Bedrock, or Vertex | Streaming failures on proxied deployments |
/effort shows auto resolution | 2.1.80 | Shows what "auto" resolves to, matching status bar | Opaque auto effort |
| Simplified plugin install tips | 2.1.80 | Single /plugin install command instead of two-step flow | Two-step marketplace add + install |
| Startup memory reduction (250k repos) | 2.1.80 | ~80 MB saved on startup in large repositories | Higher startup memory on large repos |
| Managed settings cache fix | 2.1.80 | enabledPlugins, permissions.defaultMode, policy env vars applied at startup | Stale remote-settings.json from prior session |
--bare flag for -p mode | 2.1.81 | Eval pipeline uses --bare to skip hooks/LSP/plugin sync for faster scripted grading | Full plugin/hook overhead on every -p call |
--channels permission relay | 2.1.81 | Channel servers forward tool approval prompts to phone for long-running agents | Must be at terminal for every permission prompt |
| Plugin freshness re-clone | 2.1.81 | Ref-tracked plugins re-clone on every load for latest upstream | Stale plugins until manual reinstall |
| Background agent task output race fix | 2.1.81 | Background agent output no longer hangs between polling intervals | Task output could hang indefinitely |
| Worktree session resume | 2.1.81 | --resume of a worktree session switches back to that worktree | Resumed worktree sessions start in main tree |
| Plugin hooks deleted-dir fix | 2.1.81 | Hooks no longer block prompt submission if plugin directory deleted mid-session | Hook deadlock during npm run build |
| Invisible hook attachment fix | 2.1.81 | Hook attachments no longer inflate message count in transcript mode | Inflated session analytics from hook overhead |
| MCP tool call collapse | 2.1.81 | MCP read/search calls collapse to single "Queried {server}" line (Ctrl+O to expand) | Verbose MCP tool output |
showClearContextOnPlanAccept | 2.1.81 | Plan mode hides "clear context" by default; restorable via setting | "Clear context" shown on every plan accept |
| Concurrent session re-auth fix | 2.1.81 | Multiple CC sessions no longer require repeated re-authentication | Re-auth when one session refreshes OAuth |
| Dashed-string permission fix | 2.1.81 | Bash commands with dashes in strings no longer trigger false permission prompts | False positives on dashed strings |
! bash mode discoverability | 2.1.81 | Claude suggests ! prefix for interactive commands automatically | Must know about ! prefix |
| MCP OAuth CIMD/SEP-991 | 2.1.81 | MCP OAuth supports Client ID Metadata Document for servers without DCR | Limited MCP OAuth compatibility |
| Node.js 18 crash fix | 2.1.81 | Fixed crash on Node.js 18 | Crash on Node.js 18 |
| Windows line-by-line streaming disabled | 2.1.81 | Disabled line-by-line streaming on Windows/WSL due to rendering issues | Rendering glitches on Windows |
| Remote Control fixes (4) | 2.1.81 | Session titles, /rename sync, /exit archiving, first-prompt titles fixed | Generic titles, unreliable archiving |
| Voice mode fixes (2) | 2.1.81 | Retry failure messages and WebSocket recovery fixed | Misleading errors, dropped audio |
managed-settings.d/ drop-in directory | 2.1.83 | Separate teams deploy independent policy fragments, merged alphabetically | Single monolithic managed-settings.json |
CwdChanged hook event | 2.1.83 | Reactive hooks on working directory change (direnv-like) | No cwd change detection |
FileChanged hook event | 2.1.83 | Reactive hooks on file changes (cache invalidation, tamper detection) | No file change detection |
sandbox.failIfUnavailable | 2.1.83 | Fail-fast when sandbox unavailable instead of running unsandboxed | Silently falls back to unsandboxed |
CLAUDE_CODE_SUBPROCESS_ENV_SCRUB | 2.1.83 | Strip Anthropic/cloud creds from subprocess environments | Creds inherited by subprocesses |
Agent initialPrompt frontmatter | 2.1.83 | Auto-submit first turn on agent spawn, zero-wasted-turn bootstrap | Agents idle on spawn until first interaction |
Plugin userConfig with sensitive:true | 2.1.83 | Plugin config at enable time, keychain storage for sensitive values | Plain env vars for all secrets |
TaskOutput deprecated | 2.1.83 | Use Read on background task output file instead | TaskOutput still functional but deprecated |
--bare -p 14% faster | 2.1.83 | Faster eval pipeline startup | Slower --bare startup |
| Background agent compaction fix | 2.1.83 | Background agents no longer become invisible after compaction | Duplicate agents spawned post-compaction |
| Background agent stuck state fix | 2.1.83 | Background tasks no longer stuck "running" when git/API hangs | Stuck tasks require manual cleanup |
| Uninstalled plugin hooks fix | 2.1.83 | Hooks stop firing immediately after plugin uninstall | Stale hooks fire until next session |
Transcript search (/ in Ctrl+O) | 2.1.83 | Search through transcript with n/N stepping | No transcript search |
| Plugin disk cache startup | 2.1.83 | Commands/skills/agents load from cache without re-fetching | Slower startup from disk walks |
| Plugin MCP dedup | 2.1.83 | Plugin MCP servers duplicating org connectors are suppressed | Duplicate MCP connections |
TaskCreated hook event | 2.1.84 | Task initialization tracking, metadata injection, dependency validation | No hook on task creation |
WorktreeCreate type: "http" | 2.1.84 | Return worktree path via hookSpecificOutput.worktreePath for API-driven orchestration | Command hooks only |
paths: YAML glob list (skills/rules) | 2.1.84 | Auto-load relevant files when skill activates; 15+ skills use this | Manual Read calls for context |
ANTHROPIC_DEFAULT_\{OPUS,SONNET,HAIKU\}_MODEL_SUPPORTS | 2.1.84 | Override effort/thinking capability detection for Bedrock/Vertex/Foundry | Incorrect capability detection on 3P |
ANTHROPIC_DEFAULT_*_MODEL_NAME/_DESCRIPTION | 2.1.84 | Customize /model picker labels for custom deployments | Generic model labels |
CLAUDE_STREAM_IDLE_TIMEOUT_MS | 2.1.84 | Configurable streaming idle watchdog (default 90s, OrchestKit sets 180s) | Fixed 90s timeout kills long agents |
allowedChannelPlugins managed setting | 2.1.84 | Enterprise admin plugin allowlist for channel plugins | No channel plugin governance |
x-client-request-id header | 2.1.84 | API request correlation ID for debugging timeouts | No request-level tracing |
| PowerShell tool (Windows opt-in) | 2.1.84 | Native PowerShell as alternative to Git Bash on Windows | Git Bash only on Windows |
| MCP tool description 2KB cap | 2.1.84 | Prevents OpenAPI-generated servers from bloating context | Unbounded MCP tool descriptions |
| MCP server deduplication | 2.1.84 | Local MCP config wins over claude.ai connectors | Duplicate MCP connections |
Workflow subagent json-schema fix | 2.1.84 | Outer session + subagent both specifying schema no longer 400s | API 400 on nested json-schema |
| System-prompt caching + ToolSearch | 2.1.84 | Global caching works when ToolSearch enabled (incl. MCP users) | Cache misses with ToolSearch |
| Idle-return prompt (75+ min) | 2.1.84 | Nudges /clear after 75+ minutes idle, reduces stale token re-caching | No idle session detection |
owner/repo#123 link format | 2.1.84 | Bare #123 no longer auto-linked; must use owner/repo#123 | Bare #123 was auto-linked |
| Improved startup parallelism (30ms) | 2.1.84 | setup() runs in parallel with slash command and agent loading | Sequential startup |
| MCP startup non-blocking | 2.1.84 | REPL renders immediately, MCP servers connect in background | REPL blocked until all MCP servers connect |
| Background bash stuck notification | 2.1.84 | Tasks stuck on interactive prompt surface notification after ~45s | Stuck tasks hang silently |
| MCP cache leak fix on reconnect | 2.1.84 | Tool/resource cache properly cleaned on server reconnect | Memory leak on MCP reconnect |
p90 prompt cache rate improvement | 2.1.84 | Better prompt caching across sessions | Lower cache hit rate |
| PreToolUse for AskUserQuestion | 2.1.85 | Headless AskUserQuestion responder hooks | No hook on AskUserQuestion |
| Config disk write fix | 2.1.86 | Eliminates unnecessary config writes on every skill invocation | Unnecessary disk I/O per skill |
| Write/Edit outside project root | 2.1.86 | Write/Edit fix for files outside project root | Write/Edit fails for external files |
PermissionDenied hook event | 2.1.88 | Fires after auto mode classifier denials, supports \{retry: true\} | No hook on permission denials |
permissionMode: "auto" | 2.1.88 | Classifier-based approval replaces interactive prompts | Interactive permission prompts |
file_path always absolute | 2.1.88 | PreToolUse/PostToolUse file_path always absolute for Write/Edit/Read | Relative paths possible |
Compound if matching | 2.1.88 | Hook if conditions match compound commands and env-var prefixes | Only simple command matching |
CLAUDE_CODE_NO_FLICKER=1 | 2.1.88 | Flicker-free alt-screen rendering with virtualized scrollback | Default rendering |
"defer" permission decision | 2.1.89 | PreToolUse hooks return decision:"defer" to pause headless sessions | Only allow/deny/ask |
TaskCreated hook blocking | 2.1.89 | TaskCreated hook fires with documented blocking behavior | TaskCreated (2.1.84) without blocking docs |
MCP_CONNECTION_NONBLOCKING=true | 2.1.89 | Skip MCP connection wait in -p mode, bounded at 5s | Blocks on slowest MCP server |
| Named subagent typeahead | 2.1.89 | Named subagents appear in @ mention typeahead | Only file names in typeahead |
| Hook output disk spill | 2.1.89 | Hook output >50K chars saved to disk with file path + preview | Full output injected into context |
| Edit after Bash view | 2.1.89 | Edit works on files viewed via sed -n/cat without Read | Must Read before Edit |
| Symlink permission check | 2.1.89 | Edit/Read allow rules check resolved symlink target | Only requested path checked |
/powerup interactive lessons | 2.1.90 | Interactive feature tutorials with animated demos | No built-in learning tools |
CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE | 2.1.90 | Keep marketplace cache when git pull fails (offline support) | Marketplace cache lost on git failure |
.husky protected directory | 2.1.90 | .husky added to protected dirs in acceptEdits mode | .husky writable in acceptEdits |
| PreToolUse exit code 2 JSON fix | 2.1.90 | Hooks emitting JSON to stdout with exit code 2 now correctly block | Exit code 2 JSON silently ignored |
| Format-on-save hook fix | 2.1.90 | Edit/Write no longer fail when PostToolUse format-on-save rewrites file | "File content has changed" error |
--resume prompt cache fix | 2.1.90 | --resume no longer causes full prompt-cache miss with deferred tools/MCP | Full cache miss on resume |
| MCP schema cache perf | 2.1.90 | Eliminated per-turn JSON.stringify of MCP tool schemas | Redundant serialization per turn |
| SSE linear transport perf | 2.1.90 | SSE transport handles large frames in linear time (was quadratic) | Quadratic SSE processing |
| Transcript write perf | 2.1.90 | Long conversations no longer slow down quadratically on transcript writes | Quadratic transcript slowdown |
--resume hides -p sessions | 2.1.90 | Resume picker no longer shows claude -p or SDK sessions | -p sessions in resume picker |
| DNS cache auto-allow removed | 2.1.90 | Get-DnsClientCache and ipconfig /displaydns removed from auto-allow | DNS cache commands auto-allowed |
MCP _meta result size override | 2.1.91 | _meta["anthropic/maxResultSizeChars"] annotation (up to 500K) — mcp-output-transform respects it | Large MCP results always truncated at 2000 chars |
disableSkillShellExecution | 2.1.91 | Setting disables inline shell in skills/commands/plugins | Shell execution always enabled |
Plugin bin/ executables | 2.1.91 | Plugins ship executables under bin/ invokable as bare Bash commands | Must use full paths to plugin scripts |
| Deep link multiline prompts | 2.1.91 | claude-cli://open?q= supports %0A encoded newlines | Multi-line deep links rejected |
| Edit tool shorter anchors | 2.1.91 | Edit uses shorter old_string anchors, reducing output tokens | Longer anchors, more output tokens |
--resume transcript chain fix | 2.1.91 | Async transcript write failures no longer lose conversation history | History loss on async write failure |
permissions.defaultMode:"auto" validation | 2.1.91 | JSON schema validates auto as permission mode | auto accepted but could cause issues |
| Plan mode remote session fix | 2.1.91 | Plan file retained after container restart in remote sessions | Plan lost after container restart |
forceRemoteSettingsRefresh policy | 2.1.92 | Fail-closed startup: blocks until remote managed settings fetched, exits on failure | Stale managed settings on startup |
Stop hook preventContinuation fix | 2.1.92 | prompt-type Stop hooks no longer fail when small fast model returns ok:false; preventContinuation:true restored | Stop hooks could incorrectly fail |
| Tool input JSON-string streaming fix | 2.1.92 | Array/object tool_input fields no longer emitted as JSON-encoded strings during streaming | PreToolUse hooks receive malformed tool_input |
| Plugin MCP stuck "connecting" fix | 2.1.92 | Plugin MCP servers no longer stuck connecting when duplicating unauthenticated claude.ai connectors | MCP servers hang on session start |
| Write tool diff perf | 2.1.92 | 60% faster diff computation for large files with tabs/&/$ characters | Slower Write tool on large files |
| Remote Control hostname prefix | 2.1.92 | Session names default to hostname prefix, overridable with --remote-control-session-name-prefix | Generic session names |
Per-model /cost breakdown | 2.1.92 | /cost shows per-model and cache-hit breakdown for subscription users | Aggregate cost only |
/tag command removed | 2.1.92 | Removed — no OrchestKit references | N/A |
/vim command removed | 2.1.92 | Removed — toggle via /config → Editor mode | N/A |
| Subagent tmux pane fix | 2.1.92 | Subagent spawning no longer fails after tmux windows killed/renumbered | "Could not determine pane count" error |
| Prompt cache expiry hint | 2.1.92 | Pro users see uncached token count when returning after cache expires | No cache expiry visibility |
| Skill frontmatter hooks fix | 2.1.94 | 20 OrchestKit skill context loaders (assess, implement, verify, brainstorm, review-pr, fix-issue, doctor, explore, cover, setup, commit, quality-gates, visualize-plan, release-checklist, code-review-playbook) declared via hooks: in SKILL.md frontmatter now fire — previously silently ignored | All 20 skill context loaders dead — skills run without their primed context (much worse UX) |
hookSpecificOutput.sessionTitle | 2.1.94 | unified-dispatcher sets session title from branch/effort/skill context — visible in prompt bar and remote sessions | Sessions use auto-generated names |
keep-coding-instructions frontmatter | 2.1.94 | Plugin output styles preserve coding instructions when set true | Output styles may strip coding guidance |
| Plugin skill name stability | 2.1.94 | "skills": ["./"] uses frontmatter name for invocation, stable across install methods | Invocation name depends on directory basename |
$\{CLAUDE_PLUGIN_ROOT\} local-marketplace fix | 2.1.94 | Resolves to installed cache (not marketplace source) for local-marketplace plugins | File lookups point at wrong directory |
| Plugin hooks CLAUDE_PLUGIN_ROOT fix | 2.1.94 | Plugin hooks no longer fail with "No such file or directory" when env var unset | Hooks fail cold-start on some platforms |
Default effort high | 2.1.94 | Default effort level is high for API-key/Bedrock/Vertex/Foundry/Team/Enterprise users (use /effort low or /effort medium to reduce) | Default medium — token budgets scaled conservatively |
| 429 rate-limit surface | 2.1.94 | Agents no longer stuck after 429 with long Retry-After — error surfaces immediately | Agents appear stuck, silent wait |
| SDK/print mode partial response fix | 2.1.94 | Preserves partial assistant response on interrupt mid-stream | Partial responses lost, breaks bare-eval/eval-runner |
--resume across worktrees | 2.1.94 | Resume sessions from other worktrees of the same repo directly (was: print cd command) | Must cd manually to resume worktree session |
| CJK/multibyte stream-json fix | 2.1.94 | No U+FFFD corruption when chunk boundaries split UTF-8 sequences | International content corrupted in stream-json |
| Amazon Bedrock via Mantle | 2.1.94 | Opt in with CLAUDE_CODE_USE_MANTLE=1 | Standard Bedrock only |
| Bedrock bearer token 403 fix | 2.1.96 | Fixed 403 "Authorization header is missing" regression when using AWS_BEARER_TOKEN_BEDROCK or CLAUDE_CODE_SKIP_BEDROCK_AUTH (regression in 2.1.94) | Bedrock bearer-token auth broken on 2.1.94 |
| MCP tool description 2KB cap | 2.1.95 | Tool descriptions and server instructions capped at 2KB — prevents OpenAPI-generated MCP servers from bloating context | Verbose MCP descriptions consume unbounded context |
| MCP local config dedup | 2.1.95 | MCP servers configured both locally and via claude.ai connectors are deduplicated, local config wins | Duplicate MCP tools from both sources |
Focus view toggle (Ctrl+O) | 2.1.97 | Condensed view in NO_FLICKER mode: prompt, one-line tool summary with edit diffstats, final response | No condensed view option |
refreshInterval status line | 2.1.97 | New setting re-runs the status line command every N seconds automatically | Status line only updates per turn |
workspace.git_worktree | 2.1.97 | Boolean in status line JSON input, set when cwd is inside a linked git worktree | Must shell out to detect worktree |
● N running in /agents | 2.1.97 | Live subagent instance count next to each agent type | No live agent count |
| Stop/SubagentStop long-session fix | 2.1.97 | prompt-type Stop/SubagentStop hooks no longer fail on long sessions; hook evaluator shows actual error | Hooks fail silently on long sessions |
| Subagent worktree/cwd leak fix | 2.1.97 | Subagents with worktree isolation or cwd: override no longer leak working directory back to parent Bash tool | Parent inherits child's cwd |
claude plugin update fix | 2.1.97 | No longer reports "already at latest" for git-based marketplace plugins when remote has newer commits | Users stuck on stale plugin versions |
| YAML boolean skill name fix | 2.1.97 | Slash command picker no longer breaks when plugin frontmatter name is a YAML boolean keyword | Skills named true/false/yes/no break picker |
| Bash permissions hardened | 2.1.97 | Tighter env-var prefix checks and network redirect validation, fewer false prompts on common commands | Looser Bash permission checks |
| Accept Edits env-prefix auto-approve | 2.1.97 | Auto-approves filesystem commands prefixed with safe env vars or process wrappers (e.g. LANG=C rm foo) | Env-prefixed commands always prompt |
sandbox.network.allowMachLookup macOS | 2.1.97 | Now actually takes effect on macOS | Setting ignored on macOS |
| MCP HTTP/SSE memory leak fix | 2.1.97 | Connections no longer accumulate ~50 MB/hr of unreleased buffers on reconnect | Memory leak on MCP reconnect |
| MCP OAuth metadata URL fix | 2.1.97 | oauth.authServerMetadataUrl honored on token refresh after restart (fixes ADFS) | Token refresh ignores custom auth URL |
| 429 retry exponential backoff | 2.1.97 | Exponential backoff applied as minimum instead of burning all attempts in ~13s | Retries exhaust quickly |
/resume picker fixes | 2.1.97 | --resume <name> editable, Ctrl+A reload preserves search, task-status text fixed, cross-project staleness | Multiple resume UX bugs |
| Resume large file diff fix | 2.1.97 | File-edit diffs no longer disappear on --resume for files >10KB | Diffs lost for large files |
| Compaction subagent transcript dedup | 2.1.97 | No longer writes duplicate multi-MB subagent transcripts on prompt-too-long retries | Transcript bloat on long sessions |
| Prototype property settings.json fix | 2.1.97 | Permission rules with names matching JS prototype properties (toString, constructor) no longer cause settings.json to be silently ignored | Named rules can break entire config |
| Image compression parity | 2.1.97 | Pasted/attached images compressed to same token budget as Read tool images | Pasted images use more tokens than Read |
| Bash OTEL TRACEPARENT | 2.1.97 | Subprocesses inherit W3C TRACEPARENT env var when OTEL tracing is enabled | No trace propagation to subprocesses |
| Managed-settings removal fix | 2.1.97 | Allow rules removed by admin take effect without process restart | Stale rules until restart |
additionalDirectories mid-session | 2.1.97 | permissions.additionalDirectories changes in settings apply mid-session | Changes require restart |
| Bridge session git info | 2.1.97 | Bridge sessions show local git repo, branch, and working directory on claude.ai session card | No git context on bridge card |
| Transcript size optimization | 2.1.97 | Skip empty hook entries and cap stored pre-edit file copies | Larger transcripts |
Version Detection
The doctor skill checks the CC version at runtime:
# CC reports version via environment or CLI
claude --version # Returns e.g. "2.1.47"Compatibility Levels
| CC Version | Support Level | Description |
|---|---|---|
| < 2.1.7 | Unsupported | Core hook protocol missing |
| 2.1.7 - 2.1.44 | Degraded | Missing memory improvements, worktree fixes, Windows support |
| 2.1.45 - 2.1.46 | Partial | Missing 2.1.47 features but functional |
| 2.1.47 - 2.1.49 | Partial | All hook features, memory leak risk in long sessions |
| 2.1.50 - 2.1.58 | Partial | Memory leaks fixed, missing auto-memory and @imports |
| 2.1.59 - 2.1.62 | Partial | Auto-memory, @imports, missing HTTP hooks and 2.1.69 features |
| 2.1.63 - 2.1.68 | Partial | HTTP hooks, worktree config sharing, missing InstructionsLoaded/once:true/ask |
| >= 2.1.69 | Full | InstructionsLoaded, once:true, outputAsk, path-scoped rules |
| >= 2.1.72 | Full | ExitWorktree, agent model override, effort simplification, prompt cache 12x |
| >= 2.1.76 | Full | MCP elicitation, PostCompact hook, /effort command |
| >= 2.1.78 | Full | StopFailure event, CLAUDE_PLUGIN_DATA, agent effort/maxTurns frontmatter |
| >= 2.1.80 | Full | rate_limits in StatusLine, skill effort frontmatter, --channels preview |
| >= 2.1.83 | Full | CwdChanged/FileChanged events, managed-settings.d/, sandbox.failIfUnavailable |
| >= 2.1.84 | Full | TaskCreated event, paths: glob, CLAUDE_STREAM_IDLE_TIMEOUT_MS, MCP non-blocking startup |
| >= 2.1.85 | Full | PreToolUse for AskUserQuestion, headless responder hooks |
| >= 2.1.86 | Full | Config disk write fix, Write/Edit outside project root |
| >= 2.1.75 | Full++++++ | 1M context default, memory timestamps, hook source display, token estimation fix |
| >= 2.1.76 | Full+++++++ | PostCompact hook, Elicitation hooks, worktree.sparsePaths, /effort, bg agent partial results |
| >= 2.1.77 | Full++++++++ | 64k/128k output, allowRead sandbox, plugin validate, SendMessage auto-resume, PreToolUse deny fix |
| >= 2.1.78 | Full+++++++++ | StopFailure hooks, CLAUDE_PLUGIN_DATA, agent frontmatter, plugin validate, worktree skills fix |
| >= 2.1.79 | Full++++++++++ | --console auth, /remote-control, multi-dir PLUGIN_SEED_DIR, turn duration toggle |
| >= 2.1.80 | Full+++++++++++ | rate_limits statusline, effort frontmatter, --channels, source:settings marketplace, --resume parallel fix |
| >= 2.1.81 | Full++++++++++++ | --bare eval mode, --channels permission relay, plugin re-clone freshness, worktree resume, bg agent race fix |
| >= 2.1.83 | Full+++++++++++++ | managed-settings.d/, CwdChanged/FileChanged hooks, sandbox.failIfUnavailable, initialPrompt, userConfig, env scrub |
| >= 2.1.84 | Full++++++++++++++ | TaskCreated hook, WorktreeCreate HTTP, paths: globs, ANTHROPIC_DEFAULT_*, stream timeout, MCP 2KB cap, json-schema fix |
| >= 2.1.88 | Full+++++++++++++++ | PermissionDenied hook, auto permission mode, absolute file_path, compound if matching, NO_FLICKER |
| >= 2.1.89 | Full++++++++++++++++ | defer permission, TaskCreated blocking, MCP_CONNECTION_NONBLOCKING, named subagent typeahead, hook disk spill |
| >= 2.1.90 | Full+++++++++++++++++ | /powerup, PLUGIN_KEEP_MARKETPLACE, .husky protected, exit code 2 fix, format-on-save fix, 3x perf |
| >= 2.1.91 | Full | MCP result size override, disableSkillShellExecution, plugin bin/, Edit shorter anchors, transcript fix |
| >= 2.1.92 | Full | forceRemoteSettingsRefresh, Stop hook preventContinuation fix, tool input JSON-string fix, Write perf, tmux pane fix |
| >= 2.1.94 | Minimum | Skill frontmatter hooks fix (unlocks 20 context loaders), sessionTitle hook output, keep-coding-instructions, default effort high, rate-limit 429 surface, --resume across worktrees, CJK stream-json fix — current minimum |
| >= 2.1.95 | Full | MCP tool description 2KB cap, local MCP config dedup (npm-only release) |
| >= 2.1.96 | Full | Bedrock bearer token 403 hotfix (2.1.94 regression) |
| >= 2.1.97 | Recommended | refreshInterval status line, workspace.git_worktree, Stop/SubagentStop long-session fix, subagent cwd leak fix, plugin update fix, Bash permissions hardened, TRACEPARENT OTEL, image compression parity, 429 exponential backoff, MCP memory leak fix, transcript optimization |
Doctor Check Implementation
The doctor skill validates CC version in category 10:
Claude Code: 2.1.47 (OK)
- Minimum required: 2.1.47When CC version is below 2.1.47, doctor should show:
Claude Code: 2.1.44 (DEGRADED)
- Minimum required: 2.1.47
- Missing features:
- last_assistant_message (Stop/SubagentStop context)
- added_dirs (multi-directory support)
- Windows hook execution
- Worktree discovery
- Deferred SessionStart
- Upgrade: npm install -g @anthropic-ai/claude-code@latestMemory Leak Warning (CC < 2.1.50)
CC 2.1.50 fixed 8 memory leaks affecting long-running sessions:
- Agent teams: completed teammate tasks never garbage collected
- Task state objects never removed from AppState
- TaskOutput retained data after cleanup
- CircularBuffer cleared items retained in backing array
- Shell execution: ChildProcess/AbortController refs retained after cleanup
- LSP diagnostic data never cleaned up after delivery
- File history snapshots: unbounded growth
- Internal caches not cleared after compaction (fixed in 2.1.63)
Recommendation: If CC version < 2.1.50, warn user to upgrade for long sessions.
Doctor should display when CC < 2.1.50:
Claude Code: 2.1.4x (MEMORY LEAK RISK)
- 8 memory leaks fixed in 2.1.50 affect long-running sessions
- Symptoms: increasing memory usage, slower responses over time
- Upgrade: npm install -g @anthropic-ai/claude-code@latestRelease Channel Detection
Doctor should detect and display the release channel alongside the CC version check. The version is read from .claude-plugin/plugin.json or version.txt.
| Version Pattern | Channel | Stability |
|---|---|---|
X.Y.Z (no suffix) | stable | Production-ready |
X.Y.Z-beta.N | beta | Feature-complete, may have bugs |
X.Y.Z-alpha.N | alpha | Experimental, expect breaking changes |
When on beta or alpha, doctor should append a pre-release reminder to the compatibility output:
Claude Code: 2.1.56 (OK)
- Minimum required: 2.1.56
- OrchestKit channel: beta (v7.0.0-beta.3)
⚠ Pre-release version — some features may be unstable. Report issues at github.com/yonatangross/orchestkit/issuesOn stable, no extra warning is needed — just include the channel line:
Claude Code: 2.1.56 (OK)
- Minimum required: 2.1.56
- OrchestKit channel: stable (v7.0.0)OrchestKit Version History
| OrchestKit | Min CC | Key Changes |
|---|---|---|
| v7.38.x | 2.1.101 | CC 2.1.101 adoption + frontmatter audit: 26 skill frontmatter fixes (context/agent fields now enforced), deny-overrides-ask behavior, subagent dynamic MCP inheritance, worktree agent file access, /team-onboarding command, OS CA cert trust, focus mode self-contained summaries, RemoteTrigger run fix, settings resilience, 18 new matrix entries (253 total) |
| v7.37.x | 2.1.98 | CC 2.1.98 adoption: Monitor tool for streaming background events, SCRIPT_CAPS env var, partial progress from failed bg subagents, hook stderr in transcript, /agents tabbed layout, /reload-plugins skill discovery, Bash permission hardening (backslash escape fix, compound cmd fix), stale worktree cleanup fix, team permission inheritance, Vertex AI wizard, Perforce mode |
| v7.33.x | 2.1.97 | CC 2.1.97 full utilization: refreshInterval status line, workspace.git_worktree awareness, TRACEPARENT OTEL tracing to HQ, Stop/SubagentStop long-session fix, subagent cwd leak fix, MCP 2KB cap guardrail, image compression parity, Bash permissions hardened, Accept Edits env-prefix, plugin update fix, prototype settings.json fix |
| v7.30.x | 2.1.94 | Skill frontmatter hooks unlock (20 context loaders activated), sessionTitle on UserPromptSubmit, keep-coding-instructions, default effort high adaptation, --resume across worktrees, CJK stream-json fix, Bedrock bearer token 2.1.96 hotfix |
| v7.29.x | 2.1.92 | forceRemoteSettingsRefresh policy, Stop hook preventContinuation fix, tool input JSON-string fix, plugin MCP dedup fix, Write perf 60%, /tag + /vim removed, MCP result size override, disableSkillShellExecution, plugin bin/, Edit shorter anchors |
| v7.27.x | 2.1.90 | /powerup, PLUGIN_KEEP_MARKETPLACE, .husky protected, exit code 2 fix, format-on-save fix, 3x perf improvements |
| v7.24.x | 2.1.84 | TaskCreated hook, WorktreeCreate HTTP, paths: glob lists, ANTHROPIC_DEFAULT_* env vars, stream idle timeout, json-schema fix |
| v7.23.x | 2.1.83 | managed-settings.d/, CwdChanged/FileChanged hooks, sandbox.failIfUnavailable, initialPrompt, userConfig sensitive, env scrub |
| v7.15.x | 2.1.80 | effort frontmatter, rate_limits statusline, --channels, source:settings, simplified plugin tips |
| v7.14.x | 2.1.79 | --console auth, /remote-control, multi-dir PLUGIN_SEED_DIR, turn duration toggle |
| v7.14.x | 2.1.78 | StopFailure hooks, CLAUDE_PLUGIN_DATA, agent frontmatter, plugin validate, worktree skills fix |
| v7.12.x | 2.1.77 | 64k/128k output, allowRead sandbox, plugin validate, SendMessage auto-resume, PreToolUse deny fix |
| v7.8.x | 2.1.76 | PostCompact hook, Elicitation hooks, sparse paths, /effort, bg agent partial results |
| v7.7.x | 2.1.75 | 1M context default, memory timestamps, hook source display, token estimation fix |
| v7.5.x | 2.1.74 | SessionEnd timeout fix, managed policy precedence, full model IDs, memory fixes |
| v7.4.x | 2.1.73 | Deadlock fix, SessionStart fix, no-op fix, Opus 4.6 cloud default |
| v7.1.x | 2.1.69 | InstructionsLoaded, once:true loaders, outputAsk, env var HTTP hooks, worktree dedup |
| v7.0.x | 2.1.59 | Auto-memory, @imports, ConfigChange, HTTP hooks (2.1.63+), unified plugin |
| v6.0.x | 2.1.47 | Full CC 2.1.47 adoption, relaxed context limits |
| v5.x | 2.1.34 | Agent Teams support, unified dispatchers |
| v4.x | 2.1.9 | Session tracking, TypeScript hooks |
Distributed Systems
Distributed systems patterns for locking, resilience, idempotency, and rate limiting. Use when implementing distributed locks, circuit breakers, retry policies, idempotency keys, token bucket rate limiters, or fault tolerance patterns.
Documentation Patterns
Technical documentation patterns for READMEs, ADRs, API docs (OpenAPI 3.1), changelogs, and writing style guides. Use when creating project documentation, writing architecture decisions, documenting APIs, or maintaining changelogs.
Last updated on