Commit Graph

886 Commits

Author SHA1 Message Date
teknium1
501590a76f chore(plugin-catalog): unlist retaindb, byterover and holographic (no Nous maintenance)
Nous Research will not maintain memory providers. These three entries
pointed at NousResearch/hermes-plugin-<name> repos labelled
Nous-maintained; with no maintainer they must not be offered as
official catalog plugins. The bundled copies under plugins/memory/
are unchanged and still win on name, so no user-visible behaviour
changes today.
2026-10-02 03:28:41 -07:00
teknium1
999506c79f feat(plugin-catalog): list retaindb, byterover and holographic memory providers (Nous-maintained) 2026-10-02 01:29:22 -07:00
Nicolò Boschi
10c6188de1 catalog(hindsight): pin the released v1.2.1
v1.2.1 adds the first-run notice for the embedded server download and serialises client creation
so the start worker and the first memory operation cannot each start a daemon.
2026-10-02 00:01:08 -07:00
Nicolò Boschi
0ab1bb1d94 catalog(hindsight): pin the released v1.2.0 2026-10-02 00:01:08 -07:00
Angello Picasso
36922ad064 feat(plugin-catalog): add go-whatsapp 2026-10-01 22:53:10 -07:00
teknium1
b4152ea407 plugin-catalog: 0bull — add the risk disclosure to the description
The reviewed behaviour stays as is; the catalog entry now states it so users see it before installing.
2026-10-01 22:41:14 -07:00
0bull
7d67d552c4 feat(plugin-catalog): add 0bull community plugin 2026-10-01 22:41:14 -07:00
teknium1
acadf3c415 plugin-catalog: hermes-workflows — add the risk disclosure to the description
The reviewed behaviour stays as is; the catalog entry now states it so users see it before installing.
2026-10-01 22:40:44 -07:00
Jacob Hausler
24d216c3e9 plugin-catalog: add hermes-workflows (community, automation) @ v1.1.3
Pins jacobhausler/hermes-workflows at edc8b3b (v1.1.3). Consolidates the PR history
(v0.9.0 -> v1.1.3 re-pins) into one commit by the plugin author.
2026-10-01 22:40:44 -07:00
teknium1
d802c47238 docs: one complete plugin catalog submission guide, synced with the README rules
Submitters only saw a stale 5-point summary on the catalog page (it even listed
a 'Released' requirement nothing enforces), while reviewers applied ten README
rules plus criteria written nowhere public (credentials, approvals, disclosure,
compatibility metadata, forks of bundled plugins).

- plugin-catalog/README.md: rules 11-15 write down those review criteria; the
  rule list sits between admission-rules markers.
- New developer-guide page 'Submitting to the plugin catalog': before you
  submit, the PR flow, the full rule block (verbatim mirror), pin updates,
  delisting vs removal, asking for a hook.
- The /plugins 'Submit' links and the user-guide section point at it.
- tests/website/test_catalog_rules_mirror.py fails when the two rule blocks
  differ; classify_changes makes a README-only edit run it.
- AGENTS.md, plugins/AGENTS.md and CONTRIBUTING.md reference both files.
2026-10-01 21:58:11 -07:00
teknium1
aa859fd4c8 feat(plugin-catalog): refuse plugins that override Hermes core or Desktop at runtime
Catalog policy (Teknium): a listed plugin extends Hermes only through public
surfaces. A plugin that replaces core functions, methods or Desktop UI in place
collides with every other plugin patching the same seam and breaks on any core
release.

- New `no core override` admission check (hermes_cli/plugin_validate_core_override.py):
  static taint pass over the import closure of __init__.py and dashboard/*.py.
  Core values are Hermes modules (plus hermes_plugins.*) and attribute chains off
  them, reached by import, importlib/sys.modules lookups, getattr, iteration, or a
  plugin helper that returns one. Rebinds are attribute assignment/deletion,
  setattr/delattr, sys.modules writes, writes into a core module's tables,
  mock.patch, and passing a core value to a helper that setattr's its parameter.
  Tests, benchmarks and CI/smoke scripts outside the import closure are not judged.
- Desktop lint: new `app DOM reach` rule (document-level queries of the app's own
  data-slot/data-tour/data-sidebar/data-testid markup, and document.body
  childList/subtree MutationObservers).
- Desktop lint bug: the comment stripper did not skip string literals, so a string
  holding `/*` (a glob like '**/*.md') opened a fake comment and hid every line up
  to the next `*/` from all rules. Strings are now matched first and kept.
