oh-my-customcodex 0.5.3 → 0.5.5

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.
Files changed (39) hide show
  1. package/README.md +2 -2
  2. package/dist/cli/index.js +1 -1
  3. package/dist/index.js +1 -1
  4. package/package.json +1 -1
  5. package/templates/.claude/agents/mgr-claude-code-bible.md +4 -0
  6. package/templates/.claude/agents/mgr-sauron.md +4 -0
  7. package/templates/.claude/agents/mgr-supplier.md +4 -0
  8. package/templates/.claude/agents/mgr-updater.md +4 -0
  9. package/templates/.claude/agents/sys-memory-keeper.md +10 -0
  10. package/templates/.claude/agents/sys-naggy.md +4 -0
  11. package/templates/.claude/hooks/hooks.json +10 -0
  12. package/templates/.claude/hooks/scripts/feedback-collector.sh +1 -1
  13. package/templates/.claude/hooks/scripts/r007-r008-drift-advisor.sh +106 -0
  14. package/templates/.claude/hooks/scripts/session-env-check.sh +6 -2
  15. package/templates/.claude/rules/MAY-optimization.md +15 -0
  16. package/templates/.claude/rules/MUST-continuous-improvement.md +2 -0
  17. package/templates/.claude/rules/MUST-enforcement-policy.md +1 -0
  18. package/templates/.claude/rules/MUST-intent-transparency.md +17 -0
  19. package/templates/.claude/skills/codex-exec/SKILL.md +1 -1
  20. package/templates/.claude/skills/omcodex-auto-improve/SKILL.md +2 -2
  21. package/templates/.claude/skills/omcodex-feedback/SKILL.md +2 -2
  22. package/templates/.claude/skills/pipeline/SKILL.md +44 -0
  23. package/templates/.claude/skills/pipeline-guards/SKILL.md +20 -0
  24. package/templates/.claude/skills/post-release-followup/SKILL.md +35 -31
  25. package/templates/.claude/skills/reasoning-sandwich/SKILL.md +21 -0
  26. package/templates/.claude/skills/release-plan/SKILL.md +26 -26
  27. package/templates/.claude/skills/skills-sh-search/SKILL.md +10 -9
  28. package/templates/.claude/skills/update-external/SKILL.md +7 -0
  29. package/templates/.claude/skills/wiki/SKILL.md +2 -0
  30. package/templates/AGENTS.md.en +1 -1
  31. package/templates/AGENTS.md.ko +1 -1
  32. package/templates/CLAUDE.md +1 -1
  33. package/templates/CLAUDE.md.en +1 -1
  34. package/templates/CLAUDE.md.ko +1 -1
  35. package/templates/README.md +2 -2
  36. package/templates/guides/agentmemory-migration/measure-step-zero.md +120 -0
  37. package/templates/guides/agentmemory-migration/phase-1-coexist.md +261 -0
  38. package/templates/guides/index.yaml +21 -11
  39. package/templates/manifest.json +3 -3
