oh-my-customcode 0.24.1 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -122,6 +122,7 @@ Claude Code selects the appropriate model and parallelizes independent tasks (up
122
122
  | **Architecture** | 2 | arch-documenter, arch-speckit-agent |
123
123
  | **Infrastructure** | 2 | infra-docker-expert, infra-aws-expert |
124
124
  | **QA** | 3 | qa-planner, qa-writer, qa-engineer |
125
+ | **Security** | 1 | sec-codeql-expert |
125
126
  | **Total** | **42** | |
126
127
 
127
128
  ### Skills (66)
@@ -138,6 +139,8 @@ Claude Code selects the appropriate model and parallelizes independent tasks (up
138
139
  | **Operations** | 7 | update-docs, update-external, audit-agents, fix-refs, sauron-watch, monitoring-setup, claude-code-bible |
139
140
  | **Utilities** | 5 | lists, help, status, result-aggregation, writing-clearly-and-concisely |
140
141
  | **Quality & Workflow** | 9 | multi-model-verification, structured-dev-cycle, model-escalation, stuck-recovery, dag-orchestration, task-decomposition, worker-reviewer-pipeline, pr-auto-improve, pipeline-guards |
142
+ | **Security** | 2 | cve-triage, jinja2-prompts |
143
+ | **Research** | 1 | research |
141
144
  | **Deploy** | 2 | vercel-deploy, codex-exec |
142
145
  | **External** | 1 | skills-sh-search |
143
146
 
@@ -220,7 +223,7 @@ your-project/
220
223
  ├── rules/ # Behavior rules (18 total)
221
224
  ├── hooks/ # Event hooks (2 total)
222
225
  ├── contexts/ # Context files (4 total)
223
- ├── agents/ # Agent definitions (41 flat .md files)
226
+ ├── agents/ # Agent definitions (42 flat .md files)
224
227
  │ ├── lang-golang-expert.md
225
228
  │ ├── be-fastapi-expert.md
226
229
  │ ├── mgr-creator.md
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-customcode",
3
- "version": "0.24.1",
3
+ "version": "0.30.0",
4
4
  "description": "Batteries-included agent harness for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {
@@ -202,6 +202,16 @@
202
202
  ],
203
203
  "description": "Record agent/task outcomes (success/failure) for model escalation decisions"
204
204
  },
