hermes - ✅(Solved) Fix [Bug]: Plan skill uses workspace-relative path causing multi-profile collision [1 pull requests, 1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
NousResearch/hermes-agent#12533Fetched 2026-04-20 12:18:39
View on GitHub
Comments
1
Participants
2
Timeline
3
Reactions
0
Timeline (top)
commented ×1cross-referenced ×1referenced ×1

Root Cause

The plan skill SKILL.md states:

Treat that as relative to the active working directory / backend workspace.

This path is resolved against the backend workspace, not the profile's HERMES_HOME. While backend workspace-relative paths are appropriate for code artifacts, plans are user data that should follow the profile.

Fix Action

Fixed

PR fix notes

PR #12581: fix(skill): use profile-isolated path for plan storage

Description (problem / solution / changelog)

Plan skill was writing to .hermes/plans/ relative to the backend workspace, causing all profiles to share the same plans directory.

Now writes to ~/.hermes/plans/ which is expanded against the subprocess HOME ({HERMES_HOME}/home/), ensuring each profile has its own isolated plans directory.

Fixes #12533.

What does this PR do?

Fixes the plan skill to write plans to ~/.hermes/plans/ instead of .hermes/plans/ (relative to backend workspace). The new path is expanded against the subprocess HOME ({HERMES_HOME}/home/), ensuring each profile has its own isolated plans directory.

Related Issue

Fixes #12533

Note: This PR depends on #12260 being merged first, as the path expansion relies on resolve_skill_config_values() being updated to use subprocess HOME.

Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ New feature (non-breaking change that adds functionality)
  • 🔒 Security fix
  • 📝 Documentation update
  • ✅ Tests (adding or improving test coverage)
  • ♻️ Refactor (no behavior change)
  • 🎯 New skill (bundled or hub)

Changes Made

  • skills/software-development/plan/SKILL.md: Changed plan save path from .hermes/plans/ to ~/.hermes/plans/

How to Test

  1. Set up two Hermes profiles with different HERMES_HOME values
  2. Run /plan command in profile1 — plan should be written to {HERMES_HOME}/home/.hermes/plans/
  3. Run /plan command in profile2 — plan should be written to a different directory
  4. Verify plans are isolated per profile

Checklist

Code

  • I've read the Contributing Guide
  • My commit messages follow Conventional Commits (fix(scope):, feat(scope):, etc.)
  • I searched for existing PRs to make sure this isn't a duplicate
  • My PR contains only changes related to this fix/feature (no unrelated commits)
  • I've run scripts/run_tests.sh and all tests pass
  • I've added tests for my changes (required for bug fixes, strongly encouraged for features)
  • I've tested on my platform: macOS

Documentation & Housekeeping

  • I've updated relevant documentation (README, docs/, docstrings)
  • I've updated cli-config.yaml.example if I added/changed config keys
  • I've updated CONTRIBUTING.md or AGENTS.md if I changed architecture or workflows
  • I've considered cross-platform impact (Windows, macOS) per the compatibility guide
  • I've updated tool descriptions/schemas if I changed tool behavior

Screenshots / Logs

<!-- If applicable, add screenshots or log output showing the fix/feature in action. -->

Changed files

  • skills/software-development/plan/SKILL.md (modified, +5/-5)

Code Example

Treat that as relative to the active working directory / backend workspace.
RAW_BUFFERClick to expand / collapse

Bug Description

The plan skill (skills/software-development/plan/SKILL.md) writes generated plans to .hermes/plans/, a path relative to the backend workspace (working directory). This causes plans from different profiles to collide when they share the same backend workspace.

Steps to Reproduce

  1. Set up two Hermes profiles with HERMES_HOME=/opt/data/profiles/profile1 and HERMES_HOME=/opt/data/profiles/profile2
  2. Run /plan command in profile1 — plan is written to /opt/data/.hermes/plans/
  3. Run /plan command in profile2 — plan is written to the same /opt/data/.hermes/plans/
  4. Observe that both profiles' plans are mixed in the same directory

Expected Behavior

Plans should be written to {HERMES_HOME}/home/.hermes/plans/ so each profile has its own isolated plans directory.

Actual Behavior

Plans are written to .hermes/plans/ relative to the backend workspace (/opt/data/.hermes/plans/ in Docker), ignoring profile isolation.

Affected Component

Skills (skill loading, skill hub, skill guard)

Root Cause Analysis

The plan skill SKILL.md states:

Treat that as relative to the active working directory / backend workspace.

This path is resolved against the backend workspace, not the profile's HERMES_HOME. While backend workspace-relative paths are appropriate for code artifacts, plans are user data that should follow the profile.

Proposed Fix

Update the plan skill to use get_subprocess_home() (returns {HERMES_HOME}/home/) for plan storage. The path should be ~/.hermes/plans/ expanded via the subprocess HOME mechanism, with fallback to expanduser() when the subprocess home directory does not exist.

Alternatively, expose a plans.path skill config with default ~/.hermes/plans/ and resolve it through resolve_skill_config_values().

Dependency Note: This issue's fix depends on #12260 being resolved first.

The proposed fix for this issue uses {{config.plans.path}} which is resolved via resolve_skill_config_values(). This function must first be updated to expand ~ against the subprocess HOME ({HERMES_HOME}/home/) instead of the Python process HOME.

Without #12260, the skill config default: "~/.hermes/plans" would be incorrectly expanded to /opt/data/.hermes/plans (Python HOME) instead of /opt/data/home/.hermes/plans (subprocess HOME).

Suggested implementation order:

  1. First merge #12260 (fix for resolve_skill_config_values())
  2. Then merge this issue's fix (plan skill using {{config.plans.path}})

extent analysis

TL;DR

Update the plan skill to use a profile-specific path for plan storage, such as ~/.hermes/plans/ resolved through resolve_skill_config_values() after fixing #12260.

Guidance

  • Verify that #12260 is resolved to ensure correct expansion of ~ in skill config values.
  • Update the plan skill to use {{config.plans.path}} with a default value of ~/.hermes/plans/ to store plans in a profile-specific directory.
  • Test the updated plan skill with multiple profiles to ensure plans are written to isolated directories.
  • Consider exposing a plans.path skill config to allow for customization of the plan storage path.

Example

No code snippet is provided as the issue does not contain sufficient information to generate a concrete example.

Notes

The fix for this issue depends on #12260 being resolved first, which updates the resolve_skill_config_values() function to expand ~ against the subprocess HOME instead of the Python process HOME.

Recommendation

Apply the workaround by first merging #12260 and then updating the plan skill to use {{config.plans.path}} with a default value of ~/.hermes/plans/, as this will ensure correct profile isolation for plan storage.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

hermes - ✅(Solved) Fix [Bug]: Plan skill uses workspace-relative path causing multi-profile collision [1 pull requests, 1 comments, 2 participants]