runtime-evidence-debugger
npx skills add https://github.com/strongorange/strong-orange-agent-skills --skill runtime-evidence-debugger
Agent 安装分布
Skill 文档
Runtime Evidence Debugger
When to Use
- ì½ë ì½ê¸°ë§ì¼ë¡ ìì¸ ì¶ì¸¡ì´ ì´ë ¤ì¸ ë
- ì´ì ìì ìëê° ë°íì ë°ì´í° ìì´ ì¤í¨íì ë
- ë¹ë기·ì´ë²¤í¸Â·íì´ë° ë²ê·¸ì¼ ë
ìë² ì ì ì¡°ê±´
POST http://127.0.0.1:7827 ìë²ê° ì¤í ì¤ì´ì´ì¼ íë¤.
body JSONì logFile ì ëê²½ë¡ì NDJSON í ì¤ append + CORS íì©.
ìë² êµ¬í ë°©ì(Docker ë±)ì 무ê´íë©°, skill ë´ìì ìë²ë¥¼ ììíì§ ìëë¤.
ìë² ì¤í ë°©ë²ì ì´ ì¤í¬ì server/README.md 참조.
Step 0: ìë² íì¸ (ì¤í¨ ì ì¦ì ì¤ë¨)
curl -s -o /dev/null -w "%{http_code}" -X POST http://127.0.0.1:7827 --max-time 2
200ì´ ìëë©´ ì¬ì©ììê² ìë² ë¯¸ì¤í ìë´ í ì¦ì ì¤ë¨.
ì¸ì ìí íì (ì´í 모ë ë¨ê³ìì ê³ ì ):
- SESSION_ID:
Date.now().toString(36).slice(-6)(ì:a3f9c1) - LOG_FILE:
{projectRoot}/.cursor/debug-{SESSION_ID}.log
Step 1: ê°ì¤ ì립
ì½ë를 먼ì ì½ëë¤. 3â5ê° ê°ì¤, ê°ê° hypothesisId ë¶ì¬ (A, B, Câ¦).
ë¨ í ë²ì ì¬íì¼ë¡ 모ë ê°ì¤ì ëìì ê²ì¦í ì ìëë¡ ë¡ê·¸ ë°°ì¹ ì¤ê³.
Step 2: ê³ì¸¡ ì½ì
ë¡ê·¸ ê°ì: ìµì 1ê° íì · ìµë 10ê° Â· ì¼ë° 2â6ê°
ê° ë¡ê·¸ë ë°ëì íë ì´ìì hypothesisIdì 매í.
ë°°ì¹ ì°ì ìì:
- ìì¬ í¨ì ì§ì (íë¼ë¯¸í° í¬í¨)
- ìì¬ í¨ì ì¢ ë£ (ë°íê° í¬í¨)
- íµì¬ ì°ì° ì í ê°
- ë¶ê¸° ì¤í ê²½ë¡
- ììì¹ ëª»í ì´ë²¤í¸ í¸ë¤ë¬
- ìí ë³ê²½ ì í
모ë ë¡ê·¸ë¥¼ #region agent log / #endregionì¼ë¡ ê°ì¼ë¤.
JS/TS â ë¸ë¼ì°ì ·Node.js (fetch):
// #region agent log
fetch('http://127.0.0.1:7827',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({logFile:'LOG_FILE',sessionId:'SESSION_ID',runId:'debug',hypothesisId:'A',location:'file.ts:LINE',message:'ì¤ëª
',data:{key:val,stack:new Error().stack?.split('\n').slice(1,5)},timestamp:Date.now()})}).catch(()=>{});
// #endregion
Python·Go ë± ìë²ì¬ì´ë (ì§ì íì¼ append, ìë² ë¶íì):
# #region agent log
import json,time,traceback
with open('LOG_FILE','a') as f: f.write(json.dumps({'logFile':'LOG_FILE','sessionId':'SESSION_ID','runId':'debug','hypothesisId':'A','location':'file.py:LINE','message':'ì¤ëª
','data':{'key':val,'stack':traceback.format_stack()[-3:]},'timestamp':int(time.time()*1000)})+'\n')
# #endregion
íì´ë¡ë íì íë:
| íë | ê° |
|---|---|
logFile |
LOG_FILE ì ëê²½ë¡ |
sessionId |
SESSION_ID |
runId |
"debug" (ì´ê¸°) / "post-fix" (ê²ì¦) |
hypothesisId |
"A" ~ "E" |
location |
"íì¼ëª
:ì¤ë²í¸" |
stack |
ì½ ì¤í ì¬ë¼ì´ì¤ |
timestamp |
ms |
Step 3: ë¡ê·¸ íì¼ ìì â ì¬í ìì²
delete_fileëêµ¬ë¡ LOG_FILE ìì â shell rm/touch ê¸ì§- ë¤ë¥¸ ì¸ì ì ë¡ê·¸ íì¼ì ê±´ëë¦¬ì§ ìëë¤
- ìëµ ë§ì§ë§ì
<reproduction_steps>ë¸ë¡ íì:
<reproduction_steps>
1. [ì¸í°íì´ì¤ 무ê´í ì¬í ì§ì¹¨]
...
N. Press Proceed/Mark as fixed when done.
</reproduction_steps>
ê·ì¹: “click” ê¸ì§ · “doneì´ë¼ê³ ëµí´ì£¼ì¸ì” ê¸ì§ · ì¸í°íì´ì¤ ë¶ê¸° ê¸ì§ · ì± ì¬ìì íì ì ëª ì
Step 4: ë¡ê·¸ ë¶ì
LOG_FILE ì½ê¸°. ê° ê°ì¤ íì :
| ê°ì¤ | íì | 근거 (ë¡ê·¸ ë¼ì¸ ì¸ì©) |
|---|---|---|
| A | CONFIRMED | ⦠|
| B | REJECTED | ⦠|
íìì¤í¬íë¡ ì¸ê³¼ ê´ê³ íìë¼ì¸ ì¬êµ¬ì±.
LOG_FILEì´ ë¹ì´ìê±°ë ìì¼ë©´: ì¬í ì¤í¨ ê°ë¥ì± ìë´ í ì¬ìë ìì².
모ë ê°ì¤ì´ REJECTEDì´ë©´: ìì ê¸ì§. ë¤ë¥¸ ìë¸ìì¤í ìì ì ê°ì¤ ìì± + ì¶ê° ê³ì¸¡.
Step 5: ìì
- CONFIRMED ê°ì¤ì ëí´ìë§, ìµì ë²ìë¡ ìì
- ê³ì¸¡ ì½ë ì ì§ (ê²ì¦ ì ì ê±° ê¸ì§)
- REJECTED ê°ì¤ ì½ë ë³ê²½ ì¦ì ëë림
Step 6: ìì ê²ì¦
delete_fileë¡ LOG_FILE ìì - 모ë ê³ì¸¡
runIdâ"post-fix" <reproduction_steps>ë¸ë¡ê³¼ í¨ê» ì¬í ìì²- LOG_FILE ì½ê¸° â í¹ì ë¡ê·¸ ë¼ì¸ ì¸ì©ì¼ë¡ ì±ê³µ 근거 ì ì (ì¸ì© ìë ì±ê³µ ì ì¸ ê¸ì§)
ì¤í¨ ì: í´ë¹ ê°ì¤ ì½ë ë³ê²½ ëë림 â ë¤ë¥¸ ìë¸ìì¤í ìì ì ê°ì¤ ìì±.
Step 7: ì 리
ì¬ì©ì íì¸ íìë§:
- 모ë
#region agent log/#endregionë¸ë¡ ì ê±° delete_fileë¡ LOG_FILE ìì
Critical Constraints
- ë°íì ì¦ê±° ìì´ ìì ê¸ì§
- REJECTED ê°ì¤ ì½ë ë³ê²½ ì¦ì ëë림 (ë°©ì´ì ê°ë ëì ê¸ì§)
- ê³ì¸¡ì ê²ì¦ ìë£ ì ê¹ì§ ì ë ì ê±° ê¸ì§
setTimeout/sleepì í½ì¤ë¡ ì¬ì© ê¸ì§- shell rm/touch ê¸ì§ â ë¡ê·¸ íì¼ ì¡°ìì
delete_fileëêµ¬ë§ - ì±ê³µ ì ì¸ ì í¹ì ë¡ê·¸ ë¼ì¸ ì¸ì© íì