oh-my-codex 0.3.6 → 0.3.8

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 (43) hide show
  1. package/README.md +1 -0
  2. package/dist/agents/definitions.d.ts.map +1 -1
  3. package/dist/agents/definitions.js +14 -14
  4. package/dist/agents/definitions.js.map +1 -1
  5. package/dist/cli/__tests__/index.test.js +60 -5
  6. package/dist/cli/__tests__/index.test.js.map +1 -1
  7. package/dist/cli/index.d.ts +20 -2
  8. package/dist/cli/index.d.ts.map +1 -1
  9. package/dist/cli/index.js +171 -63
  10. package/dist/cli/index.js.map +1 -1
  11. package/dist/hooks/__tests__/agents-overlay.test.js +142 -1
  12. package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
  13. package/dist/hooks/agents-overlay.d.ts +10 -0
  14. package/dist/hooks/agents-overlay.d.ts.map +1 -1
  15. package/dist/hooks/agents-overlay.js +116 -25
  16. package/dist/hooks/agents-overlay.js.map +1 -1
  17. package/dist/hud/__tests__/state.test.d.ts +2 -0
  18. package/dist/hud/__tests__/state.test.d.ts.map +1 -0
  19. package/dist/hud/__tests__/state.test.js +32 -0
  20. package/dist/hud/__tests__/state.test.js.map +1 -0
  21. package/dist/hud/state.d.ts.map +1 -1
  22. package/dist/hud/state.js +6 -1
  23. package/dist/hud/state.js.map +1 -1
  24. package/dist/team/__tests__/runtime.test.js +29 -2
  25. package/dist/team/__tests__/runtime.test.js.map +1 -1
  26. package/dist/team/__tests__/worker-bootstrap.test.js +22 -1
  27. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  28. package/dist/team/orchestrator.d.ts.map +1 -1
  29. package/dist/team/orchestrator.js +2 -1
  30. package/dist/team/orchestrator.js.map +1 -1
  31. package/dist/team/runtime.d.ts +2 -0
  32. package/dist/team/runtime.d.ts.map +1 -1
  33. package/dist/team/runtime.js +40 -8
  34. package/dist/team/runtime.js.map +1 -1
  35. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  36. package/dist/team/worker-bootstrap.js +110 -33
  37. package/dist/team/worker-bootstrap.js.map +1 -1
  38. package/package.json +1 -1
  39. package/prompts/deep-executor.md +11 -102
  40. package/prompts/executor.md +102 -63
  41. package/skills/team/SKILL.md +16 -0
  42. package/skills/worker/SKILL.md +1 -0
  43. package/templates/AGENTS.md +36 -3
package/README.md CHANGED
@@ -175,6 +175,7 @@ Important rule: do not shutdown while tasks are still `in_progress` unless abort
175
175
 
176
176
  Examples:
177
177
  - Agents: `architect`, `planner`, `executor`, `debugger`, `verifier`, `security-reviewer`
178
+ - `deep-executor` is deprecated; use `executor` for complex implementation tasks.
178
179
  - Skills: `autopilot`, `plan`, `team`, `ralph`, `ultrawork`, `ultrapilot`, `research`, `cancel`
179
180
 
180
181
  ## Project Layout
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,0BAA0B;IAC1B,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IACvD,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAC;CACtE;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CA4N7D,CAAC;AAEF,mCAAmC;AACnC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAElE;AAED,mCAAmC;AACnC,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,eAAe,EAAE,CAE5F;AAED,0BAA0B;AAC1B,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,0BAA0B;IAC1B,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IACvD,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAC;CACtE;AAgBD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAgN7D,CAAC;AAEF,mCAAmC;AACnC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAElE;AAED,mCAAmC;AACnC,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,eAAe,EAAE,CAE5F;AAED,0BAA0B;AAC1B,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC"}
@@ -3,6 +3,18 @@
3
3
  * Each agent has a name, description, default model tier, and tool access pattern.
4
4
  * Prompt content is loaded from the prompts/ directory at runtime.
5
5
  */
