Skip to content

Releases: rajitsaha/100xprism

v3.3.0

Choose a tag to compare

@github-actions github-actions released this 29 Aug 07:25

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.md config with a strict ≤57-char description budget (enforced by hermes_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/slim support, resolver catalog for on-demand loading, user-skill isolation (only 100xprism/ category managed). New 100xprism hermes CLI subcommand for manual sync.

Changed

  • AGENTS.md / README.md updated: 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 into install, update, and uninstall. (#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-only measurement labels instead of a single unqualified number. (#104)
  • audit and optimize subcommands, 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 uninstall never discards removal state or re-issues a command that was already cleaned up. (#103)
  • Nested owned shapes (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

v3.2.0

Choose a tag to compare

@github-actions github-actions released this 28 Aug 17:09
ba8fcd1

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 into install, update, and uninstall. (#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-only measurement labels instead of a single unqualified number. (#104)
  • audit and optimize subcommands, 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 uninstall never discards removal state or re-issues a command that was already cleaned up. (#103)
  • Nested owned shapes (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

v3.1.0

Choose a tag to compare

@github-actions github-actions released this 02 Aug 19:33

Added

  • Retention classes and per-repo profiles — the always-on skill index is no longer all-or-nothing. An installed module's description is re-sent on every turn while its body is free until invoked, so installing a module carries a standing token cost. Modules now derive a retention class (must / profile / resolver, overridable per module via frontmatter) and a profile list, letting an install keep the 12 must-have workflows resident and route the specialist catalog behind a generated 100x-resolver artifact that lists each module with an exact path to read. Measured on this repo: the Claude Code index drops 4,900 → 1,732 tokens per turn (profile) or 554 (must); a slimmed Cursor project drops 7,249 → 2,189.
    Both switches default to off. With no project config and no environment override, emit-cursor, emit-codex, and emit-claude-code produce byte-identical output to the previous release — verified by diffing the pre-change and post-change emitters over the same module tree.
  • 100xprism slim — writes the two reversible switches (~/.100xprism/config.json skills, <project>/.100xprism.json profiles), re-emits, and reports oversized instruction files. Supports --dry-run, --all-projects, and --skills=all|profile|must. The first update after this version applies profile mode once, announces it, and records the choice so no later update overrides a preference you set; update --no-slim skips it.
  • detect-profiles subcommand on adapters/lib/modules.py, classifying a repo from its build/infra/content markers.

Changed

  • Project config moves to .claude/100xprism.yml. CLAUDE.md is re-sent on every turn, so machine-readable db/cloud/production/security-exception config no longer belongs there. /db, /query, /gate, /cloud-security, and /launch read the new file first and fall back to the instruction file, so repos that keep config in CLAUDE.md are unaffected. Keys must stay flush-left — those modules match them with an anchored grep.
  • The scaffolded CLAUDE.md is now a router. Project Overview / Key Conventions / a "Reference docs (read on demand)" table, replacing ~350 tokens of commented-out placeholders that in practice were never filled in. Existing files are never rewritten.
  • commit, push, and branch re-tiered coreon-demand. Cursor loads the full body of an alwaysApply: true rule, and all three are explicitly invoked; the gate-on-commit PreToolUse hook already blocks git commit/git push deterministically, so prompt residency was redundant with machine enforcement. gate stays resident. This lands ~3,700 tokens per turn for every Cursor user with no opt-in.

Fixed

  • The Windows emitter wrote a slash-command alias for every command, diverging from the Python path, which skips aliases whose name matches the slug. Claude Code already exposes every skill as /<slug>, so a same-name alias double-listed the module and paid its description twice. The two paths now agree, and a parity test compares them across every real module.
  • meta-check conflated "modules declaring a slash command" (27) with "alias files actually emitted" (5), so the documented count in AGENTS.md could never be correct. It now computes and validates both, and rejects an unknown retention: value.
  • Corrected a stale GitHub URL in .env.example and templates/.env.example, an out-of-date auto-trigger skill count and category table in README.md, and a real project name used as illustrative sample data in a design spec.
  • The Windows/Python profile resolvers diverged on an empty "profiles": []. Python's if not cfg treats an empty array as unset (unfiltered); the JS port's if (!cfg) doesn't, since an empty array is truthy — silently activating filtering on the Windows path. Fixed, with a parity test covering the case directly.
  • GCP cloud-project detection (gate, cloud-security) was case-sensitive, missing the lowercase gcp_project: key the new .claude/100xprism.yml scaffold documents and writes. Both greps are now case-insensitive.

Install / upgrade:

# New install
bash -c "$(curl -fsSL https://raw.githubusercontent.com/rajitsaha/100xprism/main/install.sh)"

# Existing users
~/100xprism/update.sh

v3.0.1

Choose a tag to compare

@github-actions github-actions released this 02 Aug 02:11

Fixed

  • CI never ran on PRs stacked against a non-main base. .github/workflows/meta.yml's pull_request trigger was scoped to branches: [main, master], which filters on the PR's base, not its source — so a PR opened against another feature branch got zero CI until manually retargeted. The filter is dropped; it now fires regardless of base branch.
  • pair-loop: a same-model reviewer approval could pass silently (#93). Independence was configured (a fallback model pin, vendor rotation) but never verified — a same-vendor fallback left unpinned, or a plain coder == reviewer misconfiguration, could approve a change on the exact model that wrote it. review now resolves the coder's and the reviewer's session transcripts to the model each actually ran and refuses an APPROVED verdict when they match, adding a process finding and surfacing it in the PR summary. Still best-effort — it needs both session_ids to resolve, which isn't guaranteed (no session lookup for Cursor yet).

Changed

  • Cursor's always-on context footprint cut 61% (~52K → ~20K chars). Re-tiered 9 modules — release, pair-loop, pr, fix-bugs, lint, orchestrate, spec, grill-me, update-claude-md — from core to on-demand. tier only drives Cursor's alwaysApply mapping; this has no effect on Claude Code, Codex, or slash-command availability, and no content changed. Kept core: commit, push, gate (the enforcement trio), and branch.
  • Refreshed stale Claude model version strings (Sonnet 4.6 → Sonnet 5, Opus 4.8 → Opus 5) across adapters/lib/modules.py's MODEL_ALIASES, the commit/release skill Co-Authored-By trailers, and docs.

Install / upgrade:

# New install
bash -c "$(curl -fsSL https://raw.githubusercontent.com/rajitsaha/100xprism/main/install.sh)"

# Existing users
~/100xprism/update.sh

v3.0.0

Choose a tag to compare

@github-actions github-actions released this 01 Aug 19:40
8002b90

Removed

  • BREAKING: Windsurf, Copilot, Gemini, and Antigravity are no longer supported. These four tools consumed a single concatenated instruction file produced by emit-concat: all 13 tier: core module bodies inlined, plus a one-line index of the rest — 60,164 characters (~15K tokens) resident in context on every turn, regardless of what the user was doing. That is the opposite of progressive disclosure, and it made those four the most expensive surfaces the project shipped while giving them the least capability (no auto-trigger for on-demand modules). Claude Code, Cursor, and Codex all load bodies on demand and are unaffected.
    Removed: adapters/windsurf.sh, adapters/gemini.sh, adapters/copilot.sh, adapters/antigravity.sh, the emit-concat subcommand, render_concat, render_index_only, and the _run_concat/_run_generate shell helpers.
    Migration is automatic, and reversible. 100xprism update prunes .windsurfrules, GEMINI.md, ANTIGRAVITY.md, and .github/copilot-instructions.md from every project in ~/.100xprism/tracked-projects; 100xprism init prunes the project it runs in, which covers repos the tracked list never knew about (cloned fresh, or set up on another machine). Native Windows gets the same treatment through a JS mirror of the same logic.
    Because this deletes files inside your repositories, it enforces three guarantees, each covered by tests:
    • Ownership — the file must carry the Generated by 100xprism marker in its header region. A hand-written .windsurfrules, or a file that merely mentions us further down, is never touched.
    • Containment — the resolved path must remain inside the resolved project. A symlinked .github pointing at a shared config directory cannot let a delete escape into another repository.
    • Recoverability — every file is copied to ~/.100xprism/removed-artifacts/<timestamp>/<full-project-path>/ before removal, and is removed only if that copy succeeded. A file you edited but never committed is still removed, but never unrecoverably. Backups are keyed by the project's full path, not its basename, so two projects named app cannot overwrite each other's backup. If HOME is unset there is nowhere to guarantee recovery, so nothing is deleted. Failures are reported, not swallowed.

Added

  • Cursor parity on Windows. lib/adapters/windows.js previously had no per-rule emitter and fell back to writing the concatenated config to a single .cursorrules file. It now ships emitCursorRules(), a port of cmd_emit_cursor that writes one .cursor/rules/<slug>.mdc per module with byte-identical output to the shell adapter. Windows Cursor users get description-based auto-trigger and on-demand bodies for the first time.

Fixed

  • Cursor rules for removed modules were never pruned. Both cmd_emit_cursor and its JS port scanned only the first 6 lines of an existing .mdc for the generation marker — but the emitters write that marker on line 7, below the frontmatter block. The check therefore matched nothing, and every module removed upstream orphaned its rule in every Cursor project indefinitely. The window now reaches past the marker in both implementations, and the constant is shared rather than duplicated as a literal. The regression tests previously passed against a hand-written fixture with the marker on line 5 — a file the emitter never produces — so they now prune real emitter output and assert the marker falls inside the scanned window.
  • 100xprism update skipped the tracked-project pass entirely on the "already up to date" path, so a v3 migration interrupted after the pull would never be retried once HEAD matched origin. Both paths now reconcile projects.

Changed

  • 100xprism update regenerates Cursor rules when it finds .cursor/rules/, not only the legacy .cursorrules file — projects initialised after the move to per-rule .mdc files were silently skipped by update.
  • Instruction-file discovery across 14 modules and _lib/reference.md now probes CLAUDE.md AGENTS.md .cursorrules instead of a six-entry list including .windsurfrules, GEMINI.md, and .github/copilot-instructions.md.
  • The install/init tool pickers offer three tools instead of seven, and installer output no longer advertises Cursor as .cursorrules (it has written .cursor/rules/ since v2.x).

Install / upgrade:

# New install
bash -c "$(curl -fsSL https://raw.githubusercontent.com/rajitsaha/100xprism/main/install.sh)"

# Existing users
~/100xprism/update.sh

v2.4.9

Choose a tag to compare

@github-actions github-actions released this 24 Jul 03:34
5ac8a33

Added

  • AI economics dashboard and GitHub PR insights. The local dashboard now separates token economics, observable delivery, and unmeasured business value. It surfaces attribution coverage, delivery unit cost, files, churn, commits, merged PRs, and explicit outcome scopes without presenting engineering activity as ROI. Optional GitHub CLI integration fetches bounded, linked PR details for local remotes plus configured users/repos, including status, author, title, comments, sampled file/churn detail, and update dates, cached for 30 minutes.
  • Dashboard CLI commands. 100xprism tokens and 100xprism dashboard now start/open the AI economics dashboard, and 100xprism value prints the observable-delivery report for a directory.

Removed

  • 11 orphaned module reference files. Files under copywriting/, page-cro/, and seo-audit/ that had shipped in every install since the v2.0.0 unification but were never linked from any SKILL.md, so no adapter path could reach them. Two were byte-identical duplicates of files email-sequence/ already links. Package-weight only — references load on demand, so context cost is unchanged.

Fixed

  • Dashboard install messaging is explicit. Ordinary install output now says the AI economics dashboard is not started by default and prints the command to start and open it. URL output is reserved for paths that actually request dashboard startup.
  • Installer no longer causes shell/Claude startup side effects: the token dashboard and update check are opt-in (--dashboard) instead of auto-starting from aliases.sh or a SessionStart hook.
  • Install now runs a cleanup-first pass (lib/uninstall.js --preinstall-cleanup) across both the npm/mise launcher and the curl | bash path, stopping any owned dashboard, stripping legacy rc source …/aliases.sh lines (including custom $DEV_100X_HOME paths), and removing stale command symlinks.
  • 100xprism uninstall preserves healthy npm/mise launchers (stale-only link removal); only npm preuninstall removes live links.
  • Malformed or unreadable ~/.claude/settings.json now warns and continues instead of aborting install/update, and unchanged settings are no longer rewritten.
  • Stale-link removal failures (e.g. unwritable bin dir) warn instead of aborting.
  • Dashboard shutdown waits for process exit and escalates to SIGKILL before an opt-in restart, avoiding the port race; mise reshim node guidance prints only when a mise link was actually removed.

Install / upgrade:

# New install
bash -c "$(curl -fsSL https://raw.githubusercontent.com/rajitsaha/100xprism/main/install.sh)"

# Existing users
~/100xprism/update.sh

v2.4.8

Choose a tag to compare

@github-actions github-actions released this 16 Jul 03:45

Fixed

  • Reduced generated Codex AGENTS.md context by moving the full skill catalog to .agents/100x-index.md while preserving progressive skill loading.

Install / upgrade:

# New install
bash -c "$(curl -fsSL https://raw.githubusercontent.com/rajitsaha/100xprism/main/install.sh)"

# Existing users
~/100xprism/update.sh

v2.4.7

Choose a tag to compare

@github-actions github-actions released this 10 Jul 04:50

(Minor maintenance release)


Install / upgrade:

# New install
bash -c "$(curl -fsSL https://raw.githubusercontent.com/rajitsaha/100xprism/main/install.sh)"

# Existing users
~/100xprism/update.sh

v2.4.5

Choose a tag to compare

@github-actions github-actions released this 09 Jul 15:54

(Minor maintenance release)


Install / upgrade:

# New install
bash -c "$(curl -fsSL https://raw.githubusercontent.com/rajitsaha/100xprism/main/install.sh)"

# Existing users
~/100xprism/update.sh

v2.4.4

Choose a tag to compare

@github-actions github-actions released this 28 Jun 02:37
f39ea68

Fixed

  • Portable Codex hook artifacts. The generated Codex hook is now a project-local wrapper (adapters/templates/codex-run-hook.py) so committed hooks no longer embed the generating machine's absolute paths, and it invokes the inner hook via sys.executable so it runs under whatever Python the consumer has. The Python and Windows adapters share a single wrapper template (parity enforced by tests), the Windows adapter now mirrors Codex-native AGENTS, repo skills, and hook output, and install-time version-skew failures are clearer. Adds regression coverage for Codex portability, Python/Windows wrapper parity, custom-skill preservation, and Claude Code hook separation.

Install / upgrade:

# New install
bash -c "$(curl -fsSL https://raw.githubusercontent.com/rajitsaha/100xprism/main/install.sh)"

# Existing users
~/100xprism/update.sh