feat: profiles.describe/profiles.configure ws RPC for profile editors - #85216
Merged
Merged
Conversation
profiles.list/create (#85093) let plugins enumerate and create profiles but not read or modify an existing profile's configuration over ws. profiles.describe returns the full editor snapshot (description, SOUL.md, model pin, per-skill enablement via the disabled-list model, per-toolset enablement via the tools.enabled_toolsets pin); profiles.configure applies any subset (description via write_profile_meta, soul, model via _write_profile_model, disabled_skills replace-semantics via save_disabled_skills, enabled_toolsets replace-semantics with empty-list clearing the pin) independently and best-effort, reporting per-section results. Both scoped via the HERMES_HOME override and pool-dispatched.
Contributor
૮ >ﻌ< ა ci reviewran on 7289e39 — feat: profiles.describe/profiles.configure ws RPC for profil
|
skappafrost
pushed a commit
to skappafrost/hermes-agent
that referenced
this pull request
Aug 15, 2026
…NousResearch#85216) profiles.list/create (NousResearch#85093) let plugins enumerate and create profiles but not read or modify an existing profile's configuration over ws. profiles.describe returns the full editor snapshot (description, SOUL.md, model pin, per-skill enablement via the disabled-list model, per-toolset enablement via the tools.enabled_toolsets pin); profiles.configure applies any subset (description via write_profile_meta, soul, model via _write_profile_model, disabled_skills replace-semantics via save_disabled_skills, enabled_toolsets replace-semantics with empty-list clearing the pin) independently and best-effort, reporting per-section results. Both scoped via the HERMES_HOME override and pool-dispatched.
melon-xf
added a commit
to melon-xf/hermes-agent
that referenced
this pull request
Sep 3, 2026
…NousResearch#85216) profiles.list/create (NousResearch#85093) let plugins enumerate and create profiles but not read or modify an existing profile's configuration over ws. profiles.describe returns the full editor snapshot (description, SOUL.md, model pin, per-skill enablement via the disabled-list model, per-toolset enablement via the tools.enabled_toolsets pin); profiles.configure applies any subset (description via write_profile_meta, soul, model via _write_profile_model, disabled_skills replace-semantics via save_disabled_skills, enabled_toolsets replace-semantics with empty-list clearing the pin) independently and best-effort, reporting per-section results. Both scoped via the HERMES_HOME override and pool-dispatched.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Completes the profile-editor ws surface started in #85093:
profiles.list/profiles.createlet a plugin enumerate and create profiles, but there was no way to READ or MODIFY an existing profile's configuration — skills, toolsets, model, SOUL.md, description — over ws JSON-RPC (those writes exist only on the dashboard REST router, unreachable from plugins).profiles.describeFull configuration snapshot for an editor UI:
{name, description, soul, model: {provider, default}, skills: [{name, enabled}], toolsets: [{name, description, tool_count, enabled}], toolsets_pinned}. Skill enablement mirrors the disabled-list model (installed = enabled unless inskills.disabled); toolset enablement reports the profile'stools.enabled_toolsetspin, or all-enabled when unpinned. All reads scoped via the context-local HERMES_HOME override.profiles.configureEditor Save: any of
description(viawrite_profile_meta, user-authored),soul(full SOUL.md replacement),model+provider(same_write_profile_modelwriter as REST),disabled_skills(replace semantics viasave_disabled_skills),enabled_toolsets(replace semantics; empty list clears the pin). Sections apply independently and best-effort; the result reports per-sectionappliedso a UI can surface partial failures.Both pool-dispatched (config + skill-tree I/O off the WS reader thread). No new model tools, config keys, or env vars — everything delegates to existing
hermes_cliprimitives.Verification
Round-tripped against the real registry on a live named profile: describe returned 81 skills / 59 toolsets / model pin / meta description / SOUL.md; configure disabled a skill + pinned
["web","file"]; re-describe confirmed both landed (enabled: false,toolsets_pinned: true, exactly web+file enabled); a second configure with empty lists reverted cleanly (pin cleared, all skills re-enabled).Consumer: the hermes-bots plugin's expanded Advanced editor (skills/toolsets/model/SOUL in both the create and edit dialogs).