Added
- Hermes/OpenClaw adapter — first-class support for the Hermes Agent desktop app and OpenClaw framework. 68 modules emit native
~/.hermes/skills/100xprism/<slug>/SKILL.mdconfig with a strict ≤57-char description budget (enforced byhermes_description()guard, with frontmatter override). Auto-detected on install/update, never touches machines without Hermes. Mirrors the Claude Code adapter's reconciliation pattern: manifest-guarded add/update/prune,PRISM_SKILLS/slimsupport, resolver catalog for on-demand loading, user-skill isolation (only100xprism/category managed). New100xprism hermesCLI subcommand for manual sync.
Changed
AGENTS.md/README.mdupdated: module must now work across all 5 adapters (Claude Code · Cursor · Codex · Pi · Hermes/OpenClaw).- Documentation site (
gh-pages): title/meta/JSON-LD/FAQ/emit-support table all list Hermes/OpenClaw as the 5th supported tool; token-observability table honestly marked "not yet supported" for Hermes.
Added
100xprism pack— external skill packs, ownership-tracked install/remove/sync for Claude Code, with a pack registry, schema validation, and a detection engine (Databricks is the first pack). Prefers the upstream vendor CLI where one exists and falls back to per-platform installers otherwise. Pack sync and detection are wired intoinstall,update, anduninstall. (#103)- Lean cross-tool token observability. Lean must-have defaults with on-demand resolver routing across Claude Code, Cursor, Codex, and Pi; honest cross-tool token reporting with
exact/best-effort/activity-onlymeasurement labels instead of a single unqualified number. (#104) auditandoptimizesubcommands, context-footprint budgets, and managed-only cleanup for plugins and hooks. (#104)- Pi package support, cache accounting, independent reviewer enforcement, and fail-closed security hooks. (#104)
Fixed
- Ownership state is tracked as an obligation set, not a ranked status. A pack's installed components (commands, plugins, platform artifacts) are independent obligations — each can be owned, partially owned, or already removed — rather than a single linear status that could silently regress or resurrect completed removals. Removal is now driven from ownership, not from a status label, so
uninstallnever discards removal state or re-issues a command that was already cleaned up. (#103) - Nested
ownedshapes (owned.plugins, per-platform values) are validated on both the JS (uninstall.js) and Python (packs.py) removal paths, including sparse/legacy state written by older installs. (#103) - Obligations render as human-readable text in user-facing output instead of a raw Python list
repr. (#103)
Install / upgrade:
# New install
bash -c "$(curl -fsSL https://raw.githubusercontent.com/rajitsaha/100xprism/main/install.sh)"
# Existing users
~/100xprism/update.sh