@hasna/skills 0.10.15 → 0.10.18

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/README.md CHANGED
@@ -450,6 +450,41 @@ Settings and policy are separate files: this is a guarded sequence with
450
450
  compensation, not a cross-file atomic commit. A concurrent hook can fail closed
451
451
  during installation. A successful update does not reload an existing session.
452
452
 
453
+ Legacy full-file settings witnesses remain strict until explicitly upgraded:
454
+
455
+ ```bash
456
+ skills hook rebind-settings --agent codex \
457
+ --reviewed-preimage /private/preserved/config.toml \
458
+ --expected-policy-sha256 <current-policy-sha256> \
459
+ --expected-settings-sha256 <current-settings-sha256> --json
460
+ ```
461
+
462
+ The plan proves the preserved original matches the old witness, permits only
463
+ supported preference differences, and labels the replacement witness. `--apply`
464
+ preserves and reads back the original policy before writing. Claude upgrades to
465
+ `claude-settings-v3`; Codex uses `codex-settings-v1` for typed model, effort and
466
+ verbosity preferences. Provider mappings, environment, hooks, plugins, skill rules
467
+ and all unknown settings stay bound. Runtime hooks never silently upgrade a witness.
468
+
469
+ A reviewed Codex 0.159.2 native `skills/list` receipt can be passed to `hook install`
470
+ with `--codex-native-catalog <file>`. Its safe shape is `{version,cwd,skills}`;
471
+ each skill has `{name,path,enabled,pluginId}`. The installer matches the native
472
+ qualified name against a bounded explicit frontmatter name and owning plugin
473
+ manifest. It preserves path disables and adds exact qualified name disables.
474
+ Known skill identities remain disabled across versioned plugin cache relocation,
475
+ even when their disabled bodies change. Unknown names, conflicting enables,
476
+ changed plugin controls, native hooks and unsupported name syntax still refuse.
477
+ Only manifest version metadata may vary. Reviewed app declarations use the implicit
478
+ `.app.json` or explicit `./.app.json`, with a bounded `apps` map containing connector
479
+ `id`, optional `category`, and optional boolean `required`. The entire canonical app
480
+ file and its presence stay bound; it preserves existing connector availability and
481
+ native capability hints. Changed or unknown app fields, custom references, native
482
+ hooks, commands and MCP controls refuse. Name controls suppress Skills, not every
483
+ plugin capability. No prompt hook starts an app server to obtain this receipt: native
484
+ startup can maintain caches. Capture it through an authorized isolated consumer.
485
+ Neither a receipt nor a config write proves an existing session adopted new rules;
486
+ use the actual native session's supported acceptance path separately.
487
+
453
488
  At session start, the hook authenticates and refreshes the profile. Prompt hooks
454
489
  select complete skill instructions from that verified cache using explicit
455
490
  `$skill` references, profile keywords, paths and always-required selections.
@@ -461,10 +496,20 @@ receipt expires, the hook authenticates the current profile. If every loaded
461
496
  selection still has identical metadata and bundle digest, it archives the old
462
497
  receipt and advances that session to the current profile under an exact receipt
463
498
  precondition. Unloaded selections may be added or removed. If a loaded selection
464
- changed or disappeared, the hook blocks and requires the explicit reconciliation
465
- below. A missing cache may be recovered through authenticated context.
466
- Authentication, integrity and native discovery failures still block; they do
467
- not silently switch to a local catalog.
499
+ changed or disappeared, no instructions are delivered until the explicit
500
+ reconciliation below. A missing cache may be recovered through authenticated context.
501
+
502
+ After verifying the native bridge and input, ordinary lifecycle hooks continue
503
+ without skill payload on typed hosted authentication/refusal/availability failures,
504
+ context timeouts, valid concurrent writers, context CAS conflicts, or required
505
+ session reconciliation. They emit a fixed warning that Skills-dependent actions
506
+ are unavailable; previously loaded instructions are not an authorization fallback.
507
+ The hook does not rewrite a session pin or remove another writer’s lock to bypass these refusals. Explicit `skills
508
+ load`, `skills context`, and `skills run` still refuse unavailable or unauthorized
509
+ instructions. Native skill tool guards still deny unmanaged payloads. Invalid
510
+ input/receipts, integrity or authority mismatches, unknown failures, and native
511
+ discovery/control violations remain blocking. No failure silently switches to a
512
+ local catalog, native skill or stale bundle.
468
513
 
469
514
  An intentional change to a loaded selection or profile identity for an already
470
515
  running session uses a separate reviewed operation. `sync` and hook