curl -L -o workflow-state-tracker.skill "https://aiskillstore.io/v1/agent/skills/727f2332-9470-439b-8bb0-83826c59dd63/download?platform=ClaudeCode"
{
"tool": "download_skill",
"arguments": {
"skill_id": "727f2332-9470-439b-8bb0-83826c59dd63",
"platform": "ClaudeCode"
}
}
{
"mcpServers": {
"skill-store": {
"url": "https://aiskillstore.io/mcp/"
}
}
}
Deterministic JSON state machine for multi-step agent workflow tracking — checkpoint, restore, and failure recovery without LLM hallucination
Compatible Platforms any
🚨 Security risks detected:
Findings: ["메타데이터 경고: 권장 필드 없음: 'tags' (SKILL.md v2 권장)", "메타데이터 경고: 권장 필드 없음: 'requirements' (SKILL.md v2 권장)", "USK v3 경고: interface.runtime 'python3.11'이 권장 값이 아닙니다 (권장: ['python3', 'node', 'bash', 'binary', 'any'])", 'USK v3 경고: 이 스킬은 자동 변환 조건을 충족하지 않아 manual_install로 처리됩니다']
AI Review Stage
1. **권한 준수**: 스킬 메타데이터에 선언된 `permissions`는 `network: false`, `filesystem: true`, `subprocess: false`입니다. * `main.py` 코드에는 네트워크 통신을 수행하는 어떠한 코드도 포함되어 있지 않습니다. (`network: false` 준수) * `main.py`는 `os`, `pathlib`, `tempfile` 모듈을 사용하여 JSON 상태 파일을 읽고 쓰는 기능을 수행합니다. 이는 `filesystem: true` 권한과 스킬의 핵심 기능에 부합합니다. 파일 작업은 사용자 입력으로 제공되는 `state_path`에 한정되어 있어 임의의 시스템 파일에 접근하거나 손상시킬 위험이 없습니다. * `main.py` 코드에는 `subprocess` 모듈이나 `os.system`, `os.popen`과 같은 외부 프로세스 실행 코드가 없습니다. (`subprocess: false` 준수) 2. **정적 분석 결과 검토**: 정적 분석에서 `tests/_test_local.py` 파일 내의 `subprocess.run` 사용이 플래그되었습니다. 그러나 이 파일은 스킬의 실제 실행 코드(`main.py`)가 아닌 테스트 스크립트이므로, 스킬의 런타임 보안에는 영향을 미치지 않는 오탐(false positive)으로 판단됩니다. 3. **악의적 목적 코드 부재**: 데이터 탈취, 시스템 파괴, 코드 난독화 등 악의적인 목적으로 의심될 만한 코드는 발견되지 않았습니다. 코드는 명확하며 선언된 워크플로우 상태 추적 기능을 충실히 구현하고 있습니다. 4. **사용자 데이터 처리**: 스킬은 표준 입력을 통해 워크플로우 상태 데이터를 받아들이고, 사용자가 지정한 파일 경로에 이를 저장합니다. 사용자 데이터를 무단으로 수집하거나 외부로 전송하는 행위는 발견되지 않았습니다. 5. **코드 품질**: 제공된 코드 스니펫은 데이터 무결성을 위한 원자적 파일 쓰기(`_write_state_atomic`)와 명확한 오류 처리 등 좋은 코딩 관행을 보여줍니다. 스킬의 목적에 부합하는 견고한 구현으로 판단됩니다. 이러한 분석을 바탕으로 해당 스킬은 안전하며 배포에 적합하다고 판단됩니다.
Representative input/output examples for this skill. Agents can use these to understand how to invoke the skill and what output to expect.
Initialize a 4-step ETL workflow
{
"action": "init",
"state_path": "/tmp/etl_state.json",
"steps": [
"fetch",
"parse",
"validate",
"save"
],
"workflow_id": "etl-job-001"
}
{
"completed": [],
"current_step_index": 0,
"next_step": "fetch",
"remaining": [
"fetch",
"parse",
"validate",
"save"
],
"status": "running",
"workflow_id": "etl-job-001"
}
Advance fetch step and move to parse
{
"action": "advance",
"current_step": "fetch",
"state_path": "/tmp/etl_state.json",
"step_data": {
"rows_fetched": 1500,
"source": "api"
},
"workflow_id": "etl-job-001"
}
{
"completed": [
"fetch"
],
"current_step_index": 1,
"next_step": "parse",
"remaining": [
"parse",
"validate",
"save"
],
"status": "running",
"step_data_saved": true,
"workflow_id": "etl-job-001"
}
Save checkpoint to disk then restore state from file
{
"action": "checkpoint",
"state_path": "/tmp/etl_state.json",
"step_data": {
"partial_rows": 750,
"progress_pct": 50
},
"workflow_id": "etl-job-001"
}
{
"checkpoint_at": "2026-06-04T10:30:00",
"file_size": 412,
"workflow_id": "etl-job-001"
}
Mark parse step as failed then resume from that step
{
"action": "fail",
"current_step": "parse",
"error_info": {
"code": "PARSE_ERROR",
"message": "Unexpected null in column 3",
"row": 42
},
"state_path": "/tmp/etl_state.json",
"workflow_id": "etl-job-001"
}
{
"error_info": {
"code": "PARSE_ERROR",
"message": "Unexpected null in column 3",
"row": 42
},
"failed_step": "parse",
"resumable": true,
"status": "failed",
"workflow_id": "etl-job-001"
}
Query current workflow progress
{
"action": "status",
"state_path": "/tmp/etl_state.json",
"workflow_id": "etl-job-001"
}
{
"completed": [
"fetch"
],
"current_step_index": 1,
"next_step": "parse",
"remaining": [
"parse",
"validate",
"save"
],
"status": "running",
"workflow_id": "etl-job-001"
}
Attempt to advance a completed workflow — raises INVALID_TRANSITION
{
"action": "advance",
"current_step": "save",
"state_path": "/tmp/etl_state_done.json",
"workflow_id": "etl-job-001"
}
{
"error": {
"code": "INVALID_TRANSITION",
"message": "Cannot advance workflow in status=completed. Allowed actions: status"
}
}
Workflow with Korean text in step data (UTF-8 support)
{
"action": "advance",
"current_step": "\ub370\uc774\ud130\uc218\uc9d1",
"state_path": "/tmp/report_state.json",
"step_data": {
"\uba54\ubaa8": "\uc218\uc9d1 \uc644\ub8cc, \uc774\uc0c1 \uc5c6\uc74c",
"\ucd9c\ucc98": "\uacf5\uacf5\ub370\uc774\ud130\ud3ec\ud138",
"\ud56d\ubaa9\uc218": 250
},
"workflow_id": "\ubcf4\uace0\uc11c-\uc791\uc131-001"
}
{
"completed": [
"\ub370\uc774\ud130\uc218\uc9d1"
],
"current_step_index": 1,
"next_step": "\ubd84\uc11d",
"status": "running",
"step_data_saved": true,
"workflow_id": "\ubcf4\uace0\uc11c-\uc791\uc131-001"
}
All examples are also available via the agent API:
/v1/agent/skills/727f2332-9470-439b-8bb0-83826c59dd63/schema
No reviews yet. Be the first to leave one!