colleague-distillation
$
npx mdskill add ZhixiangLuo/10xProductivity/colleague-distillationExtract a coworker's expertise into a reusable digital twin.
- Creates structured work knowledge and persona from workplace systems.
- Integrates with Slack, Jira, Confluence, Teams, and other tools.
- Uses API connections to avoid manual data export or pasting.
- Outputs merged skill files matching the colleague-skill convention.
SKILL.md
.github/skills/colleague-distillationView on GitHub ↗
---
name: colleague-distillation
description: Distill a colleague into a reusable AI skill (work + persona) using tool connections — Slack, Slack AI, Jira, GHE, Bitbucket, Confluence, SharePoint, Teams, Outlook, Notion, Linear, Google Docs, and more — without manual paste. Use when the user wants a colleague skill, digital twin of a coworker, or capture of someone's technical voice from workplace systems. Requires tool_connections + 10xProductivity verified_connections (or equivalent .env).
---
> **Canonical copy:** `~/git_repos/the-genesis/.genesis/skills/colleague-distillation/SKILL.md`. This file is a **mirror** for Claude Code; prefer editing Genesis first, then re-copy if needed.
# Colleague distillation (tool-backed)
## Purpose
Produce a **colleague skill**: structured **work knowledge** (systems, standards, review style) plus **persona** (tone, decisions, interpersonal habits), using **APIs and search** already wired in **tool_connections** / **10xProductivity** — not hand-pasted exports.
Output layout matches the open **[colleague-skill](https://github.com/titanwings/colleague-skill)** convention so results can coexist with that generator:
- `colleagues/{slug}/work.md`
- `colleagues/{slug}/persona.md`
- `colleagues/{slug}/meta.json`
- `colleagues/{slug}/SKILL.md` (merged invocable skill)
**Optional:** Clone colleague-skill for its `prompts/work_analyzer.md`, `persona_analyzer.md`, `work_builder.md`, `persona_builder.md` if you want identical extraction templates; this skill defines *what to fetch* and *where to write*.
---
## Prerequisites
1. Load **`tool_connections`** — `$GENESIS_DIRECTORY/.genesis/skills/tool_connections/SKILL.md`, or if `GENESIS_DIRECTORY` is unset use `~/git_repos/the-genesis/.genesis/skills/tool_connections/SKILL.md`.
2. Load **`~/git_repos/10xProductivity/verified_connections.md`** — only call tools listed there (or documented in `10xProductivity/tool_connections/` / `personal/`).
3. Load **`jira`** — `$GENESIS_DIRECTORY/.genesis/skills/jira/SKILL.md` or `~/git_repos/the-genesis/.genesis/skills/jira/SKILL.md` for all Jira JQL and REST.
4. **Credentials:** `source` or load **`~/git_repos/10xProductivity/.env`** (or project `.env`) before `curl` / scripts. Never commit secrets.
---
## Cursor vs Claude Code
| Environment | Where to put generated files | How this skill is loaded |
|-------------|------------------------------|---------------------------|
| **Cursor** | Repo root: `colleagues/{slug}/` (e.g. 10xProductivity or the-genesis) | `.cursor/skills/colleague-distillation/SKILL.md` |
| **Claude Code** | Same `colleagues/{slug}/` under the active project | `.claude/skills/colleague-distillation/SKILL.md` |
Use the **same** slug and folder layout in both; only the skill *install path* differs.
---
## Slug rules
- **Slug** = unique directory name: `michael_donnelly`, `michael_donnelly_2`, … (ASCII, underscores).
- **Collisions:** Same slug **overwrites** an existing colleague folder. Disambiguate with `_2`, `_3`, or a distinct codename.
- Store display name and aliases in **`meta.json`**, not only in the slug.
---
## Phase 1 — Resolve identity
Before searching, pin **who** the colleague is:
1. **Active Directory** (if configured in tool_connections): resolve **email**, **manager chain**, **department** — use for Jira/Slack account mapping when IDs are unknown.
2. **Slack**: From `verified_connections.md`, use Slack API recipes to resolve **`@handle` → user id** (`U…`) for `from:@user` / `from:U…` search syntax.
3. **Jira**: Resolve **accountId** (assignee, reporter, comment author) via Jira user search API — see `jira` skill.
Record: `slack_user_id`, `jira_account_id`, `email`, `ad_cn` (as available).
---
## Phase 2 — Pull source material (priority order)
Gather **raw excerpts** (save under `colleagues/{slug}/knowledge/raw/` as `.md` or `.json` snippets) with **source + URL/ticket/channel + date** in each chunk header. Cap volume per source (e.g. last 90–180 days) unless the user asks for full history.
### Tier A — Highest signal for “how they work and sound”
| Source | What to fetch | Why |
|--------|----------------|-----|
| **Slack** | `search.messages`: `from:user`, date range, `in:#relevant-channels`; thread URLs they participated in | Tone, decisions, pushback, on-call voice |
| **Slack AI** (Slackbot DM) | Targeted questions: e.g. “Summarize how [Name] argues for design decisions in threads about [topic]” | Fast synthesis over large Slack corpus |
| **Jira** | JQL: `assignee`, `reporter`, `comment ~`, component/team filters; descriptions, comments, status transitions | Work scope, prioritization, written precision |
| **GHE** | PRs **authored**, **reviewed** (`/pulls`, review comments API); issues filed | Code review voice, technical standards |
| **Bitbucket Server** | Same pattern as GHE when Bitbucket Server is the primary Git host | Same |
### Tier B — Depth and standards
| Source | What to fetch | Why |
|--------|----------------|-----|
| **Confluence** | Pages **created by** or **substantially edited by** them (CQL / search); team runbooks they own | Long-form standards, architecture voice |
| **Notion** | Pages they authored or commented on | Long-form async thinking, project context |
| **SharePoint** | Docs and wikis they own or edited | Standards docs, team handbooks |
### Tier C — Optional / role-specific
| Source | When |
|--------|------|
| **Google Drive** | Docs/slides they own (if verified in `verified_connections.md`) |
| **PagerDuty** | Oncall/incident behavior |
| **Console / IAHub** | Release/ops ownership if building an ops-heavy persona |
| **Microsoft Teams / Outlook** | If verified — email/thread tone (handle consent carefully) |
| **Gmail (personal recipe)** | Only if user explicitly wants email and connection is verified |
### Tier D — Do not rely on for persona without extra care
- Raw **git blame** without PR context — noisy.
- **HR systems** — use only for title/team if needed, not personality inference.
---
## Phase 3 — Synthesize (work vs persona)
**Work (`work.md`):** Systems, stacks, coding/review conventions, doc habits, Jira/workflow patterns, incident/release behavior — cite **patterns**, not one-off jokes.
**Persona (`persona.md`):** Use a **layered** structure compatible with colleague-skill:
1. **Layer 0 — Hard rules** (non-negotiables: respect, no slurs, no real harassment simulation beyond professional friction the user explicitly asked for).
2. **Identity** — role, scope, team context.
3. **Expression** — vocabulary, sentence length, directness, humor.
4. **Decisions** — risk posture, escalation, “how they say no.”
5. **Interpersonal** — meetings, async, conflict.
**Grounding:** Prefer **quoted paraphrases** with source pointers; flag **low-confidence** traits when sample size is small.
---
## Phase 4 — Write artifacts
### `meta.json` (minimal)
```json
{
"name": "Display Name",
"slug": "michael_donnelly",
"created_at": "<ISO8601 UTC>",
"updated_at": "<ISO8601 UTC>",
"version": "v1",
"profile": {
"company": "",
"level": "",
"role": "",
"email": ""
},
"ids": {
"slack_user_id": "",
"jira_account_id": ""
},
"knowledge_sources": ["slack", "jira", "ghe"],
"corrections_count": 0
}
```
### `SKILL.md` (invocable)
YAML frontmatter:
```yaml
---
name: colleague_{slug}
description: "<Name> — distilled work + persona (tool-sourced)."
user-invocable: true
---
```
Body: short intro + full `work.md` + full `persona.md` + **run rules**:
1. Persona decides attitude; work block executes the task.
2. Output matches persona expression.
3. Layer 0 never violated.
Optional: also write `work_skill.md` / `persona_skill.md` with names `colleague_{slug}_work` / `colleague_{slug}_persona` if your host expects split invocations (see colleague-skill `skill_writer.py`).
---
## Consent and safety
- Build skills only for **legitimate work purposes** and **policy-compliant** use of company tools.
- Do not exfiltrate **secrets**, **PII bundles**, or **restricted** content into `colleagues/` — redact tokens, customer data, and health/financial identifiers.
- When unsure whether content is allowed in a repo, **ask the user** before writing.
---
## Outputs checklist
- [ ] `colleagues/{slug}/` created with `knowledge/raw/` containing sourced excerpts
- [ ] `work.md` and `persona.md` complete
- [ ] `meta.json` with ids and source list
- [ ] `SKILL.md` merged and invocable
- [ ] User told how to invoke (`/{slug}` or host-specific command) and how to disambiguate duplicates (`_2`, `_3`)
---
## Related skills
- **`team_learner`** — team/domain bootstrap (similar tool sweep, different output shape).
- **`skill_creation`** — promote reusable methodology after validation.
- **`jira`**, **`tool_connections`** — all authenticated access.