6
+ const EXECUTOR_AGENT = {
7
+ name: 'executor',
8
+ description: 'Code implementation, refactoring, feature work',
9
+ model: 'sonnet',
10
+ tools: 'execution',
11
+ category: 'build',
12
+ };
13
+ const DEEP_EXECUTOR_ALIAS_AGENT = {
14
+ ...EXECUTOR_AGENT,
15
+ name: 'deep-executor',
16
+ description: '[Deprecated] Backward-compatible alias of executor',
17
+ };
6
18
  export const AGENT_DEFINITIONS = {
7
19
  // Build/Analysis Lane
8
20
  'explore': {
@@ -40,20 +52,8 @@ export const AGENT_DEFINITIONS = {
40
52
  tools: 'analysis',
41
53
  category: 'build',
42
54
  },
43
- 'executor': {
44
- name: 'executor',
45
- description: 'Code implementation, refactoring, feature work',
46
- model: 'sonnet',
47
- tools: 'execution',
48
- category: 'build',
49
- },
50
- 'deep-executor': {
51
- name: 'deep-executor',
52
- description: 'Complex autonomous goal-oriented tasks',
53
- model: 'opus',
54
- tools: 'execution',
55
- category: 'build',
56
- },
55
+ 'executor': EXECUTOR_AGENT,
56
+ 'deep-executor': DEEP_EXECUTOR_ALIAS_AGENT,
57
57
  'verifier': {
58
58
  name: 'verifier',
59
59
  description: 'Completion evidence, claim validation, test adequacy',
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { describe, it } from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
- import { normalizeCodexLaunchArgs, buildTmuxShellCommand, buildTmuxSessionName, readTopLevelTomlString, upsertTopLevelTomlString, collectInheritableTeamWorkerArgs, resolveTeamWorkerLaunchArgsEnv, injectModelInstructionsBypassArgs, } from '../index.js';
3
+ import { normalizeCodexLaunchArgs, buildTmuxShellCommand, buildTmuxSessionName, resolveCliInvocation, resolveCodexLaunchPolicy, parseTmuxPaneSnapshot, findHudWatchPaneIds, buildHudPaneCleanupTargets, readTopLevelTomlString, upsertTopLevelTomlString, collectInheritableTeamWorkerArgs, resolveTeamWorkerLaunchArgsEnv, injectModelInstructionsBypassArgs, } from '../index.js';
4
4
  describe('normalizeCodexLaunchArgs', () => {
5
5
  it('maps --madmax to codex bypass flag', () => {
6
6
  assert.deepEqual(normalizeCodexLaunchArgs(['--madmax']), ['--dangerously-bypass-approvals-and-sandbox']);
@@ -38,6 +38,42 @@ describe('normalizeCodexLaunchArgs', () => {
38
38
  assert.deepEqual(normalizeCodexLaunchArgs(['--xhigh', '--madmax']), ['--dangerously-bypass-approvals-and-sandbox', '-c', 'model_reasoning_effort="xhigh"']);
39
39
  });
40
40
  });
41
+ describe('resolveCliInvocation', () => {
42
+ it('resolves --help to the help command instead of launch', () => {
43
+ assert.deepEqual(resolveCliInvocation(['--help']), {
44
+ command: 'help',
45
+ launchArgs: [],
46
+ });
47
+ });
48
+ it('keeps unknown long flags as launch passthrough args', () => {
49
+ assert.deepEqual(resolveCliInvocation(['--model', 'gpt-5']), {
50
+ command: 'launch',
51
+ launchArgs: ['--model', 'gpt-5'],
52
+ });
53
+ });
54
+ });
55
+ describe('resolveCodexLaunchPolicy', () => {
56
+ it('launches directly when outside tmux', () => {
57
+ assert.equal(resolveCodexLaunchPolicy({}), 'direct');
58
+ });
59
+ it('uses tmux-aware launch path when already inside tmux', () => {
60
+ assert.equal(resolveCodexLaunchPolicy({ TMUX: '/tmp/tmux-1000/default,123,0' }), 'inside-tmux');
61
+ });
62
+ });
63
+ describe('tmux HUD pane helpers', () => {
64
+ it('findHudWatchPaneIds detects stale HUD watch panes and excludes current pane', () => {
65
+ const panes = parseTmuxPaneSnapshot([
66
+ '%1\tzsh\tzsh',
67
+ '%2\tnode\tnode /tmp/bin/omx.js hud --watch',
68
+ '%3\tnode\tnode /tmp/bin/omx.js hud --watch',
69
+ '%4\tcodex\tcodex --model gpt-5',
70
+ ].join('\n'));
71
+ assert.deepEqual(findHudWatchPaneIds(panes, '%2'), ['%3']);
72
+ });
73
+ it('buildHudPaneCleanupTargets de-dupes pane ids and includes created pane', () => {
74
+ assert.deepEqual(buildHudPaneCleanupTargets(['%3', '%3', 'invalid'], '%4'), ['%3', '%4']);
75
+ });
76
+ });
41
77
  describe('buildTmuxShellCommand', () => {
42
78
  it('preserves quoted config values for tmux shell-command execution', () => {
43
79
  assert.equal(buildTmuxShellCommand('codex', ['--dangerously-bypass-approvals-and-sandbox', '-c', 'model_reasoning_effort="xhigh"']), `'codex' '--dangerously-bypass-approvals-and-sandbox' '-c' 'model_reasoning_effort="xhigh"'`);
@@ -56,15 +92,30 @@ describe('buildTmuxSessionName', () => {
56
92
  });
57
93
  });
58
94
  describe('team worker launch arg inheritance helpers', () => {
59
- it('collectInheritableTeamWorkerArgs extracts bypass and reasoning overrides', () => {
60
- assert.deepEqual(collectInheritableTeamWorkerArgs(['--dangerously-bypass-approvals-and-sandbox', '-c', 'model_reasoning_effort="xhigh"', '--model', 'gpt-5']), ['--dangerously-bypass-approvals-and-sandbox', '-c', 'model_reasoning_effort="xhigh"']);
95
+ it('collectInheritableTeamWorkerArgs extracts bypass, reasoning, and model overrides', () => {
96
+ assert.deepEqual(collectInheritableTeamWorkerArgs(['--dangerously-bypass-approvals-and-sandbox', '-c', 'model_reasoning_effort="xhigh"', '--model', 'gpt-5']), ['--dangerously-bypass-approvals-and-sandbox', '-c', 'model_reasoning_effort="xhigh"', '--model', 'gpt-5']);
61
97
  });
62
- it('resolveTeamWorkerLaunchArgsEnv merges and normalizes with de-dupe + last reasoning wins', () => {
63
- assert.equal(resolveTeamWorkerLaunchArgsEnv('--dangerously-bypass-approvals-and-sandbox -c model_reasoning_effort="high" --no-alt-screen', ['-c', 'model_reasoning_effort="xhigh"', '--dangerously-bypass-approvals-and-sandbox'], true), '--no-alt-screen --dangerously-bypass-approvals-and-sandbox -c model_reasoning_effort="xhigh"');
98
+ it('collectInheritableTeamWorkerArgs supports --model=<value> syntax', () => {
99
+ assert.deepEqual(collectInheritableTeamWorkerArgs(['--model=gpt-5.3-codex-spark']), ['--model', 'gpt-5.3-codex-spark']);
100
+ });
101
+ it('resolveTeamWorkerLaunchArgsEnv merges and normalizes with de-dupe + last reasoning/model wins', () => {
102
+ assert.equal(resolveTeamWorkerLaunchArgsEnv('--dangerously-bypass-approvals-and-sandbox -c model_reasoning_effort="high" --model old-a --no-alt-screen --model=old-b', ['-c', 'model_reasoning_effort="xhigh"', '--dangerously-bypass-approvals-and-sandbox', '--model', 'gpt-5'], true), '--no-alt-screen --dangerously-bypass-approvals-and-sandbox -c model_reasoning_effort="xhigh" --model old-b');
64
103
  });
65
104
  it('resolveTeamWorkerLaunchArgsEnv can opt out of leader inheritance', () => {
66
105
  assert.equal(resolveTeamWorkerLaunchArgsEnv('--no-alt-screen', ['--dangerously-bypass-approvals-and-sandbox', '-c', 'model_reasoning_effort="xhigh"'], false), '--no-alt-screen');
67
106
  });
107
+ it('resolveTeamWorkerLaunchArgsEnv uses inherited model when env model is absent', () => {
108
+ assert.equal(resolveTeamWorkerLaunchArgsEnv('--no-alt-screen', ['--model=gpt-5.3-codex-spark'], true), '--no-alt-screen --model gpt-5.3-codex-spark');
109
+ });
110
+ it('resolveTeamWorkerLaunchArgsEnv uses default model when env and inherited models are absent', () => {
111
+ assert.equal(resolveTeamWorkerLaunchArgsEnv('--no-alt-screen', ['--dangerously-bypass-approvals-and-sandbox'], true, 'gpt-5.3-codex-spark'), '--no-alt-screen --dangerously-bypass-approvals-and-sandbox --model gpt-5.3-codex-spark');
112
+ });
113
+ it('resolveTeamWorkerLaunchArgsEnv keeps exactly one final model with precedence env > inherited > default', () => {
114
+ assert.equal(resolveTeamWorkerLaunchArgsEnv('--model env-model --model=env-model-final', ['--model', 'inherited-model'], true, 'fallback-model'), '--model env-model-final');
115
+ });
116
+ it('resolveTeamWorkerLaunchArgsEnv prefers inherited model over default when env model is absent', () => {
117
+ assert.equal(resolveTeamWorkerLaunchArgsEnv('--no-alt-screen', ['--model', 'inherited-model'], true, 'fallback-model'), '--no-alt-screen --model inherited-model');
118
+ });
68
119
  });
69
120
  describe('readTopLevelTomlString', () => {
70
121
  it('reads a top-level string value', () => {
@@ -93,6 +144,10 @@ describe('injectModelInstructionsBypassArgs', () => {
93
144
  const args = injectModelInstructionsBypassArgs('/tmp/my-project', [], { OMX_MODEL_INSTRUCTIONS_FILE: '/tmp/alt instructions.md' });
94
145
  assert.deepEqual(args, ['-c', 'model_instructions_file="/tmp/alt instructions.md"']);
95
146
  });
147
+ it('uses session-scoped default model_instructions_file when provided', () => {
148
+ const args = injectModelInstructionsBypassArgs('/tmp/my-project', ['--model', 'gpt-5'], {}, '/tmp/my-project/.omx/state/sessions/session-1/AGENTS.md');
149
+ assert.deepEqual(args, ['--model', 'gpt-5', '-c', 'model_instructions_file="/tmp/my-project/.omx/state/sessions/session-1/AGENTS.md"']);
150
+ });
96
151
  });
97
152
  describe('upsertTopLevelTomlString', () => {
98
153
  it('replaces an existing top-level key', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/index.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/index.test.ts"],"names":[],"mappings":"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"}
@@ -2,13 +2,31 @@
2
2
  * oh-my-codex CLI
3
3
  * Multi-agent orchestration for OpenAI Codex CLI
4
4
  */
5
+ type CliCommand = 'launch' | 'setup' | 'doctor' | 'team' | 'version' | 'tmux-hook' | 'hud' | 'status' | 'cancel' | 'help' | 'reasoning' | string;
6
+ export interface ResolvedCliInvocation {
7
+ command: CliCommand;
8
+ launchArgs: string[];
9
+ }
10
+ export declare function resolveCliInvocation(args: string[]): ResolvedCliInvocation;
11
+ export type CodexLaunchPolicy = 'inside-tmux' | 'direct';
12
+ export declare function resolveCodexLaunchPolicy(env?: NodeJS.ProcessEnv): CodexLaunchPolicy;
13
+ interface TmuxPaneSnapshot {
14
+ paneId: string;
15
+ currentCommand: string;
16
+ startCommand: string;
17
+ }
18
+ export declare function parseTmuxPaneSnapshot(output: string): TmuxPaneSnapshot[];
19
+ export declare function isHudWatchPane(pane: TmuxPaneSnapshot): boolean;
20
+ export declare function findHudWatchPaneIds(panes: TmuxPaneSnapshot[], currentPaneId?: string): string[];
21
+ export declare function buildHudPaneCleanupTargets(existingPaneIds: string[], createdPaneId: string | null): string[];
5
22
  export declare function main(args: string[]): Promise<void>;
6
23
  export declare function normalizeCodexLaunchArgs(args: string[]): string[];
7
- export declare function injectModelInstructionsBypassArgs(cwd: string, args: string[], env?: NodeJS.ProcessEnv): string[];
24
+ export declare function injectModelInstructionsBypassArgs(cwd: string, args: string[], env?: NodeJS.ProcessEnv, defaultFilePath?: string): string[];
8
25
  export declare function collectInheritableTeamWorkerArgs(codexArgs: string[]): string[];
9
- export declare function resolveTeamWorkerLaunchArgsEnv(existingRaw: string | undefined, codexArgs: string[], inheritLeaderFlags?: boolean): string | null;
26
+ export declare function resolveTeamWorkerLaunchArgsEnv(existingRaw: string | undefined, codexArgs: string[], inheritLeaderFlags?: boolean, defaultModel?: string): string | null;
10
27
  export declare function readTopLevelTomlString(content: string, key: string): string | null;
11
28
  export declare function upsertTopLevelTomlString(content: string, key: string, value: string): string;
12
29
  export declare function buildTmuxSessionName(cwd: string, sessionId: string): string;
13
30
  export declare function buildTmuxShellCommand(command: string, args: string[]): string;
31
+ export {};
14
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmEH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmExD;AAgGD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CA2CjE;AAsCD,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,EAAE,CAI7H;AAUD,wBAAgB,gCAAgC,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAwB9E;AA+BD,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,kBAAkB,UAAO,GAAG,MAAM,GAAG,IAAI,CAM7I;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBlF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAyC5F;AAsBD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAgB3E;AAwGD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAE7E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyEH,KAAK,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAEjJ,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,UAAU,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,qBAAqB,CAY1E;AAED,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEzD,wBAAgB,wBAAwB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,iBAAiB,CAEhG;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAcxE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAK9D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAK/F;AAED,wBAAgB,0BAA0B,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CAM5G;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgExD;AAgGD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CA2CjE;AAsCD,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,EAAE,CAIV;AA2ED,wBAAgB,gCAAgC,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAQ9E;AAeD,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,SAAS,EAAE,MAAM,EAAE,EACnB,kBAAkB,UAAO,EACzB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,GAAG,IAAI,CAef;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBlF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAyC5F;AAsBD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAgB3E;AAoJD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAE7E"}
package/dist/cli/index.js CHANGED
@@ -13,7 +13,7 @@ import { hudCommand } from '../hud/index.js';
13
13
  import { teamCommand } from './team.js';
14
14
  import { getAllScopedStateDirs, getBaseStateDir, getStateDir } from '../mcp/state-paths.js';
15
15
  import { maybeCheckAndPromptUpdate } from './update.js';
16
- import { generateOverlay, applyOverlay, stripOverlay } from '../hooks/agents-overlay.js';
16
+ import { generateOverlay, writeSessionModelInstructionsFile, removeSessionModelInstructionsFile, sessionModelInstructionsPath, } from '../hooks/agents-overlay.js';
17
17
  import { readSessionState, isSessionStale, writeSessionStart, writeSessionEnd, resetSessionMetrics, } from '../hooks/session.js';
18
18
  import { getPackageRoot } from '../utils/package.js';
19
19
  import { codexConfigPath } from '../utils/paths.js';
@@ -21,7 +21,7 @@ const HELP = `
21
21
  oh-my-codex (omx) - Multi-agent orchestration for Codex CLI
22
22
 
23
23
  Usage:
24
- omx Launch Codex CLI + HUD in tmux (or just Codex if no tmux)
24
+ omx Launch Codex CLI (HUD auto-attaches only when already inside tmux)
25
25
  omx setup Install skills, prompts, MCP servers, and AGENTS.md
26
26
  omx doctor Check installation health
27
27
  omx doctor --team Check team/swarm runtime health diagnostics
@@ -48,6 +48,7 @@ Options:
48
48
  `;
49
49
  const MADMAX_FLAG = '--madmax';
50
50
  const CODEX_BYPASS_FLAG = '--dangerously-bypass-approvals-and-sandbox';
51
+ const MODEL_FLAG = '--model';
51
52
  const HIGH_REASONING_FLAG = '--high';
52
53
  const XHIGH_REASONING_FLAG = '--xhigh';
53
54
  const CONFIG_FLAG = '-c';
@@ -61,15 +62,62 @@ const OMX_MODEL_INSTRUCTIONS_FILE_ENV = 'OMX_MODEL_INSTRUCTIONS_FILE';
61
62
  const REASONING_MODES = ['low', 'medium', 'high', 'xhigh'];
62
63
  const REASONING_MODE_SET = new Set(REASONING_MODES);
63
64
  const REASONING_USAGE = 'Usage: omx reasoning <low|medium|high|xhigh>';
65
+ export function resolveCliInvocation(args) {
66
+ const firstArg = args[0];
67
+ if (firstArg === '--help' || firstArg === '-h') {
68
+ return { command: 'help', launchArgs: [] };
69
+ }
70
+ if (!firstArg || firstArg.startsWith('--')) {
71
+ return { command: 'launch', launchArgs: firstArg ? args : [] };
72
+ }
73
+ if (firstArg === 'launch') {
74
+ return { command: 'launch', launchArgs: args.slice(1) };
75
+ }
76
+ return { command: firstArg, launchArgs: [] };
77
+ }
78
+ export function resolveCodexLaunchPolicy(env = process.env) {
79
+ return env.TMUX ? 'inside-tmux' : 'direct';
80
+ }
81
+ export function parseTmuxPaneSnapshot(output) {
82
+ return output
83
+ .split('\n')
84
+ .map((line) => line.trim())
85
+ .filter(Boolean)
86
+ .map((line) => {
87
+ const [paneId = '', currentCommand = '', ...startCommandParts] = line.split('\t');
88
+ return {
89
+ paneId: paneId.trim(),
90
+ currentCommand: currentCommand.trim(),
91
+ startCommand: startCommandParts.join('\t').trim(),
92
+ };
93
+ })
94
+ .filter((pane) => pane.paneId.startsWith('%'));
95
+ }
96
+ export function isHudWatchPane(pane) {
97
+ const command = `${pane.startCommand} ${pane.currentCommand}`.toLowerCase();
98
+ return /\bhud\b/.test(command)
99
+ && /--watch\b/.test(command)
100
+ && (/\bomx(?:\.js)?\b/.test(command) || /\bnode\b/.test(command));
101
+ }
102
+ export function findHudWatchPaneIds(panes, currentPaneId) {
103
+ return panes
104
+ .filter((pane) => pane.paneId !== currentPaneId)
105
+ .filter((pane) => isHudWatchPane(pane))
106
+ .map((pane) => pane.paneId);
107
+ }
108
+ export function buildHudPaneCleanupTargets(existingPaneIds, createdPaneId) {
109
+ const targets = new Set(existingPaneIds.filter((id) => id.startsWith('%')));
110
+ if (createdPaneId && createdPaneId.startsWith('%')) {
111
+ targets.add(createdPaneId);
112
+ }
113
+ return [...targets];
114
+ }
64
115
  export async function main(args) {
65
116
  const knownCommands = new Set([
66
117
  'launch', 'setup', 'doctor', 'team', 'version', 'tmux-hook', 'hud', 'status', 'cancel', 'help', '--help', '-h',
67
118
  ]);
68
119
  const firstArg = args[0];
69
- const command = !firstArg || firstArg.startsWith('--') ? 'launch' : firstArg;
70
- const launchArgs = command === 'launch'
71
- ? (firstArg && firstArg.startsWith('--') ? args : args.slice(1))
72
- : [];
120
+ const { command, launchArgs } = resolveCliInvocation(args);
73
121
  const flags = new Set(args.filter(a => a.startsWith('--')));
74
122
  const options = {
75
123
  force: flags.has('--force'),
@@ -209,7 +257,7 @@ async function launchWithHud(args) {
209
257
  }
210
258
  // ── Phase 2: run ────────────────────────────────────────────────────────
211
259
  try {
212
- runCodex(cwd, normalizedArgs);
260
+ runCodex(cwd, normalizedArgs, sessionId);
213
261
  }
214
262
  finally {
215
263
  // ── Phase 3: postLaunch ─────────────────────────────────────────────
@@ -279,16 +327,16 @@ function hasModelInstructionsOverride(args) {
279
327
  function shouldBypassDefaultSystemPrompt(env) {
280
328
  return env[OMX_BYPASS_DEFAULT_SYSTEM_PROMPT_ENV] !== '0';
281
329
  }
282
- function buildModelInstructionsOverride(cwd, env) {
283
- const filePath = env[OMX_MODEL_INSTRUCTIONS_FILE_ENV] || join(cwd, 'AGENTS.md');
330
+ function buildModelInstructionsOverride(cwd, env, defaultFilePath) {
331
+ const filePath = env[OMX_MODEL_INSTRUCTIONS_FILE_ENV] || defaultFilePath || join(cwd, 'AGENTS.md');
284
332
  return `${MODEL_INSTRUCTIONS_FILE_KEY}="${escapeTomlString(filePath)}"`;
285
333
  }
286
- export function injectModelInstructionsBypassArgs(cwd, args, env = process.env) {
334
+ export function injectModelInstructionsBypassArgs(cwd, args, env = process.env, defaultFilePath) {
287
335
  if (!shouldBypassDefaultSystemPrompt(env))
288
336
  return [...args];
289
337
  if (hasModelInstructionsOverride(args))
290
338
  return [...args];
291
- return [...args, CONFIG_FLAG, buildModelInstructionsOverride(cwd, env)];
339
+ return [...args, CONFIG_FLAG, buildModelInstructionsOverride(cwd, env, defaultFilePath)];
292
340
  }
293
341
  function splitWorkerLaunchArgs(raw) {
294
342
  if (!raw || raw.trim() === '')
@@ -298,38 +346,37 @@ function splitWorkerLaunchArgs(raw) {
298
346
  .map((s) => s.trim())
299
347
  .filter(Boolean);
300
348
  }
301
- export function collectInheritableTeamWorkerArgs(codexArgs) {
349
+ function isValidModelValue(value) {
350
+ return value.trim().length > 0 && !value.startsWith('-');
351
+ }
352
+ function parseTeamWorkerLaunchArgs(args) {
353
+ const passthrough = [];
302
354
  let wantsBypass = false;
303
355
  let reasoningOverride = null;
304
- for (let i = 0; i < codexArgs.length; i++) {
305
- const arg = codexArgs[i];
356
+ let modelOverride = null;
357
+ for (let i = 0; i < args.length; i++) {
358
+ const arg = args[i];
306
359
  if (arg === CODEX_BYPASS_FLAG || arg === MADMAX_FLAG) {
307
360
  wantsBypass = true;
308
361
  continue;
309
362
  }
310
- if (arg === CONFIG_FLAG) {
311
- const maybeValue = codexArgs[i + 1];
312
- if (typeof maybeValue === 'string' && isReasoningOverride(maybeValue)) {
313
- reasoningOverride = maybeValue;
363
+ if (arg === MODEL_FLAG) {
364
+ const maybeValue = args[i + 1];
365
+ if (typeof maybeValue === 'string' && isValidModelValue(maybeValue)) {
366
+ modelOverride = maybeValue.trim();
314
367
  i += 1;
368
+ continue;
315
369
  }
370
+ passthrough.push(arg);
371
+ continue;
316
372
  }
317
- }
318
- const inherited = [];
319
- if (wantsBypass)
320
- inherited.push(CODEX_BYPASS_FLAG);
321
- if (reasoningOverride)
322
- inherited.push(CONFIG_FLAG, reasoningOverride);
323
- return inherited;
324
- }
325
- function normalizeTeamWorkerLaunchArgs(args) {
326
- const passthrough = [];
327
- let wantsBypass = false;
328
- let reasoningOverride = null;
329
- for (let i = 0; i < args.length; i++) {
330
- const arg = args[i];
331
- if (arg === CODEX_BYPASS_FLAG || arg === MADMAX_FLAG) {
332
- wantsBypass = true;
373
+ if (arg.startsWith(`${MODEL_FLAG}=`)) {
374
+ const inlineValue = arg.slice(`${MODEL_FLAG}=`.length).trim();
375
+ if (isValidModelValue(inlineValue)) {
376
+ modelOverride = inlineValue;
377
+ continue;
378
+ }
379
+ passthrough.push(arg);
333
380
  continue;
334
381
  }
335
382
  if (arg === CONFIG_FLAG) {
@@ -342,17 +389,47 @@ function normalizeTeamWorkerLaunchArgs(args) {
342
389
  }
343
390
  passthrough.push(arg);
344
391
  }
345
- if (wantsBypass)
346
- passthrough.push(CODEX_BYPASS_FLAG);
347
- if (reasoningOverride)
348
- passthrough.push(CONFIG_FLAG, reasoningOverride);
349
- return passthrough;
350
- }
351
- export function resolveTeamWorkerLaunchArgsEnv(existingRaw, codexArgs, inheritLeaderFlags = true) {
352
- const args = splitWorkerLaunchArgs(existingRaw);
353
- if (inheritLeaderFlags)
354
- args.push(...collectInheritableTeamWorkerArgs(codexArgs));
355
- const normalized = normalizeTeamWorkerLaunchArgs(args);
392
+ return {
393
+ passthrough,
394
+ wantsBypass,
395
+ reasoningOverride,
396
+ modelOverride,
397
+ };
398
+ }
399
+ export function collectInheritableTeamWorkerArgs(codexArgs) {
400
+ const parsed = parseTeamWorkerLaunchArgs(codexArgs);
401
+ const inherited = [];
402
+ if (parsed.wantsBypass)
403
+ inherited.push(CODEX_BYPASS_FLAG);
404
+ if (parsed.reasoningOverride)
405
+ inherited.push(CONFIG_FLAG, parsed.reasoningOverride);
406
+ if (parsed.modelOverride)
407
+ inherited.push(MODEL_FLAG, parsed.modelOverride);
408
+ return inherited;
409
+ }
410
+ function normalizeTeamWorkerLaunchArgs(args, preferredModel) {
411
+ const parsed = parseTeamWorkerLaunchArgs(args);
412
+ const normalized = [...parsed.passthrough];
413
+ if (parsed.wantsBypass)
414
+ normalized.push(CODEX_BYPASS_FLAG);
415
+ if (parsed.reasoningOverride)
416
+ normalized.push(CONFIG_FLAG, parsed.reasoningOverride);
417
+ const selectedModel = preferredModel ?? parsed.modelOverride ?? undefined;
418
+ if (selectedModel)
419
+ normalized.push(MODEL_FLAG, selectedModel);
420
+ return normalized;
421
+ }
422
+ export function resolveTeamWorkerLaunchArgsEnv(existingRaw, codexArgs, inheritLeaderFlags = true, defaultModel) {
423
+ const envArgs = splitWorkerLaunchArgs(existingRaw);
424
+ const inheritedArgs = inheritLeaderFlags ? collectInheritableTeamWorkerArgs(codexArgs) : [];
425
+ const allArgs = [...envArgs, ...inheritedArgs];
426
+ const envModel = parseTeamWorkerLaunchArgs(envArgs).modelOverride;
427
+ const inheritedModel = parseTeamWorkerLaunchArgs(inheritedArgs).modelOverride;
428
+ const fallbackModel = typeof defaultModel === 'string' && defaultModel.trim().length > 0
429
+ ? defaultModel.trim()
430
+ : undefined;
431
+ const selectedModel = envModel ?? inheritedModel ?? fallbackModel;
432
+ const normalized = normalizeTeamWorkerLaunchArgs(allArgs, selectedModel ?? undefined);
356
433
  if (normalized.length === 0)
357
434
  return null;
358
435
  return normalized.join(' ');
@@ -457,16 +534,15 @@ export function buildTmuxSessionName(cwd, sessionId) {
457
534
  /**
458
535
  * preLaunch: Prepare environment before Codex starts.
459
536
  * 1. Orphan cleanup (stale session from a crashed launch)
460
- * 2. Generate + apply AGENTS.md overlay
537
+ * 2. Generate runtime overlay + write session-scoped model instructions file
461
538
  * 3. Write session.json
462
539
  */
463
540
  async function preLaunch(cwd, sessionId) {
464
541
  // 1. Orphan cleanup
465
542
  const existingSession = await readSessionState(cwd);
466
543
  if (existingSession && isSessionStale(existingSession)) {
467
- const agentsMdPath = join(cwd, 'AGENTS.md');
468
544
  try {
469
- await stripOverlay(agentsMdPath, cwd);
545
+ await removeSessionModelInstructionsFile(cwd, existingSession.session_id);
470
546
  }
471
547
  catch { /* best effort */ }
472
548
  const { unlink } = await import('fs/promises');
@@ -475,10 +551,9 @@ async function preLaunch(cwd, sessionId) {
475
551
  }
476
552
  catch { /* best effort */ }
477
553
  }
478
- // 2. Generate + apply AGENTS.md overlay
479
- const agentsMdPath = join(cwd, 'AGENTS.md');
554
+ // 2. Generate runtime overlay + write session-scoped model instructions file
480
555
  const overlay = await generateOverlay(cwd, sessionId);
481
- await applyOverlay(agentsMdPath, overlay, cwd);
556
+ await writeSessionModelInstructionsFile(cwd, sessionId, overlay);
482
557
  // 3. Write session state
483
558
  await resetSessionMetrics(cwd);
484
559
  await writeSessionStart(cwd, sessionId);
@@ -494,34 +569,45 @@ async function preLaunch(cwd, sessionId) {
494
569
  * runCodex: Launch Codex CLI (blocks until exit).
495
570
  * All 3 paths (new tmux, existing tmux, no tmux) block via execSync/execFileSync.
496
571
  */
497
- function runCodex(cwd, args) {
498
- const launchArgs = injectModelInstructionsBypassArgs(cwd, args);
572
+ function runCodex(cwd, args, sessionId) {
573
+ const launchArgs = injectModelInstructionsBypassArgs(cwd, args, process.env, sessionModelInstructionsPath(cwd, sessionId));
499
574
  const omxBin = process.argv[1];
500
- const codexCmd = buildTmuxShellCommand('codex', launchArgs);
501
575
  const hudCmd = buildTmuxShellCommand('node', [omxBin, 'hud', '--watch']);
502
576
  const inheritLeaderFlags = process.env[TEAM_INHERIT_LEADER_FLAGS_ENV] !== '0';
503
577
  const workerLaunchArgs = resolveTeamWorkerLaunchArgsEnv(process.env[TEAM_WORKER_LAUNCH_ARGS_ENV], launchArgs, inheritLeaderFlags);
504
578
  const codexEnv = workerLaunchArgs
505
579
  ? { ...process.env, [TEAM_WORKER_LAUNCH_ARGS_ENV]: workerLaunchArgs }
506
580
  : process.env;
507
- if (process.env.TMUX) {
581
+ if (resolveCodexLaunchPolicy(process.env) === 'inside-tmux') {
508
582
  // Already in tmux: launch codex in current pane, HUD in bottom split
583
+ const currentPaneId = process.env.TMUX_PANE;
584
+ const staleHudPaneIds = listHudWatchPaneIdsInCurrentWindow(currentPaneId);
585
+ for (const paneId of staleHudPaneIds) {
586
+ killTmuxPane(paneId);
587
+ }
588
+ let hudPaneId = null;
509
589
  try {
510
- execFileSync('tmux', ['split-window', '-v', '-l', '4', '-d', '-c', cwd, hudCmd], { stdio: 'inherit' });
590
+ hudPaneId = createHudWatchPane(cwd, hudCmd);
511
591
  }
512
592
  catch {
513
593
  // HUD split failed, continue without it
514
594
  }
515
- // execFileSync imported at top level
516
595
  try {
517
596
  execFileSync('codex', launchArgs, { cwd, stdio: 'inherit', env: codexEnv });
518
597
  }
519
598
  catch {
520
599
  // Codex exited
521
600
  }
601
+ finally {
602
+ const cleanupPaneIds = buildHudPaneCleanupTargets(listHudWatchPaneIdsInCurrentWindow(currentPaneId), hudPaneId);
603
+ for (const paneId of cleanupPaneIds) {
604
+ killTmuxPane(paneId);
605
+ }
606
+ }
522
607
  }
523
608
  else {
524
609
  // Not in tmux: create a new tmux session with codex + HUD pane
610
+ const codexCmd = buildTmuxShellCommand('codex', launchArgs);
525
611
  const tmuxSessionId = `omx-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
526
612
  const sessionName = buildTmuxSessionName(cwd, tmuxSessionId);
527
613
  try {
@@ -538,9 +624,7 @@ function runCodex(cwd, args) {
538
624
  ], { stdio: 'inherit' });
539
625
  }
540
626
  catch {
541
- // tmux not available, just run codex directly
542
- console.log('tmux not available, launching codex without HUD...');
543
- // execFileSync imported at top level
627
+ // tmux not available or failed, just run codex directly
544
628
  try {
545
629
  execFileSync('codex', launchArgs, { cwd, stdio: 'inherit', env: codexEnv });
546
630
  }
@@ -550,6 +634,30 @@ function runCodex(cwd, args) {
550
634
  }
551
635
  }
552
636
  }
637
+ function listHudWatchPaneIdsInCurrentWindow(currentPaneId) {
638
+ try {
639
+ const output = execFileSync('tmux', ['list-panes', '-F', '#{pane_id}\t#{pane_current_command}\t#{pane_start_command}'], { encoding: 'utf-8' });
640
+ return findHudWatchPaneIds(parseTmuxPaneSnapshot(output), currentPaneId);
641
+ }
642
+ catch {
643
+ return [];
644
+ }
645
+ }
646
+ function createHudWatchPane(cwd, hudCmd) {
647
+ const output = execFileSync('tmux', ['split-window', '-v', '-l', '4', '-d', '-c', cwd, '-P', '-F', '#{pane_id}', hudCmd], { encoding: 'utf-8' });
648
+ const paneId = output.split('\n')[0]?.trim() || '';
649
+ return paneId.startsWith('%') ? paneId : null;
650
+ }
651
+ function killTmuxPane(paneId) {
652
+ if (!paneId.startsWith('%'))
653
+ return;
654
+ try {
655
+ execFileSync('tmux', ['kill-pane', '-t', paneId], { stdio: 'ignore' });
656
+ }
657
+ catch {
658
+ // Pane may already be gone; ignore.
659
+ }
660
+ }
553
661
  export function buildTmuxShellCommand(command, args) {
554
662
  return [quoteShellArg(command), ...args.map(quoteShellArg)].join(' ');
555
663
  }
@@ -575,12 +683,12 @@ async function postLaunch(cwd, sessionId) {
575
683
  catch {
576
684
  // Non-fatal
577
685
  }
578
- // 1. Strip AGENTS.md overlay
686
+ // 1. Remove session-scoped model instructions file
579
687
  try {
580
- await stripOverlay(join(cwd, 'AGENTS.md'), cwd);
688
+ await removeSessionModelInstructionsFile(cwd, sessionId);
581
689
  }
582
690
  catch (err) {
583
- console.error(`[omx] postLaunch: overlay strip failed: ${err instanceof Error ? err.message : err}`);
691
+ console.error(`[omx] postLaunch: model instructions cleanup failed: ${err instanceof Error ? err.message : err}`);
584
692
  }
585
693
  // 2. Archive session (write history, delete session.json)
586
694
  try {