Audit the bundled configuration skill against the code - #70
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Audit of
skills/claude-code-plugin/SKILL.mdagainst the source, as asked: read everyfactual statement, find the code that decides it, fix the statement where it disagreed.
Identifier coverage was already complete; this is about what the skill says about those
identifiers. No runtime code changed.
What was wrong
claudeprocess exits"idleProcessTimeoutMsis set.DEFAULT_IDLE_PROCESS_TIMEOUT_MS = 0, andresolveIdleProcessTimeoutMsmaps an unset option onto itsrc/session-manager.ts:1950keeps workers until the 8-process LRU cap"src/session-manager.ts:208src/session-manager.ts:208,:195idleProcessTimeoutMssrc/session-manager.ts:208provider.claude-code.settingsis the native spelling"providers.claude-code.settings, plural. The plugin reads four places, lowest first:provider.<id>.options,provider.<id>.settings,providers.<id>.settings, then the plugin entry's ownoptions, which winssrc/v2.ts:265-277accountsmay also sit in the plugin entry's ownoptions"src/v2.ts:271-276Questionalone is that it disables Claude's ownAskUserQuestionAGENTS.mdquestions section,src/types.ts:579-591accountFailoverrate_limit_eventor the two known account-limit error texts"authentication_failed,oauth_org_not_allowed,account_on_hold,verification_required,billing_error). The recipe lower down already had this; the option row did notsrc/account-failover.ts:106-112permissionPresetproxyToolsfiltered,extraDisallowedToolsunionedsrc/permission-presets.ts:148-204turnStatssrc/turn-stats.ts:104-107task_batchsrc/proxy-mcp.ts:439-453/claude-code-doctor usageusageadds a Plan usage section"src/doctor.ts:318-337turnStatsand the last-stderr block, and did not say a deadline-free call showsnoneformatDoctorReportsrc/doctor.ts:219, 263, 339-3502.1.142,2.1.220,2.1.258,2.1.263), and2.1.258also gates--restricted, which the read-only preset depends on and which the list never mentioned.2.1.284(Sonnet 5.5) was missing entirelysrc/cli-version.ts:117-168,src/cli-events.ts:807-810skills.paths"skilldomain insteadsrc/skill-bridge.ts:583-600,src/v2.ts:505-521~/.claude/skillsand~/.agents/skills... obeyOPENCODE_DISABLE_EXTERNAL_SKILLSandOPENCODE_DISABLE_CLAUDE_CODE_SKILLS"OPENCODE_DISABLE_EXTERNAL_SKILLSdrops both;OPENCODE_DISABLE_CLAUDE_CODE_SKILLSdrops~/.claude/skillsalonesrc/skill-bridge.ts:238-243OPENCODE_WORKTREEsrc/mcp-bridge.ts:523OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTStaskschema carries abackgroundproperty, and on opencode 2 it does not ask at allsrc/proxy-mcp.ts:668-676task,task_batch) can reach it"0inproxyToolTimeoutMsis deadline-free toosrc/proxy-mcp.ts:182-203is_errorforwarding), 0.20.0 (deleted-session release, mid-turn eviction), 0.31.0 (last-call context usage), 0.32.0 (interactive per-call usage), 0.33.0 (interactive result shape, transcript realpath)git describe --containson each change@latest; removing that directory and fully relaunching is what picks a version upAGENTS.md(h #g23)AGENTS.md was wrong too
AGENTS.md(h #g62) said "Cap is 8". The code says 16. PR #36 proposed 8 alongside a30-minute default idle timer;
dfb82d5reverted both at merge on 2026-09-19, one dayafter the history entry was written, and the condense in #47 carried the old wording
across. Fixed in
AGENTS.md, with the evidence in a newdocs/agents-history.md#g179in the format of #g178.
README.mdwas right about this throughout.What I changed beyond the corrections
### How a proxied call endssection. The whole proxy-deadline lifecycle (whatends a call, the three timers, the busy-recheck, the two "still waiting" log lines) was
buried inside
### Background subagents, where an agent looking up a timeout will notfind it. Moved verbatim in content, split into paragraphs and a list, and placed
directly after the proxy tool table. No fact dropped.
## Recipes, since every fragment usesthe 1.x spelling that 2.x also reads. Absorbed the duplicated "fragments belong inside
the options object" sentence that sat in one recipe only.
saying which entries are flag gates and which are model floors.
CLAUDE_CODE_PROMPT_CACHE_TTL,OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS,OPENCODE_DISABLE_EXTERNAL_SKILLS,OPENCODE_DISABLE_CLAUDE_CODE_SKILLS.connecting when the turn plans its spawn is correctly read as not enabled, and a reused
process keeps its first MCP config). Marked as not a config fault and not fixable by an
option, which is what a diagnosing agent needs to be told.
task_batch's input contract (tasksarray, at least two items, three required stringfields, validated before queueing) added, because the model-facing failure is silent
otherwise.
evicting LRU claude process,background subagent gate); every line named in that list was checked to exist insrc/.What I removed
Only the claims above, each replaced by what the code does. One claim was removed without
replacement: "(measured: 2.0.11 loaded a plugin listed under
plugin)". The fact thatopencode 2 reads the
pluginkey is recorded (docs/agents-history.md#g39), but thatspecific per-version measurement is not, so the citation now points at the recorded fact.
README fixes
defaultModelshas 18 entriesprovider.claude-code.settings"providers.claude-code.settings, plus the full four-layer precedenceEverything else in the README that overlaps this audit was checked and is correct,
including the 16-process cap, the idle default, Sonnet 5/5.5 at $2/$10, the 2.1.284
floor, the paused Agent SDK credit, and the Plan usage section being always present.
Test changes
test-configure-skill.tsgained six mechanical guards for classes of drift this auditfound, all derived from imported constants or parsed out of the source:
proxyToolsagainstDEFAULT_PROXY_TOOL_NAMES,compactionModelagainstDEFAULT_COMPACTION_MODEL,idleProcessTimeoutMsagainstDEFAULT_IDLE_PROCESS_TIMEOUT_MS,skipPermissionsagainst the
?? trueinsrc/index.ts,cliPath), plus a negative assertion that theskill never claims a default idle timer again;
MAX_ACTIVE_PROCESSES;PROXY_DEFAULT_TIMEOUT_MS,PROXY_PER_TOOL_DEFAULT_TIMEOUT_MSandMAX_PROXY_TIMEOUT_MS;src/turn-state.ts;N×price multipliers against the registry's, both directions;MODEL_CLI_FLOORSmodel and version.Mutation-checked rather than assumed: changing 16 to 8, the question deadline to 45 min,
the compaction model, the Opus 5.5 multiplier and the start-watchdog default each failed
the suite, and the file was restored byte-identical afterwards.
No new test file, so
package.jsonis unchanged.Checks
The skill still ships and is discoverable in the built package.
Not verified
claudeprocess was started, so nothing here is a live probe. Everystatement is tied to source, to a recorded measurement in
AGENTS.md/docs/agents-history.md, or removed.configuredSeedSettings; it was notre-run against a 2.x sandbox.
page, the paused Agent SDK credit, the February 2026 third-party auth ban). They match
the code comments and
README.mdand were left as they stand.skill's was, but it is not a contradiction, so I left it rather than widening the diff.