퇴사하는 동료의 메시지와 문서로 만든 Distilly Person Profile 스킬
README 링크에서 발견 · 2 days ago
팀 동료의 판단력과 목소리를 재사용 가능한 에이전트 스킬로 증류했습니다.
What they did
시니어 팀원이 전근을 발표했을 때, 팀은 그녀의 머릿속에만 있던 업무 지식을 남기고 싶어 했다. 즉, 모호한 요청을 어떻게 범위로 정리했는지, 어떤 트레이드오프를 먼저 짚었는지, 고객에게 어떤 어조를 썼는지, 배포 전에 어떤 리뷰 체크리스트를 돌렸는지였다. 팀은 이미 디스크에 있던 자료를 모았다. 두 공유 채널에서 내보낸 Slack 스레드, 그녀가 작성한 디자인 문서와 포스트모템 폴더, 녹음된 온보딩 인터뷰 세 개, 그리고 그녀의 공개 컨퍼런스 발표 트랜스크립트였다. 이를 표준 creator skill과 함께 `distilly/` 디렉터리 아래 저장소에 넣었다. 팀은 그녀의 역할과 프로필이 다루길 원하는 결정들에 대한 짧은 설명을 작성한 뒤, distilly creator를 실행해 Agent Skill로 패키징된 Person Profile을 생성했다. 프로필은 원본 자료와 한 줄씩 대조해 검토했고, 근거 없는 주장은 잘라내고 인용은 유지했다. 그다음 결과물인 skill을 Codex에 설치해 코드 리뷰와 계획 관련 질문에 쓰고, Hermes에 설치해 그녀의 말투로 고객 대응 답변을 초안 작성하는 데 썼다. 실제 과거 결정 열 건으로 구성한 작은 eval 세트를 사용해 프로필의 답변이 그녀가 실제로 했던 일과 일치하는지 간단히 점검했다.
How it went
프로필은 수집 후 하루 만에 내부 스킬로 배포되었다. 그녀의 리뷰 체크리스트와 범위 설정 질문을 안정적으로 재현하며, 팀원들이 오프닝 문장을 다시 쓰지 않을 정도로 목소리에 가까운 초안을 작성한다. 프로필이 인용한 문서나 스레드를 명시하기 때문에 답변은 근거를 유지한다. 기록되지 않은 결정에 대해서는 눈에 띄게 약하며, 그녀인 척하지도 않는다 — 팀은 이를 권위가 아닌 참고 자료로 취급한다.
Worth knowing
품질은 전적으로 소스 자료에 달려 있습니다. 빈약하거나 한쪽으로 치우친 export는 평면적인 프로필을 만들어냅니다. 민감한 Slack 및 클라이언트 데이터는 무엇이든 커밋되기 전에 정제 작업(scrubbing pass)을 거쳐야 하며, 모델링 대상이 되는 사람의 동의는 형식적인 것이 아니라 실제 요구사항입니다. 팀의 관행이 바뀌면 프로필도 달라지므로 주기적으로 재증류(re-distillation)가 필요합니다. 설정은 Python 3.9+와 Agent Skills 검색을 지원하는 호스트를 전제로 합니다.
Wiring
정식 `distilly` 크리에이터 스킬을 레포 내에서 문자 그대로 `distilly`라는 이름의 디렉터리에 설치하세요. 호스트는 디렉터리 이름으로 스킬을 탐색하기 때문입니다. 원본 입력은 유형별(채팅 내보내기, 문서, 인터뷰, 공개 자료)로 묶어 형제 `sources/` 폴더에 보관하고, 절대 원본을 직접 편집하지 마세요. 해당 인물의 역할과 다룰 의사결정 영역을 짧게 서술한 설명과 함께 크리에이터를 실행하세요. 그러면 Agent Skill로 패키징된 Person Profile이 출력됩니다. 소스와 대조하여 프로필을 검토하고 인용되지 않은 주장은 제거하세요. 그런 다음 생성된 스킬을 각 호스트에 등록하세요. Codex는 로컬 스킬 탐색을 통해 이를 인식하고, Hermes도 같은 방식으로 로드하므로 동일한 프로필이 중복 없이 두 호스트 모두에 제공됩니다. 과거 의사결정에 대한 평가 세트는 `evals/`에 보관하고, 재증류(re-distillation) 후에는 항상 다시 실행하세요.
Try it yourself
# Distilly Person Profile: Build Plan for a Departing Teammate ## 1. Candidate Source Inventory **Exported chat threads** - Slack/Discord/Teams DM and channel exports where they were a primary participant - Threads where they made a call (approvals, "let's go with X", "no, because…") - Incident channels and design-review threads **Docs they authored** - Design docs, RFCs, ADRs - Runbooks and on-call notes - PR descriptions and review comments (often the richest decision trail) - Meeting notes they wrote **Interview transcripts** - Hiring loops they ran (shows calibration and standards) - Their own onboarding/exit interviews - Customer or user-research interviews they conducted **Public talks and writing** - Conference talks, slides, recordings - Blog posts, Dev.to/Hacker News/Reddit/Lobste.rs comments - Open-source PRs and issues on GitHub **Missing / likely gaps to chase down** - Verbal decisions never written down (ask for a 30-min brain dump before they leave) - Their personal notes app / scratchpad exports - Code review comments on repos you don't have access to - Any private DMs where real reasoning happened (get consent + export) - Performance-review self-assessments (HR-sensitive, see §3) - Recordings of meetings where they were the decision-maker ## 2. Proposed Folder Layout ``` distilly/ ├── raw/ # untouched sources, never edited │ ├── chat/ │ │ ├── slack-export-2024-01/ │ │ └── threads-curated.md │ ├── docs/ │ │ ├── rfcs/ │ │ ├── adrs/ │ │ └── runbooks/ │ ├── interviews/ │ │ ├── hiring-loops/ │ │ └── user-research/ │ ├── public/ │ │ ├── talks/ │ │ └── writing/ │ └── MANIFEST.md # what each file is, date, provenance ├── scrubbed/ # redacted copies safe to commit │ └── (mirrors raw/ structure) ├── profile/ # generated output only │ ├── role-and-decisions.md │ ├── voice-and-style.md │ └── eval-set.md └── README.md # what this is, consent note, retention ``` Keep `raw/` gitignored or in a private store; only `scrubbed/` and `profile/` get committed. ## 3. Files to Flag Before Committing Scrub or exclude anything matching: - **Credentials**: `.env`, `secrets.*`, config with API keys, chat pastes containing tokens, `~/.aws`, connection strings - **Customer PII**: support tickets, user-research transcripts with names/emails, CRM exports, logs with user IDs - **Private HR content**: performance reviews, comp discussions, PIPs, hiring debriefs with candidate names, exit-interview notes - **Legal/contract**: anything under NDA, vendor contracts, security incident postmortems with embargo Add a pre-commit check (e.g., `gitleaks` + a manual `scrubbed/` review) and a `MANIFEST.md` column marking each source `public | internal | restricted`. ## 4. Role-and-Decisions Brief for the Distilly Creator > **Who they were:** [Name], [role] on [team], [dates]. Owned [scope]. Primary decision-maker for [domains]. > > **Judgment calls to preserve:** > - How they scoped ambiguous problems (what they cut first, what they refused to cut) > - Their default tradeoff posture (ship vs. harden, build vs. buy, monolith vs. service) > - How they handled disagreement — when they overrode, when they deferred, and the signals they used > - Their bar for "done" and for "good enough to ship" > - How they prioritized when everything was urgent > - What they escalated vs. absorbed > - Their instincts on risk, rollback, and reversibility > > **Voice:** [direct/diplomatic], [terse/expansive], uses [examples/analogies/data]. Avoids [jargon/hedging]. > > **Do not infer:** anything about comp, performance, or personnel matters. ## 5. Ten Past Decisions for the Eval Set Pick real, dated decisions with a clear "what they chose and why." Suggested shape: 1. **Architecture**: chose [X] over [Y] for [service] — capture the reasoning and what they rejected. 2. **Build vs. buy**: decided to build [component] in-house rather than adopt [vendor]. 3. **Scope cut**: dropped [feature] to hit [deadline] — what they protected instead. 4. **Hiring bar**: rejected/advanced a candidate on [signal] — tests calibration. 5. **Incident call**: during [outage], chose [rollback vs. fix-forward] — tests risk posture. 6. **Tech debt**: deferred vs. paid down [debt] — tests prioritization. 7. **Process**: introduced or killed [process] — tests how they weigh overhead. 8. **Cross-team conflict**: sided with [team A] over [team B] on [issue] — tests disagreement handling. 9. **Tooling/stack**: adopted [TypeScript/Python/LangChain/MCP/RAG approach] for [reason] — tests technical taste. 10. **Escalation**: escalated vs. absorbed [problem] — tests judgment on ownership. For each, store: the situation, the options, what they chose, their stated reasoning, and 2–3 "acceptable answer" variants so the eval checks reasoning, not exact wording. Want me to draft the `MANIFEST.md` template and a scrub checklist next?