205
+ {
206
+ "matcher": "tool == \"Edit\" || tool == \"Write\" || tool == \"Bash\" || tool == \"Task\" || tool == \"Agent\" || tool == \"Read\" || tool == \"Glob\" || tool == \"Grep\"",
207
+ "hooks": [
208
+ {
209
+ "type": "command",
210
+ "command": "bash .claude/hooks/scripts/context-budget-advisor.sh"
211
+ }
212
+ ],
213
+ "description": "Context budget advisor — track tool usage patterns and advise ecomode activation"
214
+ },
205
215
  {
206
216
  "matcher": "tool == \"Edit\" || tool == \"Write\" || tool == \"Bash\" || tool == \"Task\" || tool == \"Agent\"",
207
217
  "hooks": [
@@ -0,0 +1,86 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+
4
+ # Context Budget Advisor Hook
5
+ # Trigger: PostToolUse (Edit/Write/Agent/Task/Read/Glob/Grep/Bash)
6
+ # Purpose: Monitor context usage and advise ecomode activation based on task type
7
+ # Protocol: stdin JSON -> stdout pass-through, exit 0 always
8
+
9
+ input=$(cat)
10
+
11
+ # Read context info from status file if available
12
+ STATUS_FILE="/tmp/.claude-env-status-${PPID}"
13
+ BUDGET_FILE="/tmp/.claude-context-budget-${PPID}"
14
+
15
+ # Initialize budget tracking file
16
+ if [ ! -f "$BUDGET_FILE" ]; then
17
+ echo "task_type=general" > "$BUDGET_FILE"
18
+ echo "tool_count=0" >> "$BUDGET_FILE"
19
+ echo "write_count=0" >> "$BUDGET_FILE"
20
+ echo "read_count=0" >> "$BUDGET_FILE"
21
+ echo "agent_count=0" >> "$BUDGET_FILE"
22
+ fi
23
+
24
+ # Read current counts
25
+ source "$BUDGET_FILE" 2>/dev/null || true
26
+ tool_count=${tool_count:-0}
27
+ write_count=${write_count:-0}
28
+ read_count=${read_count:-0}
29
+ agent_count=${agent_count:-0}
30
+
31
+ # Determine tool type from input
32
+ TOOL=$(echo "$input" | jq -r '.tool // ""' 2>/dev/null || echo "")
33
+ tool_count=$((tool_count + 1))
34
+
35
+ case "$TOOL" in
36
+ Write|Edit)
37
+ write_count=$((write_count + 1))
38
+ ;;
39
+ Read|Glob|Grep)
40
+ read_count=$((read_count + 1))
41
+ ;;
42
+ Task|Agent)
43
+ agent_count=$((agent_count + 1))
44
+ ;;
45
+ esac
46
+
47
+ # Infer task type based on tool usage pattern
48
+ if [ "$agent_count" -ge 4 ]; then
49
+ task_type="research"
50
+ elif [ "$write_count" -gt "$read_count" ] && [ "$write_count" -ge 5 ]; then
51
+ task_type="implementation"
52
+ elif [ "$read_count" -gt "$write_count" ] && [ "$read_count" -ge 10 ]; then
53
+ task_type="review"
54
+ else
55
+ task_type="general"
56
+ fi
57
+
58
+ # Update budget file
59
+ cat > "$BUDGET_FILE" << EOF
60
+ task_type=${task_type}
61
+ tool_count=${tool_count}
62
+ write_count=${write_count}
63
+ read_count=${read_count}
64
+ agent_count=${agent_count}
65
+ EOF
66
+
67
+ # Determine threshold for current task type
68
+ case "$task_type" in
69
+ research) THRESHOLD=40 ;;
70
+ implementation) THRESHOLD=50 ;;
71
+ review) THRESHOLD=60 ;;
72
+ management) THRESHOLD=70 ;;
73
+ *) THRESHOLD=80 ;;
74
+ esac
75
+
76
+ # Emit advisory at milestones (every 25 tool calls)
77
+ if [ "$tool_count" -gt 0 ] && [ $((tool_count % 25)) -eq 0 ]; then
78
+ echo "[Context Budget] Task: ${task_type} | Threshold: ${THRESHOLD}% | Tools used: ${tool_count}" >&2
79
+ if [ "$tool_count" -ge 75 ]; then
80
+ echo "[Context Budget] ⚠ High tool usage — consider /compact or ecomode" >&2
81
+ fi
82
+ fi
83
+
84
+ # Pass through
85
+ echo "$input"
86
+ exit 0
@@ -50,6 +50,38 @@ if command -v git >/dev/null 2>&1 && git rev-parse --is-inside-work-tree >/dev/n
50
50
  CURRENT_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
51
51
  fi
52
52
 
53
+ # Drift Detection: compare git HEAD between sessions
54
+ DRIFT_STATUS="not-git"
55
+ if command -v git >/dev/null 2>&1 && git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
56
+ SESSION_STATE_DIR="$HOME/.claude/session-state"
57
+ mkdir -p "$SESSION_STATE_DIR"
58
+
59
+ PROJECT_HASH=$(echo "$(pwd)" | md5 2>/dev/null || echo "$(pwd)" | md5sum 2>/dev/null | cut -c1-8)
60
+ # md5 on macOS outputs "MD5 (stdin) = <hash>", extract just the hash
61
+ PROJECT_HASH=$(echo "$PROJECT_HASH" | grep -oE '[a-f0-9]{32}' | cut -c1-8)
62
+ STATE_FILE="${SESSION_STATE_DIR}/${PROJECT_HASH}.last-head"
63
+
64
+ CURRENT_HEAD=$(git log -1 --format="%H" 2>/dev/null || echo "")
65
+
66
+ if [ -n "$CURRENT_HEAD" ]; then
67
+ if [ -f "$STATE_FILE" ]; then
68
+ LAST_HEAD=$(cat "$STATE_FILE" 2>/dev/null || echo "")
69
+ if [ -n "$LAST_HEAD" ] && [ "$LAST_HEAD" != "$CURRENT_HEAD" ]; then
70
+ DRIFT_STATUS="drifted"
71
+ NEW_COMMITS=$(git rev-list --count "${LAST_HEAD}..${CURRENT_HEAD}" 2>/dev/null || echo "?")
72
+ CHANGED_FILES=$(git diff --name-only "${LAST_HEAD}..${CURRENT_HEAD}" 2>/dev/null | head -10)
73
+ else
74
+ DRIFT_STATUS="clean"
75
+ fi
76
+ else
77
+ DRIFT_STATUS="first-session"
78
+ fi
79
+
80
+ # Save current HEAD for next session
81
+ echo "$CURRENT_HEAD" > "$STATE_FILE"
82
+ fi
83
+ fi
84
+
53
85
  # Write status to file for other hooks to reference
