Compare commits

..

1 Commits

Author SHA1 Message Date
Affaan Mustafa
e50e64ac05 fix(skills): tighten token-budget-advisor triggers 2026-03-29 00:19:10 -04:00
6 changed files with 41 additions and 146 deletions

View File

@@ -86,8 +86,7 @@ startup_timeout_sec = 30
# args = ["-y", "@cloudflare/mcp-server-cloudflare"] # args = ["-y", "@cloudflare/mcp-server-cloudflare"]
[features] [features]
# Codex multi-agent collaboration is stable and on by default in current builds. # Codex multi-agent support is experimental as of March 2026.
# Keep the explicit toggle here so the repo documents its expectation clearly.
multi_agent = true multi_agent = true
# Profiles — switch with `codex -p <name>` # Profiles — switch with `codex -p <name>`
@@ -102,9 +101,6 @@ sandbox_mode = "workspace-write"
web_search = "live" web_search = "live"
[agents] [agents]
[agents]
# Multi-agent role limits and local role definitions.
# These map to `.codex/agents/*.toml` and mirror the repo's explorer/reviewer/docs workflow.
max_threads = 6 max_threads = 6
max_depth = 1 max_depth = 1

View File

@@ -295,7 +295,7 @@ everything-claude-code/
| |-- plugin.json # Plugin metadata and component paths | |-- plugin.json # Plugin metadata and component paths
| |-- marketplace.json # Marketplace catalog for /plugin marketplace add | |-- marketplace.json # Marketplace catalog for /plugin marketplace add
| |
|-- agents/ # 29 specialized subagents for delegation |-- agents/ # 30 specialized subagents for delegation
| |-- planner.md # Feature implementation planning | |-- planner.md # Feature implementation planning
| |-- architect.md # System design decisions | |-- architect.md # System design decisions
| |-- tdd-guide.md # Test-driven development | |-- tdd-guide.md # Test-driven development

View File

@@ -112,25 +112,10 @@ if [[ -f "$CONFIG_FILE" ]]; then
fi fi
done done
has_context7_legacy=0
has_context7_current=0
if rg -n '^\[mcp_servers\.context7\]' "$CONFIG_FILE" >/dev/null 2>&1; then
has_context7_legacy=1
fi
if rg -n '^\[mcp_servers\.context7-mcp\]' "$CONFIG_FILE" >/dev/null 2>&1; then if rg -n '^\[mcp_servers\.context7-mcp\]' "$CONFIG_FILE" >/dev/null 2>&1; then
has_context7_current=1 warn "Legacy [mcp_servers.context7-mcp] exists (context7 is preferred)"
fi
if [[ "$has_context7_legacy" -eq 1 || "$has_context7_current" -eq 1 ]]; then
ok "MCP section [mcp_servers.context7] or [mcp_servers.context7-mcp] exists"
else else
fail "MCP section [mcp_servers.context7] or [mcp_servers.context7-mcp] missing" ok "No legacy [mcp_servers.context7-mcp] section"
fi
if [[ "$has_context7_legacy" -eq 1 && "$has_context7_current" -eq 1 ]]; then
warn "Both [mcp_servers.context7] and [mcp_servers.context7-mcp] exist; prefer one name"
fi fi
fi fi

View File

@@ -10,11 +10,12 @@ description: >-
"short answer", "detailed answer", "full answer", "short answer", "detailed answer", "full answer",
"respuesta corta vs larga", "cuántos tokens", "ahorrar tokens", "respuesta corta vs larga", "cuántos tokens", "ahorrar tokens",
"responde al 50%", "dame la versión corta", "quiero controlar cuánto usas", "responde al 50%", "dame la versión corta", "quiero controlar cuánto usas",
"75%", "100%", "at 25%", "at 50%", "at 75%", "at 100%", "25% depth", "50% depth", "75% depth", "100% depth",
"give me the full answer", or any variant where the user wants "give me the full answer", or any variant where the user wants
to control length, depth, or token usage — even without mentioning tokens. to control length, depth, or token usage — even without mentioning tokens.
DO NOT TRIGGER when: user has already specified a level in the current DO NOT TRIGGER when: user has already specified a level in the current
session (maintain it) or the request is clearly a one-word answer. session (maintain it), the request is clearly a one-word answer, or
"token" refers to auth/session/payment tokens rather than response size.
origin: community origin: community
--- ---
@@ -72,7 +73,7 @@ Choose your depth level:
[3] Detailed (75%) -> ~[tokens] Full answer with alternatives [3] Detailed (75%) -> ~[tokens] Full answer with alternatives
[4] Exhaustive (100%) -> ~[tokens] Everything, no limits [4] Exhaustive (100%) -> ~[tokens] Everything, no limits
Which level? (1-4 or say "25%", "50%", "75%", "100%") Which level? (1-4 or say "25% depth", "50% depth", "75% depth", "100% depth")
Precision: heuristic estimate ~85-90% accuracy (±15%). Precision: heuristic estimate ~85-90% accuracy (±15%).
``` ```
@@ -98,10 +99,10 @@ If the user already signals a level, respond at that level immediately without a
| What they say | Level | | What they say | Level |
|----------------------------------------------------|-------| |----------------------------------------------------|-------|
| "1" / "25%" / "short answer" / "brief" / "tldr" / "one-liner" | 25% | | "1" / "25% depth" / "short answer" / "brief answer" / "tldr" | 25% |
| "2" / "50%" / "moderate detail" / "balanced answer" | 50% | | "2" / "50% depth" / "moderate detail" / "balanced answer" | 50% |
| "3" / "75%" / "detailed answer" / "thorough explanation" | 75% | | "3" / "75% depth" / "detailed answer" / "thorough explanation" | 75% |
| "4" / "100%" / "exhaustive" / "everything" / "full answer" | 100% | | "4" / "100% depth" / "exhaustive answer" / "full deep dive" | 100% |
If the user set a level earlier in the session, **maintain it silently** for subsequent responses unless they change it. If the user set a level earlier in the session, **maintain it silently** for subsequent responses unless they change it.
@@ -124,6 +125,7 @@ This skill uses heuristic estimation — no real tokenizer. Accuracy ~85-90%, va
- "Explain OAuth token refresh flow." (`token` here is domain language, not a budget request) - "Explain OAuth token refresh flow." (`token` here is domain language, not a budget request)
- "Why is this JWT token invalid?" (security/domain usage, not response sizing) - "Why is this JWT token invalid?" (security/domain usage, not response sizing)
- "What is 2 + 2?" (trivially short answer) - "What is 2 + 2?" (trivially short answer)
- "Complete the refactor and then open a PR." (`complete` here is task language, not a depth choice)
## Source ## Source

