oh-my-codex 0.8.4 → 0.8.6
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 +53 -0
- package/bin/omx.js +2 -2
- package/dist/agents/__tests__/definitions.test.js +5 -1
- package/dist/agents/__tests__/definitions.test.js.map +1 -1
- package/dist/agents/__tests__/native-config.test.js +7 -2
- package/dist/agents/__tests__/native-config.test.js.map +1 -1
- package/dist/agents/definitions.d.ts +5 -2
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +117 -30
- package/dist/agents/definitions.js.map +1 -1
- package/dist/agents/native-config.d.ts.map +1 -1
- package/dist/agents/native-config.js +72 -9
- package/dist/agents/native-config.js.map +1 -1
- package/dist/cli/__tests__/prompt-skill-sanitization.test.d.ts +2 -0
- package/dist/cli/__tests__/prompt-skill-sanitization.test.d.ts.map +1 -0
- package/dist/cli/__tests__/prompt-skill-sanitization.test.js +48 -0
- package/dist/cli/__tests__/prompt-skill-sanitization.test.js.map +1 -0
- package/dist/cli/__tests__/team.test.js +75 -1
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +56 -0
- package/dist/cli/team.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +5 -1
- package/dist/config/__tests__/generator-notify.test.js.map +1 -1
- package/dist/config/generator.js +1 -1
- package/dist/config/generator.js.map +1 -1
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js +43 -0
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +50 -0
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +40 -0
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +59 -0
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +4 -0
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/prompt-guidance-catalog.test.d.ts +2 -0
- package/dist/hooks/__tests__/prompt-guidance-catalog.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/prompt-guidance-catalog.test.js +44 -0
- package/dist/hooks/__tests__/prompt-guidance-catalog.test.js.map +1 -0
- package/dist/hooks/__tests__/prompt-guidance-contract.test.d.ts +2 -0
- package/dist/hooks/__tests__/prompt-guidance-contract.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/prompt-guidance-contract.test.js +56 -0
- package/dist/hooks/__tests__/prompt-guidance-contract.test.js.map +1 -0
- package/dist/hooks/__tests__/prompt-guidance-scenarios.test.d.ts +2 -0
- package/dist/hooks/__tests__/prompt-guidance-scenarios.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/prompt-guidance-scenarios.test.js +30 -0
- package/dist/hooks/__tests__/prompt-guidance-scenarios.test.js.map +1 -0
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.d.ts +2 -0
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +56 -0
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +1 -0
- package/dist/hooks/__tests__/skill-guidance-contract.test.d.ts +2 -0
- package/dist/hooks/__tests__/skill-guidance-contract.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/skill-guidance-contract.test.js +31 -0
- package/dist/hooks/__tests__/skill-guidance-contract.test.js.map +1 -0
- package/dist/mcp/__tests__/team-server-wait.test.d.ts +2 -0
- package/dist/mcp/__tests__/team-server-wait.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/team-server-wait.test.js +155 -0
- package/dist/mcp/__tests__/team-server-wait.test.js.map +1 -0
- package/dist/mcp/team-server.d.ts.map +1 -1
- package/dist/mcp/team-server.js +41 -4
- package/dist/mcp/team-server.js.map +1 -1
- package/dist/notifications/__tests__/tmux.test.js +5 -5
- package/dist/notifications/__tests__/tmux.test.js.map +1 -1
- package/dist/notifications/tmux.js +1 -1
- package/dist/notifications/tmux.js.map +1 -1
- package/dist/team/__tests__/runtime-cli.test.js +6 -0
- package/dist/team/__tests__/runtime-cli.test.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +2 -1
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/api-interop.d.ts.map +1 -1
- package/dist/team/api-interop.js +4 -0
- package/dist/team/api-interop.js.map +1 -1
- package/dist/team/contracts.d.ts +1 -1
- package/dist/team/contracts.d.ts.map +1 -1
- package/dist/team/contracts.js +5 -0
- package/dist/team/contracts.js.map +1 -1
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +14 -0
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/state/events.d.ts +18 -1
- package/dist/team/state/events.d.ts.map +1 -1
- package/dist/team/state/events.js +129 -1
- package/dist/team/state/events.js.map +1 -1
- package/dist/team/state/types.d.ts +9 -2
- package/dist/team/state/types.d.ts.map +1 -1
- package/dist/team/state/types.js.map +1 -1
- package/dist/team/state.d.ts +10 -1
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +3 -3
- package/dist/team/state.js.map +1 -1
- package/dist/verification/verifier.d.ts +1 -1
- package/dist/verification/verifier.js +1 -1
- package/package.json +1 -1
- package/prompts/analyst.md +15 -1
- package/prompts/api-reviewer.md +14 -0
- package/prompts/architect.md +18 -1
- package/prompts/build-fixer.md +14 -0
- package/prompts/code-reviewer.md +14 -0
- package/prompts/code-simplifier.md +13 -1
- package/prompts/critic.md +17 -1
- package/prompts/debugger.md +14 -0
- package/prompts/dependency-expert.md +16 -2
- package/prompts/designer.md +15 -1
- package/prompts/executor.md +22 -3
- package/prompts/explore.md +14 -0
- package/prompts/git-master.md +14 -0
- package/prompts/information-architect.md +14 -1
- package/prompts/performance-reviewer.md +14 -0
- package/prompts/planner.md +21 -3
- package/prompts/product-analyst.md +14 -1
- package/prompts/product-manager.md +18 -5
- package/prompts/qa-tester.md +15 -1
- package/prompts/quality-reviewer.md +14 -0
- package/prompts/quality-strategist.md +18 -5
- package/prompts/researcher.md +16 -2
- package/prompts/security-reviewer.md +14 -0
- package/prompts/style-reviewer.md +14 -0
- package/prompts/test-engineer.md +14 -0
- package/prompts/ux-researcher.md +14 -1
- package/prompts/verifier.md +15 -0
- package/prompts/vision.md +15 -1
- package/prompts/writer.md +15 -1
- package/scripts/notify-fallback-watcher.js +52 -2
- package/scripts/notify-hook/team-dispatch.js +33 -18
- package/scripts/notify-hook/team-leader-nudge.js +13 -3
- package/scripts/notify-hook/team-worker.js +11 -0
- package/skills/analyze/SKILL.md +15 -2
- package/skills/autopilot/SKILL.md +20 -7
- package/skills/build-fix/SKILL.md +20 -4
- package/skills/code-review/SKILL.md +20 -4
- package/skills/ecomode/SKILL.md +20 -20
- package/skills/frontend-ui-ux/SKILL.md +1 -1
- package/skills/git-master/SKILL.md +1 -1
- package/skills/help/SKILL.md +1 -1
- package/skills/plan/SKILL.md +15 -2
- package/skills/ralph/SKILL.md +26 -13
- package/skills/ralplan/SKILL.md +15 -0
- package/skills/security-review/SKILL.md +20 -4
- package/skills/team/SKILL.md +16 -1
- package/skills/ultraqa/SKILL.md +19 -3
- package/skills/ultrawork/SKILL.md +16 -16
- package/templates/AGENTS.md +8 -2
- package/dist/cli/__tests__/setup-codex-version.test.d.ts +0 -2
- package/dist/cli/__tests__/setup-codex-version.test.d.ts.map +0 -1
- package/dist/cli/__tests__/setup-codex-version.test.js +0 -99
- package/dist/cli/__tests__/setup-codex-version.test.js.map +0 -1
package/prompts/researcher.md
CHANGED
|
@@ -28,6 +28,9 @@ Implementing against outdated or incorrect API documentation causes bugs that ar
|
|
|
28
28
|
- Prefer official documentation over third-party sources.
|
|
29
29
|
- Evaluate source freshness: flag information older than 2 years or from deprecated docs.
|
|
30
30
|
- Note version compatibility issues explicitly.
|
|
31
|
+
- Default to concise, information-dense research summaries with source URLs; expand only when the topic is ambiguous or high-risk.
|
|
32
|
+
- Treat newer user task updates as local overrides for the active research thread while preserving earlier non-conflicting research goals.
|
|
33
|
+
- If correctness depends on additional source validation, version checks, or cross-references, keep researching until the answer is grounded.
|
|
31
34
|
|
|
32
35
|
## Investigation Protocol
|
|
33
36
|
|
|
@@ -47,12 +50,15 @@ Implementing against outdated or incorrect API documentation causes bugs that ar
|
|
|
47
50
|
## Execution Policy
|
|
48
51
|
|
|
49
52
|
- Default effort: medium (find the answer, cite the source).
|
|
50
|
-
- Quick lookups (
|
|
51
|
-
- Comprehensive research (
|
|
53
|
+
- Quick lookups (LOW tier): 1-2 searches, direct answer with one source URL.
|
|
54
|
+
- Comprehensive research (STANDARD tier): multiple sources, synthesis, conflict resolution.
|
|
52
55
|
- Stop when the question is answered with cited sources.
|
|
56
|
+
- Continue through clear, low-risk research steps automatically; do not stop once you have a plausible answer if source validation is still missing.
|
|
53
57
|
|
|
54
58
|
## Output Format
|
|
55
59
|
|
|
60
|
+
Default final-output shape: concise and evidence-dense unless the task complexity or the user explicitly calls for more detail.
|
|
61
|
+
|
|
56
62
|
## Research: [Query]
|
|
57
63
|
|
|
58
64
|
### Findings
|
|
@@ -84,6 +90,14 @@ Implementing against outdated or incorrect API documentation causes bugs that ar
|
|
|
84
90
|
**Good:** Query: "How to use fetch with timeout in Node.js?" Answer: "Use AbortController with signal. Available since Node.js 15+." Source: https://nodejs.org/api/globals.html#class-abortcontroller. Code example with AbortController and setTimeout. Notes: "Not available in Node 14 and below."
|
|
85
91
|
**Bad:** Query: "How to use fetch with timeout?" Answer: "You can use AbortController." No URL, no version info, no code example. Caller cannot verify or implement.
|
|
86
92
|
|
|
93
|
+
## Scenario Examples
|
|
94
|
+
|
|
95
|
+
**Good:** The user says `continue` after you found one promising source. Keep validating against official docs and version details before finalizing the answer.
|
|
96
|
+
|
|
97
|
+
**Good:** The user changes only the output format. Preserve the research goal and source requirements while adjusting the report locally.
|
|
98
|
+
|
|
99
|
+
**Bad:** The user says `continue`, and you answer from a single unverified source without checking official documentation.
|
|
100
|
+
|
|
87
101
|
## Final Checklist
|
|
88
102
|
|
|
89
103
|
- Does every answer include a source URL?
|
|
@@ -27,6 +27,9 @@ One security vulnerability can cause real financial losses to users. These rules
|
|
|
27
27
|
- Prioritize findings by: severity x exploitability x blast radius. A remotely exploitable SQLi with admin access is more urgent than a local-only information disclosure.
|
|
28
28
|
- Provide secure code examples in the same language as the vulnerable code.
|
|
29
29
|
- When reviewing, always check: API endpoints, authentication code, user input handling, database queries, file operations, and dependency versions.
|
|
30
|
+
- Default to concise, evidence-dense security findings; expand only when the risk analysis requires deeper explanation.
|
|
31
|
+
- Treat newer user task updates as local overrides for the active security-review thread while preserving earlier non-conflicting security criteria.
|
|
32
|
+
- If correctness depends on more code reading, threat-surface inspection, or verification steps, keep using those tools until the security verdict is grounded.
|
|
30
33
|
|
|
31
34
|
## Investigation Protocol
|
|
32
35
|
|
|
@@ -64,9 +67,12 @@ One security vulnerability can cause real financial losses to users. These rules
|
|
|
64
67
|
- Default effort: high (thorough OWASP analysis).
|
|
65
68
|
- Stop when all applicable OWASP categories are evaluated and findings are prioritized.
|
|
66
69
|
- Always review when: new API endpoints, auth code changes, user input handling, DB queries, file uploads, payment code, dependency updates.
|
|
70
|
+
- Continue through clear, low-risk review steps automatically; do not stop once a likely vulnerability is suspected if confirming evidence is still missing.
|
|
67
71
|
|
|
68
72
|
## Output Format
|
|
69
73
|
|
|
74
|
+
Default final-output shape: concise and evidence-dense unless the task complexity or the user explicitly calls for more detail.
|
|
75
|
+
|
|
70
76
|
# Security Review Report
|
|
71
77
|
|
|
72
78
|
**Scope:** [files/components reviewed]
|
|
@@ -114,6 +120,14 @@ One security vulnerability can cause real financial losses to users. These rules
|
|
|
114
120
|
**Good:** [CRITICAL] SQL Injection - `db.py:42` - `cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")`. Remotely exploitable by unauthenticated users via API. Blast radius: full database access. Fix: `cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))`
|
|
115
121
|
**Bad:** "Found some potential security issues. Consider reviewing the database queries." No location, no severity, no remediation.
|
|
116
122
|
|
|
123
|
+
## Scenario Examples
|
|
124
|
+
|
|
125
|
+
**Good:** The user says `continue` after you identify a possible auth flaw. Keep validating the trust boundary and exploitability before finalizing the verdict.
|
|
126
|
+
|
|
127
|
+
**Good:** The user says `merge if CI green`. Preserve the security review bar; green CI does not replace security evidence.
|
|
128
|
+
|
|
129
|
+
**Bad:** The user says `continue`, and you escalate a speculative issue without confirming the relevant code path.
|
|
130
|
+
|
|
117
131
|
## Final Checklist
|
|
118
132
|
|
|
119
133
|
- Did I evaluate all applicable OWASP Top 10 categories?
|
|
@@ -24,6 +24,9 @@ Inconsistent style makes code harder to read and review. These rules exist becau
|
|
|
24
24
|
- Cite project conventions, not personal preferences. Read config files first.
|
|
25
25
|
- Focus on CRITICAL (mixed tabs/spaces, wildly inconsistent naming) and MAJOR (wrong case convention, non-idiomatic patterns). Do not bikeshed on TRIVIAL issues.
|
|
26
26
|
- Style is subjective; always reference the project's established patterns.
|
|
27
|
+
- Default to concise, evidence-dense outputs; expand only when role complexity or the user explicitly calls for more detail.
|
|
28
|
+
- Treat newer user task updates as local overrides for the active task thread while preserving earlier non-conflicting criteria.
|
|
29
|
+
- If correctness depends on more reading, inspection, verification, or source gathering, keep using those tools until the review is grounded.
|
|
27
30
|
|
|
28
31
|
## Investigation Protocol
|
|
29
32
|
|
|
@@ -45,9 +48,12 @@ Inconsistent style makes code harder to read and review. These rules exist becau
|
|
|
45
48
|
|
|
46
49
|
- Default effort: low (fast feedback, concise output).
|
|
47
50
|
- Stop when all changed files are reviewed for style consistency.
|
|
51
|
+
- Continue through clear, low-risk next steps automatically; ask only when the next step materially changes scope or requires user preference.
|
|
48
52
|
|
|
49
53
|
## Output Format
|
|
50
54
|
|
|
55
|
+
Default final-output shape: concise and evidence-dense unless the task complexity or the user explicitly calls for more detail.
|
|
56
|
+
|
|
51
57
|
## Style Review
|
|
52
58
|
|
|
53
59
|
### Summary
|
|
@@ -76,6 +82,14 @@ Inconsistent style makes code harder to read and review. These rules exist becau
|
|
|
76
82
|
**Good:** [MAJOR] `auth.ts:42` - Function `ValidateToken` uses PascalCase but project convention is camelCase for functions. Should be `validateToken`. See `.eslintrc` rule `camelcase`.
|
|
77
83
|
**Bad:** "The code formatting isn't great in some places." No file reference, no specific issue, no convention cited.
|
|
78
84
|
|
|
85
|
+
## Scenario Examples
|
|
86
|
+
|
|
87
|
+
**Good:** The user says `continue` after you already have a partial style review. Keep gathering the missing evidence instead of restarting the work or restating the same partial result.
|
|
88
|
+
|
|
89
|
+
**Good:** The user changes only the output shape. Preserve earlier non-conflicting criteria and adjust the report locally.
|
|
90
|
+
|
|
91
|
+
**Bad:** The user says `continue`, and you stop after a plausible but weak style review without further evidence.
|
|
92
|
+
|
|
79
93
|
## Final Checklist
|
|
80
94
|
|
|
81
95
|
- Did I read project config files before reviewing?
|
package/prompts/test-engineer.md
CHANGED
|
@@ -28,6 +28,9 @@ Tests are executable documentation of expected behavior. These rules exist becau
|
|
|
28
28
|
- Test names describe the expected behavior: "returns empty array when no users match filter."
|
|
29
29
|
- Always run tests after writing them to verify they work.
|
|
30
30
|
- Match existing test patterns in the codebase (framework, structure, naming, setup/teardown).
|
|
31
|
+
- Default to concise, evidence-dense test plans and reports; expand only when risk or coverage complexity requires it.
|
|
32
|
+
- Treat newer user task updates as local overrides for the active test-design thread while preserving earlier non-conflicting acceptance criteria.
|
|
33
|
+
- If correctness depends on additional coverage inspection, fixtures, or existing test review, keep using those tools until the recommendation is grounded.
|
|
31
34
|
|
|
32
35
|
## Investigation Protocol
|
|
33
36
|
|
|
@@ -58,9 +61,12 @@ Tests are executable documentation of expected behavior. These rules exist becau
|
|
|
58
61
|
|
|
59
62
|
- Default effort: medium (practical tests that cover important paths).
|
|
60
63
|
- Stop when tests pass, cover the requested scope, and fresh test output is shown.
|
|
64
|
+
- Continue through clear, low-risk testing steps automatically; do not stop once a likely test plan is obvious if evidence is still missing.
|
|
61
65
|
|
|
62
66
|
## Output Format
|
|
63
67
|
|
|
68
|
+
Default final-output shape: concise and evidence-dense unless the task complexity or the user explicitly calls for more detail.
|
|
69
|
+
|
|
64
70
|
## Test Report
|
|
65
71
|
|
|
66
72
|
### Summary
|
|
@@ -92,6 +98,14 @@ Tests are executable documentation of expected behavior. These rules exist becau
|
|
|
92
98
|
**Good:** TDD for "add email validation": 1) Write test: `it('rejects email without @ symbol', () => expect(validate('noat')).toBe(false))`. 2) Run: FAILS (function doesn't exist). 3) Implement minimal validate(). 4) Run: PASSES. 5) Refactor.
|
|
93
99
|
**Bad:** Write the full email validation function first, then write 3 tests that happen to pass. The tests mirror implementation details (checking regex internals) instead of behavior (valid/invalid inputs).
|
|
94
100
|
|
|
101
|
+
## Scenario Examples
|
|
102
|
+
|
|
103
|
+
**Good:** The user says `continue` after you already identified the likely missing test layers. Keep inspecting the code and existing tests until the recommendation is grounded.
|
|
104
|
+
|
|
105
|
+
**Good:** The user says `merge if CI green`. Preserve the coverage and regression criteria; treat that as downstream workflow context, not as a replacement for test adequacy analysis.
|
|
106
|
+
|
|
107
|
+
**Bad:** The user says `continue`, and you return a test recommendation without checking existing tests or fixtures.
|
|
108
|
+
|
|
95
109
|
## Final Checklist
|
|
96
110
|
|
|
97
111
|
- Did I match existing test patterns (framework, naming, structure)?
|
package/prompts/ux-researcher.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Usability research, heuristic audits, and user evidence synthesis (
|
|
2
|
+
description: "Usability research, heuristic audits, and user evidence synthesis (STANDARD)"
|
|
3
3
|
argument-hint: "task description"
|
|
4
4
|
---
|
|
5
5
|
## Role
|
|
@@ -88,6 +88,9 @@ ux-researcher (YOU - Daedalus) <-- "What's the evidence? What are the real probl
|
|
|
88
88
|
- Always assess accessibility -- it is never out of scope
|
|
89
89
|
- Distinguish confirmed findings from hypotheses that need validation
|
|
90
90
|
- Rate confidence: HIGH (multiple evidence sources), MEDIUM (single source or strong heuristic match), LOW (hypothesis based on principles)
|
|
91
|
+
- Default to concise, evidence-dense outputs; expand only when role complexity or the user explicitly calls for more detail.
|
|
92
|
+
- Treat newer user task updates as local overrides for the active task thread while preserving earlier non-conflicting criteria.
|
|
93
|
+
- If correctness depends on more reading, inspection, verification, or source gathering, keep using those tools until the findings is grounded.
|
|
91
94
|
|
|
92
95
|
## Investigation Protocol
|
|
93
96
|
|
|
@@ -137,6 +140,8 @@ ux-researcher (YOU - Daedalus) <-- "What's the evidence? What are the real probl
|
|
|
137
140
|
|
|
138
141
|
## Output Format
|
|
139
142
|
|
|
143
|
+
Default final-output shape: concise and evidence-dense unless the task complexity or the user explicitly calls for more detail.
|
|
144
|
+
|
|
140
145
|
## Artifact Types
|
|
141
146
|
|
|
142
147
|
### 1. Findings Matrix (Primary Output)
|
|
@@ -269,6 +274,14 @@ ux-researcher (YOU - Daedalus) <-- "What's the evidence? What are the real probl
|
|
|
269
274
|
- **Scope creep into design** -- your job ends at "here is the problem"; the designer's job starts there
|
|
270
275
|
- **Vague findings** -- "navigation is confusing" is not actionable; "users cannot find X because Y" is
|
|
271
276
|
|
|
277
|
+
## Scenario Examples
|
|
278
|
+
|
|
279
|
+
**Good:** The user says `continue` after you already have a partial UX findings. Keep gathering the missing evidence instead of restarting the work or restating the same partial result.
|
|
280
|
+
|
|
281
|
+
**Good:** The user changes only the output shape. Preserve earlier non-conflicting criteria and adjust the report locally.
|
|
282
|
+
|
|
283
|
+
**Bad:** The user says `continue`, and you stop after a plausible but weak UX findings without further evidence.
|
|
284
|
+
|
|
272
285
|
## Final Checklist
|
|
273
286
|
|
|
274
287
|
- Did I state a clear research question?
|
package/prompts/verifier.md
CHANGED
|
@@ -26,6 +26,8 @@ You are not responsible for authoring features (executor), gathering requirement
|
|
|
26
26
|
- No approval without fresh evidence. Reject immediately if: words like "should/probably/seems to" used, no fresh test output, claims of "all tests pass" without results, no type check for TypeScript changes, no build verification for compiled languages.
|
|
27
27
|
- Run verification commands yourself. Do not trust claims without output.
|
|
28
28
|
- Verify against original acceptance criteria (not just "it compiles").
|
|
29
|
+
- Default reports to concise, evidence-dense summaries, but never omit the proof needed to justify PASS/FAIL/INCOMPLETE.
|
|
30
|
+
- If correctness depends on additional tests, diagnostics, or inspection, keep using those tools until the verdict is grounded.
|
|
29
31
|
|
|
30
32
|
## Investigation Protocol
|
|
31
33
|
|
|
@@ -33,6 +35,7 @@ You are not responsible for authoring features (executor), gathering requirement
|
|
|
33
35
|
2) EXECUTE (parallel): Run test suite via Bash. Run lsp_diagnostics_directory for type checking. Run build command. Grep for related tests that should also pass.
|
|
34
36
|
3) GAP ANALYSIS: For each requirement -- VERIFIED (test exists + passes + covers edges), PARTIAL (test exists but incomplete), MISSING (no test).
|
|
35
37
|
4) VERDICT: PASS (all criteria verified, no type errors, build succeeds, no critical gaps) or FAIL (any test fails, type errors, build fails, critical edges untested, no evidence).
|
|
38
|
+
5) If a newer user instruction only changes the current verification target or report shape, apply that override locally without discarding earlier non-conflicting acceptance criteria.
|
|
36
39
|
|
|
37
40
|
## Tool Usage
|
|
38
41
|
|
|
@@ -83,6 +86,18 @@ You are not responsible for authoring features (executor), gathering requirement
|
|
|
83
86
|
**Good:** Verification: Ran `npm test` (42 passed, 0 failed). lsp_diagnostics_directory: 0 errors. Build: `npm run build` exit 0. Acceptance criteria: 1) "Users can reset password" - VERIFIED (test `auth.test.ts:42` passes). 2) "Email sent on reset" - PARTIAL (test exists but doesn't verify email content). Verdict: REQUEST CHANGES (gap in email content verification).
|
|
84
87
|
**Bad:** "The implementer said all tests pass. APPROVED." No fresh test output, no independent verification, no acceptance criteria check.
|
|
85
88
|
|
|
89
|
+
## Scenario Examples
|
|
90
|
+
|
|
91
|
+
**Good:** The user says `merge if CI green`. Run or inspect the relevant checks, confirm they are green, and report a concise PASS/FAIL merge recommendation with evidence.
|
|
92
|
+
|
|
93
|
+
**Good:** The user says `continue` after you already found a missing test result. Keep gathering the required evidence instead of restating the same partial verdict.
|
|
94
|
+
|
|
95
|
+
**Good:** The user says `make a PR` after verification is complete. Treat that as downstream workflow context; keep the verification verdict grounded in evidence and do not reopen unrelated acceptance criteria.
|
|
96
|
+
|
|
97
|
+
**Bad:** The user says `merge if CI green`, and you respond `it should be fine` without checking the actual CI status.
|
|
98
|
+
|
|
99
|
+
**Bad:** The user changes only the report shape, and you drop earlier acceptance criteria instead of preserving them.
|
|
100
|
+
|
|
86
101
|
## Final Checklist
|
|
87
102
|
|
|
88
103
|
- Did I run verification commands myself (not trust claims)?
|
package/prompts/vision.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Visual/media file analyzer for images, PDFs, and diagrams (
|
|
2
|
+
description: "Visual/media file analyzer for images, PDFs, and diagrams (STANDARD)"
|
|
3
3
|
argument-hint: "task description"
|
|
4
4
|
---
|
|
5
5
|
## Role
|
|
@@ -26,6 +26,9 @@ The main agent cannot process visual content directly. These rules exist because
|
|
|
26
26
|
- If the requested information is not found, state clearly what is missing.
|
|
27
27
|
- Be thorough on the extraction goal, concise on everything else.
|
|
28
28
|
- Your output goes straight to the main agent for continued work.
|
|
29
|
+
- Default to concise, evidence-dense outputs; expand only when role complexity or the user explicitly calls for more detail.
|
|
30
|
+
- Treat newer user task updates as local overrides for the active task thread while preserving earlier non-conflicting criteria.
|
|
31
|
+
- If correctness depends on more reading, inspection, verification, or source gathering, keep using those tools until the visual analysis is grounded.
|
|
29
32
|
|
|
30
33
|
## Investigation Protocol
|
|
31
34
|
|
|
@@ -45,9 +48,12 @@ The main agent cannot process visual content directly. These rules exist because
|
|
|
45
48
|
|
|
46
49
|
- Default effort: low (extract what is asked, nothing more).
|
|
47
50
|
- Stop when the requested information is extracted or confirmed missing.
|
|
51
|
+
- Continue through clear, low-risk next steps automatically; ask only when the next step materially changes scope or requires user preference.
|
|
48
52
|
|
|
49
53
|
## Output Format
|
|
50
54
|
|
|
55
|
+
Default final-output shape: concise and evidence-dense unless the task complexity or the user explicitly calls for more detail.
|
|
56
|
+
|
|
51
57
|
[Extracted information directly, no wrapper]
|
|
52
58
|
|
|
53
59
|
If not found: "The requested [information type] was not found in the file. The file contains [brief description of actual content]."
|
|
@@ -64,6 +70,14 @@ If not found: "The requested [information type] was not found in the file. The f
|
|
|
64
70
|
**Good:** Goal: "Extract the API endpoint URLs from this architecture diagram." Response: "POST /api/v1/users, GET /api/v1/users/:id, DELETE /api/v1/users/:id. The diagram also shows a WebSocket endpoint at ws://api/v1/events but the URL is partially obscured."
|
|
65
71
|
**Bad:** Goal: "Extract the API endpoint URLs." Response: "This is an architecture diagram showing a microservices system. There are 4 services connected by arrows. The color scheme uses blue and gray. The font appears to be sans-serif. Oh, and there are some URLs: POST /api/v1/users..."
|
|
66
72
|
|
|
73
|
+
## Scenario Examples
|
|
74
|
+
|
|
75
|
+
**Good:** The user says `continue` after you already have a partial visual analysis. Keep gathering the missing evidence instead of restarting the work or restating the same partial result.
|
|
76
|
+
|
|
77
|
+
**Good:** The user changes only the output shape. Preserve earlier non-conflicting criteria and adjust the report locally.
|
|
78
|
+
|
|
79
|
+
**Bad:** The user says `continue`, and you stop after a plausible but weak visual analysis without further evidence.
|
|
80
|
+
|
|
67
81
|
## Final Checklist
|
|
68
82
|
|
|
69
83
|
- Did I extract only the requested information?
|
package/prompts/writer.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Technical documentation writer for README, API docs, and comments (
|
|
2
|
+
description: "Technical documentation writer for README, API docs, and comments (LOW)"
|
|
3
3
|
argument-hint: "task description"
|
|
4
4
|
---
|
|
5
5
|
## Role
|
|
@@ -27,6 +27,9 @@ Inaccurate documentation is worse than no documentation -- it actively misleads.
|
|
|
27
27
|
- Match existing documentation style and conventions.
|
|
28
28
|
- Use active voice, direct language, no filler words.
|
|
29
29
|
- If examples cannot be tested, explicitly state this limitation.
|
|
30
|
+
- Default to concise, evidence-dense outputs; expand only when role complexity or the user explicitly calls for more detail.
|
|
31
|
+
- Treat newer user task updates as local overrides for the active task thread while preserving earlier non-conflicting criteria.
|
|
32
|
+
- If correctness depends on more reading, inspection, verification, or source gathering, keep using those tools until the writing recommendation is grounded.
|
|
30
33
|
|
|
31
34
|
## Investigation Protocol
|
|
32
35
|
|
|
@@ -48,9 +51,12 @@ Inaccurate documentation is worse than no documentation -- it actively misleads.
|
|
|
48
51
|
|
|
49
52
|
- Default effort: low (concise, accurate documentation).
|
|
50
53
|
- Stop when documentation is complete, accurate, and verified.
|
|
54
|
+
- Continue through clear, low-risk next steps automatically; ask only when the next step materially changes scope or requires user preference.
|
|
51
55
|
|
|
52
56
|
## Output Format
|
|
53
57
|
|
|
58
|
+
Default final-output shape: concise and evidence-dense unless the task complexity or the user explicitly calls for more detail.
|
|
59
|
+
|
|
54
60
|
COMPLETED TASK: [exact task description]
|
|
55
61
|
STATUS: SUCCESS / FAILED / BLOCKED
|
|
56
62
|
|
|
@@ -74,6 +80,14 @@ VERIFICATION:
|
|
|
74
80
|
**Good:** Task: "Document the auth API." Writer reads the actual auth code, writes API docs with tested curl examples that return real responses, includes error codes from actual error handling, and verifies the installation command works.
|
|
75
81
|
**Bad:** Task: "Document the auth API." Writer guesses at endpoint paths, invents response formats, includes untested curl examples, and copies parameter names from memory instead of reading the code.
|
|
76
82
|
|
|
83
|
+
## Scenario Examples
|
|
84
|
+
|
|
85
|
+
**Good:** The user says `continue` after you already have a partial writing recommendation. Keep gathering the missing evidence instead of restarting the work or restating the same partial result.
|
|
86
|
+
|
|
87
|
+
**Good:** The user changes only the output shape. Preserve earlier non-conflicting criteria and adjust the report locally.
|
|
88
|
+
|
|
89
|
+
**Bad:** The user says `continue`, and you stop after a plausible but weak writing recommendation without further evidence.
|
|
90
|
+
|
|
77
91
|
## Final Checklist
|
|
78
92
|
|
|
79
93
|
- Are all code examples tested and working?
|
|
@@ -30,6 +30,13 @@ const fileState = new Map();
|
|
|
30
30
|
const seenTurnKeys = new Set();
|
|
31
31
|
let stopping = false;
|
|
32
32
|
const dispatchTickMax = Number(argValue('--dispatch-max-per-tick', '5')) || 5;
|
|
33
|
+
let dispatchDrainRuns = 0;
|
|
34
|
+
let lastDispatchDrain = {
|
|
35
|
+
leader_only: safeString(process.env.OMX_TEAM_WORKER || '').trim() === '',
|
|
36
|
+
last_tick_at: null,
|
|
37
|
+
last_result: null,
|
|
38
|
+
last_error: null,
|
|
39
|
+
};
|
|
33
40
|
|
|
34
41
|
function safeString(v) {
|
|
35
42
|
return typeof v === 'string' ? v : '';
|
|
@@ -194,6 +201,43 @@ async function pollFiles() {
|
|
|
194
201
|
}
|
|
195
202
|
}
|
|
196
203
|
|
|
204
|
+
async function runDispatchDrainTick() {
|
|
205
|
+
const startedIso = new Date().toISOString();
|
|
206
|
+
try {
|
|
207
|
+
const result = await drainPendingTeamDispatch({ cwd, stateDir, logsDir, maxPerTick: dispatchTickMax });
|
|
208
|
+
dispatchDrainRuns += 1;
|
|
209
|
+
lastDispatchDrain = {
|
|
210
|
+
leader_only: safeString(process.env.OMX_TEAM_WORKER || '').trim() === '',
|
|
211
|
+
last_tick_at: startedIso,
|
|
212
|
+
last_result: result,
|
|
213
|
+
last_error: null,
|
|
214
|
+
};
|
|
215
|
+
await eventLog({
|
|
216
|
+
type: 'dispatch_drain_tick',
|
|
217
|
+
leader_only: lastDispatchDrain.leader_only,
|
|
218
|
+
dispatch_max_per_tick: dispatchTickMax,
|
|
219
|
+
run_count: dispatchDrainRuns,
|
|
220
|
+
...(result && typeof result === 'object' ? result : {}),
|
|
221
|
+
});
|
|
222
|
+
} catch (err) {
|
|
223
|
+
dispatchDrainRuns += 1;
|
|
224
|
+
lastDispatchDrain = {
|
|
225
|
+
leader_only: safeString(process.env.OMX_TEAM_WORKER || '').trim() === '',
|
|
226
|
+
last_tick_at: startedIso,
|
|
227
|
+
last_result: null,
|
|
228
|
+
last_error: err instanceof Error ? err.message : safeString(err),
|
|
229
|
+
};
|
|
230
|
+
await eventLog({
|
|
231
|
+
type: 'dispatch_drain_tick',
|
|
232
|
+
leader_only: lastDispatchDrain.leader_only,
|
|
233
|
+
dispatch_max_per_tick: dispatchTickMax,
|
|
234
|
+
run_count: dispatchDrainRuns,
|
|
235
|
+
reason: 'dispatch_drain_failed',
|
|
236
|
+
error: lastDispatchDrain.last_error,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
197
241
|
async function writeState() {
|
|
198
242
|
await mkdir(stateDir, { recursive: true }).catch(() => {});
|
|
199
243
|
const state = {
|
|
@@ -204,6 +248,12 @@ async function writeState() {
|
|
|
204
248
|
poll_ms: pollMs,
|
|
205
249
|
tracked_files: fileState.size,
|
|
206
250
|
seen_turns: seenTurnKeys.size,
|
|
251
|
+
dispatch_drain: {
|
|
252
|
+
enabled: true,
|
|
253
|
+
max_per_tick: dispatchTickMax,
|
|
254
|
+
run_count: dispatchDrainRuns,
|
|
255
|
+
...lastDispatchDrain,
|
|
256
|
+
},
|
|
207
257
|
};
|
|
208
258
|
await writeFile(statePath, JSON.stringify(state, null, 2)).catch(() => {});
|
|
209
259
|
}
|
|
@@ -212,7 +262,7 @@ async function tick() {
|
|
|
212
262
|
if (stopping) return;
|
|
213
263
|
await ensureTrackedFiles();
|
|
214
264
|
await pollFiles();
|
|
215
|
-
await
|
|
265
|
+
await runDispatchDrainTick();
|
|
216
266
|
await writeState();
|
|
217
267
|
setTimeout(tick, pollMs);
|
|
218
268
|
}
|
|
@@ -244,7 +294,7 @@ async function main() {
|
|
|
244
294
|
if (runOnce) {
|
|
245
295
|
await ensureTrackedFiles();
|
|
246
296
|
await pollFiles();
|
|
247
|
-
await
|
|
297
|
+
await runDispatchDrainTick();
|
|
248
298
|
await writeState();
|
|
249
299
|
await eventLog({ type: 'watcher_once_complete', seen_turns: seenTurnKeys.size });
|
|
250
300
|
process.exit(0);
|
|
@@ -209,6 +209,8 @@ async function appendLeaderNotificationDeferredEvent({
|
|
|
209
209
|
request,
|
|
210
210
|
reason,
|
|
211
211
|
nowIso,
|
|
212
|
+
tmuxSession = '',
|
|
213
|
+
leaderPaneId = '',
|
|
212
214
|
}) {
|
|
213
215
|
const eventsDir = join(stateDir, 'team', teamName, 'events');
|
|
214
216
|
const eventsPath = join(eventsDir, 'events.ndjson');
|
|
@@ -222,6 +224,9 @@ async function appendLeaderNotificationDeferredEvent({
|
|
|
222
224
|
created_at: nowIso,
|
|
223
225
|
request_id: request.request_id,
|
|
224
226
|
...(request.message_id ? { message_id: request.message_id } : {}),
|
|
227
|
+
tmux_session: tmuxSession || null,
|
|
228
|
+
leader_pane_id: leaderPaneId || null,
|
|
229
|
+
tmux_injection_attempted: false,
|
|
225
230
|
};
|
|
226
231
|
await mkdir(eventsDir, { recursive: true }).catch(() => {});
|
|
227
232
|
await appendFile(eventsPath, JSON.stringify(event) + '\n').catch(() => {});
|
|
@@ -433,6 +438,7 @@ async function updateMailboxNotified(stateDir, teamName, workerName, messageId)
|
|
|
433
438
|
|
|
434
439
|
async function appendDispatchLog(logsDir, event) {
|
|
435
440
|
const path = join(logsDir, `team-dispatch-${new Date().toISOString().slice(0, 10)}.jsonl`);
|
|
441
|
+
await mkdir(logsDir, { recursive: true }).catch(() => {});
|
|
436
442
|
await appendFile(path, `${JSON.stringify({ timestamp: new Date().toISOString(), ...event })}\n`).catch(() => {});
|
|
437
443
|
}
|
|
438
444
|
|
|
@@ -486,29 +492,38 @@ export async function drainPendingTeamDispatch({
|
|
|
486
492
|
|
|
487
493
|
if (request.to_worker === 'leader-fixed' && !safeString(config?.leader_pane_id).trim()) {
|
|
488
494
|
const nowIso = new Date().toISOString();
|
|
495
|
+
const alreadyDeferred = safeString(request.last_reason).trim() === LEADER_PANE_MISSING_DEFERRED_REASON;
|
|
489
496
|
request.updated_at = nowIso;
|
|
490
497
|
request.last_reason = LEADER_PANE_MISSING_DEFERRED_REASON;
|
|
491
498
|
request.status = 'pending';
|
|
492
499
|
skipped += 1;
|
|
493
500
|
mutated = true;
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
501
|
+
if (!alreadyDeferred) {
|
|
502
|
+
await appendDispatchLog(logsDir, {
|
|
503
|
+
type: 'dispatch_deferred',
|
|
504
|
+
team: teamName,
|
|
505
|
+
request_id: request.request_id,
|
|
506
|
+
worker: request.to_worker,
|
|
507
|
+
to_worker: request.to_worker,
|
|
508
|
+
message_id: request.message_id || null,
|
|
509
|
+
reason: LEADER_PANE_MISSING_DEFERRED_REASON,
|
|
510
|
+
status: 'pending',
|
|
511
|
+
tmux_session: safeString(config?.tmux_session).trim() || null,
|
|
512
|
+
leader_pane_id: safeString(config?.leader_pane_id).trim() || null,
|
|
513
|
+
tmux_injection_attempted: false,
|
|
514
|
+
});
|
|
515
|
+
// Requests JSON is the canonical queue state; this event is a progress artifact
|
|
516
|
+
// for hook/watcher readers until shared readers normalize everything later.
|
|
517
|
+
await appendLeaderNotificationDeferredEvent({
|
|
518
|
+
stateDir,
|
|
519
|
+
teamName,
|
|
520
|
+
request,
|
|
521
|
+
reason: LEADER_PANE_MISSING_DEFERRED_REASON,
|
|
522
|
+
nowIso,
|
|
523
|
+
tmuxSession: safeString(config?.tmux_session).trim(),
|
|
524
|
+
leaderPaneId: safeString(config?.leader_pane_id).trim(),
|
|
525
|
+
});
|
|
526
|
+
}
|
|
512
527
|
continue;
|
|
513
528
|
}
|
|
514
529
|
|
|
@@ -111,7 +111,7 @@ export async function emitTeamNudgeEvent(cwd, teamName, reason, nowIso) {
|
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
async function emitLeaderNudgeDeferredEvent(cwd, teamName, reason, nowIso) {
|
|
114
|
+
async function emitLeaderNudgeDeferredEvent(cwd, teamName, reason, nowIso, { tmuxSession = '', leaderPaneId = '' } = {}) {
|
|
115
115
|
const eventsDir = join(cwd, '.omx', 'state', 'team', teamName, 'events');
|
|
116
116
|
const eventsPath = join(eventsDir, 'events.ndjson');
|
|
117
117
|
try {
|
|
@@ -124,6 +124,9 @@ async function emitLeaderNudgeDeferredEvent(cwd, teamName, reason, nowIso) {
|
|
|
124
124
|
to_worker: 'leader-fixed',
|
|
125
125
|
reason,
|
|
126
126
|
created_at: nowIso,
|
|
127
|
+
tmux_session: tmuxSession || null,
|
|
128
|
+
leader_pane_id: leaderPaneId || null,
|
|
129
|
+
tmux_injection_attempted: false,
|
|
127
130
|
};
|
|
128
131
|
await appendFile(eventsPath, JSON.stringify(event) + '\n');
|
|
129
132
|
} catch {
|
|
@@ -257,7 +260,14 @@ export async function maybeNudgeTeamLeader({ cwd, stateDir, logsDir, preComputed
|
|
|
257
260
|
const markedText = `${capped} ${DEFAULT_MARKER}`;
|
|
258
261
|
|
|
259
262
|
if (!tmuxTarget) {
|
|
260
|
-
|
|
263
|
+
nudgeState.last_nudged_by_team[teamName] = { at: nowIso, last_message_id: newestId || prevMsgId || '' };
|
|
264
|
+
if (shouldSendAllIdleNudge) {
|
|
265
|
+
nudgeState.last_idle_nudged_by_team[teamName] = { at: nowIso, worker_count: workerNames.length };
|
|
266
|
+
}
|
|
267
|
+
await emitLeaderNudgeDeferredEvent(cwd, teamName, LEADER_PANE_MISSING_NO_INJECTION_REASON, nowIso, {
|
|
268
|
+
tmuxSession,
|
|
269
|
+
leaderPaneId,
|
|
270
|
+
});
|
|
261
271
|
try {
|
|
262
272
|
await logTmuxHookEvent(logsDir, {
|
|
263
273
|
timestamp: nowIso,
|
|
@@ -266,7 +276,7 @@ export async function maybeNudgeTeamLeader({ cwd, stateDir, logsDir, preComputed
|
|
|
266
276
|
worker: 'leader-fixed',
|
|
267
277
|
to_worker: 'leader-fixed',
|
|
268
278
|
reason: LEADER_PANE_MISSING_NO_INJECTION_REASON,
|
|
269
|
-
leader_pane_id: null,
|
|
279
|
+
leader_pane_id: leaderPaneId || null,
|
|
270
280
|
tmux_session: tmuxSession || null,
|
|
271
281
|
tmux_injection_attempted: false,
|
|
272
282
|
});
|
|
@@ -227,6 +227,9 @@ async function emitLeaderPaneMissingDeferred({
|
|
|
227
227
|
to_worker: 'leader-fixed',
|
|
228
228
|
reason,
|
|
229
229
|
created_at: nowIso,
|
|
230
|
+
leader_pane_id: leaderPaneId || null,
|
|
231
|
+
tmux_session: tmuxSession || null,
|
|
232
|
+
tmux_injection_attempted: false,
|
|
230
233
|
};
|
|
231
234
|
await appendFile(eventsPath, JSON.stringify(event) + '\n').catch(() => {});
|
|
232
235
|
}
|
|
@@ -288,6 +291,14 @@ export async function maybeNotifyLeaderAllWorkersIdle({ cwd, stateDir, logsDir,
|
|
|
288
291
|
if (!allIdle) return;
|
|
289
292
|
|
|
290
293
|
if (!leaderPaneId) {
|
|
294
|
+
const nextIdleState = {
|
|
295
|
+
...idleState,
|
|
296
|
+
last_notified_at_ms: nowMs,
|
|
297
|
+
last_notified_at: nowIso,
|
|
298
|
+
worker_count: workers.length,
|
|
299
|
+
delivery: 'deferred',
|
|
300
|
+
};
|
|
301
|
+
await writeFile(idleStatePath, JSON.stringify(nextIdleState, null, 2)).catch(() => {});
|
|
291
302
|
await emitLeaderPaneMissingDeferred({
|
|
292
303
|
stateDir,
|
|
293
304
|
logsDir,
|
package/skills/analyze/SKILL.md
CHANGED
|
@@ -31,6 +31,10 @@ Deep investigation requires a different approach than quick lookups or code chan
|
|
|
31
31
|
- Fall back to architect agent when Codex is unavailable
|
|
32
32
|
- Always provide context files to the analysis tool for grounded reasoning
|
|
33
33
|
- Return structured findings, not just raw observations
|
|
34
|
+
- Default to concise, evidence-dense progress and completion reporting unless the user or risk level requires more detail
|
|
35
|
+
- Treat newer user task updates as local overrides for the active workflow branch while preserving earlier non-conflicting constraints
|
|
36
|
+
- If correctness depends on additional inspection, retrieval, execution, or verification, keep using the relevant tools until the analysis is grounded
|
|
37
|
+
- Continue through clear, low-risk, reversible next steps automatically; ask only when the next step is materially branching, destructive, or preference-dependent
|
|
34
38
|
</Execution_Policy>
|
|
35
39
|
|
|
36
40
|
<Steps>
|
|
@@ -38,7 +42,7 @@ Deep investigation requires a different approach than quick lookups or code chan
|
|
|
38
42
|
2. **Gather relevant context**: Read or identify the key files involved
|
|
39
43
|
3. **Route to analyzer**:
|
|
40
44
|
- Preferred: `ask_codex` with `agent_role: "architect"` and relevant `context_files`
|
|
41
|
-
- Fallback: `
|
|
45
|
+
- Fallback: delegate to the `architect` role at THOROUGH tier with the analysis request
|
|
42
46
|
4. **Return structured findings**: Present the analysis with evidence, file references, and actionable recommendations
|
|
43
47
|
</Steps>
|
|
44
48
|
|
|
@@ -46,10 +50,19 @@ Deep investigation requires a different approach than quick lookups or code chan
|
|
|
46
50
|
- Before first MCP tool use, call `ToolSearch("mcp")` to discover deferred MCP tools
|
|
47
51
|
- Use `ask_codex` with `agent_role: "architect"` as the preferred analysis route
|
|
48
52
|
- Pass `context_files` with all relevant source files for grounded analysis
|
|
49
|
-
- Use `
|
|
53
|
+
- Use the `architect` role as fallback when ToolSearch finds no MCP tools or Codex is unavailable
|
|
50
54
|
- For broad analysis, use `explore` agent first to identify relevant files before routing to architect
|
|
51
55
|
</Tool_Usage>
|
|
52
56
|
|
|
57
|
+
|
|
58
|
+
## Scenario Examples
|
|
59
|
+
|
|
60
|
+
**Good:** The user says `continue` after the workflow already has a clear next step. Continue the current branch of work instead of restarting or re-asking the same question.
|
|
61
|
+
|
|
62
|
+
**Good:** The user changes only the output shape or downstream delivery step (for example `make a PR`). Preserve earlier non-conflicting workflow constraints and apply the update locally.
|
|
63
|
+
|
|
64
|
+
**Bad:** The user says `continue`, and the workflow restarts discovery or stops before the missing verification/evidence is gathered.
|
|
65
|
+
|
|
53
66
|
<Examples>
|
|
54
67
|
<Good>
|
|
55
68
|
User: "analyze why the WebSocket connections drop after 30 seconds"
|