54
86
  STATUS_FILE="/tmp/.claude-env-status-${PPID}"
55
87
  cat > "$STATUS_FILE" << ENVEOF
@@ -58,6 +90,7 @@ agent_teams=${AGENT_TEAMS_STATUS}
58
90
  git_branch=${CURRENT_BRANCH}
59
91
  claude_version=${CLAUDE_VERSION}
60
92
  compat_status=${COMPAT_STATUS}
93
+ drift_status=${DRIFT_STATUS}
61
94
  ENVEOF
62
95
 
63
96
  # Report to stderr (visible in conversation)
@@ -78,6 +111,31 @@ else
78
111
  echo " ✓ Feature branch detected" >&2
79
112
  fi
80
113
  echo " Rules: feature branch → commit → push → PR → merge" >&2
114
+ echo "" >&2
115
+
116
+ # Drift Detection report
117
+ echo " [Drift Detection]" >&2
118
+ case "$DRIFT_STATUS" in
119
+ drifted)
120
+ echo " ⚠ Repository changed since last session" >&2
121
+ echo " New commits: ${NEW_COMMITS}" >&2
122
+ if [ -n "${CHANGED_FILES:-}" ]; then
123
+ echo " Changed files:" >&2
124
+ echo "$CHANGED_FILES" | while IFS= read -r file; do
125
+ echo " - ${file}" >&2
126
+ done
127
+ fi
128
+ ;;
129
+ clean)
130
+ echo " ✓ No changes since last session" >&2
131
+ ;;
132
+ first-session)
133
+ echo " First session for this project" >&2
134
+ ;;
135
+ not-git)
136
+ echo " Skipped (not a git repository)" >&2
137
+ ;;
138
+ esac
81
139
  echo "------------------------------------" >&2
82
140
 
83
141
  # Pass through
@@ -19,6 +19,53 @@ Default (no specific agent): `┌─ Agent: claude (default)`
19
19
  For brief responses: `[mgr-creator] Creating agent structure...`
20
20
  With skill: `[fe-vercel-agent → react-best-practices] Analyzing...`
21
21
 
22
+ ## Routing & Skill Context
23
+
24
+ When the orchestrator uses a routing skill, identification should reflect the active context:
25
+
26
+ ```
27
+ ┌─ Agent: claude (secretary-routing)
28
+ ├─ Skill: secretary-routing
29
+ └─ Task: route agent management request
30
+ ```
31
+
32
+ | Context | Identification |
33
+ |---------|---------------|
34
+ | No routing active | `claude (default)` |
35
+ | secretary-routing | `claude (secretary-routing)` |
36
+ | dev-lead-routing | `claude (dev-lead-routing)` |
37
+ | de-lead-routing | `claude (de-lead-routing)` |
38
+ | qa-lead-routing | `claude (qa-lead-routing)` |
39
+ | Skill invocation | `claude → {skill-name}` |
40
+
41
+ ## Skill Invocation Format
42
+
43
+ When the orchestrator invokes a skill via the Skill tool, the skill name MUST be integrated into the identification block — NOT displayed as a separate tool call.
44
+
45
+ ```
46
+ ┌─ Agent: claude → {skill-name}
47
+ └─ Task: {brief-task-description}
48
+ ```
49
+
50
+ ### Common Violations
51
+
52
+ ```
53
+ ❌ WRONG: Skill as separate display
54
+ ┌─ Agent: claude (default)
55
+ └─ Task: research topic analysis
56
+
57
+ Skill(research) ← separate, disconnected
58
+
59
+ ✓ CORRECT: Skill integrated into identification
60
+ ┌─ Agent: claude → research
61
+ └─ Task: research topic analysis
62
+
63
+ ✓ CORRECT: With sub-skill
64
+ ┌─ Agent: claude → research
65
+ ├─ Skill: result-aggregation
66
+ └─ Task: aggregate team findings
67
+ ```
68
+
22
69
  ## When to Display
