Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/01_standalone_sdk/03_activate_skill.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
# user_message_suffix is appended to each user message
user_message_suffix="The first character of your response should be 'I'",
# You can also enable automatic load skills from
# public registry at https://github.com/OpenHands/skills
# public registry at https://github.com/OpenHands/extensions
load_public_skills=True,
)

Expand Down
4 changes: 2 additions & 2 deletions examples/03_github_workflows/02_pr_review/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ This example demonstrates how to set up a GitHub Actions workflow for automated
- **Smart commenting**: Avoids repeating issues that have already been raised and addressed
- **Unresolved focus**: Prioritizes unresolved threads that may still need attention
- **Pagination limits**: Fetches up to 100 threads per page (with pagination) and up to 50 comments per thread. For PRs with extensive review history exceeding these limits, older threads/comments may be omitted.
- **Skills-Based Review**: Uses public skills from <https://github.com/OpenHands/skills>:
- **Skills-Based Review**: Uses public skills from <https://github.com/OpenHands/extensions>:
- **`/codereview`**: Standard pragmatic code review focusing on simplicity, type safety, and backward compatibility
- **`/codereview-roasted`**: Linus Torvalds style brutally honest review with emphasis on "good taste" and data structures
- **Complete Diff Upfront**: The agent receives the complete git diff in the initial message for efficient review
Expand Down Expand Up @@ -123,7 +123,7 @@ Instead of forking the `agent_script.py`, you can customize the code review beha

### How It Works

The PR review agent uses skills from the [OpenHands/skills](https://github.com/OpenHands/skills) repository by default. When you add a `.agents/skills/code-review.md` file to your repository, it **overrides** the default skill with your custom guidelines.
The PR review agent uses skills from the [OpenHands/extensions](https://github.com/OpenHands/extensions) repository by default. When you add a `.agents/skills/code-review.md` file to your repository, it **overrides** the default skill with your custom guidelines.

### Example: Custom Code Review Skill

Expand Down
2 changes: 1 addition & 1 deletion examples/03_github_workflows/02_pr_review/agent_script.py
Original file line number Diff line number Diff line change
Expand Up @@ -760,7 +760,7 @@ def main():
)

# Create AgentContext with public skills enabled and project skills
# Public skills from https://github.com/OpenHands/skills include:
# Public skills from https://github.com/OpenHands/extensions include:
# - /codereview: Standard code review skill
# - /codereview-roasted: Linus Torvalds style brutally honest review
# Project skills include repo-specific guidance (AGENTS.md, etc.)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class SkillsRequest(BaseModel):
"""Request body for loading skills."""

load_public: bool = Field(
default=True, description="Load public skills from OpenHands/skills repo"
default=True, description="Load public skills from OpenHands/extensions repo"
)
load_user: bool = Field(
default=True, description="Load user skills from ~/.openhands/skills/"
Expand Down Expand Up @@ -110,7 +110,7 @@ def get_skills(request: SkillsRequest) -> SkillsResponse:
Skills are loaded from multiple sources and merged with the following
precedence (later overrides earlier for duplicate names):
1. Sandbox skills (lowest) - Exposed URLs from sandbox
2. Public skills - From GitHub OpenHands/skills repository
2. Public skills - From GitHub OpenHands/extensions repository
3. User skills - From ~/.openhands/skills/
4. Organization skills - From {org}/.openhands or equivalent
5. Project skills (highest) - From {workspace}/.openhands/skills/
Expand Down Expand Up @@ -169,7 +169,7 @@ def sync_skills() -> SyncResponse:
"""Force refresh of public skills from GitHub repository.

This triggers a git pull on the cached skills repository to get
the latest skills from the OpenHands/skills repository.
the latest skills from the OpenHands/extensions repository.

Returns:
SyncResponse indicating success or failure.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
keeping the router clean and focused on HTTP concerns.

Skill Sources:
- Public skills: GitHub OpenHands/skills repository
- Public skills: GitHub OpenHands/extensions repository
- User skills: ~/.openhands/skills/ and ~/.openhands/microagents/
- Project skills: {workspace}/.openhands/skills/, .cursorrules, agents.md
- Organization skills: {org}/.openhands or {org}/openhands-config
Expand Down Expand Up @@ -292,13 +292,13 @@ def load_all_skills(
Skills are loaded from multiple sources and merged with the following
precedence (later overrides earlier for duplicate names):
1. Sandbox skills (lowest) - Exposed URLs from sandbox
2. Public skills - From GitHub OpenHands/skills repository
2. Public skills - From GitHub OpenHands/extensions repository
3. User skills - From ~/.openhands/skills/
4. Organization skills - From {org}/.openhands or equivalent
5. Project skills (highest) - From {workspace}/.openhands/skills/

Args:
load_public: Whether to load public skills from OpenHands/skills repo.
load_public: Whether to load public skills from OpenHands/extensions repo.
load_user: Whether to load user skills from ~/.openhands/skills/.
load_project: Whether to load project skills from workspace.
load_org: Whether to load organization-level skills.
Expand Down Expand Up @@ -383,7 +383,7 @@ def sync_public_skills() -> tuple[bool, str]:
"""Force refresh of public skills from GitHub repository.

This triggers a git pull on the cached skills repository to get
the latest skills from the OpenHands/skills repository.
the latest skills from the OpenHands/extensions repository.

Returns:
Tuple of (success: bool, message: str).
Expand Down
2 changes: 1 addition & 1 deletion openhands-agent-server/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "openhands-agent-server"
version = "1.11.4"
version = "1.12.0"
description = "OpenHands Agent Server - REST/WebSocket interface for OpenHands AI Agent"

requires-python = ">=3.12"
Expand Down
2 changes: 1 addition & 1 deletion openhands-sdk/openhands/sdk/context/agent_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,11 @@
"and ~/.openhands/microagents/ (for backward compatibility). "
),
)
load_public_skills: bool = Field(

Check warning on line 67 in openhands-sdk/openhands/sdk/context/agent_context.py

View workflow job for this annotation

GitHub Actions / SDK programmatic API (Griffe)

AgentContext.load_public_skills

Attribute value was changed: `Field(default=False, description='Whether to automatically load skills from the public OpenHands skills repository at https://github.com/OpenHands/skills. This allows you to get the latest skills without SDK updates.')` -> `Field(default=False, description='Whether to automatically load skills from the public OpenHands skills repository at https://github.com/OpenHands/extensions. This allows you to get the latest skills without SDK updates.')`
default=False,
description=(
"Whether to automatically load skills from the public OpenHands "
"skills repository at https://github.com/OpenHands/skills. "
"skills repository at https://github.com/OpenHands/extensions. "
"This allows you to get the latest skills without SDK updates."
),
)
Expand Down
4 changes: 2 additions & 2 deletions openhands-sdk/openhands/sdk/context/skills/skill.py
Original file line number Diff line number Diff line change
Expand Up @@ -796,7 +796,7 @@ def load_project_skills(work_dir: str | Path) -> list[Skill]:


