collab-proof – skill Dữ liệu & Khoa học cho agent AI
Dùng khi bạn muốn hiểu Claude đã đóng góp gì so với phần bạn dẫn dắt trong một phiên làm việc. Kích hoạt khi: /collab-proof, nhìn lại phiên làm việc, phân tích đóng góp của AI, bằng chứng cộng tác, Claude đã làm gì.
Cài skill collab-proof bằng một lệnh
Chọn công cụ bạn đang dùng, copy lệnh và dán vào terminal. Skill sẽ nằm trong thư mục skills của công cụ đó và sẵn sàng dùng ở phiên làm việc tiếp theo.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/collab-proof-87518.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /collab-proof – rồi mô tả công việc bạn muốn làm.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/collab-proof-87518.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $collab-proof – rồi mô tả công việc bạn muốn làm.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/collab-proof-87518.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /collab-proof – rồi mô tả công việc bạn muốn làm.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/collab-proof-87518.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /collab-proof – rồi mô tả công việc bạn muốn làm.
Nội dung SKILL.md
Nội dung SKILL.md gốc bằng tiếng Anh.
collab-proof
Surfaces AI collaboration evidence the developer didn't consciously record.
Vela 3-layer pipeline × ADHD 4-frame reasoning — prompt-native, zero dependencies.
---
Layer 01 — Signal detection
Run git log --oneline -10 and git diff --stat HEAD~3..HEAD first.
Classify signal level using this rubric (pick the highest that matches):
HIGH → full artifacts (DECISIONS.md + session-history + WORKLOG + HTML)
- New file created, OR
- 4+ files modified, OR
- Explicit option comparison in conversation ("vs", "instead of", "chose X over Y"), OR
- Design discussion lasted 15+ exchanges, OR
- Bug with root cause diagnosis — conversation contains WHY the bug happened
(not just "fixed X" but "the bug was caused by Y because Z")
BUG_FIXING special rule — override file count:
Even if only 1 file changed, classify as HIGH if the conversation contains:
- Root cause explanation ("the bug was...", "this happened because...", "the issue is...")
- Diagnosis process ("I checked...", "turned out...", "the problem was...")
- Fix rationale ("chose this approach because...", "instead of X, used Y because...")
File count doesn't matter for bugs — a well-diagnosed single-file fix is more valuable
than a 10-file feature with no discussion.
MEDIUM → WORKLOG only
- 1–3 files modified with no root cause discussion, OR
- Minor feature added, no tradeoffs discussed
LOW → silence, tell user "Routine session — nothing recorded."
- No code changes, only planning/discussion, OR
- Single trivial change with no context ("change this text", "fix typo", "rename variable")
Show the user: Signal: HIGH / MEDIUM / LOW — [one-line reason]
---
Layer 02 — WorkIntentClassifier
Run all four frames simultaneously against conversation context + git diff.
Score each frame 0.0–1.0 using the rubric below. Then apply pruning and classification rules.
Frame scoring rubric
Frame A — Technical (code churn complexity)
1.0New module/file created, complex logic added (state machine, Lua script, novel algorithm)0.5Existing function logic modified, simple API endpoint added0.1Typo fix, comment change, plain text edit
Frame B — Uncertainty (developer doubt signals)
1.0Code written then fully rolled back, explicit doubt expressed ("이게 맞나?", "동작 안 하네"),git revert0.5Advice sought from Claude mid-implementation, 2+ revision requests on same area0.0Uninterrupted directive execution — developer knew exactly what to build
Frame C — Fork (decision branch presence)
1.0Two or more alternatives explicitly compared in conversation (A vs B)0.5No explicit comparison but tradeoff mentioned (performance vs readability)0.0Single standard approach applied, no alternatives considered
Frame D — AI contribution (Claude's actual impact)
1.0Claude identified a bug/edge case the developer hadn't noticed and proposed the fix0.6Claude generated structural boilerplate/skeleton that significantly accelerated execution0.2Claude reformatted or transcribed developer-directed code without independent contribution
---
Pruning rule
Prune any frame scoring < 0.4.
Exception — High-Speed Execution Guard:
If Frame A >= 0.8 AND Frame D >= 0.6, do NOT prune and do NOT silence the session,
even if Frame B = 0.0 and Frame C = 0.0.
This is a boilerplate-heavy FEATURE_BUILDING session. Classify immediately as FEATURE_BUILDING with HIGH signal.
Rationale: zero uncertainty in a fast-moving session is a feature, not a reason to discard it.
---
Intent classification
| Surviving frames | Dominant intent | Meaning |
|---|---|---|
| A high + D mid-high (B, C low) | FEATURE_BUILDING | High-velocity feature generation, Claude scaffolding |
| B high + A/D high | BUG_FIXING or STUCK | Active debugging or unresolved looping |
| C high + A high | REFACTORING or EXPLORING | Architecture exploration, weighing alternatives |
| All frames < 0.4 | FLOW_STATE or LOW | Routine typing, silence unless Layer 01 was HIGH |
If multiple intents tie, pick the one with the highest combined frame score.
Record the runner-up — it belongs in the session narrative.
---
Internal output format
Before proceeding to Layer 03, resolve to this structure (show it to the user):
{
"frames": {
"technical": 0.0,
"uncertainty": 0.0,
"fork": 0.0,
"ai_contribution": 0.0
},
"pruned": ["list of pruned frame names"],
"intent": "FEATURE_BUILDING",
"signal": "HIGH",
"calibration_note": "one sentence explaining any exception rule applied"
}---
Layer 03 — Output
If HIGH signal
Append to DECISIONS.md — one entry per real fork (Frame C must confirm alternatives existed):
## [YYYY-MM-DD] <title>
**Context**: [Frame A — what forced this choice]
**Decision**: what was chosen
**Alternatives considered**: [Frame C — road not taken]
**Reasoning**: why — prefix "inferred:" if reconstructed from context
**AI contribution**:
- Identified: [Frame D — something developer missed]
- Suggested: [Frame D — approach or alternative]
- Developer-driven: [what the developer decided independently]
**Intent class**: [from Layer 02]
**Signal score**: HIGH
**Outcome**: implemented | pending | reversedIf no real fork existed → write nothing. Never fabricate decisions.
BUG_FIXING intent: use this format instead:
## [YYYY-MM-DD] <bug title>
**Root cause**: what actually caused the bug — the WHY, not just the what
**Symptom**: what the developer observed
**Fix**: what was changed
**Why this fix**: rationale — inferred if not stated explicitly
**Alternative fixes considered**: other approaches discussed (if any)
**AI contribution**:
- Identified: [Frame D — did Claude spot the root cause?]
- Suggested: [Frame D — fix approach or diagnostic step]
- Developer-driven: [what the developer diagnosed/decided independently]
**Intent class**: BUG_FIXING
**Signal score**: HIGH
**Outcome**: fixed | workaround | deferredCreate session-history/YYYY-MM-DD-HHMM.md:
# Session [YYYY-MM-DD HH:MM]
**Intent**: [class] (runner-up: [class if any])
**Signal**: HIGH
**Frames active**: A ([score]) / B ([score]) / C ([score]) / D ([score])
## What shipped
[grounded in git log]
## What was figured out
[Frame B + C — the reasoning, tradeoffs, debugging — what developers forget]
## Decisions made this session
[refs to DECISIONS.md entries]
## Where it got hard
[Frame B findings — uncertainty, reverts, EXPLORING/STUCK signals]
## AI contribution summary
[Frame D synthesis — one honest paragraph, calibrated]
## Next steps inferred
[what's obviously incomplete]Append to WORKLOG.md:
YYYY-MM-DD HH:MM | [intent] | HIGH | D:[score] | cache:[hit%]% | tok:[total] | <verb phrase> — <why it mattered>Fields:
D:[score]— Frame D AI contribution score (0.0–1.0)cache:[hit%]%— cache hit rate from token analysis (orcache:n/aif no data)tok:[total]— total tokens this session (input + cache_read + cache_create + output, in K e.g.45K)- verb phrase — what shipped, grounded in git log
Collect token usage (bash — run this and capture output):
python3 -c "
import json, sys
from pathlib import Path
projects = Path.home() / '.claude/projects'
files = sorted(projects.rglob('*.jsonl'), key=lambda f: f.stat().st_mtime, reverse=True)
if not files:
print('no_data'); sys.exit()
with open(files[0]) as fp:
lines = [json.loads(l) for l in fp if l.strip()]
ti = to = cr = cc = 0
turns = []
for i, line in enumerate(lines):
if line.get('type') == 'assistant':
u = line.get('message', {}).get('usage', {})
if not u: continue
inp = u.get('input_tokens', 0)
ti += inp; to += u.get('output_tokens', 0)
cr += u.get('cache_read_input_tokens', 0)
cc += u.get('cache_creation_input_tokens', 0)
prompt = ''
for j in range(i-1, -1, -1):
if lines[j].get('type') == 'user':
c = lines[j].get('message', {}).get('content', '')
prompt = (c if isinstance(c, str) else next((x.get('text','') for x in c if isinstance(x,dict) and x.get('type')=='text'), ''))[:80]
break
turns.append((inp, prompt))
total = ti + cr + cc
hit = cr / total * 100 if total else 0
print(f'input={ti} output={to} cache_read={cr} cache_create={cc} hit={hit:.0f} turns={len(turns)}')
turns.sort(reverse=True)
for idx, (tok, p) in enumerate(turns[:3]):
print(f'top{idx+1}={tok}|{p}')
"Parse the output and include token stats in the session narrative. Then:
Generate session-history/YYYY-MM-DD-HHMM-proof.html — write a self-contained HTML file. Structure and class names are fixed — do not rename or reorder sections.
Fixed CSS tokens (use exactly):
- Background:
#0d1117, Card:#161b22, Border:#30363d - Font:
font-family: 'Courier New', monospace - Frame score colors:
high→ `#3
… (nội dung đầy đủ có trong gói tải về)
Skill liên quan
- flash-attention – Tăng tốc huấn luyện và suy luận transformer với chuỗi dài.
- azure-ai-ml-py – SDK Azure Machine Learning v2 cho Python. Dùng cho workspace ML, job, model, dataset…
- mageck – Phân tích FASTQ đọc từ màn hình CRISPR gộp và ma trận đếm guide bằng MAGeCK, kiểm tra…
- marine-carbonate-chemistry – Giải bài toán hóa học carbonate nước biển bằng PyCO2SYS cho hóa học hải dương, axit hóa…
- hunt-nosqli – Săn lỗ hổng NoSQL Injection — MongoDB operator injection ($where, $regex, $gt, $ne)…
- market-research-reports – Xây dựng báo cáo nghiên cứu thị trường có thể truy xuất bằng chứng và mô hình quy mô thị…
- grounded-citations – Neo câu trả lời và tài liệu vào các nguồn có trích dẫn, có thể kiểm chứng.
- market-sizing-analysis – Tính TAM/SAM/SOM cho cơ hội thị trường theo các phương pháp top-down, bottom-up và lý…