file-save-protocol
npx skills add https://github.com/orientpine/honeypot --skill file-save-protocol
Agent 安装分布
Skill 文档
íì¼ ì ì¥ íë¡í ì½
Overview
ì´ ì¤í¬ì ë¶ì ìì´ì í¸ê° 결과를 íì¼ë¡ ì ì¥í ë ë°ë¼ì¼ íë ê·ì¹ì ì ìí©ëë¤.
íµì¬ 목í: ë¶ì ê²°ê³¼ì ììì± ë³´ì¥ ë° íê° ë°©ì§
1. íì¼ ì ì¥ íì ê·ì¹ (CRITICAL)
íê° ë°©ì§ì íµì¬: ë¶ì 결과를 ë°ëì íì¼ë¡ ì ì¥í´ì¼ í©ëë¤. í롬íí¸ë¡ë§ ë°ííë©´ ë°ì´í° ìì¤ ë° íê° ë°ì ìíì´ ììµëë¤.
ì íì¼ ì ì¥ì´ íìì¸ê°?
| 문ì | ì¤ëª |
|---|---|
| 컨í ì¤í¸ ìì¤ | 긴 ëíìì ì´ì ë¶ì ê²°ê³¼ê° ì릴 ì ìì |
| ì¬í ë¶ê° | íì¼ ìì´ë ë¶ì 결과를 ì¬ê²ì¦í ì ìì |
| íê° ìí | ì ì¥ ìì´ “ì ì¥ë¨”ì´ë¼ê³ ìëµíë©´ íê° |
| ìí¬íë¡ì° ì¤ë¨ | ë¤ì ìì´ì í¸ê° ì ë ¥ íì¼ì ì°¾ì§ ëª»í¨ |
íì ì¬í (MUST)
- 모ë ë¶ì ê²°ê³¼ë
Writeëêµ¬ë¡ íì¼ ì ì¥ - ì ì¥ ê²½ë¡ë coordinatorê° ì ê³µíë
output_pathì¬ì© - ì ì¥ ì±ê³µ ì¬ë¶ íì¸ í ìëµ
- ì ì¥ ì¤í¨ ì ëª ìì FAIL ìëµ
ê¸ì§ ì¬í (NEVER)
- íì¼ ì ì¥ ìì´ ë¶ì ê²°ê³¼ “ì룔 ìëµ
- ì ì¥ ì¤í¨ë¥¼ 무ìíê³ ì§í
output_path무ìíê³ ìì ê²½ë¡ ì¬ì©
1.5 Markdown ì ì¥ ê·ì¹ (MANDATORY)
JSON ì ì¥ì íì íìì´ë©°, ì¬ëì´ ì½ê¸° ìí Markdown ìì½ë ë°ëì ì ì¥í©ëë¤.
íì ê·ì¹
- JSONê³¼ MD 모ë ì ì¥ (ë ì¤ íëë¼ë ëë½ ì FAIL)
- MDë JSON ë´ì©ì ìì½/ì ë¦¬ë§ ìí (ì ìì¹/ì ì¶ì² ì¶ê° ê¸ì§)
- íì¼ëª
ì ë²í¸ ì ëì´ ê³ ì :
{output_path}/{NN}-{base}.md(base = JSON íì¼ëª ìì.jsonì ê±°)- ì:
00-index-data.md
2. ì ì¥ íë¡ì¸ì¤
Step-by-Step
Step 1: ë¶ì ìë£ í JSON ê°ì²´ ìì±
Step 2: Write ëêµ¬ë¡ íì¼ ì ì¥
Write(
file_path="{output_path}/{filename}.json",
content=JSON.stringify(analysis_result, null, 2)
)
Step 3: ì ì¥ ì±ê³µ íì¸
ââ ì±ê³µ: ì ì ìëµ ë°í
ââ ì¤í¨: FAIL ìëµ ë°í (íê° ë°ì´í° ìì± ê¸ì§)
ì ì¥ ê²½ë¡ ì»¨ë²¤ì
coordinatorê° ì ê³µíë output_path를 ì¬ì©í©ëë¤:
portfolios/{session_folder}/{filename}
ìì:
portfolios/2026-01-14-aggressive-abc123/
âââ index-data.json # index-fetcher ì¶ë ¥
âââ rate-analysis.json # rate-analyst ì¶ë ¥
âââ sector-analysis.json # sector-analyst ì¶ë ¥
âââ risk-analysis.json # risk-analyst ì¶ë ¥
âââ leadership-analysis.json # leadership-analyst ì¶ë ¥
âââ material-summary.md # material-organizer ì¶ë ¥ (ìµì
ë)
âââ macro-outlook.json # macro-synthesizer ì¶ë ¥
âââ 00-macro-outlook.md # macro-synthesizer ì¶ë ¥
âââ 01-fund-analysis.md # fund-portfolio ì¶ë ¥
âââ 02-compliance-report.md # compliance-checker ì¶ë ¥
âââ 03-output-verification.md # output-critic ì¶ë ¥
âââ 04-portfolio-summary.md # portfolio-orchestrator ì¶ë ¥
ìì´ì í¸ë³ ì¶ë ¥ íì¼
| ìì´ì í¸ | ì¶ë ¥ íì¼ | íì |
|---|---|---|
| index-fetcher | index-data.json |
O |
| rate-analyst | rate-analysis.json |
O |
| sector-analyst | sector-analysis.json |
O |
| risk-analyst | risk-analysis.json |
O |
| leadership-analyst | leadership-analysis.json |
O |
| material-organizer | material-summary.md |
X (ìµì ë) |
| macro-synthesizer | macro-outlook.json, 00-macro-outlook.md |
O |
| fund-portfolio | 01-fund-analysis.md |
O |
| compliance-checker | 02-compliance-report.md |
O |
| output-critic | 03-output-verification.md |
O |
| portfolio-orchestrator | 04-portfolio-summary.md |
O |
3. ì ì¥ ì¤í¨ ì ìëµ
ì ì¥ì´ ì¤í¨íë©´ ì ë “ì ì¥ë¨”ì¼ë¡ ìëµíì§ ììµëë¤:
{
"status": "FAIL",
"error": "FILE_SAVE_FAILED",
"detail": "{filename} ì ì¥ ì¤í¨",
"attempted_path": "{output_path}/{filename}",
"action": "ì¬ìë íì"
}
ì¤í¨ ì íë³ ëì
| ì¤í¨ ì í | ì½ë | ëì |
|---|---|---|
| ê²½ë¡ ìì | PATH_NOT_FOUND |
coordinatorì ê²½ë¡ íì¸ ìì² |
| ê¶í ì¤ë¥ | PERMISSION_DENIED |
ê²½ë¡ ê¶í íì¸ |
| ëì¤í¬ ê³µê° | DISK_FULL |
ê³µê° íë³´ í ì¬ìë |
| ì ì ìì | UNKNOWN_ERROR |
ìë¬ ë©ìì§ í¬í¨íì¬ ë³´ê³ |
4. Write ë구 ì¬ì©ë²
기본 ì¬ì©ë²
Write(
file_path="portfolios/{session_folder}/rate-analysis.json",
content="{\"fed_outlook\": {...}, \"bok_outlook\": {...}}"
)
JSON í¬ë§·í
# ë¤ì¬ì°ê¸° 2칸ì¼ë¡ í¬ë§·í
JSON.stringify(analysis_result, null, 2)
íì¼ íì¥ì ê·ì¹
| ë°ì´í° ì í | íì¥ì |
|---|---|
| 구조íë ë°ì´í° | .json |
| ë§í¬ë¤ì´ ë³´ê³ ì | .md |
| ìì í ì¤í¸ | .txt |
5. ì ì¥ íì¸ ì²´í¬ë¦¬ì¤í¸ (MANDATORY)
ì ì¥ ì íì¸
-
output_pathê° coordinatorë¡ë¶í° ì ë¬ëìëê°? - ì ì¥í ë°ì´í°ê° ìì íê° (모ë íì íë í¬í¨)?
- JSON íìì´ ì¬ë°ë¥¸ê°?
ì ì¥ í íì¸
- Write ëêµ¬ê° ìë¬ ìì´ ìë£ëìëê°?
- ì ì¥ ê²½ë¡ë¥¼ ìëµì í¬í¨íëê°?
- ì ì¥ ì¤í¨ ì FAIL ìëµì ë°ííëê°?
ì ë ê¸ì§
- íì¼ ì ì¥ ì¤í¨ ì “ì ì¥ë ê²ì²ë¼” ìëµíì§ ììëê°?
- ì ì¥ ìì´ ë¶ì “ìë£”ë¡ ìëµíì§ ììëê°?
6. ìëµ í í릿
ì±ê³µ ì ìëµ
{
"status": "SUCCESS",
"output_file": "{output_path}/{filename}.json",
"summary": {
// ë¶ì ê²°ê³¼ ìì½
}
}
ì¤í¨ ì ìëµ
{
"status": "FAIL",
"error": "FILE_SAVE_FAILED",
"detail": "rate-analysis.json ì ì¥ ì¤í¨",
"attempted_path": "portfolios/2026-01-14-aggressive-abc123/rate-analysis.json",
"action": "ì¬ìë íì"
}
7. ì¸ì ì¬ê° ì íì¼ ê²ì¦ (v1.1 ì ê·)
목ì : ì¸ì ì¬ê° ì íì JSON íì¼ ì¡´ì¬ ì¬ë¶ íì¸ ì°¸ì¡°: portfolio-orchestrator ì¤í¬ì ì¸ì ì¬ê° ê²ì¦ ì¹ì
ì¸ì ì¬ê° ì coordinatorê° ìííë ê²ì¦
[Step -0.5: ì¸ì
ì¬ê° ê²ì¦]
â
â¼
Glob("portfolios/{session_folder}/*.json")
â
âââ íì íì¼ ëª©ë¡:
â âââ index-data.json
â âââ rate-analysis.json
â âââ sector-analysis.json
â âââ risk-analysis.json
â âââ leadership-analysis.json
â
ââ 모ë íì¼ ì¡´ì¬ â ë¤ì Step ì§í
â
ââ íì¼ ëë½ â í´ë¹ ìì´ì í¸ ì¬í¸ì¶
ìì´ì í¸ ì± ì
ê° ìì´ì í¸ë ë°ëì íì¼ ì ì¥ì ìë£í´ì¼ í©ëë¤:
| ì¡°ê±´ | ìì´ì í¸ íë |
|---|---|
| Write ì±ê³µ | ì ì ìëµ ë°í (output_file ê²½ë¡ í¬í¨) |
| Write ì¤í¨ | FAIL ë°í (íê° ë°ì´í° ìì± ê¸ì§) |
| output_path 미ì ë¬ | FAIL ë°í (ê²½ë¡ íì¸ ìì²) |
ê¸ì§ ì¬í (coordinator í¬í¨)
â íì¼ ì ì¥ ìì´ "ìë£" ìëµ
â ì´ì ì¸ì
ê²°ê³¼ "í
ì¤í¸ ìì½"ì¼ë¡ ëì²´
â JSON íì¼ ìì´ markdownë§ ìì±
â íì¼ ê²ì¦ ìì´ ë¤ì Step ì§í
ë©í ì ë³´
version: "1.1"
created: "2026-01-14"
updated: "2026-02-01"
purpose: "íì¼ ì ì¥ íë¡í ì½ íµí© - ì½ë ì¤ë³µ ì ê±°"
changes:
- "v1.1: ì¸ì
ì¬ê° ì íì¼ ê²ì¦ ì¹ì
ì¶ê° (Step -0.5 ì°ë)"
- "v1.0: ì´ê¸° ë²ì - íì¼ ì ì¥ íì ê·ì¹ ì ì"
consumers:
- index-fetcher
- rate-analyst
- sector-analyst
- risk-analyst
- leadership-analyst
- macro-synthesizer
- compliance-checker
- fund-portfolio
- output-critic
- material-organizer
extracted_from:
- "íì¼ ì ì¥ íì ì¹ì
(rate-analyst v4.2)"
- "ì ì¥ íë¡ì¸ì¤ ì¹ì
"
- "ì ì¥ ì¤í¨ ì ìëµ íì"
dependencies:
- Write
- Glob (coordinator ê²ì¦ì©)