View File

@@ -25,22 +25,6 @@ const configPath = path.join(repoRoot, '.codex', 'config.toml');
const config = fs.readFileSync(configPath, 'utf8'); const config = fs.readFileSync(configPath, 'utf8');
const codexAgentsDir = path.join(repoRoot, '.codex', 'agents'); const codexAgentsDir = path.join(repoRoot, '.codex', 'agents');
function escapeRegExp(value) {
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
function getTomlSection(text, sectionName) {
const escapedSection = escapeRegExp(sectionName);
const headerPattern = new RegExp(`^\\s*\\[${escapedSection}\\]\\s*$`, 'm');
const headerMatch = headerPattern.exec(text);
assert.ok(headerMatch, `Expected TOML section to exist: [${sectionName}]`);
const afterHeader = text.slice(headerMatch.index + headerMatch[0].length);
const nextHeaderIndex = afterHeader.search(/^\s*\[/m);
return nextHeaderIndex === -1 ? afterHeader : afterHeader.slice(0, nextHeaderIndex);
}
let passed = 0; let passed = 0;
let failed = 0; let failed = 0;
@@ -63,37 +47,6 @@ if (
passed++; passed++;
else failed++; else failed++;
if (
test('reference config enables Codex multi-agent support', () => {
assert.ok(
/^\s*multi_agent\s*=\s*true\s*$/m.test(config),
'Expected `.codex/config.toml` to opt into Codex multi-agent collaboration',
);
})
)
passed++;
else failed++;
if (
test('reference config wires the sample Codex role files', () => {
for (const roleFile of ['explorer.toml', 'reviewer.toml', 'docs-researcher.toml']) {
const rolePath = path.join(codexAgentsDir, roleFile);
const roleSection = roleFile.replace(/\.toml$/, '').replace(/-/g, '_');
const sectionBody = getTomlSection(config, `agents.${roleSection}`);
assert.ok(fs.existsSync(rolePath), `Expected role config to exist: ${roleFile}`);
assert.ok(
new RegExp(`^\\s*config_file\\s*=\\s*"agents\\/${escapeRegExp(roleFile)}"\\s*$`, 'm').test(
sectionBody,
),
`Expected \`.codex/config.toml\` to reference ${roleFile} inside [agents.${roleSection}]`,
);
}
})
)
passed++;
else failed++;
if ( if (
test('sample Codex role configs do not use o4-mini', () => { test('sample Codex role configs do not use o4-mini', () => {
const roleFiles = fs.readdirSync(codexAgentsDir).filter(file => file.endsWith('.toml')); const roleFiles = fs.readdirSync(codexAgentsDir).filter(file => file.endsWith('.toml'));

View File

@@ -10,8 +10,7 @@ const { spawnSync } = require('child_process');
const repoRoot = path.join(__dirname, '..', '..'); const repoRoot = path.join(__dirname, '..', '..');
const installScript = path.join(repoRoot, 'scripts', 'codex', 'install-global-git-hooks.sh'); const installScript = path.join(repoRoot, 'scripts', 'codex', 'install-global-git-hooks.sh');
const syncScript = path.join(repoRoot, 'scripts', 'sync-ecc-to-codex.sh'); const installSource = fs.readFileSync(installScript, 'utf8');
const checkScript = path.join(repoRoot, 'scripts', 'codex', 'check-codex-global-state.sh');
function test(name, fn) { function test(name, fn) {
try { try {
@@ -33,15 +32,25 @@ function cleanup(dirPath) {
fs.rmSync(dirPath, { recursive: true, force: true }); fs.rmSync(dirPath, { recursive: true, force: true });
} }
function toBashPath(filePath) {
if (process.platform !== 'win32') {
return filePath;
}
return String(filePath)
.replace(/^([A-Za-z]):/, (_, driveLetter) => `/${driveLetter.toLowerCase()}`)
.replace(/\\/g, '/');
}
function runBash(scriptPath, args = [], env = {}, cwd = repoRoot) { function runBash(scriptPath, args = [], env = {}, cwd = repoRoot) {
return spawnSync('bash', [scriptPath, ...args], { return spawnSync('bash', [toBashPath(scriptPath), ...args], {
cwd, cwd,
env: { env: {
...process.env, ...process.env,
...env, ...env
}, },
encoding: 'utf8', encoding: 'utf8',
stdio: ['pipe', 'pipe', 'pipe'], stdio: ['pipe', 'pipe', 'pipe']
}); });
} }
@@ -49,14 +58,24 @@ let passed = 0;
let failed = 0; let failed = 0;
if ( if (
test('install-global-git-hooks.sh handles quoted hook paths without shell injection', () => { test('install-global-git-hooks.sh does not use eval and executes argv directly', () => {
assert.ok(!installSource.includes('eval "$*"'), 'Expected installer to avoid eval');
assert.ok(installSource.includes(' "$@"'), 'Expected installer to execute argv directly');
assert.ok(installSource.includes(`printf ' %q' "$@"`), 'Expected dry-run logging to shell-escape argv');
})
)
passed++;
else failed++;
if (
test('install-global-git-hooks.sh handles shell-sensitive hook paths without shell injection', () => {
const homeDir = createTempDir('codex-hooks-home-'); const homeDir = createTempDir('codex-hooks-home-');
const weirdHooksDir = path.join(homeDir, 'git-hooks "quoted"'); const weirdHooksDir = path.join(homeDir, "git-hooks 'quoted' & spaced");
try { try {
const result = runBash(installScript, [], { const result = runBash(installScript, [], {
HOME: homeDir, HOME: toBashPath(homeDir),
ECC_GLOBAL_HOOKS_DIR: weirdHooksDir, ECC_GLOBAL_HOOKS_DIR: toBashPath(weirdHooksDir)
}); });
assert.strictEqual(result.status, 0, result.stderr || result.stdout); assert.strictEqual(result.status, 0, result.stderr || result.stdout);
@@ -70,66 +89,6 @@ if (
passed++; passed++;
else failed++; else failed++;
if (
test('sync and global sanity checks accept the legacy context7 MCP section', () => {
const homeDir = createTempDir('codex-sync-home-');
const codexDir = path.join(homeDir, '.codex');
const configPath = path.join(codexDir, 'config.toml');
const config = [
'approval_policy = "on-request"',
'sandbox_mode = "workspace-write"',
'web_search = "live"',
'persistent_instructions = ""',
'',
'[features]',
'multi_agent = true',
'',
'[profiles.strict]',
'approval_policy = "on-request"',
'sandbox_mode = "read-only"',
'web_search = "cached"',
'',
'[profiles.yolo]',
'approval_policy = "never"',
'sandbox_mode = "workspace-write"',
'web_search = "live"',
'',
'[mcp_servers.context7]',
'command = "npx"',
'args = ["-y", "@upstash/context7-mcp"]',
'',
'[mcp_servers.github]',
'command = "npx"',
'args = ["-y", "@modelcontextprotocol/server-github"]',
'',
'[mcp_servers.memory]',
'command = "npx"',
'args = ["-y", "@modelcontextprotocol/server-memory"]',
'',
'[mcp_servers.sequential-thinking]',
'command = "npx"',
'args = ["-y", "@modelcontextprotocol/server-sequential-thinking"]',
'',
].join('\n');
try {
fs.mkdirSync(codexDir, { recursive: true });
fs.writeFileSync(configPath, config);
const syncResult = runBash(syncScript, [], { HOME: homeDir, CODEX_HOME: codexDir });
assert.strictEqual(syncResult.status, 0, syncResult.stderr || syncResult.stdout);
const checkResult = runBash(checkScript, [], { HOME: homeDir, CODEX_HOME: codexDir });
assert.strictEqual(checkResult.status, 0, checkResult.stderr || checkResult.stdout);
assert.match(checkResult.stdout, /MCP section \[mcp_servers\.context7\] or \[mcp_servers\.context7-mcp\] exists/);
} finally {
cleanup(homeDir);
}
})
)
passed++;
else failed++;
console.log(`\nPassed: ${passed}`); console.log(`\nPassed: ${passed}`);
console.log(`Failed: ${failed}`); console.log(`Failed: ${failed}`);
process.exit(failed > 0 ? 1 : 0); process.exit(failed > 0 ? 1 : 0);