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
Compatible Platforms any
Findings: ["메타데이터 경고: 권장 필드 없음: 'requirements' (SKILL.md v2 권장)", "메타데이터 경고: 권장 필드 없음: 'changelog' (SKILL.md v2 권장)"]
✅ No security risks found.
AI Review Stage
스킬 메타데이터와 코드 파일(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' 항목이 모두 비어 있어 코드의 안전성을 뒷받침합니다. 결론적으로, 이 스킬은 선언된 보안 정책을 철저히 준수하며, 악의적인 동작이나 취약점을 포함하고 있지 않아 안전하다고 판단됩니다.
Representative input/output examples for this skill. Agents can use these to understand how to invoke the skill and what output to expect.
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
}
All examples are also available via the agent API:
/v1/agent/skills/75a42303-f534-46b6-ac10-cbb56acf7e74/schema
No reviews yet. Be the first to leave one!