feat(agents): add per-Agent Hermes profile selection#2591
Conversation
…ory, env, sessions, and gateway Adds a `hermes_profile` field to agents that is passed to Hermes via the `-p` CLI flag, enabling multiple agents on the same machine to run under isolated Hermes profiles with separate memory, environment variables, sessions, skills, and gateway configuration. The profile picker appears in the agent detail inspector only when the runtime provider is "hermes". The `-p` and `--profile` flags are blocked from custom_args to prevent override conflicts. Empty string clears the profile (uses Hermes default). Closes multica-ai#2577 Co-authored-by: multica-agent <github@multica.ai>
|
Someone is attempting to deploy a commit to the IndexLabs Team on Vercel. A member of the Team first needs to authorize it. |
|
Thanks for the PR. Could you add a screenshot or short screen recording of the new Agent inspector UI so maintainers can see how the Hermes profile picker fits into the existing agent configuration flow? Also, could you clarify the user scenario this solves compared with the existing custom env and custom args settings? From the current implementation, setting |
multica-eve
left a comment
There was a problem hiding this comment.
Thanks for the PR. We decided to support this direction, but there are two must-fix issues before this can be merged:
-
Frontend CI is currently failing because the new required
hermes_profilefield was not added to existingAgentfixtures. The failures include:packages/core/agents/derive-presence.test.tspackages/core/agents/use-agent-activity.test.tspackages/core/permissions/rules.test.ts
Please update the affected fixtures with
hermes_profile: null, or adjust the type/API shape so existing fixtures remain backward-compatible. -
Clearing a Hermes profile from the UI does not persist.
HermesProfilePickersends"hermes_profile": nullfor empty input, but the Go update request uses*string, so JSONnulldecodes toniland is indistinguishable from an omitted field. The backend clear path currently only runs when it receives an explicit empty string, so a user who has set a profile cannot reset the agent back to the default profile from the UI.Please make the clear/reset path work, either by detecting explicit
nullon the backend like the existing raw-field pattern, or by having the frontend send an explicit empty string for clearing. Please also add a handler test covering this update/clear behavior.
Recommended follow-up coverage: add a Hermes backend test for argument construction/filtering, especially that hermes_profile becomes -p <profile> and -p / --profile cannot be overridden through custom_args.
…ring - Add hermes_profile: null to Agent fixtures in use-agent-activity.test.ts and create-agent-dialog.test.tsx to fix frontend CI type errors - Change HermesProfilePicker to send empty string instead of null when clearing, matching Go backend's clear-to-null convention Co-authored-by: multica-agent <github@multica.ai>
|
Thanks for the review! Both issues are fixed in the latest push ( 1. Frontend CI failure — missing Added
2. Clearing profile value not persisting The Screenshot — Hermes Profile Picker in Agent Inspector The dev environment was spun up with a Hermes provider runtime and the picker was tested end-to-end. The Agent Inspector shows the "Hermes Profile" field under PROPERTIES with "Default" as the placeholder when no profile is set, and allows free-text entry for a custom profile name. |
Summary
Adds a
hermes_profilefield to agents so multiple agents on the same machine can run under isolated Hermes profiles with separate memory, env, sessions, skills, and gateway configuration.Closes #2577
Changes
hermes_profile TEXTcolumn toagenttablehermes_profilefield added toAgentResponse,CreateAgentRequest,UpdateAgentRequest, andTaskAgentData(claim endpoint)HermesProfileis non-empty, passes-p <profile>tohermes acp;-p/--profileblocked fromcustom_argsAgentData.HermesProfileflows through toExecOptions.HermesProfileHermesProfilePickercomponent in the agent inspector (shown only when runtime provider is "hermes")Test plan
make sqlc— verify no errorsmake test— Go tests passpnpm typecheck— TypeScript types validpnpm build— frontend builds successfullyhermes acp -p <profile>is used in logs