# Public skills repository configuration
PUBLIC_SKILLS_REPO = "https://github.com/OpenHands/skills"
PUBLIC_SKILLS_REPO = "https://github.com/OpenHands/extensions"
PUBLIC_SKILLS_BRANCH = "main"


Expand All @@ -807,7 +807,7 @@ def load_public_skills(
"""Load skills from the public OpenHands skills repository.

This function maintains a local git clone of the public skills registry at
https://github.com/OpenHands/skills. On first run, it clones the repository
https://github.com/OpenHands/extensions. On first run, it clones the repository
to ~/.openhands/skills-cache/. On subsequent runs, it pulls the latest changes
to keep the skills up-to-date. This approach is more efficient than fetching
individual files via HTTP.
Expand Down
2 changes: 1 addition & 1 deletion openhands-sdk/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "openhands-sdk"
version = "1.11.4"
version = "1.12.0"
description = "OpenHands SDK - Core functionality for building AI agents"

requires-python = ">=3.12"
Expand Down
2 changes: 1 addition & 1 deletion openhands-tools/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "openhands-tools"
version = "1.11.4"
version = "1.12.0"
description = "OpenHands Tools - Runtime tools for AI agents"

requires-python = ">=3.12"
Expand Down
2 changes: 1 addition & 1 deletion openhands-workspace/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "openhands-workspace"
version = "1.11.4"
version = "1.12.0"
description = "OpenHands Workspace - Docker and container-based workspace implementations"

requires-python = ">=3.12"
Expand Down
8 changes: 4 additions & 4 deletions tests/sdk/context/skill/test_load_public_skills.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ def test_update_skills_repository_clone_new(tmp_path):
"openhands.sdk.git.utils.subprocess.run", return_value=mock_result
) as mock_run:
repo_path = update_skills_repository(
"https://github.com/OpenHands/skills",
"https://github.com/OpenHands/extensions",
"main",
cache_dir,
)
Expand Down Expand Up @@ -295,7 +295,7 @@ def test_update_skills_repository_update_existing(tmp_path):
"openhands.sdk.git.utils.subprocess.run", return_value=mock_result
) as mock_run:
result_path = update_skills_repository(
"https://github.com/OpenHands/skills",
"https://github.com/OpenHands/extensions",
"main",
cache_dir,
)
Expand All @@ -321,7 +321,7 @@ def test_update_skills_repository_clone_timeout(tmp_path):
side_effect=subprocess.TimeoutExpired("git", 60),
) as mock_run:
repo_path = update_skills_repository(
"https://github.com/OpenHands/skills",
"https://github.com/OpenHands/extensions",
"main",
cache_dir,
)
Expand Down Expand Up @@ -352,7 +352,7 @@ def test_update_skills_repository_update_fails_uses_cache(tmp_path):
return_value=mock_result,
):
result_path = update_skills_repository(
"https://github.com/OpenHands/skills",
"https://github.com/OpenHands/extensions",
"main",
cache_dir,
)
Expand Down
Loading