curl -L -o memory-bank.skill "https://aiskillstore.io/v1/agent/skills/df99b696-dbd0-46ff-b155-5843a4fc18d5/download?platform=ClaudeCode"
{
"tool": "download_skill",
"arguments": {
"skill_id": "df99b696-dbd0-46ff-b155-5843a4fc18d5",
"platform": "ClaudeCode"
}
}
{
"mcpServers": {
"skill-store": {
"url": "https://aiskillstore.io/mcp/"
}
}
}
Persistent key-value memory store with tags and FTS5 full-text search for agents across sessions. SQLite + trigram tokenizer. Zero external dependencies.
Compatible Platforms any
Findings: ["메타데이터 경고: 권장 필드 없음: 'requirements' (SKILL.md v2 권장)", 'USK v3 경고: 이 스킬은 자동 변환 조건을 충족하지 않아 manual_install로 처리됩니다']
✅ No security risks found.
AI Review Stage
제공된 스킬 메타데이터와 코드 파일을 종합적으로 분석한 결과, 'memory-bank' 스킬은 다음과 같은 이유로 안전하다고 판단됩니다. 1. **권한 일치 및 준수:** * 메타데이터에 선언된 `permissions.network: false`와 `permissions.subprocess: false`는 코드에서 완벽하게 준수됩니다. 어떠한 외부 네트워크 통신 시도(`socket`, `requests` 등)나 서브프로세스 실행(`subprocess` 모듈 사용)도 발견되지 않았습니다. * `permissions.filesystem: true`는 SQLite 데이터베이스 파일(`db_path`)을 생성, 읽기, 쓰기, 삭제하는 데 필요한 `os` 모듈 함수(`os.path.dirname`, `os.path.exists`, `os.access`, `os.path.getsize`) 및 `sqlite3.connect` 사용으로 제한됩니다. 이는 스킬의 핵심 기능인 영구 메모리 저장소 구현에 필수적인 접근이며, 임의의 시스템 파일을 조작하려는 시도는 없습니다. `db_path`는 에이전트가 명시적으로 제공해야 하므로, 스킬 자체의 취약점이라기보다는 에이전트의 설정 문제로 볼 수 있습니다. 2. **악의적 코드 부재:** * 데이터 탈취: 네트워크 접근이 없으므로 외부로 데이터를 전송할 수 없습니다. 데이터는 에이전트가 지정한 로컬 SQLite 파일에만 저장됩니다. * 시스템 파괴: 스킬은 오직 지정된 SQLite 파일에만 접근하며, 파일 시스템 내 다른 영역을 손상시키거나 삭제하려는 시도는 없습니다. * 난독화: 코드는 명확하고 가독성이 높으며, 난독화된 부분은 전혀 없습니다. * SQL 인젝션: 모든 데이터베이스 쿼리는 `sqlite3` 모듈의 파라미터 바인딩(`?` 플레이스홀더)을 사용하여 구현되어, SQL 인젝션 공격에 대해 안전합니다. 3. **외부 통신 부재:** * `network: false` 선언과 일치하게, 어떠한 형태의 선언되지 않은 외부 통신도 발견되지 않았습니다. 4. **사용자 데이터 무단 수집/전송 부재:** * 스킬은 에이전트가 제공하는 데이터를 로컬 SQLite 데이터베이스에 저장할 뿐, 이 데이터를 무단으로 수집하거나 외부로 전송하지 않습니다. 5. **코드 품질:** * 코드는 잘 구조화되어 있고, 주석이 충분하며, Python 표준 라이브러리만을 사용하여 'Zero external dependencies'라는 설명과 일치합니다. * 오류 처리 로직이 명확하게 구현되어 있습니다. * SQLite의 FTS5(trigram tokenizer 포함) 및 JSON 함수를 활용하여 효율적이고 안전한 데이터 저장 및 검색 기능을 제공합니다. * 제공된 테스트 코드(`tests/_test_local.py`)는 스킬의 다양한 기능을 검증하고 있어, 높은 코드 품질과 안정성을 시사합니다. 정적 분석 결과의 'caution' 상태는 구체적인 'red_flags_found'나 'obfuscation_warnings' 없이 표시되었으며, 수동 코드 검토 결과 실제 보안 위험 요소는 발견되지 않았습니다. 따라서 이 스킬은 안전하게 배포될 수 있습니다.
Representative input/output examples for this skill. Agents can use these to understand how to invoke the skill and what output to expect.
Create a new SQLite memory bank at the specified path. Safe to call on existing DB (idempotent).
{
"action": "init",
"db_path": "/tmp/agent_memory.db"
}
{
"db_path": "/tmp/agent_memory.db",
"fts_enabled": true,
"table_created": true
}
Store a string value under a key with tags for classification.
{
"action": "save",
"db_path": "/tmp/agent_memory.db",
"key": "user_preference_language",
"tags": [
"preference",
"user"
],
"value": "Korean"
}
{
"is_update": false,
"key": "user_preference_language",
"saved_at": "2026-06-04T10:00:00Z",
"tags": [
"preference",
"user"
]
}
Store a structured dict (serialized to JSON internally) and retrieve it deserialized.
{
"action": "save",
"db_path": "/tmp/agent_memory.db",
"key": "project_config",
"tags": [
"config",
"project"
],
"value": {
"env": "production",
"name": "skill-store",
"port": 5100
}
}
{
"is_update": false,
"key": "project_config",
"saved_at": "2026-06-04T10:01:00Z",
"tags": [
"config",
"project"
]
}
Search stored memories using FTS5 BM25 ranking. Returns ranked snippets.
{
"action": "search",
"db_path": "/tmp/agent_memory.db",
"limit": 5,
"query": "production config"
}
{
"query": "production config",
"results": [
{
"key": "project_config",
"relevance": 0.92,
"snippet": "Matched entry containing production environment configuration",
"tags": [
"config",
"project"
]
}
],
"total": 1
}
Store a Korean-language memory and retrieve it with Korean query via trigram FTS5 tokenizer.
{
"action": "save",
"db_path": "/tmp/agent_memory.db",
"key": "meeting_notes_20260604",
"tags": [
"meeting",
"korean",
"decision"
],
"value": "\uc624\ub298 \ud68c\uc758\uc5d0\uc11c \ubc30\ud3ec \uc77c\uc815\uc744 \ub0b4\uc77c\ub85c \uacb0\uc815\ud588\ub2e4. \ub2f4\ub2f9\uc790\ub294 \uae40\ud300\uc7a5."
}
{
"is_update": false,
"key": "meeting_notes_20260604",
"saved_at": "2026-06-04T10:02:00Z",
"tags": [
"meeting",
"korean",
"decision"
]
}
Search Korean-language memory. Trigram tokenizer handles CJK text without word boundaries.
{
"action": "search",
"db_path": "/tmp/agent_memory.db",
"limit": 10,
"query": "\ubc30\ud3ec \uc77c\uc815"
}
{
"query": "\ubc30\ud3ec \uc77c\uc815",
"results": [
{
"key": "meeting_notes_20260604",
"relevance": 0.88,
"snippet": "Korean meeting notes mentioning deployment schedule decision",
"tags": [
"meeting",
"korean",
"decision"
]
}
],
"total": 1
}
Saving to an existing key overwrites the value and updates updated_at. is_update flag signals this was an overwrite.
{
"action": "save",
"db_path": "/tmp/agent_memory.db",
"key": "user_preference_language",
"tags": [
"preference",
"user",
"updated"
],
"value": "English"
}
{
"is_update": true,
"key": "user_preference_language",
"saved_at": "2026-06-04T11:00:00Z",
"tags": [
"preference",
"user",
"updated"
]
}
List all memory entries that have a specific tag. Useful for browsing organized memory.
{
"action": "list",
"db_path": "/tmp/agent_memory.db",
"limit": 20,
"tag_filter": [
"decision"
]
}
{
"items": [
{
"key": "meeting_notes_20260604",
"tags": [
"meeting",
"korean",
"decision"
],
"updated_at": "2026-06-04T10:02:00Z"
}
],
"total": 1
}
Delete a memory entry, then attempt to get it to verify deletion returns KEY_NOT_FOUND error.
{
"action": "delete",
"db_path": "/tmp/agent_memory.db",
"key": "user_preference_language"
}
{
"deleted": true,
"key": "user_preference_language"
}
Retrieve database-level statistics: total entries, file size, tag count, and age range.
{
"action": "stats",
"db_path": "/tmp/agent_memory.db"
}
{
"newest": "2026-06-04T11:00:00Z",
"oldest": "2026-06-04T10:00:00Z",
"tag_count": 7,
"total_items": 3,
"total_size_bytes": 65536
}
All examples are also available via the agent API:
/v1/agent/skills/df99b696-dbd0-46ff-b155-5843a4fc18d5/schema
No reviews yet. Be the first to leave one!