23
70
 
24
71
  | Situation | Display |
@@ -27,3 +74,4 @@ With skill: `[fe-vercel-agent → react-best-practices] Analyzing...`
27
74
  | Using skill | Include skill name |
28
75
  | General conversation | "claude (default)" |
29
76
  | Long tasks | Show progress with agent context |
77
+ | Skill invocation | Integrated `claude → {skill-name}` format |
@@ -20,6 +20,7 @@ Available when `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` or TeamCreate/SendMessag
20
20
  | Code review + fix cycle | **Agent Teams** | Review → fix → re-review loop |
21
21
  | Single file operations | Agent Tool | Overkill for simple tasks |
22
22
  | Dynamic agent creation + usage | **Agent Teams** | Create → test → iterate cycle |
23
+ | Multi-issue release batch | **Agent Teams** | Shared task tracking, coordinated release |
23
24
 
24
25
  **When Agent Teams is enabled and criteria are met, usage is MANDATORY.**
25
26
 
@@ -41,9 +42,14 @@ BEFORE using Agent tool for 2+ agent tasks, this check is **ENFORCED**:
41
42
  ║ ║
42
43
  ║ 3. Is there a review → fix → re-review cycle? ║
43
44
  ║ YES → MUST use Agent Teams ║
45
+ ║ NO → Check #4 ║
46
+ ║ ║
47
+ ║ 4. Are 2+ issues being fixed in the same release batch? ║
48
+ ║ YES → SHOULD use Agent Teams (coordination benefit) ║
44
49
  ║ NO → Proceed with Agent tool ║
45
50
  ║ ║
46
- ║ Simple rule: 3+ agents OR review cycle → Agent Teams
51
+ ║ Simple rule: 3+ agents OR review cycle → Agent Teams (MUST)
52
+ ║ 2+ issues in same batch → Agent Teams (SHOULD) ║
47
53
  ║ Everything else → Agent tool ║
48
54
  ╚══════════════════════════════════════════════════════════════════╝
49
55
  ```
@@ -122,6 +128,18 @@ When spawning Agent Teams members:
122
128
  Agent(researcher-1) → Analysis 1 ┐
123
129
  Agent(researcher-2) → Analysis 2 ├─ ALL spawned together
124
130
  Agent(researcher-3) → Analysis 3 ┘
131
+
132
+ ❌ WRONG: Multi-issue batch as independent agents
133
+ Agent(general-purpose) → "Fix issue #1"
134
+ Agent(general-purpose) → "Fix issue #2"
135
+ Agent(general-purpose) → "Fix issue #3"
136
+ (no coordination, no shared task tracking)
137
+
138
+ ✓ CORRECT: Agent Teams for multi-issue batches
139
+ TeamCreate("release-fixes")
140
+ TaskCreate for each issue
141
+ Agent(fixer-1) + Agent(fixer-2) + Agent(fixer-3) → team members
142
+ Shared task list tracks progress across all issues
125
143
  ```
126
144
 
127
145
  ## Cost Guidelines
@@ -202,3 +220,5 @@ Agent Teams actively preferred for qualifying collaborative tasks. Use Agent too
202
220
  - Simple independent subtasks
203
221
 
204
222
  Do NOT avoid Agent Teams solely for cost reasons when criteria are met.
