Bug Description
Kanban DB is profile-scoped instead of shared across profiles, so workers cannot see root tasks
Summary
The Kanban documentation says the board is shared across all Hermes profiles and that tasks live in ~/.hermes/kanban.db.
However, when using multiple profiles, Kanban appears to resolve kanban.db relative to the active profile HERMES_HOME. This creates separate boards per profile, for example:
- default/root profile:
~/.hermes/kanban.db
frontend-coder profile: ~/.hermes/profiles/frontend-coder/kanban.db
As a result, tasks created from the default profile are visible with:
hermes profile use default
hermes kanban list
but not visible from another profile:
hermes profile use frontend-coder
hermes kanban list
This also breaks Kanban workers: the dispatcher can spawn a worker for a task, but the worker profile looks in its own profile-local DB and reports that the task does not exist.
Example error from worker
Query: work kanban task t_c2cea64d
Initializing agent...
────────────────────────────────────────
┊ ⚡ kanban_sh 0.0s [error]
┊ ⚡ kanban_sh 0.0s [error]
─ ⚕ Hermes ─────────────────────────────────────────────────────────────────
The task t_c2cea64d doesn't exist in the kanban board. It may have
been archived, deleted, or the ID could be incorrect.
Can you double-check the task ID? Or if you meant a different task,
point me to it and I'll pick it up.
Environment / setup
Relevant commit I was looking at:
c868425
Suspected cause
The Kanban DB path appears to be resolved from the active HERMES_HOME.
Current behavior seems equivalent to:
get_hermes_home() / "kanban.db"
Since profiles set HERMES_HOME to:
~/.hermes/profiles/<profile>
this makes Kanban profile-scoped instead of shared.
Proposed fix
Use the default Hermes root for Kanban storage instead of the active profile home.
For example, in hermes_cli/kanban_db.py:
def kanban_db_path() -> Path:
"""Return the path to the shared host-level kanban.db, independent of active profile."""
from hermes_constants import get_default_hermes_root
return get_default_hermes_root() / "kanban.db"
def workspaces_root() -> Path:
"""Return the shared directory under which scratch workspaces are created."""
from hermes_constants import get_default_hermes_root
return get_default_hermes_root() / "kanban" / "workspaces"
There may also be other Kanban-related paths that should be shared rather than profile-local, for example:
- worker logs
- Kanban workspaces
- dispatcher/gateway Kanban paths
- any code path used by worker tools like
kanban_show, kanban_complete, etc.
Why this matters
The docs describe Kanban as the primitive for multi-agent, multi-profile collaboration:
shared across all your Hermes profiles
But with the current behavior, each profile can silently get its own isolated board. This makes cross-profile task assignment unreliable and causes spawned workers to fail even when the task exists in the root board.
Extra note
After patching kanban_db_path() and workspaces_root() locally to use get_default_hermes_root(), I then hit a separate gateway service issue when running from the frontend-coder profile:
Failed to start hermes-gateway-frontend-coder.service: Unit hermes-gateway-frontend-coder.service not found.
That seems separate from the Kanban DB issue, but it may be related to profile-specific gateway/service behavior. My main concern in this issue is that Kanban storage appears profile-scoped despite the docs saying it should be shared.
### Steps to Reproduce
```bash
# 1. Use default/root profile
hermes profile use default
# 2. Initialize/create a Kanban task
hermes kanban init
hermes kanban create "test task for frontend coder" --assignee frontend-coder
# 3. Confirm task exists in default profile
hermes kanban list
# 4. Switch to another profile
hermes profile use frontend-coder
# 5. Try to list/show the same task
hermes kanban list
hermes kanban show <task_id>
Expected Behavior
Kanban should be host-level and profile-agnostic, as described in the docs.
All profiles on the same host should read/write the same board:
So the following should show the same tasks:
hermes profile use default
hermes kanban list
hermes profile use frontend-coder
hermes kanban list
And a worker spawned as frontend-coder should be able to call Kanban tools against a task created from the default/root profile.
Actual Behavior
The frontend-coder profile does not see the task.
A separate DB exists at:
~/.hermes/profiles/frontend-coder/kanban.db
The worker also fails with “task does not exist” because it appears to look up the task in the profile-local DB instead of the shared root DB.
Affected Component
Tools (terminal, file ops, web, code execution, etc.)
Messaging Platform (if gateway-related)
No response
Debug Report
Operating System
Windows 11
Python Version
No response
Hermes Version
No response
Additional Logs / Traceback (optional)
Root Cause Analysis (optional)
No response
Proposed Fix (optional)
No response
Are you willing to submit a PR for this?
Bug Description
Kanban DB is profile-scoped instead of shared across profiles, so workers cannot see root tasks
Summary
The Kanban documentation says the board is shared across all Hermes profiles and that tasks live in
~/.hermes/kanban.db.However, when using multiple profiles, Kanban appears to resolve
kanban.dbrelative to the active profileHERMES_HOME. This creates separate boards per profile, for example:~/.hermes/kanban.dbfrontend-coderprofile:~/.hermes/profiles/frontend-coder/kanban.dbAs a result, tasks created from the default profile are visible with:
but not visible from another profile:
This also breaks Kanban workers: the dispatcher can spawn a worker for a task, but the worker profile looks in its own profile-local DB and reports that the task does not exist.
Example error from worker
Environment / setup
OS: WSL Ubuntu
Hermes installed under:
~/.hermes/hermes-agentProfiles used:
defaultfrontend-coderObserved DB files:
\\wsl.localhost\Ubuntu\home\user\.hermes\kanban.db\\wsl.localhost\Ubuntu\home\user\.hermes\profiles\frontend-coder\kanban.dbRelevant commit I was looking at:
c868425
Suspected cause
The Kanban DB path appears to be resolved from the active
HERMES_HOME.Current behavior seems equivalent to:
Since profiles set
HERMES_HOMEto:this makes Kanban profile-scoped instead of shared.
Proposed fix
Use the default Hermes root for Kanban storage instead of the active profile home.
For example, in
hermes_cli/kanban_db.py:There may also be other Kanban-related paths that should be shared rather than profile-local, for example:
kanban_show,kanban_complete, etc.Why this matters
The docs describe Kanban as the primitive for multi-agent, multi-profile collaboration:
But with the current behavior, each profile can silently get its own isolated board. This makes cross-profile task assignment unreliable and causes spawned workers to fail even when the task exists in the root board.
Extra note
After patching
kanban_db_path()andworkspaces_root()locally to useget_default_hermes_root(), I then hit a separate gateway service issue when running from thefrontend-coderprofile:That seems separate from the Kanban DB issue, but it may be related to profile-specific gateway/service behavior. My main concern in this issue is that Kanban storage appears profile-scoped despite the docs saying it should be shared.
Expected Behavior
Kanban should be host-level and profile-agnostic, as described in the docs.
All profiles on the same host should read/write the same board:
So the following should show the same tasks:
And a worker spawned as
frontend-codershould be able to call Kanban tools against a task created from the default/root profile.Actual Behavior
The
frontend-coderprofile does not see the task.A separate DB exists at:
The worker also fails with “task does not exist” because it appears to look up the task in the profile-local DB instead of the shared root DB.
Affected Component
Tools (terminal, file ops, web, code execution, etc.)
Messaging Platform (if gateway-related)
No response
Debug Report
*Operating System
Windows 11
Python Version
No response
Hermes Version
No response
Additional Logs / Traceback (optional)
Root Cause Analysis (optional)
No response
Proposed Fix (optional)
No response
Are you willing to submit a PR for this?