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.
More from ZhixiangLuo/10xProductivity
- discover-ui-surfaceWalk through a UI flow once manually and capture a durable interaction map — which DOM elements to click, which network requests they trigger, and what field shapes they expose. Produces a reusable selector+endpoint reference for automation scripts. Use before writing any Playwright block for a JS-heavy SPA (LinkedIn, Figma, Notion, etc.) where selectors and API paths are not obvious from source inspection alone. Three modes: Chrome DevTools Recorder (fastest), Playwright observer (richest), Playwright codegen+trace (most structured).
- linkedin-engagementAutomated LinkedIn engagement workflow. The agent finds a relevant post on your chosen topic, drafts a comment with a genuine insight, gets your approval in chat, and posts it — all in one loop. You approve once before anything is posted. Use when asked to "engage on LinkedIn", "find a post to comment on", "post a LinkedIn comment", or "engage on [topic]". Requires LinkedIn session credentials in .env. Everything runs locally — credentials never leave your machine.
- tool-connectorConnect any tool you use at work to your agent — including internal company tools, custom-built systems, deployment portals, incident trackers, internal knowledge bases, HR systems, and commercial tools like Slack, Confluence, Jira, Linear, GitHub, Outlook, Datadog, and PagerDuty. Use when the user wants to set up a tool connection, connect an internal or custom-built tool, or add a new tool integration from scratch.