Skip to main content

oxios_kernel/skill/skills_sh/
mod.rs

1//! Skills.sh marketplace integration.
2//!
3//! Provides a client for searching and fetching skills from the [skills.sh]
4//! registry, plus an installer that writes skill files directly (no zip
5//! extraction needed — skills.sh provides file contents via JSON API).
6//!
7//! # Comparison with ClawHub
8//!
9//! | Aspect       | ClawHub                        | Skills.sh                       |
10//! |--------------|--------------------------------|----------------------------------|
11//! | Distribution | Zip archive download           | JSON API with file contents      |
12//! | Discovery    | ClawHub search API             | Skills.sh search + leaderboard   |
13//! | Source       | `clawhub.ai`                   | GitHub repos via skills.sh       |
14//! | Auth         | `CLAWHUB_TOKEN` env var        | `SKILLS_SH_TOKEN` env var        |
15//!
16//! # Directory Layout
17//!
18//! ```text
19//! workspace/
20//!   skills/
21//!     frontend-design/
22//!       SKILL.md
23//!       .skills_sh/
24//!         origin.json   ← per-skill origin metadata
25//! ```
26//!
27//! # Example
28//!
29//! ```ignore
30//! use oxios_kernel::skill::skills_sh::{SkillsShInstaller, SkillsShInstallResult};
31//! use std::path::PathBuf;
32//!
33//! # async fn example() -> anyhow::Result<()> {
34//! let installer = SkillsShInstaller::new(
35//!     PathBuf::from("/home/user/.oxios/skills"),
36//!     None,  // default base URL
37//!     None,  // no API key (reads SKILLS_SH_TOKEN env var)
38//! );
39//!
40//! let result = installer
41//!     .install("vercel-labs/agent-skills/frontend-design")
42//!     .await?;
43//! println!("Installed {} files to {}", result.file_count, result.target_dir.display());
44//! # Ok(())
45//! # }
46//! ```
47
48pub mod client;
49pub mod installer;
50pub mod types;
51
52pub use client::SkillsShClient;
53pub use installer::{SkillsShInstallResult, SkillsShInstaller, SkillsShOrigin};
54pub use types::{
55    SkillsShAuditEntry, SkillsShAuditResponse, SkillsShCuratedOwner, SkillsShCuratedResponse,
56    SkillsShFile, SkillsShListResponse, SkillsShPagination, SkillsShSearchResponse, SkillsShSkill,
57    SkillsShSkillDetail,
58};