oh-my-codex 0.10.2 → 0.10.3
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.de.md +4 -4
- package/README.es.md +4 -4
- package/README.fr.md +4 -4
- package/README.it.md +4 -4
- package/README.ja.md +4 -4
- package/README.ko.md +4 -4
- package/README.md +13 -7
- package/README.pt.md +4 -4
- package/README.ru.md +4 -4
- package/README.tr.md +4 -4
- package/README.vi.md +4 -4
- package/README.zh-TW.md +4 -4
- package/README.zh.md +4 -4
- package/dist/agents/__tests__/native-config.test.js +37 -33
- package/dist/agents/__tests__/native-config.test.js.map +1 -1
- package/dist/agents/__tests__/skill-bridge.test.d.ts +2 -0
- package/dist/agents/__tests__/skill-bridge.test.d.ts.map +1 -0
- package/dist/agents/__tests__/skill-bridge.test.js +71 -0
- package/dist/agents/__tests__/skill-bridge.test.js.map +1 -0
- package/dist/agents/native-config.d.ts +18 -6
- package/dist/agents/native-config.d.ts.map +1 -1
- package/dist/agents/native-config.js +109 -92
- package/dist/agents/native-config.js.map +1 -1
- package/dist/agents/skill-bridge.d.ts +20 -0
- package/dist/agents/skill-bridge.d.ts.map +1 -0
- package/dist/agents/skill-bridge.js +150 -0
- package/dist/agents/skill-bridge.js.map +1 -0
- package/dist/autoresearch/__tests__/contracts.test.js +37 -1
- package/dist/autoresearch/__tests__/contracts.test.js.map +1 -1
- package/dist/autoresearch/__tests__/runtime-parity-extra.test.js +10 -10
- package/dist/autoresearch/__tests__/runtime-parity-extra.test.js.map +1 -1
- package/dist/autoresearch/__tests__/runtime.test.js +2 -2
- package/dist/autoresearch/__tests__/runtime.test.js.map +1 -1
- package/dist/autoresearch/contracts.d.ts.map +1 -1
- package/dist/autoresearch/contracts.js +17 -10
- package/dist/autoresearch/contracts.js.map +1 -1
- package/dist/autoresearch/runtime.d.ts.map +1 -1
- package/dist/autoresearch/runtime.js +71 -96
- package/dist/autoresearch/runtime.js.map +1 -1
- package/dist/cli/__tests__/agents-init.test.js +2 -0
- package/dist/cli/__tests__/agents-init.test.js.map +1 -1
- package/dist/cli/__tests__/agents.test.d.ts +2 -0
- package/dist/cli/__tests__/agents.test.d.ts.map +1 -0
- package/dist/cli/__tests__/agents.test.js +114 -0
- package/dist/cli/__tests__/agents.test.js.map +1 -0
- package/dist/cli/__tests__/autoresearch-guided.test.js +156 -1
- package/dist/cli/__tests__/autoresearch-guided.test.js.map +1 -1
- package/dist/cli/__tests__/autoresearch.test.js +195 -24
- package/dist/cli/__tests__/autoresearch.test.js.map +1 -1
- package/dist/cli/__tests__/cleanup.test.d.ts +2 -0
- package/dist/cli/__tests__/cleanup.test.d.ts.map +1 -0
- package/dist/cli/__tests__/cleanup.test.js +213 -0
- package/dist/cli/__tests__/cleanup.test.js.map +1 -0
- package/dist/cli/__tests__/error-handling-warnings.test.js +1 -1
- package/dist/cli/__tests__/error-handling-warnings.test.js.map +1 -1
- package/dist/cli/__tests__/explore.test.js +3 -3
- package/dist/cli/__tests__/explore.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +521 -401
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/native-assets.test.js +72 -9
- package/dist/cli/__tests__/native-assets.test.js.map +1 -1
- package/dist/cli/__tests__/ralphthon.test.d.ts +2 -0
- package/dist/cli/__tests__/ralphthon.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ralphthon.test.js +28 -0
- package/dist/cli/__tests__/ralphthon.test.js.map +1 -0
- package/dist/cli/__tests__/setup-agents-overwrite.test.js +36 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-prompts-overwrite.test.js +35 -5
- package/dist/cli/__tests__/setup-prompts-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-refresh.test.js +2 -2
- package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
- package/dist/cli/__tests__/setup-scope.test.js +131 -161
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/setup-skills-overwrite.test.js +10 -10
- package/dist/cli/__tests__/setup-skills-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/sparkshell-cli.test.js +28 -2
- package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +1 -112
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/__tests__/uninstall.test.js +7 -20
- package/dist/cli/__tests__/uninstall.test.js.map +1 -1
- package/dist/cli/agents-init.d.ts.map +1 -1
- package/dist/cli/agents-init.js +99 -95
- package/dist/cli/agents-init.js.map +1 -1
- package/dist/cli/agents.d.ts +14 -0
- package/dist/cli/agents.d.ts.map +1 -0
- package/dist/cli/agents.js +261 -0
- package/dist/cli/agents.js.map +1 -0
- package/dist/cli/autoresearch-guided.d.ts +8 -0
- package/dist/cli/autoresearch-guided.d.ts.map +1 -1
- package/dist/cli/autoresearch-guided.js +104 -37
- package/dist/cli/autoresearch-guided.js.map +1 -1
- package/dist/cli/autoresearch-intake.d.ts +60 -0
- package/dist/cli/autoresearch-intake.d.ts.map +1 -0
- package/dist/cli/autoresearch-intake.js +318 -0
- package/dist/cli/autoresearch-intake.js.map +1 -0
- package/dist/cli/autoresearch.d.ts +3 -1
- package/dist/cli/autoresearch.d.ts.map +1 -1
- package/dist/cli/autoresearch.js +64 -10
- package/dist/cli/autoresearch.js.map +1 -1
- package/dist/cli/cleanup.d.ts +52 -0
- package/dist/cli/cleanup.d.ts.map +1 -0
- package/dist/cli/cleanup.js +302 -0
- package/dist/cli/cleanup.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +9 -37
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/explore.d.ts.map +1 -1
- package/dist/cli/explore.js +5 -4
- package/dist/cli/explore.js.map +1 -1
- package/dist/cli/index.d.ts +5 -7
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +610 -427
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/native-assets.d.ts +15 -1
- package/dist/cli/native-assets.d.ts.map +1 -1
- package/dist/cli/native-assets.js +134 -32
- package/dist/cli/native-assets.js.map +1 -1
- package/dist/cli/ralph.d.ts.map +1 -1
- package/dist/cli/ralph.js +38 -1
- package/dist/cli/ralph.js.map +1 -1
- package/dist/cli/ralphthon.d.ts +14 -0
- package/dist/cli/ralphthon.d.ts.map +1 -0
- package/dist/cli/ralphthon.js +234 -0
- package/dist/cli/ralphthon.js.map +1 -0
- package/dist/cli/setup.d.ts +1 -4
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +111 -76
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/sparkshell.d.ts +3 -1
- package/dist/cli/sparkshell.d.ts.map +1 -1
- package/dist/cli/sparkshell.js +35 -16
- package/dist/cli/sparkshell.js.map +1 -1
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +1 -0
- package/dist/cli/team.js.map +1 -1
- package/dist/cli/uninstall.d.ts +1 -1
- package/dist/cli/uninstall.d.ts.map +1 -1
- package/dist/cli/uninstall.js +82 -64
- package/dist/cli/uninstall.js.map +1 -1
- package/dist/config/__tests__/generator-idempotent.test.js +10 -10
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +15 -0
- package/dist/config/__tests__/generator-notify.test.js.map +1 -1
- package/dist/config/generator.d.ts +0 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +53 -42
- package/dist/config/generator.js.map +1 -1
- package/dist/hooks/__tests__/agents-overlay.test.js +295 -230
- package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.js +49 -24
- package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-fallback-watcher-ralphthon.test.d.ts +2 -0
- package/dist/hooks/__tests__/notify-fallback-watcher-ralphthon.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-fallback-watcher-ralphthon.test.js +193 -0
- package/dist/hooks/__tests__/notify-fallback-watcher-ralphthon.test.js.map +1 -0
- package/dist/hooks/agents-overlay.d.ts +1 -1
- package/dist/hooks/agents-overlay.d.ts.map +1 -1
- package/dist/hooks/agents-overlay.js +109 -106
- package/dist/hooks/agents-overlay.js.map +1 -1
- package/dist/modes/base.d.ts +1 -1
- package/dist/modes/base.d.ts.map +1 -1
- package/dist/modes/base.js +1 -1
- package/dist/modes/base.js.map +1 -1
- package/dist/ralphthon/__tests__/bootstrap.test.d.ts +2 -0
- package/dist/ralphthon/__tests__/bootstrap.test.d.ts.map +1 -0
- package/dist/ralphthon/__tests__/bootstrap.test.js +23 -0
- package/dist/ralphthon/__tests__/bootstrap.test.js.map +1 -0
- package/dist/ralphthon/__tests__/orchestrator.test.d.ts +2 -0
- package/dist/ralphthon/__tests__/orchestrator.test.d.ts.map +1 -0
- package/dist/ralphthon/__tests__/orchestrator.test.js +309 -0
- package/dist/ralphthon/__tests__/orchestrator.test.js.map +1 -0
- package/dist/ralphthon/__tests__/prd.test.d.ts +2 -0
- package/dist/ralphthon/__tests__/prd.test.d.ts.map +1 -0
- package/dist/ralphthon/__tests__/prd.test.js +133 -0
- package/dist/ralphthon/__tests__/prd.test.js.map +1 -0
- package/dist/ralphthon/bootstrap.d.ts +3 -0
- package/dist/ralphthon/bootstrap.d.ts.map +1 -0
- package/dist/ralphthon/bootstrap.js +84 -0
- package/dist/ralphthon/bootstrap.js.map +1 -0
- package/dist/ralphthon/orchestrator.d.ts +50 -0
- package/dist/ralphthon/orchestrator.d.ts.map +1 -0
- package/dist/ralphthon/orchestrator.js +362 -0
- package/dist/ralphthon/orchestrator.js.map +1 -0
- package/dist/ralphthon/prd.d.ts +191 -0
- package/dist/ralphthon/prd.d.ts.map +1 -0
- package/dist/ralphthon/prd.js +355 -0
- package/dist/ralphthon/prd.js.map +1 -0
- package/dist/ralphthon/runtime.d.ts +31 -0
- package/dist/ralphthon/runtime.d.ts.map +1 -0
- package/dist/ralphthon/runtime.js +104 -0
- package/dist/ralphthon/runtime.js.map +1 -0
- package/dist/ralphthon/tmux.d.ts +3 -0
- package/dist/ralphthon/tmux.d.ts.map +1 -0
- package/dist/ralphthon/tmux.js +39 -0
- package/dist/ralphthon/tmux.js.map +1 -0
- package/dist/subagents/__tests__/tracker.test.d.ts +2 -0
- package/dist/subagents/__tests__/tracker.test.d.ts.map +1 -0
- package/dist/subagents/__tests__/tracker.test.js +47 -0
- package/dist/subagents/__tests__/tracker.test.js.map +1 -0
- package/dist/subagents/tracker.d.ts +52 -0
- package/dist/subagents/tracker.d.ts.map +1 -0
- package/dist/subagents/tracker.js +175 -0
- package/dist/subagents/tracker.js.map +1 -0
- package/dist/team/__tests__/worker-bootstrap.test.js +189 -163
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/__tests__/worktree.test.js +1 -1
- package/dist/team/__tests__/worktree.test.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts +1 -1
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +58 -63
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/team/worktree.js +1 -1
- package/dist/team/worktree.js.map +1 -1
- package/dist/utils/__tests__/agents-md.test.d.ts +2 -0
- package/dist/utils/__tests__/agents-md.test.d.ts.map +1 -0
- package/dist/utils/__tests__/agents-md.test.js +32 -0
- package/dist/utils/__tests__/agents-md.test.js.map +1 -0
- package/dist/utils/__tests__/agents-model-table.test.d.ts +2 -0
- package/dist/utils/__tests__/agents-model-table.test.d.ts.map +1 -0
- package/dist/utils/__tests__/agents-model-table.test.js +84 -0
- package/dist/utils/__tests__/agents-model-table.test.js.map +1 -0
- package/dist/utils/__tests__/paths.test.js +78 -83
- package/dist/utils/__tests__/paths.test.js.map +1 -1
- package/dist/utils/agents-md.d.ts.map +1 -1
- package/dist/utils/agents-md.js +10 -0
- package/dist/utils/agents-md.js.map +1 -1
- package/dist/utils/agents-model-table.d.ts +16 -0
- package/dist/utils/agents-model-table.d.ts.map +1 -0
- package/dist/utils/agents-model-table.js +83 -0
- package/dist/utils/agents-model-table.js.map +1 -0
- package/dist/utils/paths.d.ts +6 -6
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +31 -31
- package/dist/utils/paths.js.map +1 -1
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js +21 -3
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +1 -1
- package/dist/verification/__tests__/native-release-manifest.test.d.ts +2 -0
- package/dist/verification/__tests__/native-release-manifest.test.d.ts.map +1 -0
- package/dist/verification/__tests__/native-release-manifest.test.js +80 -0
- package/dist/verification/__tests__/native-release-manifest.test.js.map +1 -0
- package/package.json +1 -1
- package/prompts/executor.md +15 -0
- package/scripts/__tests__/smoke-packed-install.test.mjs +137 -8
- package/scripts/eval-adaptive-sort-optimization.py +24 -0
- package/scripts/eval-in-action-cat-shellout-demo.js +31 -0
- package/scripts/eval-ml-kaggle-model-optimization.py +29 -0
- package/scripts/eval-noisy-bayesopt-highdim.py +44 -0
- package/scripts/eval-noisy-latent-subspace-discovery.py +44 -0
- package/scripts/generate-native-release-manifest.mjs +14 -3
- package/scripts/notify-fallback-watcher.js +308 -6
- package/scripts/notify-hook.js +20 -0
- package/scripts/run-autoresearch-showcase.sh +75 -0
- package/scripts/smoke-packed-install.mjs +142 -10
- package/skills/deep-interview/SKILL.md +30 -1
- package/skills/omx-setup/SKILL.md +2 -2
- package/skills/skill/SKILL.md +32 -32
- package/skills/team/SKILL.md +6 -0
- package/skills/worker/SKILL.md +2 -2
- package/templates/AGENTS.md +97 -16
|
@@ -1,22 +1,147 @@
|
|
|
1
1
|
import { createServer } from 'node:http';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
cpSync,
|
|
4
|
+
existsSync,
|
|
5
|
+
lstatSync,
|
|
6
|
+
mkdtempSync,
|
|
7
|
+
readFileSync,
|
|
8
|
+
rmSync,
|
|
9
|
+
symlinkSync,
|
|
10
|
+
writeFileSync,
|
|
11
|
+
} from 'node:fs';
|
|
3
12
|
import { chmodSync, mkdirSync } from 'node:fs';
|
|
4
13
|
import { tmpdir } from 'node:os';
|
|
5
|
-
import { join, resolve } from 'node:path';
|
|
14
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
6
15
|
import { spawnSync } from 'node:child_process';
|
|
7
16
|
import { pathToFileURL } from 'node:url';
|
|
8
17
|
|
|
18
|
+
const REQUIRED_NODE_MODULE_MARKERS = [
|
|
19
|
+
join('typescript', 'package.json'),
|
|
20
|
+
join('@iarna', 'toml', 'package.json'),
|
|
21
|
+
join('@modelcontextprotocol', 'sdk', 'package.json'),
|
|
22
|
+
join('zod', 'package.json'),
|
|
23
|
+
];
|
|
24
|
+
|
|
9
25
|
function usage() {
|
|
10
26
|
return [
|
|
11
|
-
'Usage: node scripts/smoke-packed-install.mjs [--release-assets-dir <dir>]',
|
|
27
|
+
'Usage: node scripts/smoke-packed-install.mjs [--release-assets-dir <dir>] [--require-no-fallback]',
|
|
12
28
|
'',
|
|
13
29
|
'Creates an npm tarball, installs it into an isolated prefix, and smoke tests the installed omx CLI.',
|
|
14
30
|
'When --release-assets-dir is provided, native hydration is also exercised using a local HTTP server.',
|
|
15
31
|
].join('\n');
|
|
16
32
|
}
|
|
17
33
|
|
|
34
|
+
function hasNodeModulesPath(nodeModulesPath) {
|
|
35
|
+
try {
|
|
36
|
+
lstatSync(nodeModulesPath);
|
|
37
|
+
return true;
|
|
38
|
+
} catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function hasUsableNodeModules(repoRoot) {
|
|
44
|
+
return REQUIRED_NODE_MODULE_MARKERS.every((marker) => existsSync(join(repoRoot, 'node_modules', marker)));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function resolveGitCommonDir(cwd, gitRunner = spawnSync) {
|
|
48
|
+
const result = gitRunner('git', ['rev-parse', '--git-common-dir'], {
|
|
49
|
+
cwd,
|
|
50
|
+
encoding: 'utf-8',
|
|
51
|
+
});
|
|
52
|
+
if (result.status !== 0) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const value = (result.stdout || '').trim();
|
|
56
|
+
if (!value) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
return resolve(cwd, value);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function resolveReusableNodeModulesSource(repoRoot, gitRunner = spawnSync) {
|
|
63
|
+
const commonDir = resolveGitCommonDir(repoRoot, gitRunner);
|
|
64
|
+
if (!commonDir || basename(commonDir) !== '.git') {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const primaryRepoRoot = dirname(commonDir);
|
|
69
|
+
if (resolve(primaryRepoRoot) === resolve(repoRoot)) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!hasUsableNodeModules(primaryRepoRoot)) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return join(primaryRepoRoot, 'node_modules');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function formatCommandFailure(cmd, args, result) {
|
|
81
|
+
return [
|
|
82
|
+
`Command failed: ${cmd} ${args.join(' ')}`,
|
|
83
|
+
result.stdout?.trim() ? `stdout:\n${result.stdout.trim()}` : '',
|
|
84
|
+
result.stderr?.trim() ? `stderr:\n${result.stderr.trim()}` : '',
|
|
85
|
+
].filter(Boolean).join('\n\n');
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function ensureRepoDependencies(repoRoot, options = {}) {
|
|
89
|
+
const {
|
|
90
|
+
gitRunner = spawnSync,
|
|
91
|
+
install = (cwd) => {
|
|
92
|
+
const result = spawnSync('npm', ['ci'], {
|
|
93
|
+
cwd,
|
|
94
|
+
encoding: 'utf-8',
|
|
95
|
+
stdio: 'pipe',
|
|
96
|
+
});
|
|
97
|
+
if (result.status !== 0) {
|
|
98
|
+
throw new Error(formatCommandFailure('npm', ['ci'], result));
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
remove = rmSync,
|
|
102
|
+
symlink = symlinkSync,
|
|
103
|
+
log = () => {},
|
|
104
|
+
platformName = process.platform,
|
|
105
|
+
} = options;
|
|
106
|
+
|
|
107
|
+
if (hasUsableNodeModules(repoRoot)) {
|
|
108
|
+
return {
|
|
109
|
+
strategy: 'existing',
|
|
110
|
+
nodeModulesPath: join(repoRoot, 'node_modules'),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const targetNodeModules = join(repoRoot, 'node_modules');
|
|
115
|
+
if (hasNodeModulesPath(targetNodeModules)) {
|
|
116
|
+
remove(targetNodeModules, { recursive: true, force: true });
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const reusableNodeModules = resolveReusableNodeModulesSource(repoRoot, gitRunner);
|
|
120
|
+
if (reusableNodeModules) {
|
|
121
|
+
symlink(reusableNodeModules, targetNodeModules, platformName === 'win32' ? 'junction' : 'dir');
|
|
122
|
+
log(`[smoke:packed-install] Reusing node_modules from ${reusableNodeModules}`);
|
|
123
|
+
return {
|
|
124
|
+
strategy: 'symlink',
|
|
125
|
+
nodeModulesPath: targetNodeModules,
|
|
126
|
+
sourceNodeModulesPath: reusableNodeModules,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
log('[smoke:packed-install] Installing repo dependencies with npm ci');
|
|
131
|
+
install(repoRoot);
|
|
132
|
+
return {
|
|
133
|
+
strategy: 'installed',
|
|
134
|
+
nodeModulesPath: targetNodeModules,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export function hasSparkShellFallbackBanner(stderr) {
|
|
139
|
+
return /GLIBC-incompatible native sidecar detected/i.test(String(stderr || ''));
|
|
140
|
+
}
|
|
141
|
+
|
|
18
142
|
function parseArgs(argv) {
|
|
19
143
|
let releaseAssetsDir;
|
|
144
|
+
let requireNoFallback = false;
|
|
20
145
|
for (let index = 0; index < argv.length; index += 1) {
|
|
21
146
|
const token = argv[index];
|
|
22
147
|
if (token === '--help' || token === '-h') {
|
|
@@ -30,9 +155,13 @@ function parseArgs(argv) {
|
|
|
30
155
|
index += 1;
|
|
31
156
|
continue;
|
|
32
157
|
}
|
|
158
|
+
if (token === '--require-no-fallback') {
|
|
159
|
+
requireNoFallback = true;
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
33
162
|
throw new Error(`Unknown argument: ${token}\n${usage()}`);
|
|
34
163
|
}
|
|
35
|
-
return { releaseAssetsDir };
|
|
164
|
+
return { releaseAssetsDir, requireNoFallback };
|
|
36
165
|
}
|
|
37
166
|
|
|
38
167
|
function run(cmd, args, options = {}) {
|
|
@@ -42,11 +171,7 @@ function run(cmd, args, options = {}) {
|
|
|
42
171
|
...options,
|
|
43
172
|
});
|
|
44
173
|
if (result.status !== 0) {
|
|
45
|
-
throw new Error(
|
|
46
|
-
`Command failed: ${cmd} ${args.join(' ')}`,
|
|
47
|
-
result.stdout?.trim() ? `stdout:\n${result.stdout.trim()}` : '',
|
|
48
|
-
result.stderr?.trim() ? `stderr:\n${result.stderr.trim()}` : '',
|
|
49
|
-
].filter(Boolean).join('\n\n'));
|
|
174
|
+
throw new Error(formatCommandFailure(cmd, args, result));
|
|
50
175
|
}
|
|
51
176
|
return result;
|
|
52
177
|
}
|
|
@@ -153,7 +278,7 @@ export function rewriteManifestDownloadUrls(manifestPath, baseUrl) {
|
|
|
153
278
|
}
|
|
154
279
|
|
|
155
280
|
async function main() {
|
|
156
|
-
const { releaseAssetsDir } = parseArgs(process.argv.slice(2));
|
|
281
|
+
const { releaseAssetsDir, requireNoFallback } = parseArgs(process.argv.slice(2));
|
|
157
282
|
const repoRoot = process.cwd();
|
|
158
283
|
const tempRoot = mkdtempSync(join(tmpdir(), 'omx-packed-install-'));
|
|
159
284
|
const prefixDir = join(tempRoot, 'prefix');
|
|
@@ -166,6 +291,10 @@ async function main() {
|
|
|
166
291
|
let server;
|
|
167
292
|
let tarballPath;
|
|
168
293
|
try {
|
|
294
|
+
ensureRepoDependencies(repoRoot, {
|
|
295
|
+
log: (message) => console.log(message),
|
|
296
|
+
});
|
|
297
|
+
|
|
169
298
|
const pack = run('npm', ['pack', '--json'], { cwd: repoRoot });
|
|
170
299
|
const packOutput = JSON.parse(pack.stdout.slice(pack.stdout.indexOf('[')));
|
|
171
300
|
const tarballName = packOutput[0]?.filename;
|
|
@@ -192,6 +321,9 @@ async function main() {
|
|
|
192
321
|
};
|
|
193
322
|
|
|
194
323
|
const sparkshell = run(omxPath, ['sparkshell', 'node', '--version'], { cwd: repoRoot, env });
|
|
324
|
+
if (requireNoFallback && hasSparkShellFallbackBanner(sparkshell.stderr)) {
|
|
325
|
+
throw new Error(`Unexpected sparkshell fallback stderr:\n${sparkshell.stderr}`);
|
|
326
|
+
}
|
|
195
327
|
if (!/v\d+\./.test(sparkshell.stdout)) {
|
|
196
328
|
throw new Error(`Unexpected sparkshell stdout:\n${sparkshell.stdout}`);
|
|
197
329
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: deep-interview
|
|
3
3
|
description: Socratic deep interview with mathematical ambiguity gating before execution
|
|
4
|
-
argument-hint: "<idea or vague description>"
|
|
4
|
+
argument-hint: "[--quick|--standard|--deep] [--autoresearch] <idea or vague description>"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<Purpose>
|
|
@@ -30,8 +30,13 @@ Execution quality is usually bottlenecked by intent clarity, not just missing im
|
|
|
30
30
|
- **Quick (`--quick`)**: fast pre-PRD pass; target threshold `<= 0.30`; max rounds 5
|
|
31
31
|
- **Standard (`--standard`, default)**: full requirement interview; target threshold `<= 0.20`; max rounds 12
|
|
32
32
|
- **Deep (`--deep`)**: high-rigor exploration; target threshold `<= 0.15`; max rounds 20
|
|
33
|
+
- **Autoresearch (`--autoresearch`)**: same interview rigor as Standard, but specialized for `omx autoresearch` launch readiness and `.omx/specs/` mission/sandbox artifact handoff
|
|
33
34
|
|
|
34
35
|
If no flag is provided, use **Standard**.
|
|
36
|
+
|
|
37
|
+
<Mode_Flags>
|
|
38
|
+
- **`--autoresearch`**: switch the interview into autoresearch-intake mode for `omx autoresearch` handoff. In this mode, the interview should converge on a launch-ready research mission, write canonical artifacts under `.omx/specs/`, and preserve the explicit `refine further` vs `launch` boundary for downstream CLI intake.
|
|
39
|
+
</Mode_Flags>
|
|
35
40
|
</Depth_Profiles>
|
|
36
41
|
|
|
37
42
|
<Execution_Policy>
|
|
@@ -194,6 +199,30 @@ Spec should include:
|
|
|
194
199
|
- Technical context findings
|
|
195
200
|
- Full or condensed transcript
|
|
196
201
|
|
|
202
|
+
### Autoresearch specialization
|
|
203
|
+
|
|
204
|
+
When the clarified task is specifically about `omx autoresearch`, or the skill is invoked with `--autoresearch`, keep the interview domain-specific and emit launch-consumable artifacts without skipping clarification.
|
|
205
|
+
|
|
206
|
+
- **Accepted seed inputs:** `topic`, `evaluator`, `keep-policy`, `slug`, existing mission draft text, and prior evaluator examples/templates
|
|
207
|
+
- **Required interview focus:** mission clarity, evaluator readiness, keep policy, slug/session naming, and whether the draft is ready to launch now or should refine further
|
|
208
|
+
- **Canonical artifact path:** `.omx/specs/deep-interview-autoresearch-{slug}.md`
|
|
209
|
+
- **Launch artifact bundle:** `.omx/specs/autoresearch-{slug}/mission.md`, `.omx/specs/autoresearch-{slug}/sandbox.md`, and `.omx/specs/autoresearch-{slug}/result.json`
|
|
210
|
+
- **Launch artifact directory:** `.omx/specs/autoresearch-{slug}/`
|
|
211
|
+
- **Required artifact sections:**
|
|
212
|
+
- `Mission Draft`
|
|
213
|
+
- `Evaluator Draft`
|
|
214
|
+
- `Launch Readiness`
|
|
215
|
+
- `Seed Inputs`
|
|
216
|
+
- `Confirmation Bridge`
|
|
217
|
+
- **Required launch artifacts under `.omx/specs/autoresearch-{slug}/`:**
|
|
218
|
+
- `mission.md`
|
|
219
|
+
- `sandbox.md`
|
|
220
|
+
- `result.json`
|
|
221
|
+
- **Launch-readiness rule:** mark the draft as **not launch-ready** while the evaluator command still contains placeholder markers such as `<...>`, `TODO`, `TBD`, `REPLACE_ME`, `CHANGEME`, or `your-command-here`
|
|
222
|
+
- **Structured result contract:** `result.json` should point to the draft + mission/sandbox artifacts and carry the finalized `topic`, `evaluatorCommand`, `keepPolicy`, `slug`, `launchReady`, and `blockedReasons` fields so `omx autoresearch` can consume it directly
|
|
223
|
+
- **Confirmation bridge:** after artifact generation, offer at least `refine further` and `launch`; do not launch detached tmux until the user explicitly confirms `launch`
|
|
224
|
+
- **Handoff rule:** downstream execution must preserve the clarified mission intent, evaluator expectations, decision boundaries, and launch-readiness status from this artifact rather than bypassing the draft review step
|
|
225
|
+
|
|
197
226
|
## Phase 5: Execution Bridge
|
|
198
227
|
|
|
199
228
|
Present execution options after artifact generation using explicit handoff contracts. Treat the deep-interview spec as the current requirements source of truth and preserve intent, non-goals, decision boundaries, acceptance criteria, and any residual-risk warnings across the handoff.
|
|
@@ -42,8 +42,8 @@ Supported setup flags (current implementation):
|
|
|
42
42
|
- Local project orchestration file is `./AGENTS.md` (project root).
|
|
43
43
|
- If `AGENTS.md` exists and `--force` is not used, interactive TTY runs ask whether to overwrite. Non-interactive runs preserve the file.
|
|
44
44
|
- Scope targets:
|
|
45
|
-
- `user`: user directories (`~/.codex`, `~/.
|
|
46
|
-
- `project`: local directories (`./.codex`, `./.
|
|
45
|
+
- `user`: user directories (`~/.codex`, `~/.codex/skills`, `~/.omx/agents`)
|
|
46
|
+
- `project`: local directories (`./.codex`, `./.codex/skills`, `./.omx/agents`)
|
|
47
47
|
- If persisted scope is `project`, `omx` launch automatically uses `CODEX_HOME=./.codex` unless user explicitly overrides `CODEX_HOME`.
|
|
48
48
|
- With `--force`, AGENTS overwrite may still be skipped if an active OMX session is detected (safety guard).
|
|
49
49
|
- Legacy persisted scope values (`project-local`) are automatically migrated to `project` with a one-time warning.
|
package/skills/skill/SKILL.md
CHANGED
|
@@ -15,19 +15,19 @@ Meta-skill for managing oh-my-codex skills via CLI-like commands.
|
|
|
15
15
|
Show all local skills organized by scope.
|
|
16
16
|
|
|
17
17
|
**Behavior:**
|
|
18
|
-
1. Scan user skills at `~/.
|
|
19
|
-
2. Scan project skills at `.
|
|
18
|
+
1. Scan user skills at `~/.codex/skills/`
|
|
19
|
+
2. Scan project skills at `.codex/skills/`
|
|
20
20
|
3. Parse YAML frontmatter for metadata
|
|
21
21
|
4. Display in organized table format:
|
|
22
22
|
|
|
23
23
|
```
|
|
24
|
-
USER SKILLS (~/.
|
|
24
|
+
USER SKILLS (~/.codex/skills/):
|
|
25
25
|
| Name | Triggers | Quality | Usage | Scope |
|
|
26
26
|
|-------------------|--------------------|---------|-------|-------|
|
|
27
27
|
| error-handler | fix, error | 95% | 42 | user |
|
|
28
28
|
| api-builder | api, endpoint | 88% | 23 | user |
|
|
29
29
|
|
|
30
|
-
PROJECT SKILLS (.
|
|
30
|
+
PROJECT SKILLS (.codex/skills/):
|
|
31
31
|
| Name | Triggers | Quality | Usage | Scope |
|
|
32
32
|
|-------------------|--------------------|---------|-------|---------|
|
|
33
33
|
| test-runner | test, run | 92% | 15 | project |
|
|
@@ -51,8 +51,8 @@ Interactive wizard for creating a new skill.
|
|
|
51
51
|
4. **Ask for argument hint** (optional)
|
|
52
52
|
- Example: "<file> [options]"
|
|
53
53
|
5. **Ask for scope:**
|
|
54
|
-
- `user` → `~/.
|
|
55
|
-
- `project` → `.
|
|
54
|
+
- `user` → `~/.codex/skills/<name>/SKILL.md`
|
|
55
|
+
- `project` → `.codex/skills/<name>/SKILL.md`
|
|
56
56
|
6. **Create skill file** with template:
|
|
57
57
|
|
|
58
58
|
```yaml
|
|
@@ -105,7 +105,7 @@ Triggers (comma-separated): log, logger, logging
|
|
|
105
105
|
Argument hint (optional): <level> [message]
|
|
106
106
|
Scope (user/project): user
|
|
107
107
|
|
|
108
|
-
✓ Created skill at ~/.
|
|
108
|
+
✓ Created skill at ~/.codex/skills/custom-logger/SKILL.md
|
|
109
109
|
→ Edit with: /skill edit custom-logger
|
|
110
110
|
```
|
|
111
111
|
|
|
@@ -117,13 +117,13 @@ Remove a skill by name.
|
|
|
117
117
|
|
|
118
118
|
**Behavior:**
|
|
119
119
|
1. **Search for skill** in both scopes:
|
|
120
|
-
- `~/.
|
|
121
|
-
- `.
|
|
120
|
+
- `~/.codex/skills/<name>/SKILL.md`
|
|
121
|
+
- `.codex/skills/<name>/SKILL.md`
|
|
122
122
|
2. **If found:**
|
|
123
123
|
- Display skill info (name, description, scope)
|
|
124
124
|
- **Ask for confirmation:** "Delete '<name>' skill from <scope>? (yes/no)"
|
|
125
125
|
3. **If confirmed:**
|
|
126
|
-
- Delete entire skill directory (e.g., `~/.
|
|
126
|
+
- Delete entire skill directory (e.g., `~/.codex/skills/<name>/`)
|
|
127
127
|
- Report: "✓ Removed skill '<name>' from <scope>"
|
|
128
128
|
4. **If not found:**
|
|
129
129
|
- Report: "✗ Skill '<name>' not found in user or project scope"
|
|
@@ -135,7 +135,7 @@ Remove a skill by name.
|
|
|
135
135
|
User: /skill remove old-logger
|
|
136
136
|
Assistant: Found skill 'old-logger' in user scope:
|
|
137
137
|
Description: Legacy logging utility
|
|
138
|
-
Scope: user (~/.
|
|
138
|
+
Scope: user (~/.codex/skills/)
|
|
139
139
|
|
|
140
140
|
Delete 'old-logger' skill? (yes/no)
|
|
141
141
|
|
|
@@ -251,13 +251,13 @@ Show detailed information about a skill.
|
|
|
251
251
|
|
|
252
252
|
```
|
|
253
253
|
Skill: custom-logger
|
|
254
|
-
Scope: user (~/.
|
|
254
|
+
Scope: user (~/.codex/skills/custom-logger/)
|
|
255
255
|
Description: Enhanced logging with structured output
|
|
256
256
|
Triggers: log, logger, logging
|
|
257
257
|
Argument Hint: <level> [message]
|
|
258
258
|
Quality: 95% (if available)
|
|
259
259
|
Usage Count: 42 times (if available)
|
|
260
|
-
File Path: /home/user/.
|
|
260
|
+
File Path: /home/user/.codex/skills/custom-logger/SKILL.md
|
|
261
261
|
|
|
262
262
|
--- FULL CONTENT ---
|
|
263
263
|
[entire markdown content]
|
|
@@ -272,7 +272,7 @@ Assistant: Skill: custom-logger
|
|
|
272
272
|
Scope: user
|
|
273
273
|
Description: Enhanced logging with structured output
|
|
274
274
|
Triggers: log, logger, logging
|
|
275
|
-
File: ~/.
|
|
275
|
+
File: ~/.codex/skills/custom-logger/SKILL.md
|
|
276
276
|
|
|
277
277
|
--- CONTENT ---
|
|
278
278
|
# Custom Logger Skill
|
|
@@ -290,8 +290,8 @@ Sync skills between user and project scopes.
|
|
|
290
290
|
|
|
291
291
|
**Behavior:**
|
|
292
292
|
1. **Scan both scopes:**
|
|
293
|
-
- User skills: `~/.
|
|
294
|
-
- Project skills: `.
|
|
293
|
+
- User skills: `~/.codex/skills/`
|
|
294
|
+
- Project skills: `.codex/skills/`
|
|
295
295
|
2. **Compare and categorize:**
|
|
296
296
|
- User-only skills (not in project)
|
|
297
297
|
- Project-only skills (not in user)
|
|
@@ -339,7 +339,7 @@ Assistant: Found 5 user-only skills and 2 project-only skills.
|
|
|
339
339
|
|
|
340
340
|
Copy 'error-handler' from user to project? (yes/no/skip)
|
|
341
341
|
User: yes
|
|
342
|
-
Assistant: ✓ Copied 'error-handler' to .
|
|
342
|
+
Assistant: ✓ Copied 'error-handler' to .codex/skills/
|
|
343
343
|
|
|
344
344
|
Copy 'api-builder' from user to project? (yes/no/skip)
|
|
345
345
|
User: skip
|
|
@@ -360,7 +360,7 @@ First, check if skill directories exist and create them if needed:
|
|
|
360
360
|
|
|
361
361
|
```bash
|
|
362
362
|
# Check and create user-level skills directory
|
|
363
|
-
USER_SKILLS_DIR="$HOME/.
|
|
363
|
+
USER_SKILLS_DIR="$HOME/.codex/skills"
|
|
364
364
|
if [ -d "$USER_SKILLS_DIR" ]; then
|
|
365
365
|
echo "User skills directory exists: $USER_SKILLS_DIR"
|
|
366
366
|
else
|
|
@@ -369,7 +369,7 @@ else
|
|
|
369
369
|
fi
|
|
370
370
|
|
|
371
371
|
# Check and create project-level skills directory
|
|
372
|
-
PROJECT_SKILLS_DIR=".
|
|
372
|
+
PROJECT_SKILLS_DIR=".codex/skills"
|
|
373
373
|
if [ -d "$PROJECT_SKILLS_DIR" ]; then
|
|
374
374
|
echo "Project skills directory exists: $PROJECT_SKILLS_DIR"
|
|
375
375
|
else
|
|
@@ -384,15 +384,15 @@ Scan both directories and show a comprehensive inventory:
|
|
|
384
384
|
|
|
385
385
|
```bash
|
|
386
386
|
# Scan user-level skills
|
|
387
|
-
echo "=== USER-LEVEL SKILLS (~/.
|
|
388
|
-
if [ -d "$HOME/.
|
|
389
|
-
USER_COUNT=$(find "$HOME/.
|
|
387
|
+
echo "=== USER-LEVEL SKILLS (~/.codex/skills/) ==="
|
|
388
|
+
if [ -d "$HOME/.codex/skills" ]; then
|
|
389
|
+
USER_COUNT=$(find "$HOME/.codex/skills" -name "*.md" 2>/dev/null | wc -l)
|
|
390
390
|
echo "Total skills: $USER_COUNT"
|
|
391
391
|
|
|
392
392
|
if [ $USER_COUNT -gt 0 ]; then
|
|
393
393
|
echo ""
|
|
394
394
|
echo "Skills found:"
|
|
395
|
-
find "$HOME/.
|
|
395
|
+
find "$HOME/.codex/skills" -name "*.md" -type f -exec sh -c '
|
|
396
396
|
FILE="$1"
|
|
397
397
|
NAME=$(grep -m1 "^name:" "$FILE" 2>/dev/null | sed "s/name: //")
|
|
398
398
|
DESC=$(grep -m1 "^description:" "$FILE" 2>/dev/null | sed "s/description: //")
|
|
@@ -408,15 +408,15 @@ else
|
|
|
408
408
|
fi
|
|
409
409
|
|
|
410
410
|
echo ""
|
|
411
|
-
echo "=== PROJECT-LEVEL SKILLS (.
|
|
412
|
-
if [ -d ".
|
|
413
|
-
PROJECT_COUNT=$(find ".
|
|
411
|
+
echo "=== PROJECT-LEVEL SKILLS (.codex/skills/) ==="
|
|
412
|
+
if [ -d ".codex/skills" ]; then
|
|
413
|
+
PROJECT_COUNT=$(find ".codex/skills" -name "*.md" 2>/dev/null | wc -l)
|
|
414
414
|
echo "Total skills: $PROJECT_COUNT"
|
|
415
415
|
|
|
416
416
|
if [ $PROJECT_COUNT -gt 0 ]; then
|
|
417
417
|
echo ""
|
|
418
418
|
echo "Skills found:"
|
|
419
|
-
find ".
|
|
419
|
+
find ".codex/skills" -name "*.md" -type f -exec sh -c '
|
|
420
420
|
FILE="$1"
|
|
421
421
|
NAME=$(grep -m1 "^name:" "$FILE" 2>/dev/null | sed "s/name: //")
|
|
422
422
|
DESC=$(grep -m1 "^description:" "$FILE" 2>/dev/null | sed "s/description: //")
|
|
@@ -467,8 +467,8 @@ Ask user to provide either:
|
|
|
467
467
|
- **Paste content**: Paste skill markdown content directly
|
|
468
468
|
|
|
469
469
|
Then ask for scope:
|
|
470
|
-
- **User-level** (~/.
|
|
471
|
-
- **Project-level** (.
|
|
470
|
+
- **User-level** (~/.codex/skills/) - Available across all projects
|
|
471
|
+
- **Project-level** (.codex/skills/) - Only for this project
|
|
472
472
|
|
|
473
473
|
Validate the skill format and save to the chosen location.
|
|
474
474
|
|
|
@@ -715,7 +715,7 @@ When invoked without arguments, run the full guided wizard.
|
|
|
715
715
|
|
|
716
716
|
**Automatic Application**: Codex detects triggers and applies skills automatically - no need to remember or search for solutions.
|
|
717
717
|
|
|
718
|
-
**Version Control**: Project-level skills (.
|
|
718
|
+
**Version Control**: Project-level skills (.codex/skills/) are committed with your code, so the whole team benefits.
|
|
719
719
|
|
|
720
720
|
**Evolving Knowledge**: Skills improve over time as you discover better approaches and refine triggers.
|
|
721
721
|
|
|
@@ -760,8 +760,8 @@ Good skills are:
|
|
|
760
760
|
> /skill list
|
|
761
761
|
|
|
762
762
|
Checking skill directories...
|
|
763
|
-
✓ User skills directory exists: ~/.
|
|
764
|
-
✓ Project skills directory exists: .
|
|
763
|
+
✓ User skills directory exists: ~/.codex/skills/
|
|
764
|
+
✓ Project skills directory exists: .codex/skills/
|
|
765
765
|
|
|
766
766
|
Scanning for skills...
|
|
767
767
|
|
package/skills/team/SKILL.md
CHANGED
|
@@ -9,6 +9,12 @@ description: N coordinated agents on shared task list using tmux-based orchestra
|
|
|
9
9
|
|
|
10
10
|
This skill is operationally sensitive. Treat it as an operator workflow, not a generic prompt pattern.
|
|
11
11
|
|
|
12
|
+
## Team vs Native Subagents
|
|
13
|
+
|
|
14
|
+
- Use **Codex native subagents** for bounded, in-session parallelism where one leader thread can fan out a few independent subtasks and wait for them directly.
|
|
15
|
+
- Use **`omx team`** when you need durable tmux workers, shared task state, mailbox/dispatch coordination, worktrees, explicit lifecycle control, or long-running parallel execution that must survive beyond one local reasoning burst.
|
|
16
|
+
- Native subagents can complement team/ralph execution, but they do **not** replace the tmux team runtime's stateful coordination contract.
|
|
17
|
+
|
|
12
18
|
## What This Skill Must Do
|
|
13
19
|
|
|
14
20
|
## GPT-5.4 Guidance Alignment
|
package/skills/worker/SKILL.md
CHANGED
|
@@ -20,8 +20,8 @@ Example: `alpha/worker-2`
|
|
|
20
20
|
When a worker inbox tells you to load this skill, resolve the first existing path:
|
|
21
21
|
|
|
22
22
|
1. `${CODEX_HOME:-~/.codex}/skills/worker/SKILL.md`
|
|
23
|
-
2. `~/.
|
|
24
|
-
3. `<leader_cwd>/.
|
|
23
|
+
2. `~/.codex/skills/worker/SKILL.md`
|
|
24
|
+
3. `<leader_cwd>/.codex/skills/worker/SKILL.md`
|
|
25
25
|
4. `<leader_cwd>/skills/worker/SKILL.md` (repo fallback)
|
|
26
26
|
|
|
27
27
|
## Startup Protocol (ACK)
|
package/templates/AGENTS.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
<!-- AUTONOMY DIRECTIVE — DO NOT REMOVE -->
|
|
2
|
+
YOU ARE AN AUTONOMOUS CODING AGENT. EXECUTE TASKS TO COMPLETION WITHOUT ASKING FOR PERMISSION.
|
|
3
|
+
DO NOT STOP TO ASK "SHOULD I PROCEED?" — PROCEED. DO NOT WAIT FOR CONFIRMATION ON OBVIOUS NEXT STEPS.
|
|
4
|
+
IF BLOCKED, TRY AN ALTERNATIVE APPROACH. ONLY ASK WHEN TRULY AMBIGUOUS OR DESTRUCTIVE.
|
|
5
|
+
USE CODEX NATIVE SUBAGENTS FOR INDEPENDENT PARALLEL SUBTASKS WHEN THAT IMPROVES THROUGHPUT. THIS IS COMPLEMENTARY TO OMX TEAM MODE.
|
|
6
|
+
<!-- END AUTONOMY DIRECTIVE -->
|
|
7
|
+
|
|
1
8
|
# oh-my-codex - Intelligent Multi-Agent Orchestration
|
|
2
9
|
|
|
3
10
|
You are running with oh-my-codex (OMX), a coordination layer for Codex CLI.
|
|
@@ -27,6 +34,7 @@ Keep runtime marker contracts stable and non-destructive when overlays are appli
|
|
|
27
34
|
- Prefer evidence over assumption; verify before claiming completion.
|
|
28
35
|
- Use the lightest path that preserves quality: direct action, MCP, then delegation.
|
|
29
36
|
- Check official documentation before implementing with unfamiliar SDKs, frameworks, or APIs.
|
|
37
|
+
- Within a single Codex session or team pane, use Codex native subagents for independent, bounded parallel subtasks when that improves throughput.
|
|
30
38
|
<!-- OMX:GUIDANCE:OPERATING:START -->
|
|
31
39
|
- Default to compact, information-dense responses; expand only when risk, ambiguity, or the user explicitly calls for detail.
|
|
32
40
|
- Proceed automatically on clear, low-risk, reversible next steps; ask only for irreversible, side-effectful, or materially branching actions.
|
|
@@ -45,6 +53,75 @@ Keep runtime marker contracts stable and non-destructive when overlays are appli
|
|
|
45
53
|
- Run lint, typecheck, tests, and static analysis after changes.
|
|
46
54
|
- Final reports must include changed files, simplifications made, and remaining risks.
|
|
47
55
|
|
|
56
|
+
<lore_commit_protocol>
|
|
57
|
+
## Lore Commit Protocol
|
|
58
|
+
|
|
59
|
+
Every commit message must follow the Lore protocol — structured decision records using native git trailers.
|
|
60
|
+
Commits are not just labels on diffs; they are the atomic unit of institutional knowledge.
|
|
61
|
+
|
|
62
|
+
### Format
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
<intent line: why the change was made, not what changed>
|
|
66
|
+
|
|
67
|
+
<body: narrative context — constraints, approach rationale>
|
|
68
|
+
|
|
69
|
+
Constraint: <external constraint that shaped the decision>
|
|
70
|
+
Rejected: <alternative considered> | <reason for rejection>
|
|
71
|
+
Confidence: <low|medium|high>
|
|
72
|
+
Scope-risk: <narrow|moderate|broad>
|
|
73
|
+
Directive: <forward-looking warning for future modifiers>
|
|
74
|
+
Tested: <what was verified (unit, integration, manual)>
|
|
75
|
+
Not-tested: <known gaps in verification>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Rules
|
|
79
|
+
|
|
80
|
+
1. **Intent line first.** The first line describes *why*, not *what*. The diff already shows what changed.
|
|
81
|
+
2. **Trailers are optional but encouraged.** Use the ones that add value; skip the ones that don't.
|
|
82
|
+
3. **`Rejected:` prevents re-exploration.** If you considered and rejected an alternative, record it so future agents don't waste cycles re-discovering the same dead end.
|
|
83
|
+
4. **`Directive:` is a message to the future.** Use it for "do not change X without checking Y" warnings.
|
|
84
|
+
5. **`Constraint:` captures external forces.** API limitations, policy requirements, upstream bugs — things not visible in the code.
|
|
85
|
+
6. **`Not-tested:` is honest.** Declaring known verification gaps is more valuable than pretending everything is covered.
|
|
86
|
+
7. **All trailers use git-native trailer format** (key-value after a blank line). No custom parsing required.
|
|
87
|
+
|
|
88
|
+
### Example
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
Prevent silent session drops during long-running operations
|
|
92
|
+
|
|
93
|
+
The auth service returns inconsistent status codes on token
|
|
94
|
+
expiry, so the interceptor catches all 4xx responses and
|
|
95
|
+
triggers an inline refresh.
|
|
96
|
+
|
|
97
|
+
Constraint: Auth service does not support token introspection
|
|
98
|
+
Constraint: Must not add latency to non-expired-token paths
|
|
99
|
+
Rejected: Extend token TTL to 24h | security policy violation
|
|
100
|
+
Rejected: Background refresh on timer | race condition with concurrent requests
|
|
101
|
+
Confidence: high
|
|
102
|
+
Scope-risk: narrow
|
|
103
|
+
Directive: Error handling is intentionally broad (all 4xx) — do not narrow without verifying upstream behavior
|
|
104
|
+
Tested: Single expired token refresh (unit)
|
|
105
|
+
Not-tested: Auth service cold-start > 500ms behavior
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Trailer Vocabulary
|
|
109
|
+
|
|
110
|
+
| Trailer | Purpose |
|
|
111
|
+
|---------|---------|
|
|
112
|
+
| `Constraint:` | External constraint that shaped the decision |
|
|
113
|
+
| `Rejected:` | Alternative considered and why it was rejected |
|
|
114
|
+
| `Confidence:` | Author's confidence level (low/medium/high) |
|
|
115
|
+
| `Scope-risk:` | How broadly the change affects the system (narrow/moderate/broad) |
|
|
116
|
+
| `Reversibility:` | How easily the change can be undone (clean/messy/irreversible) |
|
|
117
|
+
| `Directive:` | Forward-looking instruction for future modifiers |
|
|
118
|
+
| `Tested:` | What verification was performed |
|
|
119
|
+
| `Not-tested:` | Known gaps in verification |
|
|
120
|
+
| `Related:` | Links to related commits, issues, or decisions |
|
|
121
|
+
|
|
122
|
+
Teams may introduce domain-specific trailers without breaking compatibility.
|
|
123
|
+
</lore_commit_protocol>
|
|
124
|
+
|
|
48
125
|
---
|
|
49
126
|
|
|
50
127
|
<delegation_rules>
|
|
@@ -114,22 +191,22 @@ The `deep-interview` skill is the Socratic deep interview workflow and includes
|
|
|
114
191
|
|
|
115
192
|
| Keyword(s) | Skill | Action |
|
|
116
193
|
|-------------|-------|--------|
|
|
117
|
-
| "ralph", "don't stop", "must complete", "keep going" | `$ralph` | Read `~/.
|
|
118
|
-
| "autopilot", "build me", "I want a" | `$autopilot` | Read `~/.
|
|
119
|
-
| "ultrawork", "ulw", "parallel" | `$ultrawork` | Read `~/.
|
|
120
|
-
| "ultraqa" | `$ultraqa` | Read `~/.
|
|
121
|
-
| "analyze", "investigate" | `$analyze` | Read `~/.
|
|
122
|
-
| "plan this", "plan the", "let's plan" | `$plan` | Read `~/.
|
|
123
|
-
| "interview", "deep interview", "gather requirements", "interview me", "don't assume", "ouroboros" | `$deep-interview` | Read `~/.
|
|
124
|
-
| "ralplan", "consensus plan" | `$ralplan` | Read `~/.
|
|
125
|
-
| "team", "swarm", "coordinated team", "coordinated swarm" | `$team` | Read `~/.
|
|
126
|
-
| "ecomode", "eco", "budget" | `$ecomode` | Read `~/.
|
|
127
|
-
| "cancel", "stop", "abort" | `$cancel` | Read `~/.
|
|
128
|
-
| "tdd", "test first" | `$tdd` | Read `~/.
|
|
129
|
-
| "fix build", "type errors" | `$build-fix` | Read `~/.
|
|
130
|
-
| "review code", "code review", "code-review" | `$code-review` | Read `~/.
|
|
131
|
-
| "security review" | `$security-review` | Read `~/.
|
|
132
|
-
| "web-clone", "clone site", "clone website", "copy webpage" | `$web-clone` | Read `~/.
|
|
194
|
+
| "ralph", "don't stop", "must complete", "keep going" | `$ralph` | Read `~/.codex/skills/ralph/SKILL.md`, execute persistence loop |
|
|
195
|
+
| "autopilot", "build me", "I want a" | `$autopilot` | Read `~/.codex/skills/autopilot/SKILL.md`, execute autonomous pipeline |
|
|
196
|
+
| "ultrawork", "ulw", "parallel" | `$ultrawork` | Read `~/.codex/skills/ultrawork/SKILL.md`, execute parallel agents |
|
|
197
|
+
| "ultraqa" | `$ultraqa` | Read `~/.codex/skills/ultraqa/SKILL.md`, run QA cycling workflow |
|
|
198
|
+
| "analyze", "investigate" | `$analyze` | Read `~/.codex/skills/analyze/SKILL.md`, run deep analysis |
|
|
199
|
+
| "plan this", "plan the", "let's plan" | `$plan` | Read `~/.codex/skills/plan/SKILL.md`, start planning workflow |
|
|
200
|
+
| "interview", "deep interview", "gather requirements", "interview me", "don't assume", "ouroboros" | `$deep-interview` | Read `~/.codex/skills/deep-interview/SKILL.md`, run Ouroboros-inspired Socratic ambiguity-gated interview workflow |
|
|
201
|
+
| "ralplan", "consensus plan" | `$ralplan` | Read `~/.codex/skills/ralplan/SKILL.md`, start consensus planning with RALPLAN-DR structured deliberation (short by default, `--deliberate` for high-risk) |
|
|
202
|
+
| "team", "swarm", "coordinated team", "coordinated swarm" | `$team` | Read `~/.codex/skills/team/SKILL.md`, start team orchestration (swarm compatibility alias) |
|
|
203
|
+
| "ecomode", "eco", "budget" | `$ecomode` | Read `~/.codex/skills/ecomode/SKILL.md`, enable token-efficient mode |
|
|
204
|
+
| "cancel", "stop", "abort" | `$cancel` | Read `~/.codex/skills/cancel/SKILL.md`, cancel active modes |
|
|
205
|
+
| "tdd", "test first" | `$tdd` | Read `~/.codex/skills/tdd/SKILL.md`, start test-driven workflow |
|
|
206
|
+
| "fix build", "type errors" | `$build-fix` | Read `~/.codex/skills/build-fix/SKILL.md`, fix build errors |
|
|
207
|
+
| "review code", "code review", "code-review" | `$code-review` | Read `~/.codex/skills/code-review/SKILL.md`, run code review |
|
|
208
|
+
| "security review" | `$security-review` | Read `~/.codex/skills/security-review/SKILL.md`, run security audit |
|
|
209
|
+
| "web-clone", "clone site", "clone website", "copy webpage" | `$web-clone` | Read `~/.codex/skills/web-clone/SKILL.md`, start website cloning pipeline |
|
|
133
210
|
|
|
134
211
|
Detection rules:
|
|
135
212
|
- Keywords are case-insensitive and match anywhere in the user message.
|
|
@@ -182,6 +259,10 @@ Normalize model flags to one canonical `--model <value>` entry.
|
|
|
182
259
|
Do not guess frontier/spark defaults from model-family recency; use `OMX_DEFAULT_FRONTIER_MODEL` and `OMX_DEFAULT_SPARK_MODEL`.
|
|
183
260
|
</team_model_resolution>
|
|
184
261
|
|
|
262
|
+
<!-- OMX:MODELS:START -->
|
|
263
|
+
<!-- Auto-generated by omx setup -->
|
|
264
|
+
<!-- OMX:MODELS:END -->
|
|
265
|
+
|
|
185
266
|
---
|
|
186
267
|
|
|
187
268
|
<verification>
|