curl -L -o repo-tree-mapper.skill "https://aiskillstore.io/v1/agent/skills/c47c904c-8596-4810-a843-523ab764de34/download?platform=ClaudeCode"
{
"tool": "download_skill",
"arguments": {
"skill_id": "c47c904c-8596-4810-a843-523ab764de34",
"platform": "ClaudeCode"
}
}
{
"mcpServers": {
"skill-store": {
"url": "https://aiskillstore.io/mcp/"
}
}
}
Analyze a code repository's directory structure, entry points, and key symbols (functions/classes/exports) and return a token-limited tree map injectable into LLM context.
호환 플랫폼: any
검사 결과: ["메타데이터 경고: 권장 필드 없음: 'requirements' (SKILL.md v2 권장)", "메타데이터 경고: 권장 필드 없음: 'changelog' (SKILL.md v2 권장)", "USK v3 경고: interface.runtime 'python3.11'이 권장 값이 아닙니다 (권장: ['python3', 'node', 'bash', 'binary', 'any'])", 'USK v3 경고: 이 스킬은 자동 변환 조건을 충족하지 않아 manual_install로 처리됩니다']
✅ 보안 위험 항목이 발견되지 않았습니다.
AI 검수 단계
제출된 스킬 패키지의 메타데이터와 코드를 종합적으로 검토한 결과, 다음과 같은 판단을 내렸습니다. 1. **권한 일치 여부:** * `network: false`로 선언되었으며, 코드에서 `requests`, `urllib`, `socket` 등 어떠한 네트워크 통신 관련 모듈이나 함수도 사용되지 않았습니다. 일치합니다. * `filesystem: true`로 선언되었으며, 코드에서 `os.path`, `os.walk`, `open()` 등을 사용하여 파일 시스템을 탐색하고 파일을 읽는 작업이 이루어집니다. 이는 스킬의 핵심 기능(저장소 분석)에 필수적인 동작이며, 선언된 권한과 일치합니다. * `subprocess: false`로 선언되었으며, 코드에서 `subprocess` 모듈이나 `os.system`, `os.popen` 등 외부 프로세스를 실행하는 함수가 발견되지 않았습니다. 일치합니다. * `env_vars: []`로 선언되었으며, 코드에서 `os.getenv`나 `os.environ`을 통한 환경 변수 접근이 발견되지 않았습니다. 일치합니다. 2. **악의적 목적 코드 여부:** * 데이터 탈취, 시스템 파괴, 난독화 등 악의적인 목적으로 의심될 만한 코드는 발견되지 않았습니다. 파일 시스템 접근은 오직 읽기 전용으로 이루어지며, 사용자 지정 경로에 파일을 쓰거나 삭제하는 등의 위험한 작업은 수행하지 않습니다. * `ast` 모듈을 사용한 Python 코드 분석은 안전하며, JS/TS 코드 분석에 사용된 정규식 또한 텍스트 패턴 매칭에 국한되어 코드 실행 위험이 없습니다. 3. **선언되지 않은 외부 통신 여부:** * 코드 내에서 어떠한 형태의 외부 통신 시도도 발견되지 않았습니다. `network: false` 권한을 철저히 준수합니다. 4. **사용자 데이터 무단 수집/전송 여부:** * 스킬은 `root_path`로 지정된 저장소의 파일 내용을 읽어 분석하지만, 이 데이터를 외부로 전송하지 않고 표준 출력(stdout)을 통해 구조화된 요약 정보(트리 맵, 심볼, 라인 수 등)만 반환합니다. 이는 `stdin_stdout` 인터페이스의 예상된 동작이며, 무단 수집/전송으로 볼 수 없습니다. 5. **코드 품질 및 목적 일치 여부:** * 코드는 `lib` 디렉토리 아래 기능별로 모듈화되어 있으며, 가독성이 높고 주석 및 타입 힌트가 잘 작성되어 있습니다. * 파일 시스템 탐색 시 `.git` 디렉토리를 명시적으로 제외하고, `.gitignore` 파일을 파싱하여 적용하는 등 효율성과 정확성을 위한 로직이 포함되어 있습니다. * `ast.parse` 과정에서 발생할 수 있는 `SyntaxError` 등의 예외를 처리하여 견고성을 확보했습니다. * 토큰 추정 로직은 명시적으로 '휴리스틱'임을 밝히고 있으며, LLM 컨텍스트 관리를 위한 근사치 계산에 적합합니다. * 스킬의 메타데이터에 명시된 '코드 저장소 구조 분석'이라는 목적에 충실하며, 이를 안전하고 효율적으로 수행하도록 설계되었습니다. 정적 분석 결과의 `status: caution`은 파일 시스템 접근 권한(`filesystem: true`)이 필요한 스킬에 대한 일반적인 경고로 보이며, `red_flags_found` 등의 구체적인 위험 요소는 발견되지 않았습니다. 따라서 이 스킬은 안전하다고 판단됩니다.
이 스킬의 대표적인 입출력 예시입니다. 에이전트는 이 예시를 보고 스킬 호출 방법과 결과 형태를 이해할 수 있습니다.
Map a small Python project — get tree, symbols, and entry points.
{
"include_symbols": true,
"max_tokens": 2000,
"root_path": "/home/user/myapp"
}
{
"entry_points": [
"src/main.py",
"README.md",
"pyproject.toml"
],
"root": "/home/user/myapp",
"summary": {
"estimated_tokens": 1240,
"excluded_by_gitignore": 2,
"included_files": 6,
"languages": {
"md": 1,
"py": 4,
"toml": 1
},
"total_files": 8
},
"tree": {
"README.md": {
"lines": 45,
"symbols": []
},
"pyproject.toml": {
"lines": 28,
"symbols": []
},
"src/": {
"main.py": {
"lines": 142,
"symbols": [
"main",
"Config",
"load_config"
]
},
"utils/": {
"parser.py": {
"lines": 67,
"symbols": [
"parse_yaml",
"parse_json"
]
}
}
}
}
}
Analyze a large monorepo with a tight token budget — priority files are selected first, then depth-first pruning fills remaining budget.
{
"max_tokens": 3000,
"priority_files": [
"README*",
"package.json",
"pyproject.toml",
"main.*",
"app.*",
"index.*"
],
"respect_gitignore": true,
"root_path": "/srv/monorepo"
}
{
"entry_points": [
"README.md",
"package.json",
"packages/api/src/index.ts"
],
"root": "/srv/monorepo",
"summary": {
"estimated_tokens": 2987,
"excluded_by_gitignore": 94,
"included_files": 18,
"languages": {
"json": 3,
"md": 1,
"ts": 10,
"tsx": 4
},
"total_files": 312
},
"tree": {
"README.md": {
"lines": 120,
"symbols": []
},
"package.json": {
"lines": 55,
"symbols": []
},
"packages/": {
"api/": {
"src/": {
"index.ts": {
"lines": 88,
"symbols": [
"createApp",
"router"
]
}
}
},
"web/": {
"src/": {
"App.tsx": {
"lines": 201,
"symbols": [
"App",
"useAuth"
]
}
}
}
}
}
}
Map a JavaScript/TypeScript project — exports from index.ts, package.json entry field recognized as entry point.
{
"include_symbols": true,
"language_filter": [
"ts",
"tsx",
"js",
"json"
],
"max_tokens": 4000,
"root_path": "/home/user/ts-sdk"
}
{
"entry_points": [
"src/index.ts",
"package.json"
],
"root": "/home/user/ts-sdk",
"summary": {
"estimated_tokens": 1876,
"excluded_by_gitignore": 0,
"included_files": 19,
"languages": {
"json": 2,
"ts": 5
},
"total_files": 19
},
"tree": {
"package.json": {
"lines": 42,
"symbols": []
},
"src/": {
"index.ts": {
"lines": 210,
"symbols": [
"fetchData",
"APIClient",
"DEFAULT_OPTS"
]
},
"types.ts": {
"lines": 64,
"symbols": [
"RequestOptions",
"ResponseSchema"
]
},
"utils/": {
"retry.ts": {
"lines": 89,
"symbols": [
"withRetry",
"BackoffStrategy"
]
}
}
}
}
}
Verify that node_modules, __pycache__, and .venv are excluded when respect_gitignore=true.
{
"max_tokens": 4000,
"respect_gitignore": true,
"root_path": "/home/user/webapp"
}
{
"entry_points": [
"app.py",
"requirements.txt"
],
"root": "/home/user/webapp",
"summary": {
"estimated_tokens": 892,
"excluded_by_gitignore": 1847,
"included_files": 7,
"languages": {
"css": 1,
"html": 2,
"py": 3,
"txt": 1
},
"total_files": 7
},
"tree": {
"app.py": {
"lines": 95,
"symbols": [
"create_app",
"db",
"login_manager"
]
},
"requirements.txt": {
"lines": 18,
"symbols": []
},
"static/": {
"main.css": {
"lines": 340,
"symbols": []
}
}
}
}
Use language_filter to include only .py files in a mixed-language project.
{
"include_symbols": true,
"language_filter": [
"py"
],
"max_tokens": 4000,
"root_path": "/home/user/mixed-project"
}
{
"entry_points": [],
"root": "/home/user/mixed-project",
"summary": {
"estimated_tokens": 620,
"excluded_by_gitignore": 0,
"included_files": 4,
"languages": {
"py": 4
},
"total_files": 4
},
"tree": {
"src/": {
"core.py": {
"lines": 320,
"symbols": [
"Engine",
"run",
"stop"
]
},
"helpers.py": {
"lines": 78,
"symbols": [
"retry",
"flatten"
]
}
},
"tests/": {
"test_core.py": {
"lines": 112,
"symbols": [
"TestEngine",
"test_run_basic"
]
}
}
}
}
Passing an empty directory returns a structured EMPTY_DIRECTORY error.
{
"root_path": "/tmp/empty-dir"
}
{
"error": {
"code": "EMPTY_DIRECTORY",
"message": "No files found in \u0027/tmp/empty-dir\u0027. The directory appears to be empty."
}
}
Passing a non-existent path returns a PATH_NOT_FOUND error.
{
"root_path": "/nonexistent/path/to/repo"
}
{
"error": {
"code": "PATH_NOT_FOUND",
"message": "Path \u0027/nonexistent/path/to/repo\u0027 does not exist."
}
}
모든 예시는 에이전트 API로도 조회 가능:
/v1/agent/skills/c47c904c-8596-4810-a843-523ab764de34/schema
아직 리뷰가 없습니다. 첫 번째 리뷰를 남겨보세요!