curl -L -o agent-memory-compactor.skill "https://aiskillstore.io/v1/agent/skills/c91b868d-c7b0-4af1-8de9-7411aff8342a/download?platform=ClaudeCode"
{
"tool": "download_skill",
"arguments": {
"skill_id": "c91b868d-c7b0-4af1-8de9-7411aff8342a",
"platform": "ClaudeCode"
}
}
{
"mcpServers": {
"skill-store": {
"url": "https://aiskillstore.io/mcp/"
}
}
}
Agent conversation memory compactor: preserves decisions/identifiers/preferences using heuristics, compresses the rest by frequency/position scoring. No LLM calls, zero external dependencies. Korean decision expressions supported.
Compatible Platforms any
Findings: ["메타데이터 경고: 권장 필드 없음: 'requirements' (SKILL.md v2 권장)", "메타데이터 경고: 권장 필드 없음: 'changelog' (SKILL.md v2 권장)"]
✅ No security risks found.
AI Review Stage
스킬 메타데이터와 제공된 코드 스니펫을 분석한 결과, 다음과 같은 판단을 내렸습니다. 1. **선언된 Permissions 일치 여부:** 스킬은 `network: false`, `filesystem: false`, `subprocess: false`, `env_vars: []`로 선언되어 있습니다. 제공된 `main.py` 코드 스니펫에서는 외부 네트워크 통신, 파일 시스템 접근, 서브프로세스 실행, 환경 변수 접근을 시도하는 코드가 발견되지 않았습니다. `os` 모듈이 임포트되어 있으나, 스니펫 내에서 위험한 함수 호출은 보이지 않으며, 정적 분석 결과(`forbidden_exec_files_found: []`)도 이를 뒷받침합니다. `sys.stdout.reconfigure`는 표준 출력 인코딩 설정으로 보안 위험이 없습니다. 2. **악의적 목적 코드 여부:** 코드의 목적은 대화 로그를 분석하여 결정을 추출하고 압축하는 것입니다. 데이터 탈취, 시스템 파괴, 난독화 등 악의적인 목적으로 사용될 수 있는 코드는 발견되지 않았습니다. 정규 표현식(`re` 모듈)을 사용하여 텍스트 패턴을 감지하는 방식은 스킬의 설명과 일치하며 안전합니다. 3. **선언되지 않은 외부 통신 여부:** `network: false`로 선언되었고, 코드에서도 외부 통신을 시도하는 라이브러리(예: `requests`, `urllib`)나 함수 호출이 없습니다. 4. **사용자 데이터 무단 수집/전송 여부:** 스킬은 `turns`라는 사용자 대화 데이터를 입력으로 받아 처리하지만, 이를 외부로 전송하거나 무단으로 수집하는 메커니즘은 없습니다. 모든 처리는 스킬 내부에서 이루어집니다. 5. **코드 품질 및 목적 일치 여부:** 코드 스니펫은 스킬의 설명('No LLM calls, zero external dependencies', 'preserves decisions/identifiers/preferences using heuristics')과 일치하는 기능을 구현하고 있습니다. 토큰 추정, 결정/선호/식별자 패턴 감지를 위한 정규 표현식 정의 등이 명확하게 드러나 있습니다. `signals.appen`과 같은 오타는 발견되었으나, 이는 기능적 오류일 뿐 보안 위험은 아닙니다. 정적 분석 결과 또한 '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.
길어진 대화 로그를 토큰 예산 내로 압축합니다.
{
"action": "compact",
"preserve_last_n": 2,
"target_tokens": 200,
"turns": [
{
"content": "\uc548\ub155\ud558\uc138\uc694. \ud504\ub85c\uc81d\ud2b8 \uc2dc\uc791\ud558\ub824\uace0 \ud569\ub2c8\ub2e4.",
"role": "user"
},
{
"content": "\ub124, \uc548\ub155\ud558\uc138\uc694! \uc5b4\ub5a4 \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\uc791\ud558\uc2dc\ub098\uc694?",
"role": "assistant"
},
{
"content": "Python\uc73c\ub85c \uc6f9 \ud06c\ub864\ub7ec\ub97c \ub9cc\ub4e4\ub824\uace0 \ud569\ub2c8\ub2e4.",
"role": "user"
},
{
"content": "\uc88b\uc2b5\ub2c8\ub2e4. BeautifulSoup\uacfc requests\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \uc548\ub0b4\ud574\ub4dc\ub9b4\uac8c\uc694.",
"role": "assistant"
},
{
"content": "\uadf8\uac78\ub85c \uc9c4\ud589\ud558\uaca0\uc2b5\ub2c8\ub2e4.",
"role": "user"
},
{
"content": "\uc54c\uaca0\uc2b5\ub2c8\ub2e4. \uccab \ubc88\uc9f8\ub85c requirements.txt\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",
"role": "assistant"
}
]
}
{
"action": "compact",
"compacted_turns": [
{
"_is_summary": true,
"content": "[Summary] Python \uc6f9 \ud06c\ub864\ub7ec \ud504\ub85c\uc81d\ud2b8. BeautifulSoup+requests \uc2a4\ud0dd\uc73c\ub85c \uc9c4\ud589 \uacb0\uc815. requirements.txt \uc791\uc131 \uc911.",
"role": "system"
},
{
"_pin_reasons": [
"decision_expression"
],
"_pinned": true,
"content": "\uadf8\uac78\ub85c \uc9c4\ud589\ud558\uaca0\uc2b5\ub2c8\ub2e4.",
"role": "user"
},
{
"_pinned": false,
"content": "\uc54c\uaca0\uc2b5\ub2c8\ub2e4. \uccab \ubc88\uc9f8\ub85c requirements.txt\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",
"role": "assistant"
}
],
"stats": {
"compacted_tokens_approx": 60,
"compacted_turns": 3,
"compression_ratio": 0.5,
"dropped_turns": 3,
"original_tokens_approx": 120,
"original_turns": 6,
"pinned_turns": 1
}
}
결정/확정 표현이 포함된 turns를 우선 보존합니다.
{
"action": "extract_decisions",
"target_tokens": 500,
"turns": [
{
"content": "\ubc30\ud3ec \ud658\uacbd\uc744 \uacb0\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.",
"role": "user"
},
{
"content": "AWS EC2\uc640 Lightsail \uc911 \uc5b4\ub5a4 \uac83\uc774 \uc88b\uc744\uae4c\uc694?",
"role": "assistant"
},
{
"content": "Lightsail\ub85c \ud655\uc815\ud569\ub2c8\ub2e4. \ube44\uc6a9\uc774 \uc800\ub834\ud558\ub124\uc694.",
"role": "user"
},
{
"content": "\uc54c\uaca0\uc2b5\ub2c8\ub2e4. Lightsail $7/\uc6d4 \ud50c\ub79c\uc73c\ub85c \uc9c4\ud589\ud558\uaca0\uc2b5\ub2c8\ub2e4.",
"role": "assistant"
}
]
}
{
"action": "extract_decisions",
"decisions": [
{
"content_excerpt": "Lightsail\ub85c \ud655\uc815\ud569\ub2c8\ub2e4. \ube44\uc6a9\uc774 \uc800\ub834\ud558\ub124\uc694.",
"decision_signals": [
"\ud655\uc815"
],
"role": "user",
"turn_index": 2
},
{
"content_excerpt": "\uc54c\uaca0\uc2b5\ub2c8\ub2e4. Lightsail $7/\uc6d4 \ud50c\ub79c\uc73c\ub85c \uc9c4\ud589\ud558\uaca0\uc2b5\ub2c8\ub2e4.",
"decision_signals": [
"\uc54c\uaca0\uc2b5\ub2c8\ub2e4"
],
"role": "assistant",
"turn_index": 3
}
]
}
UUID, URL, 파일 경로 등 식별자를 포함한 turns를 추출합니다.
{
"action": "extract_identifiers",
"turns": [
{
"content": "\uc2a4\ud0ac ID\ub294 471349fc-cfb2-4f59-9dbc-e57bf53ca841 \uc785\ub2c8\ub2e4.",
"role": "assistant"
},
{
"content": "https://aiskillstore.io/skills/471349fc \ud398\uc774\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694.",
"role": "user"
},
{
"content": "\ud30c\uc77c\uc740 /opt/skill-store/database/skill_registry.db \uc5d0 \uc788\uc2b5\ub2c8\ub2e4.",
"role": "assistant"
},
{
"content": "\uac10\uc0ac\ud569\ub2c8\ub2e4 \uc218\uace0\ud558\uc168\uc2b5\ub2c8\ub2e4.",
"role": "user"
}
]
}
{
"action": "extract_identifiers",
"identifiers": [
{
"identifier": "471349fc-cfb2-4f59-9dbc-e57bf53ca841",
"turn_index": 0,
"type": "uuid"
},
{
"identifier": "https://aiskillstore.io/skills/471349fc",
"turn_index": 1,
"type": "url"
},
{
"identifier": "/opt/skill-store/database/skill_registry.db",
"turn_index": 2,
"type": "file_path"
}
]
}
사용자 선호 표현을 감지하고 우선 보존합니다.
{
"action": "compact",
"preserve_last_n": 1,
"target_tokens": 100,
"turns": [
{
"content": "\uc800\ub294 \ud56d\uc0c1 TypeScript\ub97c \uc120\ud638\ud569\ub2c8\ub2e4.",
"role": "user"
},
{
"content": "\uc624\ub298 \ub0a0\uc528\uac00 \uc88b\ub124\uc694.",
"role": "user"
},
{
"content": "\ud14c\uc2a4\ud2b8\ub294 \ubc18\ub4dc\uc2dc pytest\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc2b5\ub2c8\ub2e4.",
"role": "user"
},
{
"content": "\ub124, TypeScript\uc640 pytest\ub85c \uc124\uc815\ud558\uaca0\uc2b5\ub2c8\ub2e4.",
"role": "assistant"
}
]
}
{
"action": "compact",
"compacted_turns": [
{
"_pin_reasons": [
"preference_expression"
],
"_pinned": true,
"content": "\uc800\ub294 \ud56d\uc0c1 TypeScript\ub97c \uc120\ud638\ud569\ub2c8\ub2e4.",
"role": "user"
},
{
"_pin_reasons": [
"preference_expression"
],
"_pinned": true,
"content": "\ud14c\uc2a4\ud2b8\ub294 \ubc18\ub4dc\uc2dc pytest\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc2b5\ub2c8\ub2e4.",
"role": "user"
},
{
"_pinned": false,
"content": "\ub124, TypeScript\uc640 pytest\ub85c \uc124\uc815\ud558\uaca0\uc2b5\ub2c8\ub2e4.",
"role": "assistant"
}
],
"stats": {
"compacted_tokens_approx": 60,
"compacted_turns": 3,
"compression_ratio": 0.75,
"dropped_turns": 1,
"original_tokens_approx": 80,
"original_turns": 4,
"pinned_turns": 2
}
}
target_tokens를 엄격히 적용하여 예산 초과 시 경고를 출력합니다.
{
"action": "compact",
"preserve_last_n": 1,
"target_tokens": 50,
"turns": [
{
"content": "\ub9e4\uc6b0 \uae34 \ub0b4\uc6a9\uc758 \uba54\uc2dc\uc9c0\uc785\ub2c8\ub2e4. \uc5ec\ub7ec \uac00\uc9c0 \ub17c\uc758 \uc0ac\ud56d\uc774 \uc788\uc2b5\ub2c8\ub2e4.",
"role": "user"
},
{
"content": "\uc774\uac83\ub3c4 \uae34 \uc751\ub2f5\uc785\ub2c8\ub2e4. \uc790\uc138\ud55c \uc124\uba85\uc774 \uc5ec\uae30 \uc788\uc2b5\ub2c8\ub2e4.",
"role": "assistant"
},
{
"content": "\ucd5c\uc885 \uacb0\uc815 \uc644\ub8cc\ud588\uc2b5\ub2c8\ub2e4.",
"role": "user"
}
]
}
{
"action": "compact",
"compacted_turns": [
{
"_is_summary": true,
"content": "[Summary] \ub17c\uc758 \ud6c4 \ucd5c\uc885 \uacb0\uc815 \uc644\ub8cc.",
"role": "system"
},
{
"_pin_reasons": [
"decision_expression"
],
"_pinned": true,
"content": "\ucd5c\uc885 \uacb0\uc815 \uc644\ub8cc\ud588\uc2b5\ub2c8\ub2e4.",
"role": "user"
}
],
"stats": {
"compacted_tokens_approx": 30,
"compacted_turns": 2,
"compression_ratio": 0.5,
"dropped_turns": 2,
"original_tokens_approx": 60,
"original_turns": 3,
"pinned_turns": 1
}
}
각 turn의 중요도를 0-1 점수로 계산합니다.
{
"action": "score_importance",
"target_tokens": 2000,
"turns": [
{
"content": "\ubc30\ud3ec \uc11c\ubc84 \uacb0\uc815: AWS Lightsail $7/\uc6d4\ub85c \ud655\uc815.",
"role": "user"
},
{
"content": "\uc74c... \uc7a0\uae50\ub9cc\uc694.",
"role": "user"
},
{
"content": "\uad00\ub828 \uc774\uc288: https://github.com/org/repo/issues/42",
"role": "assistant"
}
]
}
{
"action": "score_importance",
"importance_scores": [
{
"reasons": [
"decision_expression",
"has_identifiers",
"medium_length"
],
"role": "user",
"score": 0.9,
"turn_index": 0
},
{
"reasons": [
"very_short",
"filler_content"
],
"role": "user",
"score": 0.05,
"turn_index": 1
},
{
"reasons": [
"has_url_identifier"
],
"role": "assistant",
"score": 0.75,
"turn_index": 2
}
]
}
압축 시 결정/식별자가 보존되었는지 감사합니다.
{
"action": "audit",
"preserve_last_n": 0,
"target_tokens": 30,
"turns": [
{
"content": "API \ud0a4\ub294 \uc808\ub300 \ud558\ub4dc\ucf54\ub529\ud558\uc9c0 \uc54a\uae30\ub85c \uacb0\uc815\ud588\uc2b5\ub2c8\ub2e4.",
"role": "user"
},
{
"content": "\ub124, \ud658\uacbd\ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4.",
"role": "assistant"
},
{
"content": "\uc88b\uc544\uc694.",
"role": "user"
}
]
}
{
"action": "audit",
"audit_report": {
"decisions_dropped": 0,
"decisions_preserved": 1,
"identifiers_dropped": 0,
"identifiers_preserved": 0,
"warnings": []
}
}
All examples are also available via the agent API:
/v1/agent/skills/c91b868d-c7b0-4af1-8de9-7411aff8342a/schema
No reviews yet. Be the first to leave one!