package/README.md CHANGED
@@ -228,7 +228,7 @@ Key rules: R010 (orchestrator never writes files), R009 (parallel execution mand
228
228
 
229
229
  ---
230
230
 
231
- ### Guides (50)
231
+ ### Guides (51)
232
232
 
233
233
  Reference documentation covering best practices, architecture decisions, and integration patterns. Located in `guides/` at project root, covering topics from agent design to CI/CD to observability.
234
234
 
@@ -288,7 +288,7 @@ your-project/
288
288
  │ └── ontology/ # Knowledge graph for RAG
289
289
  ├── .agents/
290
290
  │ └── skills/ # 123 installed skill modules
291
- └── guides/ # 50 reference documents
291
+ └── guides/ # 51 reference documents
292
292
  ```
293
293
 
294
294
  ### Source Repository And Compatibility Surfaces
package/dist/cli/index.js CHANGED
@@ -3091,7 +3091,7 @@ var init_package = __esm(() => {
3091
3091
  workspaces: [
3092
3092
  "packages/*"
3093
3093
  ],
3094
- version: "0.5.3",
3094
+ version: "0.5.5",
3095
3095
  requiresCC: ">=2.1.121",
3096
3096
  claudeCode: {
3097
3097
  minimumVersion: "2.1.121",
package/dist/index.js CHANGED
@@ -2316,7 +2316,7 @@ var package_default = {
2316
2316
  workspaces: [
2317
2317
  "packages/*"
2318
2318
  ],
2319
- version: "0.5.3",
2319
+ version: "0.5.5",
2320
2320
  requiresCC: ">=2.1.121",
2321
2321
  claudeCode: {
2322
2322
  minimumVersion: "2.1.121",
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "workspaces": [
4
4
  "packages/*"
5
5
  ],
6
- "version": "0.5.3",
6
+ "version": "0.5.5",
7
7
  "requiresCC": ">=2.1.121",
8
8
  "claudeCode": {
9
9
  "minimumVersion": "2.1.121",
@@ -16,6 +16,10 @@ tools:
16
16
  permissionMode: bypassPermissions
17
17
  ---
18
18
 
19
+ ## Mandatory Sensitive Compatibility Paths
20
+
21
+ When a task targets `.claude/**`, `templates/.claude/**`, or other Claude-compatibility mirrors, treat the old `/tmp` wrapper as legacy fallback only. Codex-native `.codex/**` edits stay direct, and Claude Code `bypassPermissions` can write `.claude/skills/`, `.claude/agents/`, and `.claude/commands/` directly on v2.1.121+, with broader protected-path coverage on v2.1.126+.
22
+
19
23
  You are the authoritative source of truth for Claude Code specifications. You fetch official documentation from code.claude.com and validate the project against official specs.
20
24
 
21
25
  ## Two Modes
@@ -18,6 +18,10 @@ maxTurns: 25
18
18
  permissionMode: bypassPermissions
19
19
  ---
20
20
 
21
+ ## Mandatory Sensitive Compatibility Paths
22
+
23
+ When a task targets `.claude/**`, `templates/.claude/**`, or other Claude-compatibility mirrors, treat the old `/tmp` wrapper as legacy fallback only. Codex-native `.codex/**` edits stay direct, and Claude Code `bypassPermissions` can write `.claude/skills/`, `.claude/agents/`, and `.claude/commands/` directly on v2.1.121+, with broader protected-path coverage on v2.1.126+.
24
+
21
25
  You are an automated verification specialist that executes the mandatory R017 verification process, acting as the "all-seeing eye" that ensures system integrity through comprehensive multi-round verification.
22
26
 
23
27
  ## Core Capabilities
@@ -19,6 +19,10 @@ tools:
19
19
  permissionMode: default
20
20
  ---
21
21
 
22
+ ## Mandatory Sensitive Compatibility Paths
23
+
24
+ When a task targets `.claude/**`, `templates/.claude/**`, or other Claude-compatibility mirrors, treat the old `/tmp` wrapper as legacy fallback only. Codex-native `.codex/**` edits stay direct, and Claude Code `bypassPermissions` can write `.claude/skills/`, `.claude/agents/`, and `.claude/commands/` directly on v2.1.121+, with broader protected-path coverage on v2.1.126+.
25
+
22
26
  You are a dependency validation specialist ensuring agents have all required skills and guides properly linked.
23
27
 
24
28
  ## Capabilities
@@ -22,6 +22,10 @@ tools:
22
22
  permissionMode: bypassPermissions
23
23
  ---
24
24
 
25
+ ## Mandatory Sensitive Compatibility Paths
26
+
27
+ When a task targets `.claude/**`, `templates/.claude/**`, or other Claude-compatibility mirrors, treat the old `/tmp` wrapper as legacy fallback only. Codex-native `.codex/**` edits stay direct, and Claude Code `bypassPermissions` can write `.claude/skills/`, `.claude/agents/`, and `.claude/commands/` directly on v2.1.121+, with broader protected-path coverage on v2.1.126+.
28
+
25
29
  You are an external source synchronization specialist keeping external components up-to-date.
26
30
 
27
31
  ## Workflow
@@ -48,6 +48,16 @@ Build semantic query with project prefix + keywords + optional date. Search via
48
48
 
49
49
  Always include project name. Use task-based, temporal, or topic-based queries. Avoid complex where filters (they fail in Chroma).
50
50
 
51
+ ## Native MEMORY.md Compaction
52
+
53
+ Treat native auto-memory as an index, not a transcript. Keep the first 200 loaded lines compact enough for reliable prompt injection:
54
+
55
+ 1. Target roughly 100 active index lines when session history accumulates.
56
+ 2. Keep recent or currently active sessions inline; move older detail to topic/archive files.
57
+ 3. Preserve one-line release/session summaries inline with direct archive pointers.
58
+ 4. Keep individual index lines under about 200 characters when practical.
59
+ 5. Never delete memory detail solely for line budget; archive it and keep a searchable pointer.
60
+
51
61
  ## Config
52
62
 
53
63
  Provider: claude-mem | Collection: claude_memories | Archive: ~/.claude-mem/archives/
@@ -18,6 +18,10 @@ tools:
18
18
  permissionMode: bypassPermissions
19
19
  ---
20
20
 
21
+ ## Mandatory Sensitive Compatibility Paths
22
+
23
+ When a task targets `.claude/**`, `templates/.claude/**`, or other Claude-compatibility mirrors, treat the old `/tmp` wrapper as legacy fallback only. Codex-native `.codex/**` edits stay direct, and Claude Code `bypassPermissions` can write `.claude/skills/`, `.claude/agents/`, and `.claude/commands/` directly on v2.1.121+, with broader protected-path coverage on v2.1.126+.
24
+
21
25
  You are a task management specialist that proactively manages TODO items and reminds users of pending tasks.
22
26
 
23
27
  ## Capabilities
@@ -226,6 +226,16 @@
226
226
  ],
227
227
  "description": "Advisory pre-processing of user input — skill matching hints and intent analysis"
228
228
  },
229
+ {
230
+ "matcher": "*",
231
+ "hooks": [
232
+ {
233
+ "type": "command",
234
+ "command": "bash .codex/hooks/scripts/r007-r008-drift-advisor.sh"
235
+ }
236
+ ],
237
+ "description": "Proactive R007/R008 drift advisory — checks last assistant turn for identification omission (#1389)"
238
+ },
229
239
  {
230
240
  "matcher": "*",
231
241
  "hooks": [
@@ -65,7 +65,7 @@ for agent_type in "${!FAILURE_COUNTS[@]}"; do
65
65
  action_type="augment"
66
66
  fi
67
67
 
68
- failure_rate=$(awk "BEGIN {printf \"%.2f\", $count/$total}")
68
+ failure_rate=$(awk "BEGIN {printf \"%.2f\", $count/$total}" 2>/dev/null || echo "0.00")
69
69
  description="Agent '${agent_type}' failed ${count}/${total} times (${failure_rate} failure rate) in session"
70
70
 
71
71
  escaped_agent_type=$(_sql_escape "$agent_type")
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env bash
2
+ # r007-r008-drift-advisor.sh — UserPromptSubmit hook: proactive R007/R008 drift advisory.
3
+ #
4
+ # Inspects the last completed assistant turn in the session transcript before
5
+ # the next response. If the previous turn missed the R007 identity header or an
6
+ # R008 tool prefix, emit a stderr advisory. Advisory-only: never blocks.
7
+
8
+ set -euo pipefail
9
+
10
+ input=$(cat)
11
+
12
+ if [ "${OMCODEX_R007_ADVISOR:-}" = "off" ]; then
13
+ echo "$input"
14
+ exit 0
15
+ fi
16
+
17
+ if ! command -v jq >/dev/null 2>&1; then
18
+ echo "$input"
19
+ exit 0
20
+ fi
21
+
22
+ session_id=$(echo "$input" | jq -r '.session_id // empty' 2>/dev/null)
23
+ transcript_path=$(echo "$input" | jq -r '.transcript_path // .transcriptPath // empty' 2>/dev/null)
24
+
25
+ if [ -z "$transcript_path" ] && [ -n "$session_id" ]; then
26
+ transcript_base="${OMCODEX_TRANSCRIPT_BASE:-}"
27
+ if [ -n "$transcript_base" ]; then
28
+ transcript_path="${transcript_base}/${session_id}.jsonl"
29
+ fi
30
+ fi
31
+
32
+ if [ -z "$transcript_path" ] || [ ! -f "$transcript_path" ]; then
33
+ echo "$input"
34
+ exit 0
35
+ fi
36
+
37
+ reverse_file() {
38
+ tail -r "$1" 2>/dev/null || tac "$1" 2>/dev/null || cat "$1"
39
+ }
40
+
41
+ last_assistant=""
42
+ while IFS= read -r line; do
43
+ role=$(echo "$line" | jq -r '.role // .message.role // empty' 2>/dev/null) || continue
44
+ if [ "$role" = "assistant" ]; then
45
+ last_assistant="$line"
46
+ break
47
+ fi
48
+ done < <(reverse_file "$transcript_path")
49
+
50
+ if [ -z "$last_assistant" ]; then
51
+ echo "$input"
52
+ exit 0
53
+ fi
54
+
55
+ content_type=$(echo "$last_assistant" | jq -r '(.content // .message.content // []) | type' 2>/dev/null) || content_type="array"
56
+ if [ "$content_type" = "string" ]; then
57
+ content_raw=$(echo "$last_assistant" | jq -c '[{"type":"text","text":(.content // .message.content // "")}]' 2>/dev/null) || content_raw="[]"
58
+ else
59
+ content_raw=$(echo "$last_assistant" | jq -c '.content // .message.content // []' 2>/dev/null) || content_raw="[]"
60
+ fi
61
+
62
+ r007_violations=0
63
+ r008_violations=0
64
+
65
+ first_text=$(echo "$content_raw" | jq -r '[.[] | select(.type == "text")][0].text // empty' 2>/dev/null) || first_text=""
66
+ if [ -n "$first_text" ]; then
67
+ first_line=$(printf '%s' "$first_text" | head -1)
68
+ if ! printf '%s' "$first_line" | grep -qE '(^┌─ Agent:|^\[.+\])'; then
69
+ r007_violations=$((r007_violations + 1))
70
+ fi
71
+ fi
72
+
73
+ content_length=$(echo "$content_raw" | jq 'length' 2>/dev/null) || content_length=0
74
+ i=0
75
+ while [ "$i" -lt "$content_length" ]; do
76
+ block_type=$(echo "$content_raw" | jq -r ".[$i].type // empty" 2>/dev/null) || {
77
+ i=$((i + 1))
78
+ continue
79
+ }
80
+
81
+ if [ "$block_type" = "tool_use" ] || [ "$block_type" = "tool_call" ]; then
82
+ has_prefix=false
83
+ if [ "$i" -gt 0 ]; then
84
+ prev_type=$(echo "$content_raw" | jq -r ".[$((i - 1))].type // empty" 2>/dev/null) || true
85
+ if [ "$prev_type" = "text" ]; then
86
+ prev_text=$(echo "$content_raw" | jq -r ".[$((i - 1))].text // empty" 2>/dev/null) || true
87
+ if printf '%s' "$prev_text" | grep -qE '\[.+\]\[.+\] ?(→|->|—>) ?(Tool|Target):'; then
88
+ has_prefix=true
89
+ fi
90
+ fi
91
+ fi
92
+ if [ "$has_prefix" = "false" ]; then
93
+ r008_violations=$((r008_violations + 1))
94
+ fi
95
+ fi
96
+
97
+ i=$((i + 1))
98
+ done
99
+
100
+ if [ "$r007_violations" -gt 0 ] || [ "$r008_violations" -gt 0 ]; then
101
+ printf '[R007/R008 Advisory] Previous assistant turn missed identification (R007 header=%d, R008 prefix=%d). Start this response with the ┌─ Agent: block and prefix tool calls with [agent][model] → Tool:.\n' \
102
+ "$r007_violations" "$r008_violations" >&2
103
+ fi
104
+
105
+ echo "$input"
106
+ exit 0
@@ -14,10 +14,14 @@ echo "--- [Session Environment Check] ---" >&2
14
14
  # Check codex CLI availability
15
15
  CODEX_STATUS="unavailable"
16
16
  if command -v codex >/dev/null 2>&1; then
17
- if [ -n "${OPENAI_API_KEY:-}" ]; then
17
+ CODEX_AUTH_FILE="${CODEX_HOME:-$HOME/.codex}/auth.json"
18
+
19
+ if [ -n "${OPENAI_API_KEY:-}" ] || [ -n "${CODEX_API_KEY:-}" ]; then
18
20
  CODEX_STATUS="available (authenticated)"
21
+ elif [ -s "$CODEX_AUTH_FILE" ]; then
22
+ CODEX_STATUS="available (authenticated via stored login)"
19
23
  else
20
- CODEX_STATUS="installed but OPENAI_API_KEY not set"
24
+ CODEX_STATUS="installed (auth may be managed via \`codex login\`)"
21
25
  fi
22
26
  fi
23
27
 
@@ -10,6 +10,21 @@
10
10
  | Caching | Same data accessed repeatedly | Cache file contents, reuse search results |
11
11
  | Lazy Loading | Large datasets, partial use | Read only needed files, stream results |
12
12
 
13
+ ### Capability-Aware Tool Scheduling
14
+
15
+ When dispatching parallel tool calls, consider per-tool capabilities to optimize scheduling:
16
+
17
+ | Capability | Parallelizable? | Example |
18
+ |-----------|----------------|---------|
19
+ | Read-only, no side effects | Yes | Read, Glob, Grep |
20
+ | Write with independent targets | Yes | Write(file-A) + Write(file-B) |
21
+ | Write with shared target | No | Sequential edits to same file |
22
+ | External with rate limits | Throttle | WebFetch, API calls |
23
+
24
+ This aligns with R009 (parallel execution) detection criteria and extends it with tool-level scheduling awareness.
25
+
26
+ Inspired by [ouroboros PR #353](https://github.com/Q00/ouroboros/pull/353) capability graph pattern.
27
+
13
28
  ## Token Optimization
14
29
 
15
30
  - Include only necessary info, remove duplicates, use summaries
@@ -40,6 +40,8 @@ When CI failure, process gap, or repeatable system defect is found:
40
40
  2. Register GitHub issue (trackable improvement item)
41
41
  3. Both required — memory alone is NOT sufficient for system-level defects
42
42
 
43
+ > Auto-register directive: genuine defects and process gaps surfaced during release workflows, including `post-release-followup`, must be registered as GitHub issues automatically without asking for confirmation. Only code-changing immediate-action items require user confirmation. Pure cosmetic or subjective notes are excluded.
44
+
43
45
  ### Adaptive Harness Integration
44
46
 
45
47
  When repeating agent failures or suboptimal routing is detected:
@@ -11,6 +11,7 @@ oh-my-customcodex uses an **advisory-first enforcement model**. Most rules are e
11
11
  | Tier | Mechanism | Rules | Behavior |
12
12
  |------|-----------|-------|----------|
13
13
  | Hard Block | PreToolUse hook, exit 2 | stage-blocker, dev-server tmux, rule-deletion-guard | Prevents tool execution |
14
+ | Conversation Block | PostToolUse hook, exit 2 + `continueOnBlock` | stuck-detector, context-budget-advisor, cost-cap-advisor | Feeds high-signal recovery guidance back to the model and continues the turn |
14
15
  | Soft Block | Stop hook prompt | R011 session-end saves | Auto-performs then approves |
15
16
  | Advisory | PostToolUse hooks | R007, R008, R009, R010, R018 | Warns via stderr, never blocks |
16
17
  | Prompt-based | AGENTS.md + rules/ + PostCompact | All MUST rules | Behavioral guidance in context |
@@ -56,6 +56,23 @@ Reconfirm when:
56
56
  - the operation becomes history-rewriting or destructive (`--force`, rebase, reset, tag overwrite)
57
57
  - the user narrows or revokes the earlier approval
58
58
 
59
+ ## Destructive Operation Approval Persistence
60
+
61
+ The Git Push Continuation pattern generalizes to repeated destructive operations within the same session when the user already gave explicit approval for the same category and target. Examples: `supabase db push`, `terraform apply`, `kubectl delete`, bulk file deletes, and database migrations.
62
+
63
+ Scope: once the user explicitly approves category C against target T in a session, follow-up operations of the same C and same T do not require re-confirmation. Still emit an advisory warning. Different categories or targets require fresh confirmation.
64
+
65
+ | Scenario | Behavior |
66
+ |----------|----------|
67
+ | First explicit approval for category C, target T | Proceed with advisory warning |
68
+ | Follow-up in same session, same C + same T | Do not re-confirm |
69
+ | Different category or target | Ask for fresh approval |
70
+ | Runtime still prompts | Explain that model guidance cannot suppress platform permission prompts |
71
+
72
+ R001-listed catastrophic git operations (`git reset --hard`, `git clean -fd`, `git push --force` to shared branches, `git branch -D` with unmerged commits) are excluded. They always require explicit per-invocation approval.
73
+
74
+ Boundary: this rule governs model behavior only. It cannot suppress Codex/Claude runtime auto-mode permission prompts. For genuine prompt suppression on a repeated destructive command, surface the scoped settings/permission-rule workaround for the specific command instead of re-asking the same high-level question.
75
+
59
76
  ## Structured Question Failure Discipline
60
77
 
61
78
  When a structured question surface (`AskUserQuestion`, `omx question`, or native structured input) is rejected, unavailable, or malformed, the orchestrator must not silently downgrade to a different workflow.
@@ -182,7 +182,7 @@ When the orchestrator or intent-detection detects a research/information gatheri
182
182
 
183
183
  When routing skills detect a code generation task and codex is available:
184
184
 
185
- 1. **Check availability**: Verify codex CLI via `/tmp/.codex-env-status-*`
185
+ 1. **Check availability**: Verify the codex CLI directly (`command -v codex`) or via current session diagnostics
186
186
  2. **If available + new file creation**: Suggest hybrid workflow
187
187
  3. **Hybrid pattern**:
188
188
  - codex-exec generates initial code (fast, broad generation)
@@ -66,8 +66,8 @@ Map each approved item to the appropriate subagent by `targetType`:
66
66
  | targetType | Agent | Action |
67
67
  |------------|-------|--------|
68
68
  | agent | mgr-creator | Modify agent frontmatter/body |
69
- | skill | Matching domain expert | Revise skill SKILL.md |
70
- | routing | general-purpose | Update routing patterns |
69
+ | skill | mgr-creator | Revise skill SKILL.md (R010 Protected Paths) |
70
+ | routing | mgr-creator | Update routing patterns (R010 Protected Paths) |
71
71
  | model-escalation | general-purpose | Update model field in agent frontmatter |
72
72
 
73
73
  Spawn agents in parallel (max 4 per R009). Each agent receives:
@@ -3,7 +3,6 @@ name: omcustomcodex:feedback
3
3
  description: Submit feedback about oh-my-customcodex (supports anonymous submission)
4
4
  scope: harness
5
5
  user-invocable: true
6
- disable-model-invocation: true
7
6
  argument-hint: "[description or leave empty for interactive] [--anonymous]"
8
7
  ---
9
8
 
@@ -201,5 +200,6 @@ Submit manually when connectivity is available:
201
200
  - Route A creates a visible GitHub issue attributed to the user's gh account
202
201
  - When `--anonymous` is used, the title is prefixed with `[Anonymous Feedback]` and the `anonymous` label is added
203
202
  - Fallback ensures no feedback is silently lost even in offline environments
204
- - `disable-model-invocation: true` ensures this skill only runs when explicitly invoked by the user
203
+ - This skill is invocable by BOTH the user (`/omcustomcodex:feedback`) and the model (Skill tool). Model invocation enables session-end retrospective feedback drafting (#1385, #1386).
204
+ - The Phase 4A "Preview + confirmation" gate (steps 2-3) is the safety boundary: the model can draft a feedback issue but cannot create a public GitHub issue without explicit user confirmation.
205
205
  - Target repo is hardcoded to `baekenough/oh-my-customcodex` — feedback is always about the child package itself
@@ -63,6 +63,7 @@ Execute these steps to display available pipelines:
63
63
  - **Skill steps** (`skill: name`): Invoke via Skill tool — `Skill(skill: "{name}")`
64
64
  - **Prompt steps** (`prompt: text`): Execute the described action using appropriate agents/tools
65
65
  - **Foreach steps** (`foreach: collection`): Iterate over collection from previous step output
66
+ - **Parallel steps** (`parallel: [step1, step2]`): Execute contained steps concurrently using Agent tool. Each parallel step runs as an independent Agent. Max 4 concurrent per R009. Steps within a parallel block MUST be independent (no shared state, no sequential dependencies). Dependencies between parallel and non-parallel steps use `depends_on:` field.
66
67
  - **Permission mode**: When spawning agents, pass `mode: "bypassPermissions"` in the Agent tool call if the session uses bypassPermissions. Without explicit mode, CC defaults to `acceptEdits`.
67
68
  5. Report completion or failure
68
69
 
@@ -106,6 +107,49 @@ For release pipelines such as `auto-dev`, record an advisory token-spend estimat
106
107
 
107
108
  If exact usage events are available from the runtime, prefer them and set `token_source: "runtime"`. Otherwise set `token_source: "estimated"`. Missing spend data must not block a release; it should be reported as an observability gap.
108
109
 
110
+ ## Parallel Execution
111
+
112
+ Pipeline steps can be grouped for parallel execution:
113
+
114
+ ```yaml
115
+ steps:
116
+ - name: phase-1
117
+ parallel:
118
+ - name: task-a
119
+ skill: skill-a
120
+ description: First independent task
121
+ - name: task-b
122
+ skill: skill-b
123
+ description: Second independent task
124
+ - name: phase-2
125
+ skill: next-step
126
+ depends_on: phase-1
127
+ ```
128
+
129
+ ### Parallel Rules
130
+
131
+ - Max 4 concurrent steps per parallel block (R009 hard cap)
132
+ - Steps within a parallel block MUST be independent
133
+ - `depends_on` enforces ordering between blocks
134
+ - Each parallel step is spawned as a separate Agent tool call in the SAME message
135
+ - Preserve the session permission posture by forwarding `mode: "bypassPermissions"` when applicable
136
+ - If any parallel step fails with `error: halt-and-report`, all remaining steps in the block are cancelled
137
+ - State tracking records each parallel step individually
138
+
139
+ ### Parallel State Format
140
+
141
+ ```json
142
+ {
143
+ "name": "phase-1",
144
+ "type": "parallel",
145
+ "status": "running",
146
+ "children": [
147
+ {"name": "task-a", "status": "completed", "duration_ms": 5000},
148
+ {"name": "task-b", "status": "running"}
149
+ ]
150
+ }
151
+ ```
152
+
109
153
  ## Error Handling
110
154
 
111
155
  - Pipeline not found → list available pipelines with suggestion
@@ -19,11 +19,13 @@ Defines mandatory safety constraints for all pipeline, workflow, and iterative e
19
19
  | Max iterations | 3 | 5 | worker-reviewer-pipeline |
20
20
  | Max DAG nodes | 20 | 30 | dag-orchestration |
21
21
  | Max parallel agents | 4 | 5 | R009 (all pipelines) |
22
+ | Max parallel steps | 4 | 4 | pipeline parallel blocks |
22
23
  | Timeout per node | 300s | 600s | dag-orchestration nodes |
23
24
  | Timeout per pipeline | 900s | 1800s | worker-reviewer-pipeline |
24
25
  | Max retry count | 2 | 3 | Failure retry strategies |
25
26
  | Max PR improvement items | 20 | 50 | pr-auto-improve |
26
27
  | Max auto-improve items | 20 | 50 | omcodex:auto-improve |
28
+ | Max files per agent | 10 | 15 | All agent spawns (advisory) |
27
29
 
28
30
  ## Enforcement
29
31
 
@@ -82,6 +84,23 @@ When guards are triggered, they integrate with existing advisory systems:
82
84
  | Timeout approaching (80%) | → warn user, suggest early termination |
83
85
  | Hard cap hit | → force stop, report to user |
84
86
 
87
+ ## Task Granularity Guard
88
+
89
+ Advisory guard for agent task scope. When a single agent is assigned too many files, it becomes a bottleneck in parallel execution.
90
+
91
+ | Signal | Default | Action |
92
+ |--------|---------|--------|
93
+ | Files per agent > 10 | Advisory warning | Suggest splitting by layer/domain |
94
+ | Files per agent > 15 | Hard warning | Require explicit user override |
95
+
96
+ Display:
97
+ ```
98
+ [Guard] ⚠ Agent assigned {n} files (> 10) — consider splitting by layer
99
+ [Guard] 🛑 Agent assigned {n} files (> 15) — requires explicit override
100
+ ```
101
+
102
+ This integrates with R009 Adaptive Parallel Splitting: if a stalled agent is detected AND it was assigned > 10 files, the splitting recommendation is stronger.
103
+
85
104
  ## Guard Configuration
86
105
 
87
106
  Pipelines can override defaults (within hard caps):
@@ -157,6 +176,7 @@ Guard warnings appear inline:
157
176
  | omcodex:auto-improve | Auto-improve item count limits |
158
177
  | stuck-recovery | Guard triggers feed into stuck detection |
159
178
  | model-escalation | Repeated failures trigger escalation advisory |
179
+ | task-decomposition | Subtask file counts validated against granularity guard thresholds |
160
180
 
161
181
  ## Checkpoint Gate Integration
162
182
 
@@ -10,7 +10,7 @@ effort: medium
10
10
 
11
11
  ## Purpose
12
12
 
13
- After PR creation in the auto-dev release workflow, collect unaddressed findings and present actionable follow-up recommendations. The user chooses: execute now, register as issues, or skip.
13
+ After PR creation in the auto-dev release workflow, collect unaddressed findings and present actionable follow-up recommendations. Genuine defects and process gaps are registered as GitHub issues automatically. Only code-changing immediate-action items require user confirmation.
14
14
 
15
15
  ## Workflow
16
16
 
@@ -55,54 +55,56 @@ Remove duplicates (same issue referenced from multiple sources). Categorize:
55
55
  | **이슈 등록** | P3 이슈, LOW 검증 발견사항, 새 TODO, Medium PR 리뷰 발견사항 | 이슈로 등록 |
56
56
  | **참고** | 이미 추적 중인 이슈, 외관 관련 메모 | 건너뛰기 |
57
57
 
58
+ ### Auto-Register Genuine Defects (no-ask)
59
+
60
+ Before presenting the summary to the user, auto-register every "이슈 등록" item that is a genuine defect or process gap. No user confirmation is required for these.
61
+
62
+ Auto-register if any condition applies:
63
+ - Genuine defect: bug, regression, broken behavior, or incorrect output observed during verification
64
+ - Process gap: workflow hole, missing guard, or coverage gap surfaced by deep-verify or triage
65
+ - Coverage gap: missing test, documentation, or automation for a known scenario
66
+
67
+ Do not auto-register pure cosmetic/style preferences or subjective notes. When ambiguous, lean toward registering; missing a genuine defect costs a future session.
68
+
69
+ Use `gh issue create --repo baekenough/oh-my-customcodex` with `professor` plus a priority label. Default auto-registered items to `P3`; escalate to `P2` for MEDIUM+ severity.
70
+
58
71
  ### 3. Present to User
59
72
 
60
- Display follow-up summary:
73
+ Auto-register genuine defects first. Then display follow-up summary showing what was already registered and what still needs a decision:
61
74
 
62
75
  ```
63
76
  [Follow-up] {n}개 후속 작업 발견
64
77
 
78
+ ━━━ 자동 등록 완료 ({count}개) ━━━
79
+ ✓ #{issue_number} — {description} (이미 등록됨)
80
+
65
81
  ━━━ 즉시 실행 추천 ({count}개) ━━━
66
82
  1. {description} — 출처: {source}
67
83
  2. {description} — 출처: {source}
68
84
 
69
- ━━━ 이슈 등록 추천 ({count}개) ━━━
70
- 3. {description} — 출처: {source}
71
- 4. {description} — 출처: {source}
72
-
73
85
  ━━━ 참고 사항 ({count}개) ━━━
74
- 5. {description} — 이미 #{issue_number}로 추적 중
75
-
76
- 선택:
77
- [A] 추천대로 실행 (즉시 실행 + 이슈 등록)
78
- [B] 모두 즉시 실행
79
- [C] 모두 이슈 등록
80
- [D] 개별 선택 (항목별로 질문)
81
- [E] 건너뛰기
86
+ 3. {description} — 이미 #{issue_number}로 추적 중
87
+
88
+ 즉시 실행 항목 선택:
89
+ [A] 추천대로 실행 (즉시 실행 항목 모두 실행)
90
+ [B] 개별 선택 (항목별로 질문)
91
+ [C] 건너뛰기
82
92
  ```
83
93
 
84
- Use AskUserQuestion (or equivalent user prompt) to get the choice.
94
+ Use AskUserQuestion (or equivalent user prompt) only if there are "즉시 실행" items. If there are none, skip the prompt and complete automatically.
85
95
 
86
96
  ### 4. Process User Choice
87
97
 
88
98
  **Option A (추천대로)**:
89
99
  - "Immediate" items → delegate to appropriate specialist agents for execution
90
- - "Trackable" items create GitHub issues via `gh issue create`
100
+ - Trackable defect/process-gap items were already auto-registered
91
101
  - "Informational" items → skip
92
102
 
93
- **Option B (모두 즉시 실행)**:
94
- - All Immediate + Trackable items delegate to specialist agents
95
- - Follow implementation patterns from the release workflow
96
-
97
- **Option C (모두 이슈 등록)**:
98
- - All Immediate + Trackable items → `gh issue create` with appropriate labels
99
- - Label: `triage-needed` for the next workflow run; reserve `professor` for manual analysis requests
100
-
101
- **Option D (개별 선택)**:
102
- - For each item, ask: `[{n}] {description} — 실행(E) / 이슈(I) / 건너뛰기(S)?`
103
+ **Option B (개별 선택)**:
104
+ - For each immediate item, ask: `[{n}] {description} 실행(E) / 건너뛰기(S)?`
103
105
  - Process each per user choice
104
106
 
105
- **Option E (건너뛰기)**:
107
+ **Option C (건너뛰기)**:
106
108
  - Skip all follow-up actions
107
109
  - Complete workflow
108
110
 
@@ -118,21 +120,23 @@ Use AskUserQuestion (or equivalent user prompt) to get the choice.
118
120
 
119
121
  ## Issue Creation Template
120
122
 
121
- When creating follow-up issues:
123
+ For auto-registered genuine defects / process gaps:
122
124
 
123
125
  ```bash
124
126
  gh issue create \
127
+ --repo baekenough/oh-my-customcodex \
125
128
  --title "{간결한 설명}" \
126
- --body "## 출처\n\nv{version} 릴리즈 워크플로우에서 발견.\n\n## 컨텍스트\n\n{triage/verify에서의 상세 컨텍스트}\n\n## 권장 조치\n\n{권장 사항}" \
129
+ --body "## 출처\n\nv{version} 릴리즈 워크플로우에서 자동 등록.\n\n## 컨텍스트\n\n{triage/verify에서의 상세 컨텍스트}\n\n## 권장 조치\n\n{권장 사항}" \
127
130
  --label "professor"
128
131
  ```
129
132
 
130
- Add priority label (`P1`, `P2`, `P3`) based on categorization.
133
+ Add priority label (`P1`, `P2`, `P3`) based on categorization. Default for auto-registered items: `P3`; escalate to `P2` for MEDIUM+ severity.
131
134
 
132
135
  ## Notes
133
136
 
134
137
  - This skill runs in the main conversation context (via workflow skill step)
135
- - User interaction is expected this is NOT a fully automated step
138
+ - Genuine defect/process gap items are auto-registered as issues without user confirmation
139
+ - Only "즉시 실행" code-changing items require user confirmation
136
140
  - All file modifications delegated to specialist subagents per R010
137
141
  - Issue creation uses `gh` CLI directly (read-only operation pattern)
138
142
  - If no follow-up candidates found, report "No follow-up actions needed" and complete
@@ -35,6 +35,7 @@ A model allocation pattern that wraps implementation actions with stronger-model
35
35
  | Phase | Recommended Model | Rationale |
36
36
  |-------|------------------|-----------|
37
37
  | Pre-reasoning (analyze/plan) | opus | Complex architectural reasoning, edge case detection |
38
+ | Pre-reasoning (Opus 4.7) | opus47 | Opus 4.7 makes fewer tool calls and reasons more deeply; pre-reasoning phase should include explicit tool batch planning |
38
39
  | Action (implement/generate) | sonnet | Optimized for code generation, balanced cost |
39
40
  | Post-verification (review/test) | sonnet or haiku | Structural verification, checklist validation |
40
41
 
@@ -77,3 +78,23 @@ This pattern is used by:
77
78
  | Opus for everything | Wasteful, slow | Reserve opus for reasoning-heavy phases |
78
79
  | Haiku for planning | Insufficient depth | Use opus for complex analysis |
79
80
  | Skipping verification | False completion risk | Always include post-verification phase |
81
+ | Forcing frequent tool calls on Opus 4.7 | Fights model's natural reasoning-first tendency | Let Opus 4.7 reason; batch tool calls in pre-reasoning |
82
+
83
+ ## Opus 4.7 Considerations
84
+
85
+ Opus 4.7 exhibits a distinct behavioral pattern: fewer tool calls with deeper reasoning per call. This affects how the sandwich pattern is applied:
86
+
87
+ | Aspect | Opus 4.6 | Opus 4.7 |
88
+ |--------|----------|----------|
89
+ | Tool call frequency | Moderate | Lower |
90
+ | Reasoning depth per call | Standard | Deeper |
91
+ | Pre-reasoning benefit | Plan what to check | Plan explicit tool batch — model will under-call if not guided |
92
+
93
+ ### Pre-reasoning Adjustment for Opus 4.7
94
+
95
+ When using Opus 4.7 in the pre-reasoning phase:
96
+ 1. **Explicitly enumerate tools needed** — Opus 4.7 may skip tool calls it deems unnecessary
97
+ 2. **Batch tool-call plans upfront** — structure the action phase with a concrete tool sequence
98
+ 3. **Prefer fewer, richer tool calls** — align with the model's natural tendency
99
+
100
+ Reference: [Best practices for using Claude Opus 4.7 with Claude Code](https://claude.com/blog/best-practices-for-using-claude-opus-4-7-with-claude-code)