Skip to content

Silver (Convergent) conformance checks

Reference: Silver (Convergent) conformance checks

Section titled “Reference: Silver (Convergent) conformance checks”

Seven checks (S1-S7) earn Silver tier. Each fires findings tagged reqId: "S<n>"; tier-report buckets them into the convergent tier and lists unmet ones in blocked.convergent.

reqId Module What it checks Standard Conditional? Example fix
S1 scripts/checks/agent-targets.mjs library.json.agent-targets is a non-empty array of claude/codex sec 5.1, sec 2.2 no Add "agent-targets": ["claude", "codex"] to library.json.
S2 scripts/checks/prefix.mjs library.json.prefix is lowercase kebab-case ending in - sec 8.2 no Add "prefix": "<short>-" to library.json (e.g. "askit-").
S3 scripts/checks/components-index.mjs The library.json.components index and disk list the same skills, subagents, commands and workflows, matched by name in both directions. An entry’s path, version and status are NOT compared against the component on disk (status and tier agreement with frontmatter is S8’s; path/version agreement is unwritten, ADR 0059) sec 5.1, sec 10.3 no Ensure library.json.components.skills lists each on-disk skill and library.json.components.subagents lists each on-disk subagent, each with {name, path, version, tier, status}. An undeclared component or a dangling declaration both fail S3.
S4 scripts/checks/chain-contract.mjs agents/_chain-permitted.yaml has no orphan or phantom entries; contract is present when chaining is in use sec 3.6 yes (chaining-in-use) Orphan: a frontmatter chain: invocation not listed under the caller in the contract - add the <caller>: [<callee>] entry. Phantom: a contract entry naming a caller or callee that matches no on-disk component - remove the stale entry or create the missing component.
S5 scripts/checks/workflow-skills.mjs Workflows reference only on-disk skills sec 3.4 yes (workflows exist) Fix the workflow’s steps: list to reference an existing skill name.
S6 scripts/checks/per-target-presence.mjs Each agent-targets entry has its native manifest on disk (.claude-plugin/plugin.json / .codex-plugin/plugin.json), and - when the plugin ships .mcp.json - each of those manifests carries "mcpServers": "./.mcp.json". No other convergent component is checked for per-target emission sec 5.1, sec 10.1 yes (agent-targets declared) Run npx agent-skills-toolkit gen-manifest . --write --target=all to generate the missing native manifest.
S7 scripts/checks/command-contract.mjs Every commands/<name>.md declares a non-empty description and a maps-to that resolves to exactly one on-disk skill or workflow sec 3.2, sec 8.1 yes (commands exist) Missing description: add a non-empty description to the frontmatter. Missing maps-to: add the key naming the backing skill or workflow. Unresolved maps-to: correct the name or create the missing component.

Subagents are Claude-only for plugin distribution (Standard sec 3.3). Codex v0.135 plugins cannot ship subagents (plugin.json has no agents field; [agents.*] is a user-level config.toml concern). A subagent declares agent-targets: [claude] in its frontmatter. For S3, a subagent’s presence on disk as agents/<name>.md is what matters - there is no Codex artifact to cross-check. The S6 dual-target component-level check does not apply to subagents in this phase; S6 remains a plugin-manifest-level check.

Findings cite their Standard section in the message, so an agent reading a report can navigate to the rule. Convergent errors do NOT fail the gate at the Universal tier - they appear in blocked.convergent until the plugin declares convergent and addresses them.