OpenHands / OpenHands/software-agent-sdk
Add user-visible skill loading warnings to conversation UI
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 1.1k
- Forks
- 539
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 137
Description
Problem
When skills are loaded with configuration conflicts (e.g., a skill defines both paths: and triggers:), the conflict is currently resolved silently. The paths: trigger takes precedence and triggers: is ignored, but users have no visibility into this behavior.
Currently, logger.warning() calls during skill loading only appear in:
- Server logs (not visible to end users)
- Local terminal output (only for SDK developers)
These warnings do not appear in the conversation UI where users would actually see them.
Background
Path-triggered skills (PR #3994) introduce a precedence rule: if a skill defines both paths: and triggers:, the paths: wins and triggers: is silently ignored. This makes the skill path-triggered (not model-invocable).
We discovered that:
- Hooks already have
HookExecutionEventwith avisualizeproperty that displays in the UI - Skills have no equivalent mechanism for surfacing loading warnings
- Users may create conflicting skill definitions without realizing one field is being ignored
Desired Feature
Add infrastructure to surface skill loading warnings/info in the conversation UI, similar to how HookExecutionEvent displays hook execution information.
Timing Considerations
Skills are loaded before the conversation exists:
1. Plugin.load() / AgentContext.__init__
└─> Skill loading detects conflicts
└─> No conversation yet to emit events to
2. Conversation.__init__()
└─> Conversation starts
└─> Could emit collected warnings here
3. Runtime
└─> Path rules trigger on file operations
The warning collection and emission would need to be split across these phases.
Related
- PR #3994 - Path-triggered skills implementation
HookExecutionEvent- Existing pattern for execution-time UI notifications
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the existing HookExecutionEvent visualization pattern, then trace skill loading through Plugin.load(), AgentContext.init(), and Conversation.init(). Determine how warnings can be collected before a conversation exists and emitted when it starts. Done means conflicting skill definitions produce a visible conversation UI warning without losing the loading-time information.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend-api-design
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100