@ccoalm/ccl-skills 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/SKILL.md +19 -24
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/client-routing.md +32 -32
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/manual-invocation-and-prompts.md +16 -14
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/staged-review-contract.md +24 -26
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/AGENTS.md +11 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/claude_review.sh +60 -209
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/init_policy_matrix.py +114 -367
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_probe_result.py +52 -672
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/review_gate.py +10 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/runtime-surface-verification-design.md +4 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_claude_review_probe.sh +77 -444
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_init_policy_matrix.sh +33 -98
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_parse_probe_result.sh +57 -173
- package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/grill-me/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/SKILL.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/rd-standards-doc-family-checklist.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-baseline/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-scope/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/SKILL.md +14 -41
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/attention-budget-ratchet.md +11 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/correction-routing-map.md +22 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/coverage-exhaustion-traps.md +7 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/description-authoring.md +26 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/dual-track-review-gate.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/eval-routing.md +8 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/external-practice-controls.md +7 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/extraction-quickstart.md +4 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/harness-patterns-and-eval.md +8 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/incident-postmortem-extraction.md +8 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/rule-consolidation.md +1 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-register.md +73 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/uiux-judgment-extraction.md +11 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/validation-and-landing.md +11 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/entrypoint_form_census.py +169 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-routing-bank.rb +62 -3
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/impact-chain-gate.rb +114 -10
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/reference-access-census.sh +157 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/review_ledger_binding.py +483 -109
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_impact_chain_refscripts.sh +188 -14
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_regressions.sh +10 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_entrypoint_form_census.sh +174 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_bank_resolution.sh +253 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_gate_verdict_differential.sh +49 -25
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_reference_access_census.sh +209 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_review_ledger_binding.sh +394 -5
- package/dist/assets/release.json +77 -47
- package/package.json +1 -1
|
@@ -87,28 +87,23 @@ The shared skill never pins a provider or model. Kimi inherits the user's local
|
|
|
87
87
|
|
|
88
88
|
Client discovery is separate from model ownership. For Kimi, the wrapper accepts an absolute executable `KIMI_BIN`; otherwise it checks `PATH`, then `$KIMI_CODE_HOME/bin/kimi` when configured, then the standard `~/.kimi-code/bin/kimi` location. The resolved executable must be absolute and executable before the wrapper changes directory. This avoids treating a non-interactive shell's narrower `PATH` as proof that Kimi is not installed, honors a custom Kimi home, and avoids relative-PATH drift in the temporary workspace; it does not change the user's model/provider settings. An executable PATH selection keeps normal shell precedence; use `KIMI_BIN` to bypass a broken executable shim explicitly.
|
|
89
89
|
|
|
90
|
-
The Claude provider wrapper implements help inspection, built-in tool availability restriction, safe-mode customization isolation, strict empty MCP configuration, empty user/project/local setting sources, CLAUDE.md and auto-memory disabling, repository directory scoping with `--add-dir`, consult dirty-worktree fail-closed checks, prompt-only consult for pasted evidence, temp prompt file permissions and cleanup, Python subprocess capture without putting diff content on argv, structured JSON parsing, schema validation, timeout handling, auth false-negative classification, and the two-invocation cap. Runs without selected owner skills disable
|
|
91
|
-
|
|
92
|
-
Owner-aware Claude
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
API key.
|
|
108
|
-
Before loading the installed plugin, the wrapper validates that its manifest
|
|
109
|
-
exposes only the native `./skills` entrypoint and no top-level agents, commands,
|
|
110
|
-
hooks, or MCP servers. A broader plugin manifest is capability-ineligible for
|
|
111
|
-
this bounded lane and fails closed before Claude starts.
|
|
90
|
+
The Claude provider wrapper implements help inspection, built-in tool availability restriction, safe-mode customization isolation, strict empty MCP configuration, empty user/project/local setting sources, CLAUDE.md and auto-memory disabling, repository directory scoping with `--add-dir`, consult dirty-worktree fail-closed checks, prompt-only consult for pasted evidence, temp prompt file permissions and cleanup, Python subprocess capture without putting diff content on argv, structured JSON parsing, schema validation, timeout handling, auth false-negative classification, and the two-invocation cap. Runs without selected owner skills pass `--disable-slash-commands` when the CLI offers it. Owner-aware runs load the installed CCL skill plugin through `--plugin-dir` and explicitly invoke each selected skill; they never manufacture a selected-only plugin. If that registry is absent, older than the profile, or unloadable, the run still reviews without owner skills and reports `native_skill_binding=unavailable`. Init's command, skill, and plugin lists are vocabulary the parser never judges; tools, MCP, and permission mode are the isolation proof. For review/challenge it also accepts the orchestrator's frozen `--diff-file` and emits stable `reason_code`, `fallback_eligible`, and `next_action` fields on every inconclusive path. Every mode captures Claude with structured stream JSON and adds `--json-schema` when the CLI advertises it; `parse_review_json.py` unwraps the result event's structured payload and rejects any envelope whose `is_error`, `subtype`, `api_error_status`, or `permission_denials` fields signal a non-clean run. `classify_envelope.py` reads those same structured fields to classify auth/quota/permission/error failures, so raw-text matching on the CLI's prose is only a fallback for the case where no JSON envelope was produced. On an auth false negative the wrapper returns `auth_path_unavailable`; a host rerun of the same gate adds `--host-remediation-attempted`. `--timeout` controls each formal invocation and must be an integer of at least 5 seconds; values above 1200 are clamped to 1200. The wrapper does not make a separate behavior-probe request. The formal invocation's own stream-init must declare exactly the expected tool set: packet-only modes allow only Claude's internal `StructuredOutput` tool when schema output is enabled, while repository consult additionally allows `Read,Grep,Glob`. Unexpected tool use, MCP inheritance, or schema drift fails closed. `--allowedTools` is a permission auto-approval rule, not an availability restriction, and is never used as the sandbox. The wrapper deliberately never runs `claude auth status` through command substitution, because that path can itself report a false logged-out state on this machine.
|
|
91
|
+
|
|
92
|
+
Owner-aware Claude binds the selected owners through frozen package hashes
|
|
93
|
+
against the installed registry and explicit names in the prompt, and loads that
|
|
94
|
+
plugin through `--plugin-dir`; that is what `native_skill_binding=established`
|
|
95
|
+
attests. Public init output is not read for the binding, and neither receipt
|
|
96
|
+
proves the model read a skill body.
|
|
97
|
+
|
|
98
|
+
Owner-aware Claude requires `--safe-mode`; `--plugin-dir` is added only when the
|
|
99
|
+
installed registry verifies against the profile and its manifest exposes only
|
|
100
|
+
the native `./skills` entrypoint (no top-level agents, commands, hooks, or MCP
|
|
101
|
+
servers), otherwise the run attests `native_skill_binding=unavailable` without
|
|
102
|
+
it. Safe mode disables ambient customizations, including a loaded plugin's
|
|
103
|
+
hooks, while the explicit plugin supplies the installed skill registry, and it
|
|
104
|
+
preserves the user's normal OAuth/keychain authentication path. The wrapper must
|
|
105
|
+
not add `--bare`: that flag disables OAuth and keychain reads and makes a
|
|
106
|
+
normally logged-in CLI unusable without a separate API key.
|
|
112
107
|
|
|
113
108
|
```bash
|
|
114
109
|
# Set this to the expanded code-review skill directory shown in the
|
|
@@ -296,13 +291,13 @@ substitute raw provider commands for review/challenge. Do not repeat host
|
|
|
296
291
|
remediation, and only tell the user to log in again when the host/local auth path
|
|
297
292
|
also reports logged out.
|
|
298
293
|
|
|
299
|
-
Tool-boundary invariants are defined under **Harness Exclusion** above. Missing built-in
|
|
294
|
+
Tool-boundary invariants are defined under **Harness Exclusion** above. Missing built-in tool, MCP, setting-source, safe-mode, CLAUDE.md, or auto-memory isolation is inconclusive; `--allowedTools` never substitutes for `--tools`. Prompt wording and `--add-dir` are not filesystem sandboxes.
|
|
300
295
|
|
|
301
296
|
For the numbered auth-recovery procedure, runtime classification detail, per-mode flag matrix, `--no-session-persistence`/model-pinning notes, and the CLI capability adoption policy (`--safe-mode`, `--bare`, `--output-format json`, `--fallback-model`, `--max-budget-usd`), see `references/timeout-auth-and-capabilities.md`.
|
|
302
297
|
|
|
303
298
|
## Reviewer Client Routing
|
|
304
299
|
|
|
305
|
-
`review_gate.sh` owns the handoff. It preserves mode, packet hash, attribution, permission boundaries, timeout, native skill binding, and parseable verdict semantics across the configured client order. Availability, auth/quota/timeout, capability, and malformed-model-output failures may continue only when the wrapper marks them candidate-local; security, binding, family, mode, input, egress, and unknown failures stop. Kimi is uniformly attributed to Moonshot, seeds a private writable runtime home from the validated user configuration inputs while linking any existing validated credential directories back to their user-owned paths so OAuth token rotation persists for homes that already have one (a replaced or missing link after the run is terminal `binding_mismatch`), and keeps the user's default model while running from a temporary workspace; it registers the installed skill directory through controlled `--skills-dir`, explicitly names selected owners, and must cover the exact packet through bounded contiguous `Read` pages before a verdict is eligible. Codex is uniformly attributed to OpenAI, receives the packet over stdin, verifies that each selected owner package exists with a safe package shape in its installed skill system, invokes it with `$skill-name`, and runs read-only/ephemeral without manufacturing a temporary skill tree. A newer installed CCL release is accepted by selected name rather than byte equality with an older candidate branch. An exact sandbox-only in-process app-server `EPERM` requests one same-packet host retry before it can become fallback-eligible. Neither client is subdivided by local provider/model aliases, and neither wrapper passes `--model`. Any packet-external tool activity invalidates those results. OpenCode registers the controller-supplied installed registry through project `skills.paths`, explicitly sets `permission.skill: allow`, and uses its public `debug agent` and session export surfaces; only selected owners are frozen-hash verified. It never reads the private session database. Its actual exported provider/model remains the dynamic family binding. A successful owner-aware wrapper must
|
|
300
|
+
`review_gate.sh` owns the handoff. It preserves mode, packet hash, attribution, permission boundaries, timeout, native skill binding, and parseable verdict semantics across the configured client order. Availability, auth/quota/timeout, capability, and malformed-model-output failures may continue only when the wrapper marks them candidate-local; security, binding, family, mode, input, egress, and unknown failures stop. Kimi is uniformly attributed to Moonshot, seeds a private writable runtime home from the validated user configuration inputs while linking any existing validated credential directories back to their user-owned paths so OAuth token rotation persists for homes that already have one (a replaced or missing link after the run is terminal `binding_mismatch`), and keeps the user's default model while running from a temporary workspace; it registers the installed skill directory through controlled `--skills-dir`, explicitly names selected owners, and must cover the exact packet through bounded contiguous `Read` pages before a verdict is eligible. Codex is uniformly attributed to OpenAI, receives the packet over stdin, verifies that each selected owner package exists with a safe package shape in its installed skill system, invokes it with `$skill-name`, and runs read-only/ephemeral without manufacturing a temporary skill tree. A newer installed CCL release is accepted by selected name rather than byte equality with an older candidate branch. An exact sandbox-only in-process app-server `EPERM` requests one same-packet host retry before it can become fallback-eligible. Neither client is subdivided by local provider/model aliases, and neither wrapper passes `--model`. Any packet-external tool activity invalidates those results. OpenCode registers the controller-supplied installed registry through project `skills.paths`, explicitly sets `permission.skill: allow`, and uses its public `debug agent` and session export surfaces; only selected owners are frozen-hash verified. It never reads the private session database. Its actual exported provider/model remains the dynamic family binding. A successful owner-aware wrapper must attest the binding: `native_skill_binding=established` populates `reviewed_skills` and records native explicit invocation; `native_skill_binding=unavailable` (registry or plugin unusable, packet reviewed without owner skills) keeps the verdict with `controller-profile` skill evidence and no natively reviewed skills; a wrapper attesting neither fails closed. None of the four client paths makes a separate model behavior-probe request. If the owning workflow requires review AND challenge, each lane still needs its own valid result. Load `references/client-routing.md` for details.
|
|
306
301
|
|
|
307
302
|
Across all four clients, `native_skill_binding=established` means the wrapper
|
|
308
303
|
verified the controller profile and selected-name arguments, established a safe
|
package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/client-routing.md
CHANGED
|
@@ -193,38 +193,38 @@ operators bypass a broken executable shim with explicit `KIMI_BIN`.
|
|
|
193
193
|
|
|
194
194
|
## Client Tool Boundaries
|
|
195
195
|
|
|
196
|
-
Claude
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
update. A new
|
|
226
|
-
the
|
|
227
|
-
capability rather than
|
|
196
|
+
Claude makes no separate probe or baseline invocation: the formal invocation,
|
|
197
|
+
retried at most once on a non-conforming envelope, is the only model call, and
|
|
198
|
+
its stream init proves isolation: the exact expected `tools` set, no
|
|
199
|
+
tool_use outside it, an empty `mcp_servers` list, and a pinned
|
|
200
|
+
`permissionMode`. The `slash_commands`, `terminal_slash_commands`, `skills`,
|
|
201
|
+
and `plugins` lists are host and plugin vocabulary, recorded and never judged:
|
|
202
|
+
nothing listed there is invocable past the pinned tool set, so a new built-in
|
|
203
|
+
shipped by a CLI release, an installed plugin's other entries, or an unfamiliar
|
|
204
|
+
spelling changes nothing about the verdict. The wrapper requires the
|
|
205
|
+
`--safe-mode` flag to exist and passes it; it does not parse the flag's help
|
|
206
|
+
prose. `--disable-slash-commands` is passed when the CLI offers it and no
|
|
207
|
+
plugin is loaded, as tidiness rather than a prerequisite.
|
|
208
|
+
|
|
209
|
+
Owner-skill binding is best effort. When the controller selected owner skills,
|
|
210
|
+
the wrapper verifies the installed CCL registry against the profile and loads
|
|
211
|
+
the plugin through `--plugin-dir`; a run that did so reports
|
|
212
|
+
`native_skill_binding=established`. When the registry is absent, older, or
|
|
213
|
+
fails verification, or the CLI cannot load a skills-only plugin, the wrapper
|
|
214
|
+
still reviews the packet without owner skills and reports
|
|
215
|
+
`native_skill_binding=unavailable`, which the controller records as
|
|
216
|
+
`controller-profile` skill evidence with no natively reviewed skills. A
|
|
217
|
+
profile that names no owners yet fails its own consistency check, or owner
|
|
218
|
+
arguments without a profile, remain caller errors.
|
|
219
|
+
|
|
220
|
+
A declared or invoked tool outside the expected set, an MCP server, or a
|
|
221
|
+
permission mode outside `default`/`plan` invalidates the lane and stays
|
|
222
|
+
terminal; schema drift in an unknown non-empty container or an unverifiable
|
|
223
|
+
authority knob refuses this Claude lane but may cascade as capability drift.
|
|
224
|
+
Routine built-in command or skill changes in a CLI release require no
|
|
225
|
+
repository update. A new tool, authority mode, or unreviewed schema may still
|
|
226
|
+
make the lane unavailable by design, because those surfaces can carry
|
|
227
|
+
capability rather than vocabulary.
|
|
228
228
|
|
|
229
229
|
Kimi retains the user's credentials and ordinary provider/model settings by
|
|
230
230
|
seeding a private writable runtime home from the validated source home. Session,
|
|
@@ -32,20 +32,22 @@ CLAUDE_CODE_DISABLE_CLAUDE_MDS=1 CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 claude --prin
|
|
|
32
32
|
|
|
33
33
|
Use a temporary prompt file for construction, then invoke Claude through the wrapper. The wrapper feeds the prompt through its controlled stdin/subprocess path so diff and source content do not appear in process argv. On this machine, ad hoc shell stdin redirection, command substitution, redirecting Claude stdout/stderr to files, and sandboxed subprocess capture can produce false `Not logged in` results even while local OAuth auth works; do not call `claude --print < "$PROMPT_FILE"` or `out=$(claude ...)` for review evidence. If capture fails this way and local auth is logged in, the wrapper's only allowed recovery is to rerun the same wrapper command from a host/escalated path (optionally with `--direct`), which still writes the Claude envelope to a temp file and accepts only parser-valid review JSON. For consult (tool-enabled) runs, run Claude from `<REPO_ROOT>` and pass `--add-dir <REPO_ROOT>` as workspace context; review and challenge run no-tools and pass no `--add-dir`, seeing only the diff packet. Either way, do not add `$HOME`, the skill directory, or parent source trees for ordinary product reviews. Do not embed attacker-controlled diff or file content directly in a heredoc; a line containing only the delimiter terminates the heredoc early. Backticks and `$...` inside double quotes or unquoted heredocs can execute in the caller shell before Claude sees the prompt. Single quotes are acceptable only for short prompts without apostrophes.
|
|
34
34
|
|
|
35
|
-
Before running any mode, inspect `claude -p --help`. The required boundary flags are `--safe-mode`, `--tools`, `--strict-mcp-config`, `--mcp-config`, `--setting-sources`, `--output-format`, and `--verbose`; repository consult also requires `--permission-mode` and `--add-dir`. Runs without selected owner skills
|
|
36
|
-
|
|
37
|
-
For owner-aware Claude runs,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
the
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
Owner-aware Claude must receive `--safe-mode`
|
|
47
|
-
|
|
48
|
-
|
|
35
|
+
Before running any mode, inspect `claude -p --help`. The required boundary flags are `--safe-mode`, `--tools`, `--strict-mcp-config`, `--mcp-config`, `--setting-sources`, `--output-format`, and `--verbose`; repository consult also requires `--permission-mode` and `--add-dir`. Runs without selected owner skills pass `--disable-slash-commands` when the CLI offers it; owner-aware runs load the installed CCL plugin through `--plugin-dir` when the CLI and the installed registry allow it, and otherwise review without owner skills and report `native_skill_binding=unavailable`. `--tools` restricts built-in availability, while `--allowedTools` only auto-approves matching tools and leaves other tools available, so the latter is never a substitute. Review, challenge, and prompt-only consult use `--tools ""`; repository consult uses `--tools Read,Grep,Glob`. Every mode disables inherited customizations, CLAUDE.md, and auto memory and supplies strict empty MCP and setting-source configuration; owner-aware review/challenge loads the verified installed CCL plugin and explicitly invokes the selected skills by name. Preflight must declare the exact tool set; schema-enabled main may add only the internal `StructuredOutput` tool, while schema-less main remains stream-validated without it. Runtime init may list any commands, skills, and plugins: those lists are vocabulary, never judged, and a CLI release or plugin that adds names to them changes nothing. Only the exact tool set, tool use, the empty MCP list, the pinned `permissionMode`, and schema drift in unknown non-empty containers decide, and they fail closed. The stream has no applied-setting-source or hook inventory, so `--setting-sources ""` is capability/argv checked under the CLI contract but cannot be independently runtime-attested; a CLI defect that ignores it and managed policy hooks remain residual host risks. The disable-memory environment variables are defense in depth behind required safe mode. Managed settings policy, including policy-configured hooks, and authentication/model/global state remain host-owned inputs. Choose prompt-only only when the needed evidence was already gathered by Codex/codegraph, the repository is not safely available to Claude, or the question is intentionally evidence-only. If the question is answerable from a repository Claude may read, use repository consult with the correct `--cwd` and keep `--extra` to trusted operator scope instead of pasted low-trust excerpts. The final JSON's `status`, `consult_scope`, and `tool_identity` are wrapper-injected coverage markers; if they are absent, treat the consult result as inconclusive. `parse_review_json.py` validates Claude's raw structured output before wrapper metadata injection and intentionally rejects wrapper-final identity/scope fields; do not re-feed the final wrapper JSON into that parser as pass evidence. Do not use permission allow-rules or a denylist as the primary availability boundary. Append `--no-session-persistence` only after confirming help lists it. If exact built-in tool, MCP, settings, memory, safe-mode, or runtime-init isolation is unavailable, fail closed; switch to prompt-only only when its own no-tool boundary is supported and the pasted evidence is sufficient.
|
|
36
|
+
|
|
37
|
+
For owner-aware Claude runs, the wrapper verifies the selected owners' frozen
|
|
38
|
+
package hashes against the installed registry, loads that plugin through
|
|
39
|
+
`--plugin-dir`, and explicitly names the owners in the prompt; that is what
|
|
40
|
+
`native_skill_binding=established` attests. What init enumerates for the
|
|
41
|
+
plugin, if anything, is not read. When the installed registry cannot be
|
|
42
|
+
verified or the plugin cannot be loaded, the run proceeds without owner skills
|
|
43
|
+
and attests `native_skill_binding=unavailable`. Neither receipt is proof that
|
|
44
|
+
the model read a skill body.
|
|
45
|
+
|
|
46
|
+
Owner-aware Claude must receive `--safe-mode`; `--plugin-dir` is added only on
|
|
47
|
+
the established binding path (verified registry, skills-only manifest),
|
|
48
|
+
otherwise the run attests `native_skill_binding=unavailable` without it. Safe
|
|
49
|
+
mode disables ambient customizations, including a loaded plugin's hooks, while
|
|
50
|
+
the explicitly loaded installed plugin supplies the full skill registry. Do not add `--bare`:
|
|
49
51
|
it disables OAuth/keychain authentication and makes a normally logged-in CLI
|
|
50
52
|
unusable unless a separate API key is injected. Do not emulate the registry with
|
|
51
53
|
a selected-only plugin directory.
|
|
@@ -90,10 +90,12 @@ and their frozen hashes. They verify that binding, use the already-installed
|
|
|
90
90
|
CCL skill registry through each client-native mechanism, and explicitly
|
|
91
91
|
name the selected owners: Claude `--plugin-dir`, Kimi `--skills-dir`, OpenCode
|
|
92
92
|
`skills.paths`, or Codex `$skill-name`. Skill bodies are never copied into the
|
|
93
|
-
review profile or prompt.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
review profile or prompt. Each successful owner-aware wrapper adds a
|
|
94
|
+
post-parse `native_skill_binding` receipt: `established` when the owners were
|
|
95
|
+
natively bound, or `unavailable` when the wrapper reviewed the packet without
|
|
96
|
+
owner skills because the installed registry or plugin could not be used (the
|
|
97
|
+
Claude wrapper degrades this way rather than refusing). A receipt saying
|
|
98
|
+
neither fails closed before the controller claims usage. Receipt injection itself is part of the
|
|
97
99
|
trusted wrapper path: a local serialization or output failure is terminal
|
|
98
100
|
`local_tool_failure`, never an empty or apparently successful result. After a
|
|
99
101
|
valid verdict, `reviewed_skills` contains only the selected owners passed
|
|
@@ -104,19 +106,15 @@ Codex, an independently updated installed package must exist and pass the same
|
|
|
104
106
|
safe-package validation, but its bytes need not equal an older candidate
|
|
105
107
|
branch; `$skill-name` binds the selected identity. The frozen source hash still
|
|
106
108
|
binds controller routing and review-chain reuse, not the host release version.
|
|
107
|
-
For Claude, the
|
|
108
|
-
|
|
109
|
-
names the owners
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
`
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
`skill_usage_evidence` records
|
|
117
|
-
native explicit invocation with `observed=false`; only a public client
|
|
118
|
-
event/export may populate `observed_skill_usage`. Reviewer prose and private
|
|
119
|
-
client databases do not count as observation evidence.
|
|
109
|
+
For Claude, the wrapper verifies the selected package hashes against the
|
|
110
|
+
installed registry, loads that plugin through `--plugin-dir`, and explicitly
|
|
111
|
+
names the owners; what the public init surface enumerates is vocabulary and is
|
|
112
|
+
not read. Loading the plugin is binding evidence, not proof that the model read
|
|
113
|
+
a skill body. `skill_usage_evidence` records native explicit invocation with
|
|
114
|
+
`observed=false` after an `established` receipt and `controller-profile` after
|
|
115
|
+
an `unavailable` one; only a public client event/export may populate
|
|
116
|
+
`observed_skill_usage`. Reviewer prose and private client databases do not
|
|
117
|
+
count as observation evidence.
|
|
120
118
|
|
|
121
119
|
For every client, `native_skill_binding=established` means the wrapper verified
|
|
122
120
|
the frozen selected packages and emitted that client's native explicit-invocation
|
|
@@ -127,15 +125,15 @@ This binding check also applies to direct wrapper calls. If a native-installed
|
|
|
127
125
|
profile selects owners but the matching registry root or owner arguments are
|
|
128
126
|
omitted, every wrapper returns terminal `binding_mismatch` before inference.
|
|
129
127
|
|
|
130
|
-
Owner-aware Claude requires `--safe-mode
|
|
131
|
-
|
|
132
|
-
skills
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
128
|
+
Owner-aware Claude requires `--safe-mode`; `--plugin-dir` is added only when
|
|
129
|
+
the installed registry verifies and the plugin manifest exposes only the
|
|
130
|
+
`./skills` entrypoint, so ambient customizations stay disabled while the
|
|
131
|
+
installed plugin supplies skills and normal OAuth/keychain authentication
|
|
132
|
+
remains available; otherwise the run proceeds without owner skills and attests
|
|
133
|
+
`native_skill_binding=unavailable`. The wrapper must not add `--bare`, because
|
|
134
|
+
that flag disables the ordinary OAuth/keychain path and turns a logged-in CLI
|
|
135
|
+
into an auth failure unless a separate API key is injected. A manifest declaring
|
|
136
|
+
top-level agents, commands, hooks, or MCP servers is not loaded.
|
|
139
137
|
|
|
140
138
|
Wrappers keep an explicit selected-owner count instead of testing empty Bash
|
|
141
139
|
arrays under `set -u`, preserving the no-owner lane on Bash 3.2.
|
|
@@ -16,6 +16,17 @@ Rules:
|
|
|
16
16
|
or empty-container, and `agents`/`capabilities` are list-of-strings checks
|
|
17
17
|
with no value vocabulary. Only `permissionMode` stays value-pinned (it widens
|
|
18
18
|
what the runtime may do with no tool added).
|
|
19
|
+
- **Skill, command and plugin lists are vocabulary, not a boundary.**
|
|
20
|
+
`slash_commands`, `terminal_slash_commands`, `skills` and `plugins` may hold
|
|
21
|
+
any value and are never judged by name, shape, or origin; only `mcp_servers`
|
|
22
|
+
must still be empty. A third attempt at a vocabulary boundary -- a snapshot
|
|
23
|
+
of the host's own built-in names, later backed by a baseline invocation --
|
|
24
|
+
turned every CLI release that shipped a new skill or command into a Claude
|
|
25
|
+
lane outage. Do not add a name list, a baseline, or an "unclassifiable entry"
|
|
26
|
+
class back; nothing in those lists is invocable past the pinned `tools` set.
|
|
27
|
+
The same holds for the installed CCL plugin: an absent or unverifiable
|
|
28
|
+
registry costs the owner-skill binding (`native_skill_binding=unavailable`),
|
|
29
|
+
never the review.
|
|
19
30
|
- **Keep unsafe *values* out of the schema-drift class.** An unrecognized shape
|
|
20
31
|
means this lane cannot verify isolation → fallback-eligible. A known field
|
|
21
32
|
carrying an unsafe value (`permissionMode: "bypassPermissions"`) is a breached
|