223
+
224
+ **Active preference rule**: When Agent Teams is available, default to using it for any multi-step or multi-issue work. Only fall back to Agent tool for truly simple, single-issue tasks with no verification needs.
@@ -35,3 +35,42 @@ Ecomode: `[lang-golang-expert] ✓ src/main.go reviewed: 1 naming issue (handle_
35
35
  ## Override
36
36
 
37
37
  Disable with: "ecomode off", "verbose mode", or "show full details".
38
+
39
+ ## Context Budget Management
40
+
41
+ Task-type-aware context thresholds that trigger ecomode earlier for context-heavy operations.
42
+
43
+ ### Task Type Thresholds
44
+
45
+ | Task Type | Context Trigger | Rationale |
46
+ |-----------|----------------|-----------|
47
+ | Research (/research, multi-team) | 40% | High context consumption from parallel team results |
48
+ | Implementation (code generation) | 50% | Moderate context for code + test output |
49
+ | Review (code review, audit) | 60% | Moderate context for diff analysis |
50
+ | Management (git, deploy, CI) | 70% | Lower context needs |
51
+ | General (default) | 80% | Standard threshold |
52
+
53
+ ### Detection
54
+
55
+ Task type is inferred from active context:
56
+ - **Research**: `/research` skill active, 4+ parallel agents
57
+ - **Implementation**: Write/Edit tools dominant, code files targeted
58
+ - **Review**: Read/Grep dominant, review/audit skill active
59
+ - **Management**: git/gh commands, CI/CD operations
60
+ - **General**: No specific pattern detected
61
+
62
+ ### Budget Advisor Hook
63
+
64
+ The `context-budget-advisor.sh` hook monitors context usage and emits warnings when task-specific thresholds are approached:
65
+
66
+ ```
67
+ [Context Budget] Task: research | Threshold: 40% | Current: 38%
68
+ [Context Budget] ⚠ Approaching budget limit — consider /compact or ecomode
69
+ ```
70
+
71
+ ### Integration
72
+
73
+ - Works with existing ecomode activation (R013)
74
+ - Does NOT override explicit user settings
75
+ - Advisory only — never blocks operations
76
+ - Context percentage from statusline data when available
@@ -38,6 +38,56 @@ Agent frontmatter `memory: project|user|local` enables persistent memory:
38
38
  - Do not store sensitive data or duplicate CLAUDE.md content
39
39
  - Memory write failures should not block main task
40
40
 
41
+ ## Confidence-Tracked Memory
42
+
43
+ Memory entries in MEMORY.md should include confidence annotations to distinguish verified facts from hypotheses.
44
+
45
+ ### Confidence Levels
46
+
47
+ | Level | Tag | Meaning | Example |
48
+ |-------|-----|---------|---------|
49
+ | High | `[confidence: high]` | Verified across multiple sessions or confirmed by user | Architecture decisions, confirmed patterns |
50
+ | Medium | `[confidence: medium]` | Observed pattern, not yet fully verified | Code conventions seen in 2-3 files |
51
+ | Low | `[confidence: low]` | Single observation or hypothesis | First-time discovery, untested assumption |
52
+
53
+ ### Format in MEMORY.md
54
+
55
+ ```
56
+ ### Key Patterns [confidence: high]
57
+ - `.claude/` files are gitignored → always use `git add -f`
58
+ - pre-commit hooks auto-detect README/manifest count mismatches
59
+
60
+ ### Hypotheses [confidence: medium]
61
+ - Template sync might need CI enforcement (seen in 2 PRs)
62
+
63
+ ### Unverified [confidence: low]
64
+ - Possible race condition in parallel hook execution (observed once)
65
+ ```
66
+
67
+ ### Confidence Lifecycle
68
+
69
+ ```
70
+ [low] → observed again → [medium] → confirmed by user/testing → [high]
71
+ [any] → contradicted by evidence → demoted or removed
72
+ ```
73
+
74
+ ### Rules
75
+
76
+ | Rule | Detail |
77
+ |------|--------|
78
+ | New discoveries | Start at `[confidence: low]` unless user explicitly confirms |
79
+ | Cross-session verification | Promote to `[confidence: medium]` when seen in 2+ sessions |
80
+ | User confirmation | Promote to `[confidence: high]` when user confirms or tests pass |
81
+ | Contradiction | Demote or remove when contradicted by new evidence |
82
+ | Default | Entries without tags are treated as `[confidence: high]` (backward compatibility) |
83
+
84
+ ### Integration with Session-End
85
+
86
+ When sys-memory-keeper updates MEMORY.md at session end:
87
+ 1. New findings from this session → `[confidence: low]`
88
+ 2. Findings that match existing entries → promote confidence
89
+ 3. Findings that contradict existing entries → flag for review
90
+
41
91
  ## Session-End Auto-Save
42
92
 
43
93
  ### Trigger
@@ -49,23 +99,63 @@ Session-end detected when user says: "끝", "종료", "마무리", "done", "wrap
49
99
  ```
50
100
  User signals session end
51
101
  → Orchestrator delegates to sys-memory-keeper
