TL;DR
aiwg doctor has two checks that measure the same thing (deployed skill listing tokens) against different baselines. The "Skill Budget" check correctly reads skillListingBudgetFraction from ~/.claude/settings.json and flips to ✓ when the user raises the budget. The "Deployed Skill Count" check is hard-coded to compare against the vendor default (500 tokens) and continues to warn even after the user has taken the documented remediation. Result: doctor produces a persistent, redundant warning that can't be cleared without removing skills.
Environment (REQUIRED — issues missing any field will be returned for clarification)
Steps to reproduce
# 1. Deploy enough skills to exceed the 500-token default
aiwg use all --provider claude
# 2. Verify doctor warns about both checks
aiwg doctor 2>&1 | grep -E "Skill Budget|Deployed Skill Count"
# ⚠ Claude Code Skill Budget: EXCEEDS DEFAULT (2.58×) — ...
# ⚠ Claude Code Deployed Skill Count: 28 deployed skills estimate 1,289 tokens, above ...
# 3. Apply the documented remediation: raise the budget fraction
# (edit ~/.claude/settings.json to add "skillListingBudgetFraction": 0.03)
# 4. Re-run doctor
aiwg doctor 2>&1 | grep -E "Skill Budget|Deployed Skill Count"
Expected behavior
Both checks should respect the user's skillListingBudgetFraction override. After raising the budget to cover deployed skills, both should report ✓.
Actual behavior
Only the "Skill Budget" check flips to ✓. The "Deployed Skill Count" check continues to warn against the vendor default:
✓ Claude Code Skill Budget: tight (0.86×) — 28 skills (avg 165 chars desc), est. 1,289 tokens vs 1,500 tokens budget — 3.00% × 200,000 ctx (override in ~/.claude/settings.json)
⚠ Claude Code Deployed Skill Count: 28 deployed skills estimate 1,289 tokens, above Claude Code's default listing budget (500 tokens). Run `aiwg use all` for workspace-aware filtering or `aiwg list --deployed` to inspect include/exclude reasons.
The two checks now contradict each other: one says "your configured budget is fine", the other says "you're above the default" — without acknowledging the user has explicitly opted out of the default.
Suggested fix
tools/cli/doctor.mjs line 246-253 (the "Deployed Skill Count" check) is hard-coded to use defaultBudgetTokens. The "Skill Budget" check (around line 321-338) already reads the configured fraction and computes the effective budget. The Deployed Skill Count check should use the same effective budget:
// Current (line 246-253):
if (provName === 'claude') {
const defaultBudgetTokens = Math.floor(
(CLAUDE_DEFAULT_CONTEXT_WINDOW * CLAUDE_DEFAULT_BUDGET_FRACTION) / CHARS_PER_TOKEN,
);
if (stats.totalTokens > defaultBudgetTokens) {
check(`${label} Deployed Skill Count`, 'warn', `... above Claude Code's default listing budget ...`);
}
}
// Suggested: read the configured fraction (same code path as the Skill Budget check)
const fraction = readSkillListingBudgetFraction() ?? CLAUDE_DEFAULT_BUDGET_FRACTION;
const effectiveBudgetTokens = Math.floor(
(CLAUDE_DEFAULT_CONTEXT_WINDOW * fraction) / CHARS_PER_TOKEN,
);
if (stats.totalTokens > effectiveBudgetTokens) {
check(`${label} Deployed Skill Count`, 'warn', `... above your configured listing budget (${effectiveBudgetTokens} tokens) ...`);
}
Alternatively, if the intent of "Deployed Skill Count" is specifically to surface "you're above vendor defaults" as an informational note, drop the redundant warn severity to note/info-level (the ○ marker doctor already uses for optional things) so it doesn't count against the warning total.
The first option is cleaner — having two warn-severity checks for the same condition that disagree on their baseline is confusing.
Acceptance criteria
Related
TL;DR
aiwg doctorhas two checks that measure the same thing (deployed skill listing tokens) against different baselines. The "Skill Budget" check correctly readsskillListingBudgetFractionfrom~/.claude/settings.jsonand flips to ✓ when the user raises the budget. The "Deployed Skill Count" check is hard-coded to compare against the vendor default (500 tokens) and continues to warn even after the user has taken the documented remediation. Result: doctor produces a persistent, redundant warning that can't be cleared without removing skills.Environment (REQUIRED — issues missing any field will be returned for clarification)
2026.5.12 [stable]Darwin mac-studio.tail10294f.ts.net 24.6.0 Darwin Kernel Version 24.6.0: Mon Jan 19 22:01:58 PST 2026; root:xnu-11417.140.69.708.3~1/RELEASE_ARM64_T6041 arm64claude-codev26.0.0npm-globalSteps to reproduce
Expected behavior
Both checks should respect the user's
skillListingBudgetFractionoverride. After raising the budget to cover deployed skills, both should report ✓.Actual behavior
Only the "Skill Budget" check flips to ✓. The "Deployed Skill Count" check continues to warn against the vendor default:
The two checks now contradict each other: one says "your configured budget is fine", the other says "you're above the default" — without acknowledging the user has explicitly opted out of the default.
Suggested fix
tools/cli/doctor.mjsline 246-253 (the "Deployed Skill Count" check) is hard-coded to usedefaultBudgetTokens. The "Skill Budget" check (around line 321-338) already reads the configured fraction and computes the effective budget. The Deployed Skill Count check should use the same effective budget:Alternatively, if the intent of "Deployed Skill Count" is specifically to surface "you're above vendor defaults" as an informational note, drop the redundant
warnseverity tonote/info-level (the○marker doctor already uses for optional things) so it doesn't count against the warning total.The first option is cleaner — having two
warn-severity checks for the same condition that disagree on their baseline is confusing.Acceptance criteria
skillListingBudgetFractionto a value that covers the deployed skill tokens, both the "Skill Budget" and "Deployed Skill Count" checks pass.aiwg doctordescribes whether "Deployed Skill Count" reads the override or stays pinned to defaults (so behavior is unambiguous either way).Related
gh issue list -R jmagly/aiwg --search "Deployed Skill Count budget override"or--search "skillListingBudgetFraction"tools/cli/doctor.mjs:246-253(Deployed Skill Count check) vstools/cli/doctor.mjs:321-338(Skill Budget check that does read the override)aiwg remove --providerTypeError, also filed againstaiwg doctorcompanion CLI surface)