关于 inspecting-skills
用于发现并导入 Skill 目录中 Python 代码的工具,可处理目录名中的连字符与 Python 模块名下划线之间的差异,并支持检查、索引和列出可用 Skill。
主要功能
- 01发现含 Python 代码的 Skill
- 02按连字符或下划线名称导入
- 03启用透明导入
- 04索引符号并生成注册表
适用场景
- 01导入其他 Skill 中的函数
- 02查找仓库中的可导入 Skill
- 03生成离线查询注册表
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oaustegard/ claude-skills --skill inspecting-skills安装后在 Claude Code 中输入/inspecting-skills确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
__init__.pyCHANGELOG.mdscripts/__init__.pydiscover.pyindex.pyskill_imports.py详细介绍
检查技能
发现各个技能中的 Python 代码,并启用通用导入。解决技能目录(例如 browsing-bluesky)与 Python 导入名称(例如 browsing_bluesky)之间连字符和下划线不匹配的问题。
安装
import sys
sys.path.insert(0, '/home/user/claude-skills')
from inspecting_skills import setup_skill_path, skill_import
快速开始
导入技能
from inspecting_skills import skill_import
# Import by skill name (dash or underscore form)
bsky = skill_import("browsing-bluesky")
posts = bsky.search_posts("python")
# Import specific functions
search, profile = skill_import("browsing-bluesky", ["search_posts", "get_profile"])
启用透明导入
from inspecting_skills import setup_skill_path
# Configure once at session start
setup_skill_path("/home/user/claude-skills")
# Now import skills directly (underscore form)
from browsing_bluesky import search_posts, get_profile
from remembering import remember, recall
发现可用技能
from inspecting_skills import list_importable_skills
skills = list_importable_skills()
for s in skills:
print(f"{s['name']} -> import {s['module_name']}")
核心函数
发现
| 函数 | 用途 |
|---|---|
discover_skill(path) | 分析单个技能目录 |
discover_all_skills(root) | 查找所有包含 Python 代码的技能 |
find_skill_by_name(name, root) | 按名称查找技能(支持两种形式) |
skill_name_to_module(name) | 将 "browsing-bluesky" 转换为 "browsing_bluesky" |
索引
| 函数 | 用途 |
|---|---|
index_skill(layout) | 从已发现的技能中提取符号 |
index_all_skills(root) | 为仓库中的所有技能创建索引 |
generate_registry(root, output) | 创建 registry.json 清单 |
导入
| 函数 | 用途 |
|---|---|
setup_skill_path(root) | 启用透明的技能导入 |
skill_import(name, symbols) | 导入技能或指定符号 |
register_skill(name, path) | 在自定义路径注册技能 |
list_importable_skills() | 列出所有可导入的技能 |
技能布局
技能以三种模式组织 Python 代码:
1. Scripts 目录
browsing-bluesky/
SKILL.md
__init__.py # Re-exports from scripts/
scripts/
__init__.py
bsky.py # Main implementation
2. 根级模块
remembering/
SKILL.md
__init__.py # Re-exports functions
memory.py # Core functionality
boot.py
config.py
3. 简易包
simple-skill/
SKILL.md
__init__.py # Contains all code
生成注册表
创建 registry.json,以便离线查找符号:
from inspecting_skills import generate_registry
from pathlib import Path
registry = generate_registry(
Path("/home/user/claude-skills"),
output_path=Path("registry.json")
)
# Registry structure:
# {
# "version": "1.0.0",
# "skills": {
# "browsing-bluesky": {
# "module_name": "browsing_bluesky",
# "exports": ["search_posts", "get_profile", ...],
# "modules": [...]
# }
# }
# }
为单个技能创建索引
from inspecting_skills import discover_skill, index_skill
from pathlib import Path
# Discover the skill layout
layout = discover_skill(Path("/home/user/claude-skills/remembering"))
print(f"Layout: {layout.layout_type}")
print(f"Has __init__.py: {layout.has_init}")
print(f"Python files: {[f.name for f in layout.python_files]}")
# Index symbols
index = index_skill(layout)
for module in index.modules:
print(f"\n{module.file_path}:")
for sym in module.symbols:
print(f" {sym.kind} {sym.name}{sym.signature or ''}")
与 tree-sitting 集成
此技能与 tree-sitting 互为补充,后者可在运行时提取代码结构:
- tree-sitting:通过 tree-sitter 提取 AST 结构,支持多种语言
- inspecting-skills:支持运行时导入,专注于 Python,可动态发现
结合使用:
- 使用
tree-sitting进行导航和代码审查 - 使用
inspecting-skills实际导入和执行代码
故障排除
导入错误
# If skill_import fails, check:
# 1. Skill exists and has __init__.py
from inspecting_skills import discover_skill
layout = discover_skill(Path("/path/to/skill"))
print(layout.has_init) # Must be True for importing
# 2. Skills root is configured
from inspecting_skills import get_skills_root
print(get_skills_root())
# 3. Symbol is exported in __all__
import ast
init_code = open("/path/to/skill/__init__.py").read()
# Check for __all__ definition
未找到路径
# Manually set skills root
from inspecting_skills import set_skills_root
set_skills_root("/home/user/claude-skills")
API 参考
SkillLayout
@dataclass
class SkillLayout:
name: str # "browsing-bluesky"
path: Path # Full path to skill directory
layout_type: str # "scripts" | "root" | "package" | "none"
python_files: list[Path]
has_init: bool # Can be imported as package
entry_module: str # "browsing_bluesky"
SkillIndex
@dataclass
class SkillIndex:
name: str # "browsing-bluesky"
module_name: str # "browsing_bluesky"
layout_type: str
modules: list[ModuleIndex]
exports: list[str] # From __all__
Symbol
@dataclass
class Symbol:
name: str # Function/class name
kind: str # "function" | "class" | "method"
signature: str | None # "(self, x: int)"
line: int | None # 1-indexed
docstring: str | None # First line
children: list[Symbol] # Methods for classes
评论
支持 Markdown