- README rule 9, the plugin-catalog user guide and the plugin developer guide's
  compatibility contract state the rule.

A/B over 466 pinned trees (121 open catalog PR entries + 349 listed entries +
humalike): the new checks flag exactly the hand-verified overrides; zero crashes;
no previously reported Desktop finding disappears.
2026-10-01 12:41:57 -07:00
beardthelion
8444e9eb18 fix(ci): confine plugin-catalog admission gate to the pinned clone
The pinned-source job joined a PR-controlled subdir onto the clone root
with no validation, accepted file:// repos and ref names as the "pin",
and followed committed symlinks out of the clone, so the gate could
validate attacker-planted files instead of the declared commit's
contents. Harden the step end to end:

- validate repo (https://, whitespace-free), sha (40-hex, commit object),
  and subdir (plain relative path) in the parser before any use
- run the parser under python3 -I against installed ruamel.yaml so the
  PR checkout cannot shadow its imports, capture parser output, and
  reset shell variables per entry so a dead parser cannot replay the
  previous entry's fields
- confine PLUGIN_DIR and every symlink beneath it to the clone root
- include renamed and typechanged entry files in the changed set
- feed entries over fd 3 and keep plugin-executed commands off stdin so
  validate cannot drain the remaining list
- NUL-delimit both self-updater grep stages and sanitize the echoed
  filename list so crafted names cannot forge workflow commands
- mirror the same repo/subdir rules in the runtime catalog loader and
  the site extractor, and use \Z anchors so a trailing newline cannot
  split the verdict between gates
2026-10-01 10:46:45 -07:00
teknium1
b9204ea975 feat(plugin-catalog): add woof
WOOF weather simulations on your own NVIDIA GPU (recastsystems/hermes-woof @ 2c82b34). Requested by community member drewsny.
2026-10-01 10:46:10 -07:00
ethernet
5e4857bf2e chore(catalog): bump hindsight to eb021da, embedded mode works under PM
Moves the pin from 176f8c2 (v1.0.1) to eb021da3 on vectorize-io/hindsight main. That range
drops the retired `tools.lazy_deps` call and the `hindsight-all` dependency (#4930), and
starts the embedded daemon without Hermes' PYTHONPATH (#4936, #4946), so local_embedded runs
on PM-managed Hermes. Removes the `known_issues` entry and the description sentence that
documented the old pin's lazy-install loop.

`version` is "1.1.0+eb021da": the v1.1.0 tag predates these fixes, and plugin.yaml at this
commit still says 1.1.0.
2026-09-29 16:44:06 -04:00
kshitijk4poor
476a8c352c feat(plugin-catalog): add hermes-session-reset-policy
Opt-in idle/daily gateway conversation resets, now that core no longer rotates conversations on timers (1d5d059410). Reads the existing session_reset block; #126244 points users with that block at this plugin. Pinned to bb618e08, which declares its pre_gateway_dispatch hook (fastfinge/hermes-session-reset-policy#1).
2026-09-28 18:23:08 +05:30
yubingz
73a9dc598b chore(catalog): bump desensitize pin to 4f6697c (v1.4.1) 2026-09-27 23:50:49 -07:00
Teknium
f24913489c chore(catalog): merge chores (disclosure / field fixes) 2026-09-27 23:49:49 -07:00
neerazz
0aaf2e736b feat(plugin-catalog): add antigravity-oauth model provider plugin 2026-09-27 23:49:49 -07:00
Tom Mulkins
0fb8b249df catalog: session-dashboard — pin f5a880c + social preview image
- Bump pin ae81c5b -> f5a880c (docs-only commit: refreshed screenshot,
  new 1280x640 social preview, HOW_TO_USE.md guide linked from README)
- Add image: raw.githubusercontent URL of the social preview (2:1, 1280x640)
- hermes plugins validate passes at the pinned commit
2026-09-27 23:49:29 -07:00
100yenadmin
0ade23910e plugin-catalog: bump hermes-lcm-x to v0.24.3 (601a9ccb) 2026-09-27 23:49:18 -07:00
soymarketing
4131282513 chore(plugin-catalog): bump next-prompt to 0.3.0 2026-09-27 23:49:09 -07:00
AhmetArif0
73df7546b5 feat(plugin-catalog): bump memory-rewind to 1.3.2
restore now holds the memory tool's own lock while it writes MEMORY.md/USER.md and
refuses when a file changed after its plan, so it never replaces a running agent's
memory write. The plan lists the memory entries it brings back and removes.
2026-09-27 23:48:59 -07:00
AhmetArif0
553c42fb27 feat(plugin-catalog): bump memory-rewind to 1.3.1
Importing a Hermes backup put the backup's copy of the history back and cut off
every version recorded after it, the state right before the import included.
Those versions now stay, and the import is recorded as one change restore can undo.
2026-09-27 23:48:59 -07:00
AhmetArif0
6348313c07 feat(plugin-catalog): bump memory-rewind to 1.3.0
Re-pins AhmetArif0/hermes-memory-rewind to 5f935c2 (1.3.0). A change made outside the
agent's turns was credited to whatever came next: a write approved with /memory approve
showed up as the agent's next memory call, a curator archive as the next session's. Each
turn now starts with a baseline (pre_llm_call, which declares only session_id and
platform), and the session-start baseline names no session. Adds pre_llm_call to hooks.
2026-09-27 23:48:59 -07:00
AhmetArif0
574caa2629 fix(plugin-catalog): fit the memory-rewind card inside the detail header
Re-pins AhmetArif0/hermes-memory-rewind from b747327 to e5b139b, which only redraws
docs/card.png. The plugin page header crops the 2:1 image to rows 110-490, which cut off
the card's title and last line. The plugin directory and version 1.2.0 are unchanged.
2026-09-27 23:48:59 -07:00
madpower2000
86e4a74988 catalog: bump telegram-notify to v1.1.3
Maintenance follow-up to v1.1.2. Re-pin to d7cab7df (v1.1.3) and correct
the egress disclosure: CLI, Desktop and eligible gateway platforms are
forwarded; Telegram-origin lifecycle, approval-prompt, and (when enabled)
approval-response copies are suppressed because the core Telegram gateway
already delivers them in that chat.
2026-09-27 23:48:44 -07:00
Evgeniy
24c2fcc34f Bump mnemostack to 1.0.3 2026-09-27 23:48:32 -07:00
Reddawn
42f6e6726f Update SHA for hermes-self-healing-context 2026-09-27 23:48:24 -07:00
Reddawn
525c3e1145 Update hermes-self-healing-context.yaml 2026-09-27 23:48:24 -07:00
Reddawn
4bea99c665 Update hermes-self-healing-context.yaml 2026-09-27 23:48:24 -07:00
Reddawn
57c4685b92 Refactor hermes-self-healing-context.yaml
Updated category from 'memory' to 'general' and modified description for clarity.
2026-09-27 23:48:24 -07:00
Reddawn
d98a274162 Update plugin SHA to latest commit 2026-09-27 23:48:24 -07:00
Reddawn
b349ade6c0 Add hermes-self-healing-context.yaml configuration
Adds configuration for the Hermes Self-Healing Context plugin with details on its capabilities and versioning.
2026-09-27 23:48:24 -07:00
Teknium
ed4de90b09 chore(catalog): merge chores (disclosure / field fixes) 2026-09-27 23:48:14 -07:00
bgrablin
8d28023f08 chore(catalog): bump hermes-switchyard pin to b3cf546 (v0.5.6) 2026-09-27 23:48:14 -07:00
Teknium
a298684f32 chore(catalog): merge chores (disclosure / field fixes) 2026-09-27 23:48:05 -07:00
Kesuek
be0c232f0a plugin-catalog: bump bridge-adapter pin 073f2e8 -> 8de6264
Adopts upstream fix T-099: adapter dropped its pyyaml import in favor of
core-dep hermes_yaml (gateway venv runs with python -I, pyyaml absent);
plugin __init__ fallback hardened to only catch the no-parent-package
case so dependency errors surface unmasked.

Commit range 073f2e8..8de6264 touches only adapter.py (import + one
call site) and __init__.py (fallback guard) in the plugin repo.
2026-09-27 23:48:05 -07:00
Teknium
a9c9d095e1 chore(catalog): merge chores (disclosure / field fixes) 2026-09-27 23:47:55 -07:00
Nate Richardson
bacf971ac5 chore(catalog): update Nachos to v0.5.3 2026-09-27 23:47:55 -07:00
Nate Richardson
3ab5332957 feat(catalog): add Nachos plugin 2026-09-27 23:47:55 -07:00
Teknium
169ac699e2 chore(catalog): merge chores (disclosure / field fixes) 2026-09-27 23:47:44 -07:00
Roy Crabtree
a0719b0799 feat(plugin-catalog): add PIR8 brain-graph, android-emulator, and OR Picker
Owner submission. Pins are the first tagged releases. OR Picker is two
entries because the desktop plugin and the model provider install separately.
2026-09-27 23:47:44 -07:00
Teknium
0bfd0084c8 chore(catalog): merge chores (disclosure / field fixes) 2026-09-27 23:47:19 -07:00
jasm001
5d9261270f Catalog: add bunny_space-platform (Bunny Space platform adapter) 2026-09-27 23:47:19 -07:00
Teknium
e39df397b5 chore(catalog): merge chores (disclosure / field fixes) 2026-09-27 23:47:09 -07:00
Jacob Hausler
7543c08a56 Add hermes-rich-ui v0.1.0 catalog entry 2026-09-27 23:47:09 -07:00
Teknium
ff9f8db3ad chore(catalog): merge chores (disclosure / field fixes) 2026-09-27 23:47:01 -07:00
lekt9
60bf4aa337 plugin-catalog: add unbrowse 2026-09-27 23:47:01 -07:00
happy5318
839fb764c2 fix(plugins): gate installs of catalog entries that document known issues (#124037)
## Thinking Path
`plugin-catalog/hindsight.yaml` already documented in prose that
`local_embedded` mode is unsupported on PM-managed Hermes with the current
pin — it still calls the retired lazy-install path for `hindsight-all` and
loops update takeover on every conversation — yet `hermes plugins install`
and the dashboard install path accepted the entry with no gate at all. Users
only discovered the trap after the death loop started. The catalog knew;
the installers didn't act on it.

## What Changed
- `hermes_cli/plugin_catalog.py`: new `known_issues: List[str]` field on
  `PluginCatalogEntry` (parsed from `known_issues` in each `plugin-catalog/*.yaml`,
  serialized into `to_dict()`, defaults to empty for backward compatibility).
- `plugin-catalog/hindsight.yaml`: declares the documented local-embedded trap
  as machine-readable `known_issues`.
- `hermes_cli/plugins_cmd_install.py`:
  - `cmd_install`: for catalog entries with `known_issues`, prints each issue
    and a bold-red notice, then requires explicit confirmation. Non-interactive
    (non-TTY) runs fail closed; interactive `y/N` runs require `y`.
  - `dashboard_install_plugin`: non-interactive path refuses the entry outright
    (no GUI bypass, mirroring the existing kill-list posture) and returns the
    issue list in the error payload.

## Why This Shape
The trap is machine-readable in the catalog, so the enforcement lives in the
install entry points rather than in hindsight-specific code — any future
catalog entry that documents a known trap gets the same gate for free. The
non-interactive path fails closed because it cannot ask for the confirmation
the interactive path requires.

## Verification
- RED/GREEN double proof via git stash: pre-fix 7 failed / 3 passed, post-fix
  10/10 passed (catalog parsing round-trip, hindsight.yaml declares the trap,
  non-TTY refuse, TTY yes proceeds, TTY no cancels, custom-source install not
  gated, dashboard refuse + unaffected path).
- Adjacent suites: test_plugin_catalog.py, test_plugin_validate.py,
  test_plugins_hub_live_catalog.py all green (36 passed). 9 errors in
  test_plugins_cmd_catalog.py reproduce identically with the fix stashed
  (existing local `pm` / uv-sync environment limitation, unrelated).
- ruff clean on all changed files.

## Contract Change
New optional catalog field `known_issues` (list of strings). Entries without
it behave exactly as before. Install behavior changes only for entries that
declare `known_issues`.

## Risks
- Catalog entries that declare `known_issues` become gated installs. Authors
  of future entries should only declare issues they want surfaced — this is
  the intended trade (a documented trap must not install silently).
- `cmd_install` non-TTY automation installing hindsight by name now fails.
  That is intentional: the trap cannot be confirmed non-interactively.

## Model Used
jd-deepseek-v4-flash-0731 (main session); pytest + ruff in the isolated
worktree.

## Related
#124037 (issue). Related: #122326 (resulting takeover loop), #7718
(`local_embedded` needs `hindsight-all`).
2026-09-27 17:06:55 -07:00
GoldenLoaf24h
e5bb95110f refactor(plugin-catalog): rename browserclaw to browserpaw 2026-09-27 12:33:44 -07:00