52
- → sys-memory-keeper performs dual-system save:
53
- 1. claude-mem save (if available)
54
- 2. episodic-memory verification (if available)
55
- Reports result to orchestrator
102
+ → sys-memory-keeper performs:
103
+ 1. Collect session summary (tasks, decisions, open items)
104
+ 2. Update native auto-memory (MEMORY.md)
105
+ 3. Return formatted summary to orchestrator
106
+ → Orchestrator performs MCP saves directly:
107
+ 1. claude-mem save (if available via ToolSearch)
108
+ 2. episodic-memory verification (if available via ToolSearch)
56
109
  → Orchestrator confirms to user
57
110
  ```
58
111
 
112
+ ### Responsibility Split
113
+
114
+ MCP tools (claude-mem, episodic-memory) are **orchestrator-scoped** and not inherited by subagents. Therefore:
115
+
116
+ | Responsibility | Owner | Reason |
117
+ |----------------|-------|--------|
118
+ | Session summary collection | sys-memory-keeper | Domain expertise in memory formatting |
119
+ | Native auto-memory (MEMORY.md) | sys-memory-keeper | Has Write access to memory directory |
120
+ | claude-mem MCP save | Orchestrator | MCP tools only available at orchestrator level |
121
+ | episodic-memory MCP verification | Orchestrator | MCP tools only available at orchestrator level |
122
+
59
123
  ### Dual-System Save
60
124
 
61
- | System | Tool | Action | Required |
62
- |--------|------|--------|----------|
63
- | claude-mem | `mcp__plugin_claude-mem_mcp-search__save_memory` | Save session summary with project, tasks, decisions | No (best-effort) |
64
- | episodic-memory | `mcp__plugin_episodic-memory_episodic-memory__search` | Verify session is indexed for future retrieval | No (best-effort) |
125
+ | System | Owner | Tool | Action | Required |
126
+ |--------|-------|------|--------|----------|
127
+ | Native auto-memory | sys-memory-keeper | Write | Update MEMORY.md with session learnings | Yes |
128
+ | claude-mem | Orchestrator | `mcp__plugin_claude-mem_mcp-search__save_memory` | Save session summary with project, tasks, decisions | No (best-effort) |
129
+ | episodic-memory | Orchestrator | `mcp__plugin_episodic-memory_episodic-memory__search` | Verify session is indexed for future retrieval | No (best-effort) |
130
+
131
+ ### Session-End Self-Check (MANDATORY)
132
+
133
+ ```
134
+ ╔══════════════════════════════════════════════════════════════════╗
135
+ ║ BEFORE CONFIRMING SESSION-END TO USER: ║
136
+ ║ ║
137
+ ║ 1. Did sys-memory-keeper update MEMORY.md? ║
138
+ ║ YES → Continue ║
139
+ ║ NO → Delegate to sys-memory-keeper first ║
140
+ ║ ║
141
+ ║ 2. Did I attempt claude-mem save? ║
142
+ ║ YES → Continue (even if it failed) ║
143
+ ║ NO → ToolSearch + save now ║
144
+ ║ ║
145
+ ║ 3. Did I attempt episodic-memory verification? ║
146
+ ║ YES → Continue (even if it failed) ║
147
+ ║ NO → ToolSearch + verify now ← THIS IS THE COMMONLY ║
148
+ ║ SKIPPED STEP. DO NOT SKIP IT. ║
149
+ ║ ║
150
+ ║ ALL THREE must be attempted before confirming to user. ║
151
+ ║ "Attempted" means called the tool — failure is OK, skipping ║
152
+ ║ is NOT. ║
153
+ ╚══════════════════════════════════════════════════════════════════╝
154
+ ```
65
155
 
66
156
  ### Failure Policy
67
157
 
68
- - Both saves are **non-blocking**: memory failure MUST NOT prevent session from ending
158
+ - MCP saves are **non-blocking**: memory failure MUST NOT prevent session from ending
69
159
  - If claude-mem unavailable: skip, log warning
70
160
  - If episodic-memory unavailable: skip, log warning
71
161
  - If both unavailable: warn user, proceed with session end
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: research
3
3
  description: 10-team parallel deep analysis with cross-verification for any topic, repository, or technology. Use when user invokes /research or asks for comprehensive research.
4
- context: fork
5
4
  user-invocable: true
6
5
  ---
7
6
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.24.1",
2
+ "version": "0.30.0",
3
3
  "lastUpdated": "2026-03-09T00:00:00.000Z",
4
4
  "components": [
5
5
  {