curl -L -o docker-compose-generator.skill "https://aiskillstore.io/v1/agent/skills/75a42303-f534-46b6-ac10-cbb56acf7e74/download?platform=ClaudeCode"
{
"tool": "download_skill",
"arguments": {
"skill_id": "75a42303-f534-46b6-ac10-cbb56acf7e74",
"platform": "ClaudeCode"
}
}
{
"mcpServers": {
"skill-store": {
"url": "https://aiskillstore.io/mcp/"
}
}
}
Generate, validate, and analyze multi-service docker-compose.yml — dependency DAG, healthcheck patterns, named volumes, and compose merge
호환 플랫폼: any
검사 결과: ["메타데이터 경고: 권장 필드 없음: 'requirements' (SKILL.md v2 권장)", "메타데이터 경고: 권장 필드 없음: 'changelog' (SKILL.md v2 권장)"]
✅ 보안 위험 항목이 발견되지 않았습니다.
AI 검수 단계
스킬 메타데이터와 코드 파일(main.py, lib/composer.py)을 분석한 결과, 다음과 같은 판단을 내렸습니다. 1. **선언된 권한 준수:** * 메타데이터에 `network: false`, `filesystem: false`, `subprocess: false`로 명시되어 있으며, 코드에서 이들 권한을 사용하는 어떠한 흔적도 발견되지 않았습니다. `os` 모듈은 `sys.path` 설정에만 사용되었고, 파일 시스템 접근이나 외부 프로세스 실행은 없습니다. * `env_vars: []`로 선언되었으며, 코드에서 환경 변수에 접근하는 부분이 없습니다. 2. **악의적 목적의 코드 부재:** * 코드 전체를 검토한 결과, 데이터 탈취, 시스템 파괴, 난독화 등 악의적인 목적으로 사용될 수 있는 코드는 발견되지 않았습니다. * `eval()`, `exec()`, `pickle` 등 임의 코드 실행을 유발할 수 있는 함수는 사용되지 않았습니다. 3. **외부 통신 및 데이터 수집/전송 부재:** * 코드 내에서 외부 네트워크 요청을 수행하는 라이브러리(예: `requests`)나 함수 호출이 전혀 없습니다. * 사용자 입력(stdin)을 처리하고 결과(stdout)를 반환하는 순수한 로컬 연산만 수행하며, 어떠한 사용자 데이터도 무단으로 수집하거나 외부로 전송하지 않습니다. 4. **코드 품질 및 목적 일치:** * 스킬의 목적(Docker Compose YAML 생성, 검증, 분석, 병합)에 충실하게 구현되어 있습니다. * 특히 `lib/composer.py`에 포함된 커스텀 YAML 파서(`_parse_yaml_simple`)는 외부 라이브러리 의존성을 없애기 위한 것으로 보입니다. 이 파서는 Docker Compose 파일에 필요한 YAML의 '매우 작은 부분 집합'만 지원하도록 설계되어 있으며, 복잡한 YAML 태그(예: `!!python/object/apply`)를 통한 임의 코드 실행 공격 벡터를 포함하지 않는 것으로 판단됩니다. 이는 오히려 보안 측면에서 긍정적일 수 있습니다. * 정적 분석 결과 또한 'approved' 상태이며, 'red_flags_found', 'obfuscation_warnings', 'forbidden_exec_files_found' 항목이 모두 비어 있어 코드의 안전성을 뒷받침합니다. 결론적으로, 이 스킬은 선언된 보안 정책을 철저히 준수하며, 악의적인 동작이나 취약점을 포함하고 있지 않아 안전하다고 판단됩니다.
이 스킬의 대표적인 입출력 예시입니다. 에이전트는 이 예시를 보고 스킬 호출 방법과 결과 형태를 이해할 수 있습니다.
Generate compose YAML for web app with nginx, app server, and postgres
{
"action": "generate",
"project_name": "myapp",
"services": [
{
"depends_on": [
"app"
],
"image": "nginx:alpine",
"name": "nginx",
"ports": [
"80:80"
]
},
{
"depends_on": [
"db"
],
"environment": {
"DATABASE_URL": "postgres://db/myapp"
},
"image": "myapp:latest",
"name": "app"
},
{
"environment": {
"POSTGRES_DB": "myapp",
"POSTGRES_PASSWORD": "secret"
},
"image": "postgres:15-alpine",
"name": "db",
"volumes": [
"pgdata:/var/lib/postgresql/data"
]
}
]
}
{
"action": "generate",
"ok": true,
"result": {
"compose_yaml": "Generated docker-compose.yml with 3 services, named volume pgdata, bridge network myapp_net, and healthcheck suggestions embedded",
"network_name": "myapp_net",
"service_count": 3,
"volume_count": 1
}
}
Validate a compose file that has a circular dependency
{
"action": "validate",
"compose_yaml": "version: \u00273.8\u0027\nservices:\n a:\n image: alpine\n depends_on: [b]\n b:\n image: alpine\n depends_on: [a]\n"
}
{
"action": "validate",
"ok": false,
"result": {
"errors": [
"Circular dependency detected: a -\u003e b -\u003e a"
],
"valid": false,
"warnings": []
}
}
Output Mermaid diagram for a 4-service compose
{
"action": "graph",
"compose_yaml": "version: \u00273.8\u0027\nservices:\n web:\n image: nginx\n depends_on: [api]\n api:\n image: myapi\n depends_on: [db, cache]\n db:\n image: postgres:15\n cache:\n image: redis:7\n"
}
{
"action": "graph",
"ok": true,
"result": {
"edge_count": 3,
"mermaid": "Mermaid flowchart showing web -\u003e api -\u003e db and api -\u003e cache dependency tree",
"service_count": 4
}
}
Suggest healthcheck blocks for well-known images
{
"action": "healthcheck",
"compose_yaml": "version: \u00273.8\u0027\nservices:\n db:\n image: postgres:15\n cache:\n image: redis:7\n web:\n image: nginx:alpine\n"
}
{
"action": "healthcheck",
"ok": true,
"result": {
"patched_yaml": "Updated YAML string with healthcheck blocks injected",
"suggestions": {
"cache": "Healthcheck block for redis using redis-cli ping",
"db": "Healthcheck block for postgres using pg_isready",
"web": "Healthcheck block for nginx using curl localhost"
}
}
}
Merge a base compose with a production override
{
"action": "merge",
"compose_files": [
"version: \u00273.8\u0027\nservices:\n app:\n image: myapp:latest\n environment:\n LOG_LEVEL: debug\n",
"version: \u00273.8\u0027\nservices:\n app:\n environment:\n LOG_LEVEL: info\n SENTRY_DSN: https://example.sentry.io/123\n"
]
}
{
"action": "merge",
"ok": true,
"result": {
"conflicts_resolved": 1,
"merge_count": 2,
"merged_yaml": "Merged docker-compose.yml where app LOG_LEVEL=info (overridden) and SENTRY_DSN added"
}
}
Validate a well-formed compose file
{
"action": "validate",
"compose_yaml": "version: \u00273.8\u0027\nservices:\n web:\n image: nginx:alpine\n ports:\n - \u002780:80\u0027\n"
}
{
"action": "validate",
"ok": true,
"result": {
"errors": [],
"service_count": 1,
"valid": true,
"warnings": []
}
}
Minimal compose for a standalone Redis instance
{
"action": "generate",
"services": [
{
"image": "redis:7-alpine",
"name": "cache",
"ports": [
"6379:6379"
]
}
]
}
{
"action": "generate",
"ok": true,
"result": {
"compose_yaml": "Generated minimal docker-compose.yml with single Redis service and bridge network",
"network_name": "default_net",
"service_count": 1,
"volume_count": 0
}
}
Returns structured error when action is omitted
{
"action": "generate"
}
{
"action": "generate",
"error": {
"code": "MISSING_FIELD",
"message": "Field \u0027services\u0027 is required for action \u0027generate\u0027"
},
"ok": false
}
모든 예시는 에이전트 API로도 조회 가능:
/v1/agent/skills/75a42303-f534-46b6-ac10-cbb56acf7e74/schema
아직 리뷰가 없습니다. 첫 번째 리뷰를 남겨보세요!