mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 21:53:28 +08:00
Compare commits
1 Commits
fix/codex-
...
fix/token-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ebf0f135bb |
@@ -86,8 +86,7 @@ startup_timeout_sec = 30
|
||||
# args = ["-y", "@cloudflare/mcp-server-cloudflare"]
|
||||
|
||||
[features]
|
||||
# Codex multi-agent collaboration is stable and on by default in current builds.
|
||||
# Keep the explicit toggle here so the repo documents its expectation clearly.
|
||||
# Codex multi-agent support is experimental as of March 2026.
|
||||
multi_agent = true
|
||||
|
||||
# Profiles — switch with `codex -p <name>`
|
||||
@@ -102,9 +101,6 @@ sandbox_mode = "workspace-write"
|
||||
web_search = "live"
|
||||
|
||||
[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_depth = 1
|
||||
|
||||
|
||||
@@ -295,7 +295,7 @@ everything-claude-code/
|
||||
| |-- plugin.json # Plugin metadata and component paths
|
||||
| |-- 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
|
||||
| |-- architect.md # System design decisions
|
||||
| |-- tdd-guide.md # Test-driven development
|
||||
|
||||
@@ -112,25 +112,10 @@ if [[ -f "$CONFIG_FILE" ]]; then
|
||||
fi
|
||||
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
|
||||
has_context7_current=1
|
||||
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"
|
||||
warn "Legacy [mcp_servers.context7-mcp] exists (context7 is preferred)"
|
||||
else
|
||||
fail "MCP section [mcp_servers.context7] or [mcp_servers.context7-mcp] missing"
|
||||
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"
|
||||
ok "No legacy [mcp_servers.context7-mcp] section"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||
---
|
||||
name: token-budget-advisor
|
||||
description: >-
|
||||
Intercepts the response flow to offer the user an informed choice about
|
||||
how much depth/tokens to consume — BEFORE responding. Use this skill
|
||||
when the user wants to control token consumption, adjust response depth,
|
||||
choose between short/long answers, or optimize their prompt.
|
||||
TRIGGER when: "token budget", "response token budget", "token count",
|
||||
"token usage", "response length", "response depth", "brief answer",
|
||||
"short answer", "detailed answer", "full answer",
|
||||
"respuesta corta vs larga", "cuántos tokens", "ahorrar tokens",
|
||||
"responde al 50%", "dame la versión corta", "quiero controlar cuánto usas",
|
||||
"75%", "100%", "at 25%", "at 50%", "at 75%", "at 100%",
|
||||
"give me the full answer", or any variant where the user wants
|
||||
to control length, depth, or token usage — even without mentioning tokens.
|
||||
Offers the user an informed choice about how much response depth to
|
||||
consume before answering. Use this skill when the user explicitly
|
||||
wants to control response length, depth, or token budget.
|
||||
TRIGGER when: "token budget", "token count", "token usage", "token limit",
|
||||
"response length", "answer depth", "short version", "brief answer",
|
||||
"detailed answer", "exhaustive answer", "respuesta corta vs larga",
|
||||
"cuántos tokens", "ahorrar tokens", "responde al 50%", "dame la versión
|
||||
corta", "quiero controlar cuánto usas", or clear variants where the
|
||||
user is explicitly asking to control answer size or depth.
|
||||
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
|
||||
---
|
||||
|
||||
@@ -35,12 +33,14 @@ Intercept the response flow to offer the user a choice about response depth **be
|
||||
|
||||
### Step 1 — Estimate input tokens
|
||||
|
||||
Use the repository's canonical estimation guidance from `skills/context-budget`.
|
||||
Use the repository's canonical context-budget heuristics to estimate the prompt's token count mentally.
|
||||
|
||||
- Prose-first prompts: `input_tokens ≈ word_count × 1.3`
|
||||
- Code-heavy or mixed prompts: `input_tokens ≈ char_count / 4`
|
||||
Use the same calibration guidance as [context-budget](../context-budget/SKILL.md):
|
||||
|
||||
For mixed content, prefer the code-heavy estimate as the conservative default.
|
||||
- prose: `words × 1.3`
|
||||
- code-heavy or mixed/code blocks: `chars / 4`
|
||||
|
||||
For mixed content, use the dominant content type and keep the estimate heuristic.
|
||||
|
||||
### Step 2 — Estimate response size by complexity
|
||||
|
||||
@@ -72,7 +72,7 @@ Choose your depth level:
|
||||
[3] Detailed (75%) -> ~[tokens] Full answer with alternatives
|
||||
[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%).
|
||||
```
|
||||
@@ -98,10 +98,10 @@ If the user already signals a level, respond at that level immediately without a
|
||||
|
||||
| What they say | Level |
|
||||
|----------------------------------------------------|-------|
|
||||
| "1" / "25%" / "short answer" / "brief" / "tldr" / "one-liner" | 25% |
|
||||
| "2" / "50%" / "moderate detail" / "balanced answer" | 50% |
|
||||
| "3" / "75%" / "detailed answer" / "thorough explanation" | 75% |
|
||||
| "4" / "100%" / "exhaustive" / "everything" / "full answer" | 100% |
|
||||
| "1" / "25% depth" / "short version" / "brief answer" / "tldr" | 25% |
|
||||
| "2" / "50% depth" / "moderate depth" / "balanced answer" | 50% |
|
||||
| "3" / "75% depth" / "detailed answer" / "thorough answer" | 75% |
|
||||
| "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.
|
||||
|
||||
@@ -113,19 +113,21 @@ This skill uses heuristic estimation — no real tokenizer. Accuracy ~85-90%, va
|
||||
|
||||
### Triggers
|
||||
|
||||
- "Give me the brief answer first."
|
||||
- "How many tokens will your response use?"
|
||||
- "Give me the short version first."
|
||||
- "How many tokens will your answer use?"
|
||||
- "Respond at 50% depth."
|
||||
- "I want the full answer."
|
||||
- "Dame la version corta."
|
||||
- "I want the exhaustive answer, not the summary."
|
||||
- "Dame la version corta y luego la detallada."
|
||||
|
||||
### Does Not Trigger
|
||||
|
||||
- "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)
|
||||
- "What is 2 + 2?" (trivially short answer)
|
||||
- "What is a JWT token?"
|
||||
- "The checkout flow uses a payment token."
|
||||
- "Is this normal?"
|
||||
- "Complete the refactor."
|
||||
- Follow-up questions after the user already chose a depth for the session
|
||||
|
||||
## Source
|
||||
|
||||
Standalone skill from [TBA — Token Budget Advisor for Claude Code](https://github.com/Xabilimon1/Token-Budget-Advisor-Claude-Code-).
|
||||
The upstream project includes an optional estimator script, but this ECC skill intentionally stays zero-dependency and heuristic-only.
|
||||
Original project also ships a Python estimator script, but this repository keeps the skill self-contained and heuristic-only.
|
||||
|
||||
@@ -25,22 +25,6 @@ const configPath = path.join(repoRoot, '.codex', 'config.toml');
|
||||
const config = fs.readFileSync(configPath, 'utf8');
|
||||
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 failed = 0;
|
||||
|
||||
@@ -63,37 +47,6 @@ if (
|
||||
passed++;
|
||||
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 (
|
||||
test('sample Codex role configs do not use o4-mini', () => {
|
||||
const roleFiles = fs.readdirSync(codexAgentsDir).filter(file => file.endsWith('.toml'));
|
||||
|
||||
@@ -10,8 +10,7 @@ const { spawnSync } = require('child_process');
|
||||
|
||||
const repoRoot = path.join(__dirname, '..', '..');
|
||||
const installScript = path.join(repoRoot, 'scripts', 'codex', 'install-global-git-hooks.sh');
|
||||
const syncScript = path.join(repoRoot, 'scripts', 'sync-ecc-to-codex.sh');
|
||||
const checkScript = path.join(repoRoot, 'scripts', 'codex', 'check-codex-global-state.sh');
|
||||
const installSource = fs.readFileSync(installScript, 'utf8');
|
||||
|
||||
function test(name, fn) {
|
||||
try {
|
||||
@@ -33,15 +32,25 @@ function cleanup(dirPath) {
|
||||
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) {
|
||||
return spawnSync('bash', [scriptPath, ...args], {
|
||||
return spawnSync('bash', [toBashPath(scriptPath), ...args], {
|
||||
cwd,
|
||||
env: {
|
||||
...process.env,
|
||||
...env,
|
||||
...env
|
||||
},
|
||||
encoding: 'utf8',
|
||||
stdio: ['pipe', 'pipe', 'pipe'],
|
||||
stdio: ['pipe', 'pipe', 'pipe']
|
||||
});
|
||||
}
|
||||
|
||||
@@ -49,14 +58,24 @@ let passed = 0;
|
||||
let failed = 0;
|
||||
|
||||
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 weirdHooksDir = path.join(homeDir, 'git-hooks "quoted"');
|
||||
const weirdHooksDir = path.join(homeDir, "git-hooks 'quoted' & spaced");
|
||||
|
||||
try {
|
||||
const result = runBash(installScript, [], {
|
||||
HOME: homeDir,
|
||||
ECC_GLOBAL_HOOKS_DIR: weirdHooksDir,
|
||||
HOME: toBashPath(homeDir),
|
||||
ECC_GLOBAL_HOOKS_DIR: toBashPath(weirdHooksDir)
|
||||
});
|
||||
|
||||
assert.strictEqual(result.status, 0, result.stderr || result.stdout);
|
||||
@@ -70,66 +89,6 @@ if (
|
||||
passed++;
|
||||
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(`Failed: ${failed}`);
|
||||
process.exit(failed > 0 ? 1 : 0);
|
||||
|
||||
Reference in New Issue
Block a user